2013-02-27 17 views
10

Ich entwickle derzeit einen Scanner, der mehrere QR-Codes liest, die in einem Bild gefunden werden. Ich schaffe es, die QR-Codes im Bild zu lesen, aber es gibt mir widersprüchliche Ergebnisse. Angenommen, es gibt 4 QR-Codes im Bild, manchmal kann ich 2 und manchmal 3 oder nur 1 lesen. Anders als im Originalscanner (ZXing Scanner) dekodiert es schnell. Während ich in meinem Fall sicherstellen muss, dass genug Licht vorhanden ist und das Bild nicht unscharf ist, um es zu entschlüsseln.So lesen Sie mehrere QR-Codes aus einem Bild mit der zxing-Bibliothek

Ich verwende die QRCodeMultiReader, um das Bild zu dekodieren. Derzeit verwenden ZXing Bibliothek zum Erstellen der Anwendung.

Unten finden Sie die Schnipsel meines Codes:

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

haben Sie finden jede perfekte Lösung zu lesen mehrere Barcodes?/ –

+0

leider bekommen Ich habe es nicht, weil wir die Entwicklung für dieses Feature stoppen. Aber ich werde weiterhin die Lösung dafür finden, besonders, dass ich wieder in Android bin. –

+0

ok Kannst du mir Code teilen, was du vorher versucht hast? –

Antwort

0

Hallo überprüfen Sie bitte im ZXing Barcode Scanner App es Option in den Einstellungen hat Bulk-Barcodes zu scannen, so u diese Funktion zu aktivieren und überprüfen u Mehrere QR-Codes lesen kann zu einer Zeit aus einem oder mehreren Bildern und überprüfen Sie auch den Quellcode der Zxing-Bibliothek zu Bekannte die detaillierten Informationen.

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

+0

habe nicht bemerkt, dass ich die Einstellung ändern kann, um mehrere Codes im zxing Scanner zu scannen, danke dafür. Wird den Quellcode des zxing-Scanners erneut debuggen. –

+1

Bulk Scan hat nichts damit zu tun, mehrere Barcodes gleichzeitig zu lesen, sondern mehrere Barcodes hintereinander zu lesen. Es gibt keine Option in der App, mehrere Barcodes gleichzeitig zu scannen, aber es gibt sie in der Bibliothek. –

+0

@SeanOwen Ja, die einzige Option in der App ist das Lesen mehrerer Barcodes nacheinander, aber nicht gleichzeitig. Aber in der Bibliothek ist das Ergebnis nicht konsistent, jeder Vorschlag, wie man das Bild von der Kamera zu meinem Ende kommt, ich benutze 'camera.takePicture (null, null, mPicture)', um es zu bekommen. Es ist ein wenig schwierig, die zxing-Bibliothek zu debuggen, was ich bemerke, gibt es ein Ergebnispunktcallbacks, ich bin unsicher, wie es funktioniert oder wie man es bekommt oder wie es ist. –

0

i eine App für die Kamera geschaffen habe i intent als Standard-Kamera-App verwendet habe, ist es mit jedem Andriod O und in der Regel sind sie besser für das Gerät optimieren als einen generischen Kamera-App schreiben, die optimiert werden würden nur für Ihr Telefon ... so für Kamera besser verwenden intent.

Zum Extrahieren mehrerer QR aus einem einzelnen Bild habe ich den folgenden Code ausprobiert.
Aber Ergebnisse sind einige Zeit nicht konsistent I 1 oder 2 oder 3 von 4 einige Zeit keine .... es ist nicht perfekt Lösung

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