Распознавание штрих-кодов с помощью ИИ

В качестве любимого проекта/учебного опыта (нет, это не домашнее задание) я работаю над программным обеспечением для распознавания штрих-кодов с фотографии. Я не ищу программное обеспечение или библиотеку, которая это делает — вместо этого я использую это как учебное упражнение, о котором я пишу в блоге и опубликую на Codeplex.

У меня есть код, который успешно распознает штрих-коды EAN13 (который я опубликовал на CodePlex), и версия UPC A/E должна следовать вскоре. Однако у меня есть две области, которые меня беспокоят. Во-первых, это декодирование штрих-кодов, которые находятся на изображении, которое немного размыто или с плохой контрастностью и т. д. Во-вторых, это просто поиск фактического штрих-кода на более крупном изображении (прямо сейчас вы должны дать мне фотографию только штрих-кода).

Я нутром чувствую, что какая-то форма ИИ поможет мне здесь. В прошлом я немного играл с генетическими алгоритмами и много лет назад прошел курс по ИИ, так что это не совсем чуждо мне, но я не совсем уверен, с чего начать.

Какой тип алгоритма лучше всего подходит для этого типа задач? Любое рекомендуемое чтение или код для работы с ИИ? Да, я хочу понять, что происходит, но я не обязательно хочу опускаться до уровня кодирования сортов и т. д. самостоятельно.


person ctacke    schedule 17.08.2010    source источник
comment
Может нейронная сеть? Я не знаю. Может быть, мне просто нравятся нейронные сети. ИИ сказал мне, что они мне нравятся. Или иначе.   -  person fire.eagle    schedule 18.08.2010
comment
@fire.eagle: Любые ссылки или указатели для меня? Поиск в Интернете по нейронным сетям и ИНС слишком широк. :)   -  person ctacke    schedule 18.08.2010
comment
Я так понимаю, вы видели приложение RedLaser для iPhone?   -  person Josh Stodola    schedule 18.08.2010
comment
@ctacke: Не сейчас, извини. Я действительно только что узнал об этом предмете из книг в библиотеке моего колледжа, к которым у меня нет доступа по крайней мере еще неделю. И хотя я знаю теорию, лежащую в основе NN, я недостаточно знаю, чтобы давать указания. Я отметил этот вопрос; если вы все еще ищете через неделю, я пойду посмотрю, смогу ли я откопать названия книг в библиотеке.   -  person fire.eagle    schedule 18.08.2010
comment
@Josh: я не видел, но слышал об этом. Вероятно, это очень похоже на то, чего я пытаюсь достичь.   -  person ctacke    schedule 18.08.2010
comment
@ctacke У меня есть - работает на удивление хорошо. Возможно, вам будет полезен их SDK: redlaser.com/SDK.aspx   -  person Josh Stodola    schedule 18.08.2010
comment
вы можете попробовать поискать в Google Machine Vision или Machine Vision c# — пример ссылки: forum.crustcrawler.com/phpBB3/viewtopic.php?f=15&t=1127   -  person Matt Ellen    schedule 18.08.2010
comment
+1 за этот вопрос. Вы когда-нибудь реализовывали решение? Другой интересный компонент по-прежнему способен распознавать штрих-код, к которому эффективно применено некоторое аффинное преобразование.   -  person Brooks    schedule 15.04.2013
comment
Смотрите мое редактирование со ссылкой на то, где я остановился   -  person ctacke    schedule 15.04.2013


Ответы (3)


Я бы предложил искать свойства, которыми обладает штрих-код. Вот некоторые из них, которые я имею в виду:

  1. Гистограмма цветов показывает два разных цвета примерно с равномерным распределением.
  2. Выполнение преобразования hough находит много параллельных линий
  3. Толщина линий имеет два различных измерения.

Некоторые другие?

Имея это, я бы разделил изображение на части и провел классификацию с этими функциями, а затем объединил результаты, чтобы вычислить вероятность того, содержит ли часть штрих-код или нет.

Для вашей второй проблемы (размытое изображение) я бы предложил вычислить производную 1-го порядка значений серого, а затем определить края линий в этом пространстве. Максимум производной ниже, если изображение размыто, но оно должно обнаруживаться до определенного коэффициента размытия.

Вам это помогает?

person schoetbi    schedule 17.08.2010

Как уже отмечал mp, для этого вам не нужна настоящая техника искусственного интеллекта. Взгляните на главу 12 Real World Haskell. Он реализует почти полный распознаватель штрих-кода. Пример кода на Haskell, но есть много объяснений, так что вы, вероятно, сможете понять идеи и приемы, даже не имея опыта работы с Haskell.

Если вы хотите решить эту проблему с помощью ИИ, то, вероятно, лучше всего использовать ИНС. Для данной задачи я бы рекомендовал использовать довольно продвинутую методику под названием HyperNEAT. См. мое объяснение (и ссылки) в качестве первого ответа на вопрос SO Neural Размер сети...

Я бы, наверное, использовал две или три разные сети,

  • Первый, кто нашел штрих-код на большой картинке. Один выходной нейрон на пиксель/набор пикселей, выходное значение — это уверенность в том, что этот пиксель кажется частью штрих-кода. Основываясь на результате, я бы использовал некоторое преобразование изображения, чтобы преобразовать его в «стандартный» формат (прямоугольник x * y).
  • Если у вас возникли трудности с поиском местоположения штрих-кода, используйте второй. Скормите результат первого и попросите его дать координаты двух углов. Тем не менее, я не совсем уверен, что это будет очень легко развивать.
  • Последний будет работать в стандартизированном формате, выводя нейроны для каждой строки (или квадрата, если вы работаете, возможно, с двумерным штрих-кодом), сообщая, следует ли считать данную область черной или белой.

Вероятно, это также помогло бы выполнить некоторую предварительную обработку изображения, например. те, что описаны в RWH.

person Sandor Murakozi    schedule 18.08.2010
comment
HyperNEAT звучит очень интересно - person Matt Ellen; 18.08.2010
comment
Да, это очень мощная техника. Исследования довольно интенсивны, и они часто предлагают очень творческие расширения/приложения. - person Sandor Murakozi; 18.08.2010

Вам не нужен какой-то конкретный ИИ или техника мягких вычислений. Вам необходимо применить метод обработки изображения, чтобы улучшить качество изображения или изолировать штрих-код от большего изображения. Вы можете использовать Matlab для прототипирования и узнать больше об обработке изображений.

person mp.    schedule 17.08.2010
comment
Какая технология обработки изображений? Я также пишу код здесь. У меня есть изображение, сделанное на мой мобильный телефон, я хочу вернуть строку. Насколько я вижу, Matlab не так уж применим в этой формуле. - person ctacke; 18.08.2010
comment
Matlab — это чудесный инструмент для обработки изображений, а также для изучения и поиска решения, которое соответствует вашим потребностям. Есть множество фильтров и функций. Современное компьютерное зрение собрано в библиотеке обработки изображений Matlab. Как только вы нашли лучшее решение, вы переводите его на язык программирования и платформу по вашему выбору. Я не могу сказать вам, как лучше всего решить вашу проблему. Вы должны немного поэкспериментировать. - person mp.; 18.08.2010