@@ -31,6 +31,7 @@ import android.widget.Spinner
31
31
import android.widget.Toast
32
32
import android.widget.ToggleButton
33
33
import androidx.annotation.RequiresApi
34
+ import androidx.camera.core.Camera
34
35
import androidx.camera.core.CameraInfoUnavailableException
35
36
import androidx.camera.core.CameraSelector
36
37
import androidx.camera.core.ImageAnalysis
@@ -44,6 +45,7 @@ import androidx.lifecycle.ViewModelProvider
44
45
import com.google.android.gms.common.annotation.KeepName
45
46
import com.google.mlkit.common.MlKitException
46
47
import com.google.mlkit.common.model.LocalModel
48
+ import com.google.mlkit.vision.barcode.ZoomSuggestionOptions.ZoomCallback
47
49
import com.google.mlkit.vision.demo.CameraXViewModel
48
50
import com.google.mlkit.vision.demo.GraphicOverlay
49
51
import com.google.mlkit.vision.demo.R
@@ -66,7 +68,6 @@ import com.google.mlkit.vision.text.devanagari.DevanagariTextRecognizerOptions
66
68
import com.google.mlkit.vision.text.japanese.JapaneseTextRecognizerOptions
67
69
import com.google.mlkit.vision.text.korean.KoreanTextRecognizerOptions
68
70
import com.google.mlkit.vision.text.latin.TextRecognizerOptions
69
- import java.util.ArrayList
70
71
71
72
/* * Live preview demo app for ML Kit APIs using CameraX. */
72
73
@KeepName
@@ -77,6 +78,7 @@ class CameraXLivePreviewActivity :
77
78
private var previewView: PreviewView ? = null
78
79
private var graphicOverlay: GraphicOverlay ? = null
79
80
private var cameraProvider: ProcessCameraProvider ? = null
81
+ private var camera: Camera ? = null
80
82
private var previewUseCase: Preview ? = null
81
83
private var analysisUseCase: ImageAnalysis ? = null
82
84
private var imageProcessor: VisionImageProcessor ? = null
@@ -239,7 +241,8 @@ class CameraXLivePreviewActivity :
239
241
}
240
242
previewUseCase = builder.build()
241
243
previewUseCase!! .setSurfaceProvider(previewView!! .getSurfaceProvider())
242
- cameraProvider!! .bindToLifecycle(/* lifecycleOwner= */ this , cameraSelector!! , previewUseCase)
244
+ camera =
245
+ cameraProvider!! .bindToLifecycle(/* lifecycleOwner= */ this , cameraSelector!! , previewUseCase)
243
246
}
244
247
245
248
private fun bindAnalysisUseCase () {
@@ -306,7 +309,15 @@ class CameraXLivePreviewActivity :
306
309
}
307
310
BARCODE_SCANNING -> {
308
311
Log .i(TAG , " Using Barcode Detector Processor" )
309
- BarcodeScannerProcessor (this )
312
+ var zoomCallback: ZoomCallback ? = null
313
+ if (PreferenceUtils .shouldEnableAutoZoom(this )) {
314
+ zoomCallback = ZoomCallback { zoomLevel: Float ->
315
+ Log .i(TAG , " Set zoom ratio $zoomLevel " )
316
+ val ignored = camera!! .cameraControl.setZoomRatio(zoomLevel)
317
+ true
318
+ }
319
+ }
320
+ BarcodeScannerProcessor (this , zoomCallback)
310
321
}
311
322
IMAGE_LABELING -> {
312
323
Log .i(TAG , " Using Image Label Detector Processor" )
@@ -414,7 +425,7 @@ class CameraXLivePreviewActivity :
414
425
private const val CUSTOM_AUTOML_LABELING = " Custom AutoML Image Labeling (Flower)"
415
426
private const val POSE_DETECTION = " Pose Detection"
416
427
private const val SELFIE_SEGMENTATION = " Selfie Segmentation"
417
- private const val FACE_MESH_DETECTION = " Face Mesh Detection (Beta)" ;
428
+ private const val FACE_MESH_DETECTION = " Face Mesh Detection (Beta)"
418
429
419
430
private const val STATE_SELECTED_MODEL = " selected_model"
420
431
}
0 commit comments