При производстве воздушных клапанов отливают и обрабатывают деталь с отверстиями. Отверстия могут быть:
1. Сквозное гладкое
2. Сквозное с резьбой
3. С заглушкой
Важно, чтобы в партии деталей типы отверстий соответствовали образцу. Это проверяет визуально работник. Возможно ли автоматизировать процесс проверки?
Первое что приходит в голову — использовать ИИ. Были отсняты две с половиной тысячи фотографий отверстий, выполнена их разметка, проведено обучение — и всё получилось! Распознаёт с точностью 98% !

Но мне захотелось попробовать другой путь. Расскажу по порядку, сначала про материальную часть, потом про программную часть проекта.
Материальная часть — это стенд для фотосъёмки. Дощечка на которой размещены:
- Подставка для детали
- Четыре USB фотокамеры
- Разветвитель USB
- Светодиод

Светодиод позволяет отследить наличие детали на подставке.
На снимке светодиод находится у верхней кромки детали, к нему идет розовый провод. Отслеживает камера #2. Деталь установлена, свет перекрыт.
Фотокамеры купил на алиэкспрессе, закрепил на дощечке на металлических уголках. Через USB-разветвитель подключил к компьютеру.

Стоит отдельно упомянуть подставку. У детали сложная форма, при этом надо чтобы она ложилась на подставку без перекосов. Решил вопрос так: сделал лепёшку из солёного теста, вдавил туда деталь и запёк в духовке. Затем деталь снял, а лепёшку приклеил к дощечке.
Теперь о программной части. Стал обдумывать алгоритм.
Резьба на снимке дает тёмные и светлые полоски, как зебра. Сначала думал проверять чередование светлых и темных пикселей на снимке. Но непонятно было как различать «отверстие с заглушкой» и «отверстие сквозное гладкое».
Зебры на них нет, просто с заглушкой фото посветлее (свет отражается от заглушки), а сквозное гладкое потемнее (свет убегает в отверстие).

Вопрос решился просто. Три типа отверстия отличаются величиной среднеквадратичного отклонения яркости, даже наличие зебры проверять не нужно. Анализируется не вся фотография, а характерный участок.
Пример измерений:
1. Сквозное гладкое, standard_deviation = 0
2. С резьбой, standard_deviation = 0,127289
3. С заглушкой, standard_deviation = 0,0387729
Обращаю внимание — для распознавания достаточно посмотреть, на каком месте стоит первая значащая цифра в числовой строке. В нашем примере:
- для гладкого отверстия имеем просто ноль
- для резьбы, цифра 1 стоит на третьем месте
- для заглушки, цифра 3 стоит на четвертом месте
Но отклонение яркости зависит от освещения! Значит, нужна лампочка со стабильной светимостью?
Удалось обойтись без лампочки, просто фотографируя в полутьме. У каждой фотокамеры на плате есть светодиод, который вспыхивает в момент съёмки и дает стабильную подсветку.
Получилась вполне рабочая система, ценой небольших затрат.
Ещё раз упомяну два интересных момента:
1. Отверстия классифицируются по положению первой значащей цифры в строке значения стандартного отклонения яркости. Выполнять какие-то действия с самим значением не нужно.
2. В момент съемки деталь подсвечивается индикаторным светодиодом, который установлен на плате фотокамеры. Отдельный источник света не требуется.
Ссылка на видео процесса распознавания.
Ссылка на программу на github.
Точка входа photo.sh, там есть подробные комментарии.
Буду рад услышать замечания, пожелания, и просто мысли по поводу проекта.
Комментарии (5)

kinall
29.07.2026 18:36Не понял, честно говоря, исходную задачу. Рабочий делает отверстие наугад, с резьбой или без, как получится?

Spaceoddity
29.07.2026 18:36Я тоже не понял. И разве визуальный осмотр не быстрее и проще всего этого огорода с фотостендом и ручным же позиционированием детали на нём?
Foreststander
Раньше было " цифра vs аналог", сейчас “ИИ vs без него”
Solmik Автор
Да, пожалуй что так )