Я использую Google Mobile Vision для обнаружения 2D (QR / Aztec) / 1D кода.Приложение сталкивается с некоторыми не полностью корректными 2D-кодами, такими как
. Оно либо вообще не обнаруживается, либо не распознается как штрих-код UPC-A / EAN13 (каждый раз с разными значениями).Насколько я понял, это Aztec 2D-код.
версия приложения для iOS (от другого разработчика) правильно обрабатывает их, используя https://github.com/hyperoslo/BarcodeScanner (в коде версии iOS нет ничего сложного, только обычная обработка)другие приложения того же типа, что и я исправляю, как-то правильно читают эти коды (включая одно прикрепленное), все «обычные» приложения для сканирования 1D / 2D-кодов из PlayStore не работают так же, как мои (нет сканирования / EAN13 получаетотсканировано).
val barcodeDetector = BarcodeDetector.Builder(context)
.build()
var barcodeFactory: MultiProcessor.Factory<Barcode>
Observable
.create<Barcode> { emitter->
barcodeFactory = BarcodeTrackerFactory(
mGraphicOverlay,
BarcodeGraphicTracker.BarcodeUpdateListener {
PaymentQRFragment.logger.d { "barcode update:${it.toShortString()}" }
emitter.onNext(it)
}
)
barcodeDetector.setProcessor(
MultiProcessor.Builder(barcodeFactory).build()
) }
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
PaymentQRFragment.logger.d { "will process ${it.toShortString()}" }
//presenter.processBarcode(it)
}
.disposeOnDestroyView()
if (!barcodeDetector.isOperational) {
val lowstorageFilter = IntentFilter(Intent.ACTION_DEVICE_STORAGE_LOW)
val hasLowStorage = activity!!.registerReceiver(null, lowstorageFilter) != null
if (hasLowStorage) {
Toast.makeText(this, R.string.low_storage_error, Toast.LENGTH_LONG).show()
}
}
..
var builder = CameraSource.Builder(context, barcodeDetector)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedFps(5.0f)
.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)
.setFlashMode(Camera.Parameters.FLASH_MODE_OFF)
mCameraSource = builder.build()
Версия Android Mobile Vision - 15.0.1 (Это старое приложение)
Некоторые кодированные данные представляют собой символы кириллицы (в одном из 8-битных кодировок кириллицы обнаружение кодированияобрабатывается в других частях кода).
Как заставить его обрабатывать эти коды?