2013-02-27 515 views
10

現在、1つの画像にある複数のQRコードを読み取るスキャナを開発中です。 私はイメージのQRコードを読むことができますが、結果が矛盾しています。画像に4つのQRコードがあると仮定すると、ときには2、場合によっては3、または1だけ読み取ることができます。元のスキャナー(ZXing Scanner)とは異なり、高速でデコードします。私の場合、十分な光があることを確認しなければならず、画像をデコードするために画像がぼやけていません。zxingライブラリを使用して1つの画像から複数のqrコードを読み取る方法

私は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); 
} 
+1

その完璧ではないソリューション....私は4のうちのいくつかの時間のどれもが1または2または3を取得していないいくつかの時間一貫していないあなたは、複数のバーコードを読み取るための任意の完璧な解決策を見つけることがありますか?残念ながら/ –

+0

私はその機能の開発をやめるので、私は持っていません。しかし、これは特に私がアンドロイドに戻っているための解決策を見つけることを続けます。 –

+0

あなたは以前に試したことがあるコードを私と共有できますか? –

答えて

0

こんにちはuはuは、複数のQRコードを読み取ることができ、それを可能にし、それをチェックして、それが一括バーコードをスキャンする設定でオプションを持っているZxingバーコードスキャナアプリでご確認ください。 1つまたは複数の画像から一度に表示し、Zxingライブラリのソースコードで詳細情報を知ることもできます。

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

+0

私はzxingスキャナで複数のコードをスキャンするように設定を変更できることに気付かなかった、ありがとう。 zxingスキャナのソースコードを再度デバッグします。 –

+1

バルクスキャンは、一度に複数のバーコードを読み取るのではなく、いくつかのバーコードを連続して読み取ることとは関係ありません。一度に複数のバーコードをスキャンするオプションはありませんが、ライブラリにはあります。 –

+0

@SeanOwenはい、アプリ内の唯一のオプションは複数のバーコードを連続して読み取っていますが、一度に読み取ることはできません。しかし、図書館では、結果は一貫していません。最終的にカメラの画像をどのように取得するかについての提案は、私は 'camera.takePicture(null、null、mPicture)'を使って取得します。 zxingライブラリをデバッグするのはちょっと難しいですが、私が気づいているのはresultpointcallbacksがあることです。どのように動作するのか、それをどうやって入手するのかは不明です。 –

0

私は、デフォルトのカメラアプリとしてintent使用しているカメラのための1つのアプリを作成しているが、すべてのAndriod OSであり、一般的に、彼らはより良い最適化されるだろう、一般的なカメラアプリを書くよりも、そのデバイス用に最適化されていますお使いの携帯電話用のみ...カメラ用にはintentをご利用ください。

複数のQRを1つの画像から抽出するには、以下のコードを試してみました。
しかし、結果は

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()); 
     } 
    }