Skip to content

Latest commit

 

History

48 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yolov5 Coffee Detector 🤖

1) Начало работы

git clone https://github.com/JutsFunFor/yolov5-main
git clone https://github.com/Kashu7100/pytorch-armv7l

2) Установка зависимостей

Завариваем ☕ и прописываем в консоль:

cd //home/pi/yolov5-main
chmod +x setup_libs.sh
chmod +x yolov5-reload.sh
sh setup_libs.sh
cd //home/pi
unzip pytorch-armv7l.zip
rm pytorch-armv7l.zip
export PATH="$HOME/.local/bin:$PATH"
cd //home/pi/pytorch-armv7l
pip3 install torch-1.7.0a0-cp37-cp37m-linux_armv7l.whl
pip3 install torchvision-0.8.0a0+45f960c-cp37-cp37m-linux_armv7l.whl
cd ..

3) Установка PostgreSQL (опционально)

sudo su postgres
createuser pi -P --interactive

Вводим пароль: 3vn4ssps Shall the new role be a superuser? (y/n) y

4) Проверка работоспособности

Выполнение этих программ не должно вызывать ошибку 🙏

cd //home/pi/yolov5-main
python3 inference.py
python3 yolov5_client.py

⚠️В настройках роутера устанавливаем статический IP-адрес камеры. По умолчанию, адрес 192.168.1.22 закреплен за cm-камерой

Выставляем inference-параметры в файле конфигурации config.json

Screenshot 2022-09-12 at 13 47 09

modelPath - название модели, если модель в другом расположении, то можно указать путь

rstpAddress - адрес rtsp сервера. rtsp://login:password:IP:port

threshold - порог предикта

iouThreshold - порог iou метрики

latteMenuItemId - параметр, необходимый для предобработки латте и применения CLAHE

natsUrl - дефолтный адрес

sendResultsTopic - топик для отправления результатов детекции

dbname, usr, pwd, host - опционально (PostgreSQL). Нужно раскоментить строки (28-38) & (59-60) в yolov5_client.py для записи в БД.

Выставляем crop-параметры в файле конфигурации config.json

Screenshot 2022-09-12 at 13 46 33

pixelCoeff - параметр, отображающий количетсво мм в одном пикселе. Для разных комплексов и групп он разный, вычисляется однократно эмпирически при отладке.

clipLimit - параметр, необходимый для предобработки изображения (CLAHE), содержащего класс "Латте". Для разных комплексов и групп он разный, вычисляется эмпирически при отладке в зависимости от условий освещения.

Параметры yCropMin, yCropMax, xCropMin, xCropMax - параметры, определяющие границы изображения на входе в детектор.

Установим эти параметры. Выбираем изображение с камеры. При этом, разрешение загружаемого изображения должно равняться разрешению изображению, снятому с камеры посредством скрипта, поскольку Fluent & Clear изображения из клиента Reolink могут давать другие разрешения.

Для этого смотрим разрешение в настройках камеры или произведем пинг камеры внутри комплекса (Только при условии, что установлен yolov5.service - смотри 5 пункт) с помощью скрипта camera-ping.py

cd //home/pi/yolov5-main
python3 camera-ping.py

Screenshot 2022-09-12 at 14 21 19

Сохраняем изображение в клиенте Reolink ➡️ Resize ➡️ Crop

Resize - https://www.iloveimg.com/resize-image

Crop - https://www.iloveimg.com/crop-image

Screenshot 2022-09-12 at 14 53 28

Пример для nozzleId0: Screenshot 2022-09-12 at 15 03 20

yCropMin = 653

yCropMax = 653 + 643 = 1296

xCropMin = 320

xCropMax = 320 + 493 = 813

🔞Коэффициенты зависят от положения камеры ➡️ меняем положение камеры = меняем коэффициенты

Пути сохранения сырых изображений, предиктов, результатов соответственно:

rawImagesSavePath

predictionImagesSavePath

saveJsonResultsPath

Для правильной работы сервиса необходимо проверить путь, указанный для выполнения программ.

nano yolov5.service

Screenshot 2022-09-12 at 13 31 12

Обращаем внимание на WorkingDerictory - путь, в котором лежат файлы inference.py & yolov5_client.py

5) Установка и запуск сервиса 🚀

sudo mv yolov5.service /etc/systemd/system

Можно запустить в командной строке

cd //home/pi/yolov5-main
sh yolov5-reload.sh 

или выполнить следующие команды:

sudo systemctl daemon-reload
sudo systemctl stop yolov5.service
sudo systemctl start yolov5.service
sudo systemctl status yolov5.service
sudo journalctl -u yolov5.service -b -e

6) Common usage

При запуске сервиса из пункта 5 скрипт начинает слушать NATS topic, указанный в файле конфигурации. При поступлении сигнала о конце приготовления напитка и nozzleID - скрипт снимает изображение, обрезает согласно nozzleID и кормит его на вход нейросети. Формируется ответ, который сохраняется в файл saveJsonResultsPath, указанный в конфигурации. Помимо этого, сохраняются как сырые изображения, так и изображения с предиктом объектов - rawImagesSavePath, predictionImagesSavePath. Формат ответа выглядит следующим образом:

"{'Detection': {'Coffee': {'Xmax': '389.0', 'Ymax': '138.0', 'Ymin': '272.0', 'Score': '0.95'},
'CupTop': {'Xmax': '459.0', 'Ymax': '26.0', 'Ymin': '290.0', 'Score': '0.97'}},
'OrderId': '01G5757AKN9KVXABD1NX7AZSVG',
'OrderNumber': '463',
'NozzleId': '1',
'MenuItemId': '01G3GVZX2YW4WXEJNG2P1ZT3G1',
'DateTime': '2022-06-10 18:56:59',
'Capture_duration': '1.94',
'Inference_duration': '2.74',
'Save_img_duration': '0.08',
'Total_time': '4.76',
'RealDistance': '26.53'}"

7) Docker Support

Загрузка образа

sudo docker pull alekseyml/yolov5

Настройка конфигуационного файла аналогична действиям, описанным в шаге 4). Для изменения конфигурационного файла:

sudo docker run -it --privileged alekseyml/yolov5 bash

Это запустит контейнер и позволит изменить настройки конфигурационного файла. После изменения файла нужно выйти из интерактивного режима прописав команду exit Для того чтобы применить изменения прописываем:

sudo docker ps -a

Копируем ID контейнера, из которого только что вышли и далее:

sudo docker commit CONTAINER_ID alekseyml/yolov5:latest

После этого можно запускать контейнер в рабочем режиме:

sudo docker run -it -d -p 554:554 --privileged -v /home/pi/YOUR_PROJECT_FOLDER_FOR_IMGS:/app/imgs alekseyml/yolov5:latest python3 yolov5_service.py

Изображения сохраняются как на распберри(в директории /home/pi/YOUR_PROJECT_FOLDER_FOR_IMGS), так и внутри контейнера (/app/imgs).

About

coffee detector

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages