2016-11-24 33 views
9

Używam com.google.android.gms.vision.barcode.BarcodeDetector, aby czytać kody QR. Problem polega na tym, że kody te zawierają surowe dane binarne; bez numerów telefonów, bez adresów URL, bez punktów kontaktowych ... Nie mogę zmienić tych kodów QR, ponieważ są one generowane w innej aplikacji.API kodów kreskowych Android Vision - odczyt niestandardowego kodu QR z danymi binarnymi

Po zeskanowaniu tych kodów QR za pomocą interfejsu API Android Barcode, wynikowy obiekt Barcode nie pozwala mi uzyskać dostępu do nieprzetworzonych danych, chociaż musi o tym wiedzieć!

Otrzymuję tylko komunikat "Unknown encoding" zarówno w domenie rawValue, jak i displayValue.

Posiadanie właściwości byte[] zamiast dwóch właściwości String miałoby więcej sensu, ponieważ kody QR mogą przenosić dane ogólne.

Nie widzę sensu ukrywania macierzy bajtów danych przed programistami. Czy mogę jakoś przedłużyć klasę BarcodeDetector lub klasę Barcode, aby uzyskać to, czego potrzebuję?

Edit:

To jest absolutnie poprawny kod QR, które nie mogą być odczytane przez Vision API, chociaż nosi 1024 bajtów danych:

enter image description here


QR Codes - raw binary data jest powiązane, ale to nie rozwiązuje mojego problemu.

+0

To bardzo mgliste pytanie ... Ja też używam '... vision.barcode ...' api, w kodzie produkcyjnym. Czy możesz udostępnić przykład QR? – Algar

+0

@Algar Sure, zobacz moją edycję. – vojta

+0

Przepraszam, miałem nadzieję, że mogę po prostu wyprowadzić (rzeczywiste) surowe wartości ze źródła, ale nie mam szczęścia. Sądzę, że są wartości 'null' lub takie w danych, które powodują, że kodowanie się nie udaje. Wydaje się niezwykle ułomny, że dane surowe nie są dostępne, ale .. Spróbuj zgłoszenia problemu [tutaj] (https://github.com/googlesamples/android-vision/issues). :( – Algar

Odpowiedz

1

Myślę, że sam musisz napisać część implementacji. Jak widzę w interfejsie API, że rawData jest trzymana przez String, który po prostu nie zapewnia integralności twojego binarnego typu danych.

Napiszę własny BarcodeDetector z własnym obiektem BarCode z bajtem [] jako typem danych dla rawData pochodzących z QR-Code i nadpisuję metodę detect(), aby przypisać rawData do mojej implementacji kodu BarCode. Ponieważ twoja sprawa jest bardzo specyficzna dla tego wymogu, nie powinieneś wahać się napisać własnej implementacji. Można również udostępniać go na github innym.

1

Czytałem kody QR z zawartością binarną przez this library module. Stary ZXing nie dostarczał binarnego ładunku z pudełka, ale nowy dostarcza binarnego ładunku - ale o ile pamiętam, tylko jako część znanego formatu.