Фото 1 < /p>
Однако, когда мы пытались обнаружить текст из частей, где числа имеют несколько нестандартный вид, он перестал работать. (Фото 2) Несмотря на то, что текст четко виден.
Photo 2 < /p>
Вот мой код: < /p>
Код: Выделить всё
AndroidView(
factory = { ctx ->
PreviewView(ctx).apply {
implementationMode = PreviewView.ImplementationMode.COMPATIBLE
}
},
modifier = Modifier.fillMaxSize()
) { previewView ->
cameraProvider?.let { provider ->
if (preview == null || imageAnalyzer == null) {
preview = Preview.Builder()
.setTargetResolution(android.util.Size(1280, 720))
.build()
imageAnalyzer = ImageAnalysis.Builder()
.setTargetResolution(android.util.Size(1280, 720))
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_YUV_420_888)
.build()
.also { analysis ->
analysis.setAnalyzer(cameraExecutor) { imageProxy ->
val mediaImage : Image? = imageProxy.image
if (mediaImage != null) {
val image = InputImage.fromMediaImage(
mediaImage,
imageProxy.imageInfo.rotationDegrees
)
textRecognizer.process(image)
.addOnSuccessListener { visionText ->
val detectedText = visionText.textBlocks
.filter { block ->
isInScanningArea(
block.boundingBox!!,
imageProxy.width,
imageProxy.height
)
}
.joinToString(" ") { it.text }
val regex = Regex("\\b[A-Za-z0-9]+(-[A-Za-z0-9]+)+\\b")
val extractedText = regex.find(detectedText)?.value
if (!extractedText.isNullOrEmpty() && !findResultScan) {
findResultScan = true
resultScan = extractedText
}
}
.addOnCompleteListener { imageProxy.close() }
}
}
}
try {
provider.unbindAll()
camera = provider.bindToLifecycle(
lifecycleOwner,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageAnalyzer
)
preview?.surfaceProvider = previewView.surfaceProvider
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}
< /code>
isInScanningArea Все лучше для iOS. Он смог обнаружить текст из изображения 2, и даже Google переводит на Android, чтобы распознать его.
Подробнее здесь: https://stackoverflow.com/questions/794 ... nizes-text
Мобильная версия