[英]Firebase Android ML Kit: Way to hide display values on QR code
[英]Not detecting QR codes with firebase ml kit on android but works on ios (flutter)
我的二维码扫描仪停止在 Android 上工作,我不明白为什么......它以前工作过,扫描仪仍然在 iOS 上工作。
Firebase ML 套件在扫描时仅返回一个空列表,我尝试了许多不同的 android 设备和 QR 码,但都没有工作(不再)。
我试图清理并重新安装所有依赖项,我试图清除 Google Play 服务中的所有数据并重新安装应用程序(以便重新安装 ML 模型)
我有一个想法,它可能是不正确的图像格式,来自相机的格式是 YUV_420_888,我认为它使用下面的代码转换为 NV21,但不能 100% 确定它是如何工作的。
令人讨厌的是,这之前确实有效,但突然停止工作。
这是我对 QR 扫描仪的实现,它从相机 stream 接收图像
class QRCodeReader {
BarcodeDetector _barcodeDetector = FirebaseVision.instance.barcodeDetector(BarcodeDetectorOptions(barcodeFormats: BarcodeFormat.qrCode));
void dispose() {
_barcodeDetector.close();
}
void scanImage(CameraImage availableImage, ScanCompleted scanCompleted) async {
final FirebaseVisionImageMetadata metadata = FirebaseVisionImageMetadata(
rawFormat: availableImage.format.raw,
size: Size(availableImage.width.toDouble(), availableImage.height.toDouble()),
planeData: availableImage.planes.map((currentPlane) => FirebaseVisionImagePlaneMetadata(
bytesPerRow: currentPlane.bytesPerRow,
height: currentPlane.height,
width: currentPlane.width
)).toList(),
rotation: ImageRotation.rotation0,
);
final FirebaseVisionImage visionImage = FirebaseVisionImage.fromBytes(availableImage.planes[0].bytes, metadata);
//this list is empty on android
List barCodes = await _barcodeDetector.detectInImage(visionImage);
for(Barcode barcode in barCodes) {
//process barcode...
}
scanCompleted();
}
}
我像这样初始化 stream ...
_initializeControllerFuture = _controller.initialize();
_initializeControllerFuture.whenComplete(() {
setState((){
_controller.startImageStream(_handleImageStream);
});
});
void _handleImageStream(CameraImage availableImage) {
if (!_isScanning && !_disposed) {
final state = Provider.of<ScannerState>(context);
_isScanning = true;
qrReader.scanImage(availableImage, () => _isScanning = false);
}
}
应用程序/build.gradle
...
dependencies {
...
api 'com.google.firebase:firebase-ml-vision-image-label-model:17.0.2'
}
apply plugin: 'com.google.gms.google-services'
build.gradle
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:3.4.1'
classpath 'com.google.gms:google-services:4.2.0'
}
}
AndroidManifest.xml
...
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<application
android:name="io.flutter.app.FlutterApplication"
...>
<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="barcode" />
...
</application>
pubspec.yaml
...
dependencies:
...
camera: ^0.5.4+2
firebase_core: ^0.4.0+9
cloud_firestore: ^0.12.9+4
cloud_functions: ^0.4.1+1
firebase_ml_vision: ^0.9.2+1
...
编辑:正如弗兰克所建议的,问题是相机上的分辨率设置,如果它太低,则无法检测到 QR 码。 把它放在“高”或更高的位置可以解决这个问题。
我通过将相机插件回滚到版本解决了这个问题:“相机:^0.5.2+2”
不确定在较新版本中究竟是什么破坏了 android 的 ML 视觉 package,但这暂时解决了这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.