web-dev-qa-db-ja.com

zxingライブラリを使用して1つの画像から複数のqrコードを読み取る方法

私は現在、1つの画像で見つかった複数のQRコードを読み取るスキャナーを開発しています。画像のQRコードをなんとか読み取れましたが、一貫性のない結果が得られます。画像に4つのQRコードがあると仮定すると、2つ、場合によっては3つ、または1つだけを読み取ることができます。元のスキャナー(ZXingスキャナー)とは異なり、高速にデコードされます。私の場合、十分な光があり、それをデコードするために画像がぼやけていないことを確認する必要があります。

QRCodeMultiReaderを使用して画像をデコードしています。現在、ZXingライブラリを使用してアプリケーションを作成しています。

以下は私のコードのスニペットです:

public void onPictureTaken(byte[] data, Camera camera) {
   BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inMutable = true;
   Bitmap bitmap = BitmapFactory
            .decodeByteArray(data, 0, data.length, opt);
   Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
   hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
   LuminanceSource source = new RGBLuminanceSource(bitmap);

   QRCodeMultiReader multiReader = new QRCodeMultiReader();
   Result[] results = multiReader.decodeMultiple(new BinaryBitmap(
   new HybridBinarizer(source)), hints);
}
17
She Smile GM

intentを使用したカメラ用のアプリを1つ作成しました。これは、すべてのAndriod OSにデフォルトのカメラアプリがあり、通常、携帯電話専用に最適化される一般的なカメラアプリを作成するよりも、そのデバイス用に最適化されています。 ..カメラの場合はintentを使用することをお勧めします。

1つの画像から複数のQRを抽出するために、以下のコードを試しました。
しかし、結果に一貫性がない場合があります。4つのうち1つ、2つ、または3つが得られる場合があります。完全な解決策ではありません。

if(photo == null) 
        return;
    Bitmap ScaledQr = null;
    ScaledQr = Bitmap.createScaledBitmap(photo, 640,480, false);
    BinaryBitmap Qr = BitMap2BinayBitmap(ScaledQr);
    Result [] kpResultMulti = null;
    Result kpResultSingle = null;
    Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
    hints.put(DecodeHintType.TRY_HARDER, true);
    //hints.put(DecodeHintType.PURE_BARCODE, true);

    try {
        kpResultMulti = kpReaderArr.decodeMultiple(Qr,hints);
    } catch (NotFoundException e) {
        // TODO Auto-generated catch block
        msbox("Exception","NotFoundException");
        e.printStackTrace();
    }

    if(kpResultMulti != null){
        msbox("Total Result" ,kpResultMulti.length +"");// + photo.getWidth() +     "Height=" + photo.getHeight());
        for(Result kp : kpResultMulti)
        {

            msbox("Results",kp.getText());
        }
    }
2
user2801456

こんにちは、Zxingバーコードスキャナーアプリをチェックしてください。バルクバーコードをスキャンする設定のオプションがありますので、有効にしてチェックしてください。1つ以上の画像から一度に複数のQRコードを読み取ることができ、Zxingライブラリのソースコードを既知にチェックすることもできます。詳細情報。

https://code.google.com/p/zxing/

0
androidgeek