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

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

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

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

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

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

Spaceoddity
29.07.2026 18:36Я тоже не понял. И разве визуальный осмотр не быстрее и проще всего этого огорода с фотостендом и ручным же позиционированием детали на нём?

Arhammon
29.07.2026 18:36Вероятно за визуальный осмотр надо платить контролеру ОТК, а так можно свалить на самих рабочих... ну это единственное что приходит в голову

Solmik Автор
29.07.2026 18:36>И разве визуальный осмотр не быстрее и проще
Да, быстрее, но человек иногда ошибается. Ручное позиционирование предполагается убрать, установив конвейер. Варианты разные, вопрос обсуждается.
Spaceoddity
29.07.2026 18:36Так и любая подобная хрень будет ошибаться)) Застряла стружка в отверстии - вот тебе и ошибочная идентификация резьбы...
Ручное позиционирование предполагается убрать, установив конвейер.
А сортировать детали по разным линиям тоже фотокамера будет? Это как проект автомобиля начинать с выбора шин...

Solmik Автор
29.07.2026 18:36Застряла стружка в отверстии - вот тебе и ошибочная идентификация резьбы…
А сортировать детали по разным линиям тоже фотокамера будет?Линия только одна. В партии все детали одинаковые. Если деталь отличается - её выбракуют, потом вручную разберутся.

Spaceoddity
29.07.2026 18:36Ну я вам про "процедуру выбраковки" и говорю - это же надо развилку конвейерной линии городить - "хорошие направо, бракованные налево", с довольно хитроумной механикой, завязанной на "ответ" фотокамеры...

Solmik Автор
29.07.2026 18:36Да, разумеется, тут будет зависеть от конструкции конвейера
например, можно деталь столкнуть в сторону, или подвести жёлоб и перенаправить или открыть шторку, чтобы она вниз упалаИ самое простое - так как бракованные детали попадаются крайне редко, можно просто подать сигнал оператору, чтобы подошёл и убрал.

Solmik Автор
29.07.2026 18:36Тут технология такая:
отливается деталь, все отверстия - с заглушками
в зависимости от того, какую модель надо получить, некоторые отверстия рассверливаются и в некоторых дополнительно нарезается резьба
бывают ошибки - например, что-то не рассверлили или не нарезали
перед отправкой на сборку детали проверяет рабочий. Деталей много, иногда ошибки не замечает.
Вот и появилась идея - автоматизировать.

Solmik Автор
29.07.2026 18:36Рабочий делает отверстие наугад, с резьбой или без, как получится?
Деталь должна соответствовать образцу

ENick
29.07.2026 18:36"""Решил вопрос так: сделал лепёшку из солёного теста, вдавил туда деталь и запёк в духовке """ - самое классное решение!!! Какой ИИ додумается до такого???

Solmik Автор
29.07.2026 18:36Солёное тесто я у сына в детском саду увидел, на уроках лепки
Там фигурки лепят, запекают, потом ещё раскрашивают :)

Foreststander
Раньше было " цифра vs аналог", сейчас “ИИ vs без него”
Solmik Автор
Да, пожалуй что так )