70 lines
2.4 KiB
Kotlin
70 lines
2.4 KiB
Kotlin
package cash.z.android.wallet.ui.util.vision
|
|
|
|
import android.graphics.Bitmap
|
|
import android.util.Log
|
|
import cash.z.android.wallet.ui.util.VisionProcessorBase
|
|
import com.google.android.gms.tasks.Task
|
|
import com.google.firebase.ml.vision.FirebaseVision
|
|
import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode
|
|
import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector
|
|
import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetectorOptions
|
|
import com.google.firebase.ml.vision.common.FirebaseVisionImage
|
|
import java.io.IOException
|
|
|
|
/** Barcode Detector Demo. */
|
|
class BarcodeScanningProcessor : VisionProcessorBase<List<FirebaseVisionBarcode>>() {
|
|
|
|
// Note that if you know which format of barcode your app is dealing with, detection will be
|
|
// faster to specify the supported barcode formats one by one, e.g.
|
|
// FirebaseVisionBarcodeDetectorOptions.Builder()
|
|
// .setBarcodeFormats(FirebaseVisionBarcode.FORMAT_QR_CODE)
|
|
// .build()
|
|
val detector: FirebaseVisionBarcodeDetector by lazy {
|
|
val options = FirebaseVisionBarcodeDetectorOptions.Builder()
|
|
.setBarcodeFormats(FirebaseVisionBarcode.FORMAT_QR_CODE)
|
|
.build()
|
|
FirebaseVision.getInstance().getVisionBarcodeDetector(options)
|
|
}
|
|
|
|
|
|
override fun stop() {
|
|
try {
|
|
detector.close()
|
|
} catch (e: IOException) {
|
|
Log.e(TAG, "Exception thrown while trying to close Barcode Detector: $e")
|
|
}
|
|
}
|
|
|
|
override fun detectInImage(image: FirebaseVisionImage): Task<List<FirebaseVisionBarcode>> {
|
|
return detector.detectInImage(image)
|
|
}
|
|
|
|
override fun onSuccess(
|
|
originalCameraImage: Bitmap?,
|
|
barcodes: List<FirebaseVisionBarcode>,
|
|
frameMetadata: FrameMetadata,
|
|
graphicOverlay: GraphicOverlay
|
|
) {
|
|
graphicOverlay.clear()
|
|
|
|
originalCameraImage?.let {
|
|
val imageGraphic = CameraImageGraphic(graphicOverlay, it)
|
|
graphicOverlay.add(imageGraphic)
|
|
}
|
|
|
|
barcodes.forEach {
|
|
val barcodeGraphic = BarcodeGraphic(graphicOverlay, it)
|
|
graphicOverlay.add(barcodeGraphic)
|
|
}
|
|
graphicOverlay.postInvalidate()
|
|
}
|
|
|
|
override fun onFailure(e: Exception) {
|
|
Log.e(TAG, "Barcode detection failed $e")
|
|
}
|
|
|
|
companion object {
|
|
|
|
private const val TAG = "BarcodeScanProc"
|
|
}
|
|
} |