Files
chvt-bak/module3/SIMPLE.md
T

113 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Модуль В: простой вариант
## 1. Нарезать видео на кадры
Из корня репозитория:
```bash
mkdir -p module3/dataset/raw
ffmpeg -i video.mp4 -vf fps=2 module3/dataset/raw/frame_%05d.jpg
```
Двух кадров в секунду обычно достаточно. Удали смазанные и почти одинаковые
кадры. Оставь хотя бы 30–60 нормальных изображений.
## 2. Разметить локально
Один раз установить X-AnyLabeling в отдельное окружение:
```bash
python3 -m venv ~/.venvs/xanylabeling
~/.venvs/xanylabeling/bin/pip install -U uv
~/.venvs/xanylabeling/bin/uv pip install "x-anylabeling-cvhub[cpu]"
```
Открыть кадры:
```bash
~/.venvs/xanylabeling/bin/xanylabeling module3/dataset/raw \
--labels module3/dataset/classes.txt --autosave
```
Классы уже лежат в `dataset/classes.txt`:
```text
hammer
pliers
wrench
```
Нажми `R`, обведи каждый видимый инструмент прямоугольником, выбери класс,
затем `D` для следующего кадра. После разметки выбери `File -> Export
Annotations -> Export YOLO Annotations -> Detection`, укажи
`dataset/classes.txt`. В `dataset/raw/labels` должны появиться TXT-файлы.
Подготовить train/valid/test:
```bash
python3 module3/simple_prepare_dataset.py
```
Скрипт создаст `module3/training_new` и при повторном запуске пересоздаст только
эту папку.
## 3. Обучить через Ultralytics CLI
```bash
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
На тестовых фотографиях:
```bash
python simple_module_b.py training_new/test/images
```
На исходном видео:
```bash
python simple_module_b.py /путь/к/video.mp4
```
На обычной USB-камере:
```bash
python simple_module_b.py 0
```
На изображении будут bounding box, класс и confidence. Результаты также пишутся
в `logs/simple_module_b.log`. `Q` или `Esc` закрывает окно.
## 5. Открыть и закрыть захват
После запуска симулятора и контроллеров:
```bash
source /opt/ros/jazzy/setup.bash
source ~/ros2_ws/install/setup.bash
python3 module3/simple_gripper.py
```
Скрипт сначала открывает захват, по `Enter` закрывает и ещё по `Enter` снова
открывает. Команды сохраняются в `module3/logs/simple_gripper.log`.
Если нужно отдельно показать движение всей руки, используй выданный пример:
```bash
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, а события выводятся в терминал и сохраняются в лог».