Как проект / опыт обучения домашних животных (нет, это не домашняя работа) Я работаю над программным обеспечением для распознавания штрих-кодов по фотографии , Я не ищу программное обеспечение или библиотеку, которая делает это - вместо этого я использую это как учебное упражнение, о котором я пишу в блоге и опубликую в Codeplex.
У меня есть код, который успешно распознает штрих-коды EAN13 (который Я опубликовал на CodePlex) и UPC версия A / E должна последовать в ближайшее время. У меня есть две области, которые меня беспокоят, хотя. Во-первых, декодирование штрих-кодов, которые выглядят немного размытыми или с низкой контрастностью и т. Д. Во-вторых, просто находим фактический штрих-код на большом изображении (сейчас вы должны дать мне фотографию только штрих-кода).
У меня ощущение, что какая-то форма ИИ поможет мне здесь. В прошлом я немного поиграл с генетическими алгоритмами и несколько лет назад прошел курс обучения искусственному интеллекту, поэтому он не совсем чужд мне, но я не совсем уверен, с чего начать.
Какой тип алгоритма лучше всего подходит для этого? тип проблемы? Любое рекомендуемое чтение или код для искусственной работы AI? Да, я хочу понять, что происходит, но я не обязательно хочу опускаться до уровня кодирования и т.д.
Я бы посоветовал поискать свойства штрих-кода. Я имею в виду следующие:
Что-то другое?
Имея это, я бы разделил изображение на части и провел классификацию с этими характеристиками, а затем объединил результаты, чтобы вычислить вероятность того, содержит ли часть штрих-код или нет.
Для вашей второй проблемы (размытое изображение) я бы предложил вычислить производную 1-го порядка значений серого, а затем определить края линий в этом пространстве. Максимум производной ниже, если изображение размыто, но оно должно быть обнаружено до определенного коэффициента размытия.
Это вам поможет?
Как уже отмечал mp, для этого вам не нужна настоящая техника искусственного интеллекта. Взгляните на главу 12 Real World Haskell . Он реализует почти полный распознаватель штрих-кода. Пример кода находится на Haskell, но есть много объяснений, поэтому вы, вероятно, сможете понять идеи и приемы даже без опыта работы с Haskell.
Если вы хотите решить эту проблему с помощью ИИ, то, вероятно, лучше всего использовать ИНС. Для данной проблемы я бы рекомендовал использовать довольно продвинутую технику под названием HyperNEAT. См. Мое объяснение (и ссылки) как первый ответ на вопрос SO Размер нейронной сети ...
Я бы, вероятно, использовал две или три разные сети,
Возможно, это также поможет выполнить некоторую предварительную обработку изображения, например те, что описаны в RWH.
Вам не нужен какой-либо особый искусственный интеллект или программные вычисления. Вам необходимо применить технику обработки изображений, чтобы улучшить качество изображения или изолировать штрих-код от более крупного изображения. Вы можете использовать Matlab для создания прототипов и узнать больше об обработке изображений.