Оценка времени и стоимости создания программы распознавания/сортировки изображений по шаблонам.
Добрый день. Пожалуйста, подскажите примерные порядки сроков и стоимости для написания ПО с ниже приведенным функционалом. Какими технологиями(помимо opencv) стоит поинтересоваться? *Заранее извиняюсь за несколько скомканное и сбивчивое описание, мне ТЗ проще нарисовать, чем описать не на десятке страниц. )
С фотографии(большого разрешения, на белом\черном фоне) пластиковых распечатанных деталей нужно выделить предметы по контурам (треугольный, параллелепипед, круг), вырезать их с отступами по отдельным файлам, назвать по маске и занести в БД. Далее отдельные предметы идут на автоматическое распознавание внешних и внутренних контуров по принципу:
Параллелограмм
- прямоугольное
(по соотношению сторон, краевым контурам)
- уголок
- с 3 круглыми отверстиями
- с 2 крестообразными
- с 2 круглыми с зенковкой
- крышка (варианты разного размера и с разными внутренними элементами - бортики, ребра жесткости, отверстия под болты, надписи и т.п.)
- уголок
- квадрат
- крышка
- образец
Округлое
- С ровным краем
- Имеет внутренние контуры
- С ободом
- колесо
- Без обода
- шайбы\прокладки
- С ободом
- Не имеет внутренних контуров
- Диск(образец)
- Разные диаметры/материал
- Диск(образец)
- Имеет внутренние контуры
- С зубчатым краем
- Шестеренка (по размеру, кол-ву зубьев, диаметру оси)
- Гайка
- Что-то неудавшееся круглое
Определенное, с допустимой погрешностью, называть по маске с эталона и сохранять. С погрешностями - на ручную доводку контура и дальнейшее автоматическое определение, или пометку тегами и сохранение в другом разделе. Например, изменен угол/геометрия зубьев шестерни, растянутость круглых элементов(овальная зенковка), пильчатый/слоистый край вместо ровного, непараллельность сторон гайки и т.п. - брак.
Контуры, снятые с картинки, сравнивать с заранее созданной библиотекой эталонных контурных масок. Для ее наполнения потребуется ручками доводить до приемлемого уровня контуры снятые с эталонных распечаток. Стирать лишние контуры и шумы, подтягивать/дорисовывать контур до нужного, отмечать контуры с разным приоритетом, и, по итогу, сохранить в БД. Таким образом, туда надо будет прикрутить и графический редактор, простенький, не Paint, но что-то уровня Paint.Net - слои, панельки инструментов, история и т.п. Также нужна возможность наложить на проверяемый предмет изображения эталонного и их контурные маски с настраиваемой прозрачностью/цветом.
Основная проблема мне видится в том, что изделия пластиковые, глянцевые, на них имеется масса бликов, осложняющих не только первоначальное определение формы (из-за блика на сгибе или вытянутой тени, квадрат с освещением под углом видится ромбом, а круг овалом), но и внутренних структур - блики на зенковке и трафаретных лаковых надписях, слоистая текстура самой детальки. Может, при создании эталонной маски к основной линии контура добавлять некий коридор погрешности в мм/пикселах, или прикрутить нейросеть и обучить ее на эталонных предметах, или и то, и другое, для надежности?
Подытоживая, нужна программка содержащая в себе БД, граф.редактор, распознавание образов по шаблонам с построением контуров и обучением нейросети на эталонных изображениях/контурных масках. Что касается части распознавания, то по мне, это должно быть проще лиц, навроде номеров машин, но исходные данные хорошего разрешения, с минимальными искажениями и загрязнениями. Большие сомнения вызывает нейросеть, но без нее задача кажется с трудом решаемой, даже мне не без колебаний получится провести границу между ободом и диском, т.к. в одном месте бликует и граница в пересвете, в другом в тени, да и сам скос пологий, поди разбери.
Все модули нужны не коммерческие, т.е. бесплатные, желательно открытые. Поскольку средства не бюджетные, а свои, да и распространение, продажа или другое коммерческое использование не предполагается, т.е. и к интерфейсу с рабочим окружением требования минимальны. С такими БД и граф.редактором, я думаю, проблем не возникнет, где-то мне попадался и проект открытой распознавалки номеров, может его удастся модифицировать, без написания с нуля всего распознавания на opencv. Основная работа мне видится в сведении всего этого в один инструмент, натягивании GUI и нейросети. В общем, эскиз программки таков. Что скажете?
С учетом не описанного инструментария и еще не оформившихся хотелок, все прикидки умножаю на два.
P.S. У вас тут Как правильно писать объявление о работе ссылка отклеилась www.linux.org.ru/wiki/en/Lorcode