Такой cornercase: если штрихкод не чёрным цветом, а наоборот, белым на чёрном/сером фоне, то zbar его не распознаёт. Я попробовал сделать инверсию цвета с фотографии такого штрихкода в gimpе- в таком случае zbar распознал совершенно неправильный код из инверсного штрихкода.
Можно ли применить какой-то реалтаймовый фильтр на основе opencv покадрово, чтобы edge detection и заливать полоски штрихкода или квадраты qr чёрным всегда- вне зависимости это чёрным по светному, иои светлым по чёрному? Как шаг preprocessing перед zbar.
Update
добавил опциональный шаг — вторая попытка ZBar на инверсных цветах, и это помогло в ряде случаев.
Более тяжелые случаи- где белым по-чёрному и неизвестный ZBar-у формат штрих кода, остались проблемой.
Неужели придётся всё-таки докопать до того, как собирать с emscripten самому, форкать ZBar и дореализовывать отсутствующие форматы самому?
Здравствуйте, Артём, Вы писали:
Аё>Такой cornercase: если штрихкод не чёрным цветом, а наоборот, белым на чёрном/сером фоне, то zbar его не распознаёт.
Ты не поверишь — железные сканеры тоже такое очень не любят.
Аё>Update Аё>добавил опциональный шаг — вторая попытка ZBar на инверсных цветах, и это помогло в ряде случаев.
Это плохой путь. Не нужно читать то, что нечитабельно, это чревато.
Аё>Более тяжелые случаи- где белым по-чёрному и неизвестный ZBar-у формат штрих кода, остались проблемой.
Не факт, что неизвестный. Попробуй отрубить ненужное и может быть прочитает. Железные сканеры тоже нужно настраивать, иначе они не все читают.
Аё>Неужели придётся всё-таки докопать до того, как собирать с emscripten самому, форкать ZBar и дореализовывать отсутствующие форматы самому?
Там форматирование пересекается. Грубо говоря если врублено определение формата А, формат Б оно читать не будет. Чтобы оно начало читать формат Б, нужно в настройках вырубить распознавание формата А. Конкретные стандарты извини не помню, я этим лет 20 назад занимался.
Всё, что нас не убивает, ещё горько об этом пожалеет.
Здравствуйте, Ромашка, Вы писали:
Аё>>добавил опциональный шаг — вторая попытка ZBar на инверсных цветах, и это помогло в ряде случаев. Р>Это плохой путь. Не нужно читать то, что нечитабельно, это чревато.
Наоборот — это самый логичный и простой путь. Плохой — это самому доработать детектор, чтобы он мог работать одновременно и с белыми, и с чёрными. Заколебаешься собирать датасет, учить, ловить баги.
Здравствуйте, Nuzhny, Вы писали: N>Наоборот — это самый логичный и простой путь.
Самый логичный и простой путь — ограничить чтение по максимуму. У тебя по процессу должен быть EAN13? Читать только EAN13, остальные штрихкоды просто игнорировать. Не читается как EAN13? Забить, распечатать свой EAN13, налепить и поехали дальше. По процессу возможны несколько стандартов? Выставить префиксы и обрабатывать отдельно. Потому что по ту сторону штрихкода всегда сидит человек и его логика иногда очень странная. Поэтому нуегонафиг, шаг в сторону — расстрел.
Всё, что нас не убивает, ещё горько об этом пожалеет.