2013-02-27 42 views
10

Şu anda bir görüntüde bulunan birden çok QR kodunu okuyan bir tarayıcı geliştiriyorum. Resimdeki QR kodlarını okuyabiliyorum, ancak tutarsız sonuçlar veriyor. Görüntüde 4 adet QR kodu olduğunu varsayarsak, bazen 2 ve bazen 3'ü veya sadece 1'i okuyabiliyorum. Orijinal tarayıcıda (ZXing Scanner) aksine, hızlı bir şekilde çözülür. Benim durumumda, ışığın yeterli olduğundan ve görüntüyü deşifre etmek için bulanık olmadığından emin olmalıyım.Zxing kitaplığı kullanarak bir görüntüden birden fazla qr kodu nasıl okunur?

Görüntüyü çözmek için QRCodeMultiReader kullanıyorum. Şu anda uygulama oluşturmak için ZXing Kitaplığı'nı kullanarak.

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

Birden barkodları?/ –

+0

maalesef okumak için herhangi bir mükemmel bir çözüm bulmak zorunda Yapmadım çünkü bu özellik için gelişmeyi durdurduk. Ama bunun için özellikle de Android'e geri döndüğüm bir çözüm bulmaya devam edeceğim. –

+0

Tamam daha önce denediğin kodu bana paylaşabilir misin? –

cevap

0

Merhaba u Çoklu QR kodlarını okuyabilen u etkin hale getirileceği ve kontrol yüzden Toplu Barkodlar tara için Ayarlar seçeneği vardır ZXing Barcode Scanner uygulamasında kontrol edin: Aşağıda

benim kod snippet'idir Bir veya daha fazla Görüntüden bir kerede ve detaylı bilgileri Bilinen Zxing kütüphanesinin Kaynak kodunu kontrol edin.

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

+0

, zxing tarayıcısında birden çok kodu taramak için ayarı değiştirebileceğimi fark etmedi, bunun için teşekkürler. Zxing tarayıcı kaynak kodunu tekrar hata ayıklayacaktır. –

+1

Toplu Tarama, aynı anda birden çok barkod okuma ile ilgili bir şey yapmadı, ancak art arda birkaç barkodu okuyor. Uygulamada, aynı anda birkaç barkodu taramak için bir seçenek yok, ancak kütüphanede var. –

+0

@SeanOwen evet, app tek seçenek art arda birkaç barkod okuma, ama aynı anda okuma değil. Ancak kütüphanede sonuç tutarlı değil, kameranın ucunda kamera coz'undan nasıl elde edileceğine dair herhangi bir öneride, 'camera.takePicture (null, null, mPicture) 'i kullanmak için kullanıyorum. Zxing kütüphanesinin hatalarını ayıklamak biraz zor, sonuçta bir sonuç noktası olduğunu fark ettim, nasıl çalıştığından ya da nasıl alınacağından ya da bunun ne için olduğundan emin değilim. –

0

i varsayılan Kamera uygulaması olarak intent kullandık kamera için bir app oluşturduk her Andriod OS ile orada ve genellikle daha iyi optimize olacaktır jenerik Kamera uygulamasını yazarken daha o cihaz için optimize edilmiştir Sadece telefonunuz için ... böylece kamera için intent kullanın.

Tek bir görüntüden birden fazla QR ayıklamak için aşağıdaki kodu denedim.
Ama sonuç 4 takım bazı ben 1 almak süresi veya 2 veya 3 tutarlı olmayan bazı zaman yok .... onun mükemmel değil çözüm

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