Cleaning
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
package net.helcel.fidelity.tools
|
||||
|
||||
import android.content.ContentValues
|
||||
import android.util.Log
|
||||
import androidx.annotation.OptIn
|
||||
import androidx.camera.core.ExperimentalGetImage
|
||||
import androidx.camera.core.ImageAnalysis
|
||||
import androidx.camera.core.ImageProxy
|
||||
import com.google.mlkit.vision.barcode.BarcodeScanner
|
||||
import com.google.mlkit.vision.barcode.BarcodeScannerOptions
|
||||
import com.google.mlkit.vision.barcode.BarcodeScanning
|
||||
import com.google.mlkit.vision.barcode.common.Barcode
|
||||
import com.google.mlkit.vision.common.InputImage
|
||||
import net.helcel.fidelity.tools.BarcodeFormatConverter.formatToString
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
|
||||
object BarcodeScanner {
|
||||
|
||||
@OptIn(ExperimentalGetImage::class)
|
||||
private fun processImageProxy(
|
||||
barcodeScanner: BarcodeScanner,
|
||||
imageProxy: ImageProxy,
|
||||
cb: (String?, String?) -> Unit
|
||||
) {
|
||||
|
||||
imageProxy.image?.let { image ->
|
||||
val inputImage =
|
||||
InputImage.fromMediaImage(
|
||||
image,
|
||||
imageProxy.imageInfo.rotationDegrees
|
||||
)
|
||||
|
||||
barcodeScanner.process(inputImage)
|
||||
.addOnSuccessListener { barcodeList ->
|
||||
val barcode =
|
||||
barcodeList.getOrNull(0)
|
||||
if (barcode != null)
|
||||
cb(barcode.displayValue, formatToString(barcode.format))
|
||||
}
|
||||
.addOnFailureListener {
|
||||
Log.e(ContentValues.TAG, it.message.orEmpty())
|
||||
}.addOnCompleteListener {
|
||||
imageProxy.image?.close()
|
||||
imageProxy.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getAnalysisUseCase(cb: (String?, String?) -> Unit): ImageAnalysis {
|
||||
val options = BarcodeScannerOptions.Builder().setBarcodeFormats(
|
||||
Barcode.FORMAT_CODE_128,
|
||||
Barcode.FORMAT_CODE_39,
|
||||
Barcode.FORMAT_CODE_93,
|
||||
Barcode.FORMAT_EAN_8,
|
||||
Barcode.FORMAT_EAN_13,
|
||||
Barcode.FORMAT_QR_CODE,
|
||||
Barcode.FORMAT_UPC_A,
|
||||
Barcode.FORMAT_UPC_E,
|
||||
Barcode.FORMAT_PDF417
|
||||
).build()
|
||||
val scanner = BarcodeScanning.getClient(options)
|
||||
val analysisUseCase = ImageAnalysis.Builder()
|
||||
.build()
|
||||
|
||||
analysisUseCase.setAnalyzer(
|
||||
Executors.newSingleThreadExecutor()
|
||||
) { imageProxy ->
|
||||
processImageProxy(scanner, imageProxy, cb)
|
||||
}
|
||||
return analysisUseCase
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user