Сканирование нескольких штрих-кодов с zxing.net

Моя цель состоит в том, чтобы обнаружить несколько матриц данных на большом изображении, таком как это (четыре больших):

полное изображение

Основываясь на нескольких примерах кода, я сделал небольшую тестовую программу:

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

Он не может обнаружить код на большом изображении.

Но он может обнаружить код, если его обрезать так:

обрезается

После этого я объединил две сгенерированные матрицы данных, и это тоже не удалось:

В последний раз я провел еще два теста со слегка обрезанными изображениями, но оба не удалось:

Так что, похоже, эта библиотека совсем не устойчива, или, может быть, я неправильно ее использую.

Есть идеи, как улучшить мои результаты? (включая другие библиотеки и предварительную обработку)

1 ответ

Нельзя сказать, что библиотека не является надежной, но здесь на вас влияют два ключевых фактора:

  • Алгоритм обнаружения матрицы данных Zxing предполагает, что штрих-код центрирован. Точнее, центр изображения находится внутри матрицы данных.
  • Многофункциональный считыватель Zxing особенно не работает, когда штрих-коды выровнены по сетке.

Моя рекомендация - реализовать свой собственный MultipleBarcodeReader принимая во внимание то, что я упомянул.

Наивным подходом может быть выборка изображений, центрированных по сетке точек, расположенных так, чтобы каждая матрица данных (независимо от ее положения в изображении) содержала хотя бы одну из точек внутри. Вы просто должны исключить дублирование кодов.

Другие вопросы по тегам