###前提・実現したいこと
お世話になります。
現在javaでAndroid Studioを使いカメラを起動させ、自動車の車検証など複数のQRコードが存在するものを読み取る処理を作成しています。
作成は完了したのですが、正常に動作する(QRコードが全て読み取れる)端末とそうではない端末があり、かなり詰まってしまっているためお知恵を拝借させていただきたいと思っています。
※動作する端末もあり、ソースコードに致命的なバグが無いと思われるので
全てのコードは記載せず抜粋して記載させていただきます。
java
1 QRCodeMultiReader reader = new QRCodeMultiReader(); 2 //bytes: byte[]のYUVデータ sw: カメラから取得した画像データのwidth 3 //sh: swのheight irx: 開始X座標 iry: 開始Y座標 irw: 読み取る範囲のwidth 4 //irh: 読み取る範囲のheight false: データを反転するか否か 5 PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(bytes, sw, sh, irx, iry, irw, irh, false); 6 7 BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); 8 Result res[] = null; 9 10 try { 11 if (bitmap.getWidth() != 0 && bitmap.getHeight() != 0) { 12 res = reader.decodeMultiple(bitmap); 13 Log.i(TAG, "res.length: " + res.length); 14 } 15 } catch (Exception e) { 16 e.printStackTrace(); 17 } finally { 18 reader.reset(); 19 } 20 21 try { 22 if (res != null && res.length > 0) { 23 for (OnReadQRListener l : listeners) { 24 //QRコードの内容を読み取る処理 25 l.onReadQR(res); 26 } 27 } 28 } catch (Exception e) { 29 e.printStackTrace(); 30 } finally { 31 reader.reset(); 32 } 33} 34
上記処理は、カスタマイズしたresourceのxmlを読み込んだカメラを起動中に
1秒間に複数回実行され、QRコードの読み取りが行われます。
ログでres.lengthを出力している箇所が、
- QRコードを正常に読み取った→lengthが1や2
- QRコードを認識したが読み取れない→lengthが0
- QRコードが認識できなかった→NotFoundException
のいずれかが出力されている状況です。
正常に動作する端末では1又は2で、動作しない端末は2か3が発生しています。
###試したこと
動作しない端末で以下を試しました。
1.QRCodeReader#decodeで1つだけ読み取れるか試す
2.QRCodeMultiReaderからGenericMultipleBarcodeReaderに変更する
//QRCodeMultiReader reader = new QRCodeMultiReader(); Reader mfreader = new MultiFormatReader(); GenericMultipleBarcodeReader reader = new GenericMultipleBarcodeReader(mfreader);
3.decodeMultipleにhintsを設定する
Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(); hints.put(DecodeHintType.TRY_HARDER, true); ~~~ res = reader.decodeMultiple(bitmap, hints);
1~3で全て動作しませんでした。
また、車検証も原本やコピーしたものなど複数のもので試しましたがダメでした。
原因が本当に分からないため、何かヒントになりそうなことやアドバイスなど頂けると助かります。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
Android Studio 3.0.1
buildgradle
1 compileSdkVersion 25 2 buildToolsVersion '26.0.2' 3 4 defaultConfig { 5 applicationId "app" 6 minSdkVersion 23 7 targetSdkVersion 25 8 versionCode 1 9 versionName "1.0" 10 } 11 dependencies { 12 compile 'com.journeyapps:zxing-android-embedded:3.3.0@aar' 13 compile 'com.google.zxing:core:3.2.1' 14 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/26 22:47
2019/10/01 00:45