Система компьютерного зрения для автоматического обнаружения дефектов паллет.
Подробное описание проекта можно найти тут
Перед разработкой были поставлены следующие цели:
- Снизить нагрузку на специалистов
- Уменьшить аварийность
- Уменьшить срок реагирования на дефектные паллеты
- Снизить затраты на замену дефектных паллет
Алина - ML engineer
Глеб - ML engineer, Data engineer
Юля - Product Manager
Миша - Data engineer
Саша - Backend developer, Devops
Алина и Глеб вели разработку в репозитории модели.
Для начала склонируйте репозиторий:
git clone https://github.com/sadevans/BackWPDD.gitПерейдите в директорию проекта:
cd BackWPDDЧтобы проиницивализировать сабмодуль модели:
git submodule update --init --recursive
Для того, чтобы запустить систему, необходимо поднять докер контейнер. Это может занять некоторое время (примерно 10 минут).
docker compose up -dТеперь загрузились все необходимые библиотеки и пакеты, скачались веса моделей. Система готова к работе.
После этого можно будет перейти на веб-страницу и начать работу.
В скриптах используются следующие переменные среды:
YOLO_MODEL_PATH= 'pallets_plus_defects.pt'BOTTOM_CLASSIF_MODEL_PATH= 'vit_bottom_v2.pth'SIDE_CLASSIF_MODEL_PATH= 'vit_side_v2.pth'PACKET_CLASSIF_MODEL_PATH= 'mobilenet_v2_binary_classification_packet.pth'MODELS_PATH= './model_zoo/'
Переменные среды можно изменить в docker-compose через .env
Короткая демонстрация работы системы
Для того, чтобы протестировать систему, необходимо нажать на кнопку Начать работу. После ее нажатия откроется WebSocket соединение - сервер, контроллер и вебсокет клиент (имитация конвейера) начнут общаться между собой.
Разметка данных:
- LabelMe
- CVAT.ai
Бэкенд написан с использованием следующих интрументов:
- Django
- Reddis
- WebSockets
- Vanilla JS
- HTML + CSS
Разработка модели велась Алиной и Глебом в репозитории модели. Для разработки использовались:
- PyTorch
- Torchvision
- Ultralitics YOLO
- Transformers
- OpenCV, Pillow
В качестве оркестратора выборан Docker-Compose.
-
Распознавание дефектов дерева (Large Scale Image Dataset of Wood Surface Defects)
-
Распознавание паллет (pallet detection Computer Vision Project)
Весь код моделей можно найти в этом репозитории.
- Модель детекции паллетов и дефектов паллетов [YOLO]
- Модель классификации паллетов (в пленке / не в пленке) [MobileNetV2]
- Модель классификации паллетов сбоку (заменить / не заменить) [ViT]
- Модель классификации паллетов снизу (заменить / не заменить) [ViT]
Элементы системы:
- WebSocket клиент
- Сервер - реализован с помощью двух консьюмеров, один общается с веб-страницей, второй с WebSocket клиентом, общение между этими консьюмерами реализовано через Redis
- Веб-страница
- Камеры К1 и К2 - имитированы засчет копирования фото из тестовой папки
- Конвейер - имитирован засчет задержек после основных команд
Описание общения элементов системы:
-
Паллет приходит по конвейеру в зону камеры К1, конвейер останавливается, отправляет сигнал
-
Сигнал остановки конвейера детектируется сторонним клиентом (реализована имитация детекции)
-
Сторонний клиент отправляет на сервер через WebSocket сигнал, что пора сделать фото на камеру К1
-
Сервер принимает этот сигнал и отправляет сигнал камере К1, камера К1 делает фото (реализована имитация - фото копируются из тестовой папки)
-
Когда фото сделаны, сервер дает самому себе команду выполнить инференс пайплайна классификации паллета на этом фото
-
Выполняется инференс пайплайна классификации паллета, ответ по каждому фото отправляетсся сервером на веб-страницу
Также ответ по каждому фото отправляется конвейеру, и если ему приходит после первого фото ответ 1 (паллет годен) - дается сигнал конвейеру отправить паллет в зону камеры К2. Там повторяются шаги 3-5. Если же после первого фото приходит ответ 1 (паллет надо заменить) - отправляется сигнал конвейеру отправить паллет в зону замены.
-
Когда приходит ответ 1 (то есть паллет необходимо заменить) или же когда заинференсены все 5 фото - отправляется ответ по этому паллету на веб страницу, затем отправляется сигнал конвейеру отправить паллет в зону замены. После этого ожидаетсся новый паллет.
Если по всему паллету ответ 0 (паллет годен) - отправляется сигнал конвейеру отправить его на слад. После этого ожидается новый паллет.
Описание алгоритма:
-
Проход паллеты по конвейеру + фото снизу камерой К1
-
Обработка фото + принятие решения о замене
-
Перемещение паллеты на поворотную платформу
Если на шаге 2 принято решение о замене, паллета едет в сторону замены, если нет — продолжается процесс детекции
-
Съемка паллеты камерой К2 с 4-х сторон во время вращения платформы + принятие решения о замене
Фото обрабатываются последовательно, при первом обнаружении дефекта процесс детекции останавливается, паллета едет на замену
Логика общения между различными элементами системы представлена на UML-диаграмме
.
├── wpdd
| ├── wpdd
| | |──core
| | | |──migrations
| | | | └── start_page.css
| | | |
| | | |──__init__.py
| | | |──admin.py
| | | |──apps.py
| | | |──consumers.py
| | | |──models.py
| | | |──routing.py
| | | |──tests.py
| | | |──views.py
| | |
| | |──__init__.py
| | |──asgi.py
| | |──settings.py
| | |──urls.py
| | |──wsgi.py
| |
| ├── templates
| | └── start_page.html
| |
| ├── statiс
| | └── assets
| | | └── start_page.js
| | |
| | └── css
| | └── start_page.css
| ├── photos
| └── manage.py
| └── __init__.py
|
├── fm
| ├──consumers.py
| ├──dockerfile
| ├──requirements.txt
|
├── model
| ├──WPDD
|
├── testfolder
├──.dockerignore
├──.gitignore
├──.gitmodules
├──README.md
├──docker-compose.yml
├──dockerfile
├──requirements.txt
Описание элементов файловой системы:
wpdd- директория, в которой структурирован код сервера.wpdd/templates- html шаблоны.wpdd/static- js файлы и css файлы.wpdd/photos- сюда сохраняются фото с камер и обработанные фото.wpdd/wpdd/core- ключевое приложение django, в нем находятся файлы по умолчанию, необходимые для сборки проектаwpdd/wpdd/core/consumers.py- взаимодействие сервера с WebSocket-клиентом и веб-страницейwpdd/manage.py- ключевой файл запуска сервера.fm- директория, в которой струтктурирован код WebSocket-клиента.fm/consumers.py- файл, в котором реализован WebSocket-клиент.model- это сабмодуль, в котором расположен репозиторий модели.testfolder- директория, из которой копируются файлы для демонстрации, имитируя работу камер, в промышленном варианте не нужна.

