Как я решал проблему на производстве с помощью CV
Я уже писал о проекте CVCounter, но в этот раз захотелось рассказать не только о самом проекте, но и немного о том, с чего всё начиналось и через что пришлось пройти (громко сказано, конечно 😁).
Началось всё достаточно давно, когда на производстве появилась задача считать выпускаемую продукцию.
Конечно, сотрудники и так этим занимались, причём весьма неплохо. Но человеческий фактор никто не отменял, кого-то отвлекли, произошла какая-то нештатная ситуация - и вот уже сбились со счёта. А даже небольшая ошибка может привести к некорректным итоговым данным, а иногда и к дополнительным расходам.
Как я позже узнал от сотрудников, до меня эту задачу уже неоднократно пытались решить механическим способом, но из-за особенностей производственного процесса ничего толком не получилось. Поэтому особой веры в очередную попытку автоматизации у людей уже не было.
Сначала мне предложили попробовать датчики и Arduino. Я тогда с этим не сталкивался, но идея показалась интересной, поэтому взялся разобраться.
Вариант заработал, но довольно быстро обнаружились нюансы. Изделия на конвейере не всегда находятся в одном положении, из-за чего часть подсчётов терялась. Плюс требовалась перенастройка при смене продукта, а так же возникали другие мелочи. Хотя не исключаю, что это просто я не смог сделать всё как следует (возможно слишком самокритично, зато не нужно меня ругать, я и сам отлично с этим справляюсь). 🙂
В поисках решения я подумал, а почему бы не попробовать компьютерное зрение?
Идея, мягко говоря, не вызвала энтузиазма у руководителя ИТ-отдела. Мне сказали, что это пустая трата времени и ничего не получится. Поэтому я решил экспериментировать дома, в свободное время. Реальных производственных данных у меня не было, так что многое приходилось проверять буквально на предположениях и интуиции (почему я редко к ней прислушиваюсь?) 😅.
Первая версия была обычным Windows приложением на Python с использованием Tkinter. Функциональность минимальная, да и с технической частью возникли сложности. Асинхронная работа и передача данных в интерфейс оказались для меня тогда непростой задачей. Распознавание и обновление UI мешали друг другу, а FPS в итоге был где-то 3-5 кадров 😂. Смотреть на это было больно и хотелось всё сжечь. В итоге стало понятно, что нужно менять подход. Я практически полностью переделал проект и перешёл к серверной реализации с управлением через браузер.
Проект удалось внедрить на производстве. И что особенно радует - система до сих пор используется в той самой компании. Причём её вполне успешно настраивают люди, не знакомые с разработкой. 🙂
Сейчас проект заметно вырос. Есть работа с IP-камерами и видеопотоками, настройка зон подсчёта, отслеживание объектов, отчёты, обучение собственных моделей и REST API для интеграции с другими системами. Постепенно хочется развивать его дальше - добавлять аналитику, автоматизацию и новые фитчи (ну, то есть функции 🙂). И не только для производства, так как подобные решения могут пригодиться на складах, в торговле и других сферах.
Исходный код и описание: https://github.com/BespredeL/CVCounter
Буду рад, если кому-то CVCounter пригодится или хотя бы заинтересует. Особенно хотелось бы узнать что-то полезное от людей, которые сталкиваются с подобными задачами на производстве или в других сферах.
Ну и, конечно, я открыт к интересным предложениям о сотрудничестве и работе. 🙂 Было бы здорово найти команду и задачи, где я смог бы в полной мере проявлять свою изобретательность и желание находить решения 😉.
P.S. Мне искренне хотелось бы сказать, что это не реклама, но, пожалуй, это было бы лукавством. 🙂
В первую очередь мне хочется рассказать о проекте, потому что далеко не все могут позволить себе дорогостоящие коммерческие решения или самостоятельную реализацию. Сейчас CVCounter используют несколько небольших компаний, и от них я слышал, что для их задач проект оказался в некоторой степени настоящим спасением.
Ну и, конечно, хотелось бы немного рассказать о себе и, возможно, заинтересовать кого-то как специалист.