🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

8157閲覧

ZXingで複数QRコードを読み取りたい

Begi

総合スコア56

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2019/09/23 10:04

###前提・実現したいこと
お世話になります。
現在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を出力している箇所が、

  1. QRコードを正常に読み取った→lengthが1や2
  2. QRコードを認識したが読み取れない→lengthが0
  3. 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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そのエラーが発生する端末で撮影したQRコードの画像は、正常に読み取れる端末でもQRコードとして読み取れるでしょうか。
なんか単純にカメラが故障していたり、レンズに傷がついていて、バーコード認識ができないくらい悪い状態になっているのではないかと思われます。
読み取り処理が動く際の画像をファイルに保存するなどして、その画像自体に問題がないか確認してみてください。

投稿2019/09/26 14:46

編集2019/09/26 14:47
KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Begi

2019/09/26 22:47

回答いただきありがとうございます。 画像として保存する処理を入れ、試してみたいと思います。 ちなみにですが、エラーが発生する端末にストアからQRコード読み取りアプリをインストールして試したところ、読み取れなかったQRコードが正常に読み取れました。 そのため、カメラ自体に異常があるようには感じられないのが現状です。
Begi

2019/10/01 00:45

QRコードを読み取る方法から見直すことにしましたので、 今回はここまでとさせていただきたいと思います。 回答いただき誠にありがとうございました。またよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問