2015-01-21 14 views
5

Moim celem jest wykrycie wielu datamatrices na większy obraz jak ten (cztery duże):Skanowanie wielu kody kreskowe z zxing.net

full image

podstawie kilku próbek kodu, zrobiłem mały program testowy :

Bitmap image = getImage(); 

DataMatrixReader reader = new DataMatrixReader(); 
GenericMultipleBarcodeReader genericReader = new genericMultipleBarcodeReader(reader); 
Dictionary<DecodeHintType, object> hints = new Dictionary<DecodeHintType,object>(); 
hints.Add(DecodeHintType.TRY_HARDER, true); 

BitmapLuminanceSource source = new BitmapLuminanceSource(image); 
HybridBinarizer binarizer = new HybridBinarizer(source); 
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer); 
Result[] results = genericReader.decodeMultiple(binaryBitmap,hints); 

show(results); 

Nie można wykryć żadnego kodu na dużym obrazie.

Ale może wykryć kod, gdy jego przycięte tak:

cropped

Potem połączyła dwa wygenerowane macierze danych, a nie udało się też:

enter image description here

Ostatni Przeprowadziłem dwa kolejne testy z lekko przyciętymi obrazami, oba nie powiodły się:

enter image description here

enter image description here

Wydaje się więc ta biblioteka nie jest mocna w ogóle, czy może użyć to źle.

Każdy pomysł, jak poprawić moje wyniki? (Łącznie z innymi bibliotekami i wyprzedzającym)

Odpowiedz

3

Nie można powiedzieć, że biblioteka nie jest mocny, ale istnieją dwa główne czynniki wpływające na was tutaj:

  • algorytm detekcji danych matryca ZXing zakłada, że ​​kod kreskowy wyśrodkowany. A dokładniej, że środek obrazu znajduje się w matrycy danych.
  • Wiele czytników Zxinga zawodzi, gdy kody kreskowe są wyrównane do siatki.

Moja rekomendacja jest taka, aby wdrożyć własną MultipleBarcodeReader biorąc pod uwagę to, co już wspomniałem.

Podejściem naiwnym może być pobranie przykładowych obrazów wycentrowanych na siatce punktów rozmieszczonych w taki sposób, aby każda matryca danych (bez względu na jej pozycję w obrazie) zawierała co najmniej jeden z punktów w środku. Musisz tylko wykluczyć zduplikowane kody.