2013-02-27 13 views
10

Attualmente sto sviluppando uno scanner che legge più codici QR trovati in un'immagine. Riesco a leggere i codici QR nell'immagine ma mi sta dando risultati incoerenti. Supponendo che nell'immagine ci siano 4 codici QR, a volte posso leggere 2 e talvolta 3 o solo 1. A differenza dello scanner originale (ZXing Scanner) decodifica velocemente. Mentre nel mio caso, devo assicurarmi che ci sia abbastanza luce e che l'immagine non sia sfocata per decodificarla.Come leggere più codici qr da un'immagine usando la libreria zxing

Sto usando il QRCodeMultiReader per decodificare l'immagine. Attualmente si utilizza la libreria ZXing per creare l'applicazione.

riportano di seguito le frammento di mio codice:

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

avete a trovare qualsiasi soluzione ideale per leggere i codici a barre più?/ –

+0

purtroppo Non l'ho fatto perché interrompiamo lo sviluppo di quella funzionalità. Ma continuerò a trovare una soluzione per questo in particolare che sono tornato in Android. –

+0

ok puoi condividere il codice che hai provato prima? –

risposta

0

Ciao si prega di controllare in app ZXing Barcode Scanner si ha l'opzione in Impostazioni per la scansione dei codici a barre di massa in modo da u attivare e controllare che la u può leggere più codici QR alla volta da una o più immagini e controlla anche il codice sorgente della libreria Zxing per conoscere le informazioni dettagliate.

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

+0

non ho notato che posso modificare l'impostazione per eseguire la scansione di più codici nello scanner zxing, grazie per questo. Effettuerà nuovamente il debug del codice sorgente dello scanner zxing. –

+1

Bulk Scan non ha nulla a che fare con la lettura di più codici a barre contemporaneamente, ma la lettura di più codici a barre in successione. Non ci sono opzioni nell'app per scansionare più codici a barre contemporaneamente, ma c'è nella libreria. –

+0

@SeanOwen sì, l'unica opzione nell'app è la lettura di più codici a barre in successione, ma non la lettura in una sola volta. Ma nella libreria, il risultato non è coerente, qualsiasi suggerimento su come ottenere l'immagine dal coz della fotocamera nella mia parte, io uso 'camera.takePicture (null, null, mPicture)' per ottenerlo. È un po 'impegnativo eseguire il debug della libreria zxing, quello che noto è che ci sono un resultpointbackback, sono incerto su come funziona o su come ottenerlo o per quale motivo. –

0

ho creato un app per la macchina fotografica che ho usato intent come l'applicazione predefinita fotocamera è lì con ogni Andriod OS e generalmente sono meglio ottimizzati per quel dispositivo che scrivere un app Fotocamera generica che potrebbe essere ottimizzato solo per il tuo telefono ... quindi per la fotocamera usa meglio intent.

Per Estrarre più QR da una singola immagine ho provato il codice qui sotto.
ma i risultati non sono coerenti po 'di tempo ricevo 1 o 2 o 3 su 4 po' di tempo nessuno .... la sua soluzione non perfetta

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