2013-02-27 9 views
10

Obecnie rozwijam skaner, który odczytuje wiele kodów QR znalezionych w jednym obrazie. Udaje mi się odczytać kody QR na obrazie, ale daje to niespójne wyniki. Zakładając, że na obrazie znajdują się 4 kody QR, czasami mogę odczytać 2, a czasem 3 lub po prostu 1. W przeciwieństwie do oryginalnego skanera (skaner ZXing) dekoduje się szybko. W moim przypadku muszę się upewnić, że jest wystarczająco dużo światła i obraz nie jest rozmazany, aby go zdekodować.Jak odczytywać wiele kodów QR z jednego obrazu za pomocą biblioteki zxing

Używam QRCodeMultiReader do odkodowania obrazu. Obecnie używa biblioteki ZXing do tworzenia aplikacji.

Poniżej znajduje się fragment mojego kodu:

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

mają znaleźć żadnego idealne rozwiązanie, aby przeczytać wiele kodów kreskowych?/ –

+0

niestety Nie dlatego, że zatrzymujemy rozwój tej funkcji. Ale nadal będę znajdował rozwiązanie tego problemu, szczególnie, że jestem z powrotem w Androidzie. –

+0

ok czy możesz mi udostępnić kod, który już wypróbowałeś? –

Odpowiedz

0

Witam proszę sprawdzić w aplikacji ZXing kodów kreskowych to ma opcję w ustawieniach, aby zeskanować Duże Kody kreskowe tak u ją włączyć i sprawdzić go u można przeczytać wiele kodów QR w czasie z jednego lub więcej obrazów, a także sprawdź kod źródłowy biblioteki Zxing na Znać szczegółowe informacje.

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

+0

nie zauważyłem, że mogę zmienić ustawienie skanowania wielu kodów w skanerze zx, dzięki za to. Przeprowadzi ponownie debugowanie kodu źródłowego skanera zxing. –

+1

Skanowanie zbiorcze nie ma nic wspólnego z odczytywaniem wielu kodów kreskowych na raz, ale odczytywaniem kilku kodów kreskowych z rzędu. W aplikacji nie ma opcji skanowania kilku kodów kreskowych naraz, ale znajduje się ona w bibliotece. –

+0

@SeanOwen tak, jedyna opcja w aplikacji czyta kilka kodów kreskowych z rzędu, ale nie czyta od razu. Ale w bibliotece wynik nie jest spójny, każda sugestia, jak uzyskać obraz z kamery w moim końcu, używam 'camera.takePicture (null, null, mPicture), aby go uzyskać. Trochę trudu wymaga debugowania biblioteki zxing, zauważam, że istnieje punkt końcowy, nie mam pewności, jak to działa, jak go zdobyć i na co go stać. –

0

i stworzyli jedną aplikację dla aparatu Użyłem intent jako domyślną aplikację Aparat jest tam z każdego Andriod OS i ogólnie są lepiej zoptymalizowane dla tego urządzenia niż pisanie rodzajowe aplikację aparatu, który będzie zoptymalizowany tylko dla twojego telefonu ... więc dla lepszego wykorzystania kamery intent.

Aby wyodrębnić wiele kodów QR z jednego obrazu, wypróbowałem poniższy kod.
Ale wyniki nie są zgodne jakiś czas mam 1 lub 2 lub 3 z 4 .... jakiś czas nikt jej nie idealne rozwiązanie

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()); 
     } 
    } 
Powiązane problemy