Skip to content

Commit 918f2df

Browse files
feat : add code for landmark detector
1 parent bda58f7 commit 918f2df

File tree

13 files changed

+208
-26
lines changed

13 files changed

+208
-26
lines changed
0 Bytes
Binary file not shown.

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ dependencies {
3636
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
3737
implementation 'com.wonderkiln:camerakit:0.13.1'
3838
implementation 'com.github.jorgecastilloprz:fabprogresscircle:1.01@aar'
39+
implementation 'com.github.jkwiecien:EasyImage:1.3.1'
3940
}
4041

4142
apply plugin: 'com.google.gms.google-services'

app/src/main/AndroidManifest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="io.github.the_dagger.mlkit">
44

5+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
6+
57
<application
68
android:allowBackup="true"
79
android:icon="@mipmap/ic_launcher"
@@ -46,5 +48,9 @@
4648
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
4749
android:value="barcode" />
4850
</activity>
51+
<activity android:name=".activity.LandscapeDetectorActivity">
52+
53+
</activity>
54+
4955
</application>
5056
</manifest>

app/src/main/java/io/github/the_dagger/mlkit/activity/BarCodeReaderActivity.kt

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,15 @@ package io.github.the_dagger.mlkit.activity
22

33
import android.graphics.Bitmap
44
import android.os.Bundle
5-
import android.view.View
6-
7-
import io.github.the_dagger.mlkit.R
8-
import com.google.firebase.ml.vision.FirebaseVision
9-
import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector
10-
import kotlinx.android.synthetic.main.activity_main.*
11-
import android.R.attr.bitmap
125
import android.support.design.widget.BottomSheetBehavior
13-
import android.util.Log
6+
import android.view.View
147
import android.widget.Toast
8+
import com.google.firebase.ml.vision.FirebaseVision
159
import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode
16-
import com.google.firebase.ml.vision.common.FirebaseVisionImage
1710
import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetectorOptions
18-
import io.github.the_dagger.mlkit.R.id.*
11+
import com.google.firebase.ml.vision.common.FirebaseVisionImage
12+
import io.github.the_dagger.mlkit.R
13+
import kotlinx.android.synthetic.main.activity_main.*
1914
import kotlinx.android.synthetic.main.layout_qr_code_reader.*
2015

2116

@@ -43,14 +38,13 @@ class BarCodeReaderActivity : BaseCameraActivity() {
4338
.setBarcodeFormats(
4439
FirebaseVisionBarcode.FORMAT_ALL_FORMATS)
4540
.build()
46-
val detector = FirebaseVision.getInstance().getVisionBarcodeDetector(options);
41+
val detector = FirebaseVision.getInstance().getVisionBarcodeDetector(options)
4742
val image = FirebaseVisionImage.fromBitmap(bitmap)
4843
detector.detectInImage(image)
4944
.addOnSuccessListener {
5045
for (firebaseBarcode in it) {
5146

5247
codeData.text = firebaseBarcode.displayValue //Display contents inside the barcode
53-
sheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
5448

5549
when (firebaseBarcode.valueType) {
5650
//Handle the URL here
@@ -70,6 +64,7 @@ class BarCodeReaderActivity : BaseCameraActivity() {
7064
}
7165
.addOnCompleteListener {
7266
fabProgressCircle.hide()
67+
sheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
7368
}
7469
}
7570

app/src/main/java/io/github/the_dagger/mlkit/activity/HomeActivity.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import kotlinx.android.synthetic.main.activity_home.*
1111
class HomeActivity : AppCompatActivity() {
1212

1313
private val apiList by lazy {
14-
ArrayList<PojoApi>()
14+
ArrayList<PojoApi>()
1515
}
1616

1717
override fun onCreate(savedInstanceState: Bundle?) {
@@ -20,8 +20,8 @@ class HomeActivity : AppCompatActivity() {
2020
apiList.add(PojoApi(R.drawable.image_labelling, getString(R.string.title_labelling), getString(R.string.desc_labelling), 0))
2121
apiList.add(PojoApi(R.drawable.text_recognition, getString(R.string.title_text), getString(R.string.desc_text), 1))
2222
apiList.add(PojoApi(R.drawable.barcode_scanning, getString(R.string.title_barcode), getString(R.string.desc_barcode), 2))
23-
apiList.add(PojoApi(R.drawable.face_detection, getString(R.string.title_face), getString(R.string.desc_face), 3))
24-
apiList.add(PojoApi(R.drawable.landmark_identification, getString(R.string.title_landmark), getString(R.string.desc_landmark), 4))
23+
apiList.add(PojoApi(R.drawable.landmark_identification, getString(R.string.title_landmark), getString(R.string.desc_landmark), 3))
24+
apiList.add(PojoApi(R.drawable.face_detection, getString(R.string.title_face), getString(R.string.desc_face), 4))
2525

2626
rvHome.layoutManager = LinearLayoutManager(this)
2727
rvHome.adapter = HomeAdapter(apiList)
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package io.github.the_dagger.mlkit.activity
2+
3+
import android.Manifest
4+
import android.content.Intent
5+
import android.content.pm.PackageManager
6+
import android.graphics.Bitmap
7+
import android.graphics.BitmapFactory
8+
import android.os.Bundle
9+
import android.support.design.widget.BottomSheetBehavior
10+
import android.support.v4.app.ActivityCompat
11+
import android.util.Log
12+
import android.view.View
13+
import android.widget.Toast
14+
import com.google.firebase.ml.vision.FirebaseVision
15+
import com.google.firebase.ml.vision.common.FirebaseVisionImage
16+
import io.github.the_dagger.mlkit.R
17+
import kotlinx.android.synthetic.main.activity_main.*
18+
import kotlinx.android.synthetic.main.layout_landmark.*
19+
import pl.aprilapps.easyphotopicker.DefaultCallback
20+
import pl.aprilapps.easyphotopicker.EasyImage
21+
import java.io.File
22+
23+
24+
class LandscapeDetectorActivity : BaseCameraActivity() {
25+
26+
override fun onCreate(savedInstanceState: Bundle?) {
27+
super.onCreate(savedInstanceState)
28+
setupBottomSheet(R.layout.layout_landmark)
29+
cameraView.visibility = View.GONE
30+
btnRetry.setOnClickListener {
31+
startIntentForPicker()
32+
}
33+
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
34+
== PackageManager.PERMISSION_DENIED) {
35+
ActivityCompat.requestPermissions(this, Array<String>(1) { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 12345)
36+
fab_take_photo.setOnClickListener(null)
37+
} else {
38+
fab_take_photo.setOnClickListener(this)
39+
}
40+
}
41+
42+
private fun startIntentForPicker() {
43+
EasyImage.openGallery(this, 0)
44+
}
45+
46+
override fun onClick(v: View?) {
47+
startIntentForPicker()
48+
}
49+
50+
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
51+
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
52+
if (requestCode == 12345) {
53+
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
54+
fab_take_photo.setOnClickListener(this)
55+
}
56+
}
57+
58+
59+
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
60+
super.onActivityResult(requestCode, resultCode, data)
61+
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
62+
== PackageManager.PERMISSION_GRANTED) {
63+
EasyImage.handleActivityResult(requestCode, resultCode, data, this, object : DefaultCallback() {
64+
65+
override fun onImagePicked(imageFile: File?, source: EasyImage.ImageSource?, type: Int) {
66+
val bitmap = BitmapFactory.decodeFile(imageFile?.path)
67+
getLandscapeFromCloud(bitmap)
68+
imagePreview.setImageBitmap(bitmap)
69+
framePreview.visibility = View.VISIBLE
70+
}
71+
72+
override fun onImagePickerError(e: Exception?, source: EasyImage.ImageSource?, type: Int) {
73+
//Some error handling
74+
}
75+
76+
})
77+
}
78+
}
79+
80+
private fun getLandscapeFromCloud(bitmap: Bitmap) {
81+
val image = FirebaseVisionImage.fromBitmap(bitmap)
82+
val detector = FirebaseVision.getInstance()
83+
.visionCloudLandmarkDetector
84+
85+
detector.detectInImage(image)
86+
.addOnCompleteListener {
87+
Log.e("TAG", "completed")
88+
for (firebaseVisionLandmarks in it.result) {
89+
val landmark = firebaseVisionLandmarks.landmark
90+
tvLocationName.text = landmark
91+
for (location in firebaseVisionLandmarks.locations) {
92+
val lat = location.latitude
93+
val long = location.longitude
94+
tvLatitude.text = lat.toString()
95+
tvLongitude.text = long.toString()
96+
}
97+
tvAccuracy.text = (firebaseVisionLandmarks.confidence * 100).toInt().toString()
98+
}
99+
}
100+
.addOnFailureListener {
101+
Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show()
102+
}
103+
.addOnCompleteListener {
104+
sheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
105+
}
106+
}
107+
108+
}

app/src/main/java/io/github/the_dagger/mlkit/adapter/HomeAdapter.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import io.github.the_dagger.mlkit.PojoApi
1111
import io.github.the_dagger.mlkit.R
1212
import io.github.the_dagger.mlkit.activity.BarCodeReaderActivity
1313
import io.github.the_dagger.mlkit.activity.CardScannerActivity
14-
import io.github.the_dagger.mlkit.activity.FaceDetectionActivity
1514
import io.github.the_dagger.mlkit.activity.ImageLabelActivity
15+
import io.github.the_dagger.mlkit.activity.LandscapeDetectorActivity
1616
import kotlinx.android.synthetic.main.item_row_home.view.*
1717

1818
class HomeAdapter(private val apiList: List<PojoApi>) : RecyclerView.Adapter<HomeAdapter.HomeHolder>() {
@@ -28,12 +28,12 @@ class HomeAdapter(private val apiList: List<PojoApi>) : RecyclerView.Adapter<Hom
2828
tViewApiDesc.text = currItem.desc
2929
iViewApi.setImageResource(currItem.imageId)
3030
cViewHome.setOnClickListener {
31-
when(currItem.id){
31+
when (currItem.id) {
3232
0 -> context.startActivity(Intent(context, ImageLabelActivity::class.java))
3333
1 -> context.startActivity(Intent(context, CardScannerActivity::class.java))
3434
2 -> context.startActivity(Intent(context, BarCodeReaderActivity::class.java))
35-
3 -> Toast.makeText(context,"Work in Progress",Toast.LENGTH_SHORT).show()
36-
4 -> Toast.makeText(context,"Work in Progress",Toast.LENGTH_SHORT).show()
35+
3 -> context.startActivity(Intent(context, LandscapeDetectorActivity::class.java))
36+
4 -> Toast.makeText(context, "Work in Progress", Toast.LENGTH_SHORT).show()
3737
}
3838
}
3939
}

app/src/main/res/layout/activity_main.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
android:visibility="gone">
1818

1919
<ImageView
20+
android:scaleType="centerCrop"
2021
android:id="@+id/imagePreview"
2122
android:layout_width="match_parent"
2223
android:layout_height="match_parent" />
@@ -33,11 +34,11 @@
3334
</FrameLayout>
3435

3536
<ViewStub
37+
android:id="@+id/stubView"
3638
android:layout_width="match_parent"
3739
android:layout_height="wrap_content"
38-
android:visibility="visible"
3940
android:inflatedId="@+id/bottomLayout"
40-
android:id="@+id/stubView" />
41+
android:visibility="visible" />
4142

4243
<com.github.jorgecastilloprz.FABProgressCircle
4344
android:id="@+id/fabProgressCircle"
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:layout_width="match_parent"
6+
android:layout_height="wrap_content"
7+
android:background="#ffffff"
8+
android:orientation="vertical"
9+
android:padding="16dp"
10+
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
11+
12+
<TextView
13+
android:layout_width="match_parent"
14+
android:layout_height="wrap_content"
15+
android:text="@string/location"
16+
android:textSize="24sp"
17+
android:textStyle="bold" />
18+
19+
<TextView
20+
android:id="@+id/tvLocationName"
21+
android:layout_width="match_parent"
22+
android:layout_height="wrap_content"
23+
android:textSize="20sp"
24+
tools:text="Card Number" />
25+
26+
<TextView
27+
android:layout_width="match_parent"
28+
android:layout_height="wrap_content"
29+
android:layout_marginTop="16dp"
30+
android:text="@string/latitude"
31+
android:textSize="24sp"
32+
android:textStyle="bold" />
33+
34+
<TextView
35+
android:id="@+id/tvLatitude"
36+
android:layout_width="match_parent"
37+
android:layout_height="wrap_content"
38+
android:textSize="20sp"
39+
tools:text="Card Expiry" />
40+
41+
<TextView
42+
android:layout_width="match_parent"
43+
android:layout_height="wrap_content"
44+
android:layout_marginTop="16dp"
45+
android:text="@string/longitude"
46+
android:textSize="24sp"
47+
android:textStyle="bold" />
48+
49+
<TextView
50+
android:id="@+id/tvLongitude"
51+
android:layout_width="match_parent"
52+
android:layout_height="wrap_content"
53+
android:textSize="20sp"
54+
tools:text="Card Expiry" />
55+
56+
<TextView
57+
android:layout_width="match_parent"
58+
android:layout_height="wrap_content"
59+
android:layout_marginTop="16dp"
60+
android:text="@string/accuracy"
61+
android:textSize="24sp"
62+
android:textStyle="bold" />
63+
64+
<TextView
65+
android:id="@+id/tvAccuracy"
66+
android:layout_width="match_parent"
67+
android:layout_height="wrap_content"
68+
android:textSize="20sp"
69+
tools:text="Card Expiry" />
70+
</LinearLayout>

app/src/main/res/values/colors.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66
<color name="green">#4CAF50</color>
77
<color name="red">#f44336</color>
88
<color name="orange">#FF9800</color>
9+
<color name="blue">#58ADEA</color>
910
</resources>

0 commit comments

Comments
 (0)