{"id":15132546,"url":"https://github.com/sadevans/backwpdd","last_synced_at":"2026-01-19T22:00:51.136Z","repository":{"id":255821909,"uuid":"852977427","full_name":"sadevans/BackWPDD","owner":"sadevans","description":"Система компьютерного зрения для автоматического обнаружения дефектов паллет","archived":false,"fork":false,"pushed_at":"2024-09-17T08:28:16.000Z","size":30313,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-05T21:44:42.491Z","etag":null,"topics":["asynchronous","computer-vision","django","docker","js","redis","websockets"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sadevans.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-05T18:59:03.000Z","updated_at":"2024-09-17T08:28:19.000Z","dependencies_parsed_at":"2024-12-19T04:41:31.928Z","dependency_job_id":null,"html_url":"https://github.com/sadevans/BackWPDD","commit_stats":{"total_commits":35,"total_committers":1,"mean_commits":35.0,"dds":0.0,"last_synced_commit":"95ab7b027e09eea3540930bccc0ce2d6dd2e742d"},"previous_names":["sadevans/backwpdd"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sadevans/BackWPDD","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sadevans%2FBackWPDD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sadevans%2FBackWPDD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sadevans%2FBackWPDD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sadevans%2FBackWPDD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sadevans","download_url":"https://codeload.github.com/sadevans/BackWPDD/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sadevans%2FBackWPDD/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28587029,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T20:45:59.482Z","status":"ssl_error","status_checked_at":"2026-01-19T20:45:41.500Z","response_time":67,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asynchronous","computer-vision","django","docker","js","redis","websockets"],"created_at":"2024-09-26T04:20:42.899Z","updated_at":"2026-01-19T22:00:51.105Z","avatar_url":"https://github.com/sadevans.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WPDD System: Wood Pallete Defect Detection System\n\nСистема компьютерного зрения для автоматического обнаружения дефектов паллет.\n\nПодробное описание проекта можно найти [тут](https://docs.google.com/document/d/1KbKw75N9EqUMExl1d0_bC0I7z0En-RF6bEThfV5-RJs/edit)\n\n### Цель проекта\nПеред разработкой были поставлены следующие цели:\n\n- Снизить нагрузку на специалистов\n- Уменьшить аварийность\n- Уменьшить срок реагирования на дефектные паллеты\n- Снизить затраты на замену дефектных паллет\n\n### Распределение ролей\n[Алина](https://github.com/Firally) - `ML engineer`\n\n[Глеб](https://github.com/onoregleb) - `ML engineer`, `Data engineer`\n\n[Юля](https://github.com/YuliaOv22) - `Product Manager`\n\n[Миша](https://github.com/justroflangit) - `Data engineer`\n\n[Саша](https://github.com/sadevans) - `Backend developer`, `Devops`\n\nАлина и Глеб вели разработку в [репозитории модели](https://github.com/sadevans/WPDD).\n\n## Установка\nДля начала склонируйте репозиторий:\n```shell\ngit clone https://github.com/sadevans/BackWPDD.git\n```\n\nПерейдите в директорию проекта:\n```shell\ncd BackWPDD\n```\nЧтобы проиницивализировать сабмодуль модели:\n```\ngit submodule update --init --recursive\n```\n\nДля того, чтобы запустить систему, необходимо поднять докер контейнер. Это может занять некоторое время (примерно 10 минут).\n\n```shell\ndocker compose up -d\n```\nТеперь загрузились все необходимые библиотеки и пакеты, скачались веса моделей. Система готова к работе.\n\nПосле этого можно будет перейти на веб-страницу и начать работу.\n\n### Пререквизиты\nВ скриптах используются следующие переменные среды:\n- `YOLO_MODEL_PATH` = 'pallets_plus_defects.pt'\n- `BOTTOM_CLASSIF_MODEL_PATH` = 'vit_bottom_v2.pth'\n- `SIDE_CLASSIF_MODEL_PATH` = 'vit_side_v2.pth'\n- `PACKET_CLASSIF_MODEL_PATH` = 'mobilenet_v2_binary_classification_packet.pth'\n- `MODELS_PATH` = './model_zoo/'\n\nПеременные среды можно изменить в docker-compose через .env\n\n\n## Использование\n\n[Короткая демонстрация работы системы](https://drive.google.com/file/d/1ZA9UE5zi6_PlCiE3s04x5oClytjAvFi7/view?usp=sharing)\n\n\n\nДля того, чтобы протестировать систему, необходимо нажать на кнопку `Начать работу`. После ее нажатия откроется WebSocket соединение - сервер, контроллер и вебсокет клиент (имитация конвейера) начнут общаться между собой.\n\n## Разработка\n\n### Используемые интрументы\n\nРазметка данных:\n- LabelMe\n- CVAT.ai\n\nБэкенд написан с использованием следующих интрументов:\n- Django\n- Reddis\n- WebSockets\n- Vanilla JS\n- HTML + CSS\n\nРазработка модели велась Алиной и Глебом в [репозитории модели](https://github.com/sadevans/WPDD). Для разработки использовались:\n- PyTorch\n- Torchvision\n- Ultralitics YOLO\n- Transformers\n- OpenCV, Pillow\n\nВ качестве оркестратора выборан Docker-Compose.\n\n## Используемые датасеты\n- [Распознавание дефектов дерева (Large Scale Image Dataset of Wood Surface Defects)](https://www.kaggle.com/datasets/nomihsa965/large-scale-image-dataset-of-wood-surface-defects)\n\n- [Распознавание паллет (pallet detection Computer Vision Project)](https://universe.roboflow.com/sundharesan-kumaresan/pallet-detection-ith6b)\n- [Распознавание паллет (Computer Vision Project)](https://universe.roboflow.com/palette/x-nbtav)\n- [Самостоятельно собранный датасет + разметка](https://drive.google.com/drive/folders/1Z_Monpry0OlOtElsb2btXsvmj8nBJ3dB)\n\n\n## Используемые модели\n\nВесь код моделей можно найти в [этом репозитории](https://github.com/sadevans/WPDD).\n\n- [Модель детекции паллетов и дефектов паллетов [YOLO]](https://drive.google.com/file/d/1XsLvJ6dbJ4yyBbTFzl66V1UQbWQCSlKt/view?usp=sharing)\n- [Модель классификации паллетов (в пленке / не в пленке) [MobileNetV2]](https://drive.google.com/file/d/1ZVC8dSctN0Y13qOBmPS7XZXf268Ze-FU/view?usp=sharing)\n- [Модель классификации паллетов сбоку (заменить / не заменить) [ViT]](https://drive.google.com/file/d/1US2OXAzxvxiCNdqhHjbYOpCFdihkOqPj/view?usp=sharing)\n- [Модель классификации паллетов снизу (заменить / не заменить) [ViT]](https://drive.google.com/file/d/1hRHMrUeWchxfvrNhMT_qEDqU1OLNAlHO/view?usp=sharing)\n\n\n## Схема разработанной системы\n![schema](https://github.com/user-attachments/assets/9cbf4913-8f0a-4ca4-8162-1851ece1a771)\n\nЭлементы системы:\n- WebSocket клиент\n- Сервер - реализован с помощью двух консьюмеров, один общается с веб-страницей, второй с WebSocket клиентом, общение между этими консьюмерами реализовано через Redis\n- Веб-страница\n- Камеры К1 и К2 - имитированы засчет копирования фото из тестовой папки\n- Конвейер - имитирован засчет задержек после основных команд\n\nОписание общения элементов системы:\n1. Паллет приходит по конвейеру в зону камеры К1, конвейер останавливается, отправляет сигнал\n2. Сигнал остановки конвейера детектируется сторонним клиентом (реализована имитация детекции)\n3. Сторонний клиент отправляет на сервер через WebSocket сигнал, что пора сделать фото на камеру К1\n4. Сервер принимает этот сигнал и отправляет сигнал камере К1, камера К1 делает фото (реализована имитация - фото копируются из тестовой папки)\n5. Когда фото сделаны, сервер дает самому себе команду выполнить инференс пайплайна классификации паллета на этом фото\n6. Выполняется инференс пайплайна классификации паллета, ответ по каждому фото отправляетсся сервером на веб-страницу\n\n    _Также ответ по каждому фото отправляется конвейеру, и если ему приходит после первого фото ответ 1 (паллет годен) - дается сигнал конвейеру отправить паллет в зону камеры К2. Там повторяются шаги 3-5. Если же после первого фото приходит ответ 1 (паллет надо заменить) - отправляется сигнал конвейеру отправить паллет в зону замены._\n\n7. Когда приходит ответ 1 (то есть паллет необходимо заменить) или же когда заинференсены все 5 фото - отправляется ответ по этому паллету на веб страницу, затем отправляется сигнал конвейеру отправить паллет в зону замены. После этого ожидаетсся новый паллет.\n\n    _Если по всему паллету ответ 0 (паллет годен) - отправляется сигнал конвейеру отправить его на слад. После этого ожидается новый паллет._\n\n\nОписание алгоритма:\n\n1. Проход паллеты по конвейеру + фото снизу камерой К1\n2. Обработка фото + принятие решения о замене \n3. Перемещение паллеты на поворотную платформу\n\n    _Если на шаге 2 принято решение о замене, паллета едет в сторону замены, если нет — продолжается процесс детекции_\n\n5. Съемка паллеты камерой К2 с 4-х сторон во время вращения платформы + принятие решения о замене \n\n    _Фото обрабатываются последовательно, при первом обнаружении дефекта процесс детекции останавливается, паллета едет на замену_\n\n### UML-диаграмма последовательности\nЛогика общения между различными элементами системы представлена на UML-диаграмме\n\n![uml](https://github.com/user-attachments/assets/cebc4fff-ac22-4932-b516-a1994f6e50e7)\n\n\n### Файловая архитектура проекта\n  ```\n  .\n  ├── wpdd\n  |   ├── wpdd\n  |   |   |──core\n  |   |   |  |──migrations\n  |   |   |  |  └── start_page.css\n  |   |   |  |\n  |   |   |  |──__init__.py\n  |   |   |  |──admin.py\n  |   |   |  |──apps.py\n  |   |   |  |──consumers.py\n  |   |   |  |──models.py\n  |   |   |  |──routing.py\n  |   |   |  |──tests.py\n  |   |   |  |──views.py\n  |   |   |\n  |   |   |──__init__.py\n  |   |   |──asgi.py\n  |   |   |──settings.py\n  |   |   |──urls.py\n  |   |   |──wsgi.py\n  |   |\n  |   ├── templates\n  |   |   └── start_page.html\n  |   |\n  |   ├── statiс\n  |   |   └── assets\n  |   |   |   └── start_page.js\n  |   |   |\n  |   |   └── css\n  |   |       └── start_page.css\n  |   ├── photos\n  |   └── manage.py\n  |   └── __init__.py\n  |\n  ├── fm\n  |   ├──consumers.py\n  |   ├──dockerfile\n  |   ├──requirements.txt\n  |\n  ├── model\n  |   ├──WPDD\n  |\n  ├── testfolder\n  ├──.dockerignore\n  ├──.gitignore\n  ├──.gitmodules\n  ├──README.md\n  ├──docker-compose.yml\n  ├──dockerfile\n  ├──requirements.txt\n  ```\nОписание элементов файловой системы:\n- `wpdd` - директория, в которой структурирован код сервера.\n- `wpdd/templates` - html шаблоны.\n- `wpdd/static` - js файлы и css файлы.\n- `wpdd/photos` - сюда сохраняются фото с камер и обработанные фото.\n- `wpdd/wpdd/core` - ключевое приложение django, в нем находятся файлы по умолчанию, необходимые для сборки проекта\n- `wpdd/wpdd/core/consumers.py` - взаимодействие сервера с WebSocket-клиентом и веб-страницей\n- `wpdd/manage.py` - ключевой файл запуска сервера.\n- `fm` - директория, в которой струтктурирован код WebSocket-клиента.\n- `fm/consumers.py` - файл, в котором реализован WebSocket-клиент.\n- `model` - это сабмодуль, в котором расположен репозиторий [модели](https://github.com/sadevans/WPDD).\n- `testfolder` - директория, из которой копируются файлы для демонстрации, имитируя работу камер, в промышленном варианте не нужна.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsadevans%2Fbackwpdd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsadevans%2Fbackwpdd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsadevans%2Fbackwpdd/lists"}