Deleted GoogleML usage
This commit is contained in:
@@ -1,16 +1,16 @@
|
||||
package net.helcel.fidelity.tools
|
||||
|
||||
import android.content.ContentValues
|
||||
import android.util.Log
|
||||
import android.graphics.Bitmap
|
||||
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 com.google.zxing.BinaryBitmap
|
||||
import com.google.zxing.MultiFormatReader
|
||||
import com.google.zxing.NotFoundException
|
||||
import com.google.zxing.RGBLuminanceSource
|
||||
import com.google.zxing.ReaderException
|
||||
import com.google.zxing.common.HybridBinarizer
|
||||
import net.helcel.fidelity.tools.BarcodeFormatConverter.formatToString
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
@@ -19,57 +19,39 @@ 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()
|
||||
}
|
||||
val bitmap = imageProxy.toBitmap() // Convert ImageProxy to Bitmap
|
||||
val binaryBitmap = createBinaryBitmap(bitmap)
|
||||
val reader = MultiFormatReader()
|
||||
try {
|
||||
val result = reader.decode(binaryBitmap)
|
||||
cb(result.text, formatToString(result.barcodeFormat))
|
||||
} catch (e: NotFoundException) {
|
||||
cb(null, null)
|
||||
} catch (e: ReaderException) {
|
||||
cb(null, null)
|
||||
} finally {
|
||||
imageProxy.close()
|
||||
}
|
||||
}
|
||||
|
||||
private fun createBinaryBitmap(bitmap: Bitmap): BinaryBitmap {
|
||||
val pixels = IntArray(bitmap.width * bitmap.height)
|
||||
bitmap.getPixels(pixels, 0, bitmap.width, 0, 0, bitmap.width, bitmap.height)
|
||||
val source =
|
||||
RGBLuminanceSource(bitmap.width, bitmap.height, pixels)
|
||||
return BinaryBitmap(HybridBinarizer(source))
|
||||
}
|
||||
|
||||
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()
|
||||
|
||||
val analysisUseCase = ImageAnalysis.Builder().build()
|
||||
analysisUseCase.setAnalyzer(
|
||||
Executors.newSingleThreadExecutor()
|
||||
) { imageProxy ->
|
||||
processImageProxy(scanner, imageProxy, cb)
|
||||
processImageProxy(imageProxy, cb)
|
||||
}
|
||||
return analysisUseCase
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user