我试图找出如何使用实时相机预览扫描具有15-45度方向的QR码进行解码。
我有一个我使用静态图像创建的样本,它只是在尝试解码图像之前将图像旋转通过预定义度数的数组。这有效,但我想使用实时预览而不是预先加载的图像来获得类似的结果。
我使用以下条形码API:https://developers.google.com/vision/android/barcodes-overview
使用预加载图像的工作样本
Frame frame = new Frame.Builder().setBitmap(myBitmap).build();
SparseArray<Barcode> barcodes = detector.detect(frame);
int[] angles = { 0, 15, 30, 45, 60, 90 };
int cacheAngle = 0;
while(barcodes.size() == 0) {
//try to get code
try {
for (int i = 0; i < angles.length; i++) {
myBitmap = rotateImage(myBitmap, angles[i]);
myImageView.setImageBitmap(myBitmap);
myImageView.invalidate(); //re-draw image
Log.d(TAG, "Trying angle: " + angles[i]);
cacheAngle = i;
updateConsole("Trying scan at angle: " + angles[i] + "...");
frame = new Frame.Builder().setBitmap(myBitmap).build();
barcodes = detector.detect(frame);
if (barcodes.size() > 0) {
updateConsole("Barcode found at angle: " + angles[i]);
Log.d(TAG, "Hooray, barcode found: " + barcodes.valueAt(0).rawValue);
break;
}
}
if(barcodes.size() == 0) {
//failed to detect barcode during rotations
updateConsole("Error: Failed to detect barcode!");
updateConsole("[Reason] Image resolution may be too large, small or blurry!");
break;
}
}
catch(OutOfMemoryError e){
updateConsole("Fatal Exception [Out Of Memory]");
updateConsole("Can't decode bitmap, image is probably too large!");
updateConsole("Angles tested before crash: ");
for(int x=0; x<angles.length; x++){
if(angles[x] <= cacheAngle){
updateConsole(angles[x] + " degrees");
}
}
break;
}
}
实时预览条码捕获 - 无法处理面向15-45度的QR码
使用了此处的示例代码:https://code.tutsplus.com/tutorials/reading-qr-codes-using-the-mobile-vision-api--cms-24680
但是,我没有在API中找到允许我旋转相机尝试扫描代码的角度的任何内容。
感谢任何帮助。