Files
chvt-bak/module3/SIMPLE.md
T

3.8 KiB
Raw Blame History

Модуль В: простой вариант

1. Нарезать видео на кадры

Из корня репозитория:

mkdir -p module3/dataset/raw
ffmpeg -i video.mp4 -vf fps=2 module3/dataset/raw/frame_%05d.jpg

Двух кадров в секунду обычно достаточно. Удали смазанные и почти одинаковые кадры. Оставь хотя бы 30–60 нормальных изображений.

2. Разметить локально

Один раз установить X-AnyLabeling в отдельное окружение:

python3 -m venv ~/.venvs/xanylabeling
~/.venvs/xanylabeling/bin/pip install -U uv
~/.venvs/xanylabeling/bin/uv pip install "x-anylabeling-cvhub[cpu]"

Открыть кадры:

~/.venvs/xanylabeling/bin/xanylabeling module3/dataset/raw \
  --labels module3/dataset/classes.txt --autosave

Классы уже лежат в dataset/classes.txt:

hammer
pliers
wrench

Нажми R, обведи каждый видимый инструмент прямоугольником, выбери класс, затем D для следующего кадра. После разметки выбери File -> Export Annotations -> Export YOLO Annotations -> Detection, укажи dataset/classes.txt. В dataset/raw/labels должны появиться TXT-файлы.

Подготовить train/valid/test:

python3 module3/simple_prepare_dataset.py

Скрипт создаст module3/training_new и при повторном запуске пересоздаст только эту папку.

3. Обучить через Ultralytics CLI

cd module3
source .venv/bin/activate
yolo detect train model=yolo11n.pt data=training_new/data.yaml epochs=30 patience=7 imgsz=512 batch=8 device=0 workers=4 project=training_new/runs name=tools
cp training_new/runs/tools/weights/best.pt models/latest.pt

Если не хватает видеопамяти, поменяй только batch=8 на batch=4.

4. Показать работу модели в OpenCV

На тестовых фотографиях:

python simple_module_b.py training_new/test/images

На исходном видео:

python simple_module_b.py /путь/к/video.mp4

На обычной USB-камере:

python simple_module_b.py 0

На изображении будут bounding box, класс и confidence. Результаты также пишутся в logs/simple_module_b.log. Q или Esc закрывает окно.

5. Открыть и закрыть захват

После запуска симулятора и контроллеров:

source /opt/ros/jazzy/setup.bash
source ~/ros2_ws/install/setup.bash
python3 module3/simple_gripper.py

Скрипт сначала открывает захват, по Enter закрывает и ещё по Enter снова открывает. Команды сохраняются в module3/logs/simple_gripper.log.

Если нужно отдельно показать движение всей руки, используй выданный пример:

ros2 launch ar_webots_fms_ros2 moveit_api_example.launch.py

Что сказать эксперту

«Я нарезал видео на кадры, разметил три класса bounding box-ами, разделил датасет на train/valid/test и обучил YOLO11n через Ultralytics CLI. В OpenCV показываю класс, confidence и bounding box. Управление захватом отправляет ROS 2 команду контроллеру RMC1, а события выводятся в терминал и сохраняются в лог».