Skip to content

Repository files navigation

Defect Detector

Система для обнаружения дефектов на поверхностях в реальном времени. Работает с камерой, видеофайлами и изображениями через веб-интерфейс.

Принцип работы

Дефекты на поверхности (царапины, трещины, стыки) создают резкие перепады яркости. Система обнаруживает их через анализ L-канала (яркость) в цветовом пространстве LAB:

Кадр → CLAHE-улучшение → L-канал → Gaussian Blur → Canny Edges → Dilate → фильтр по длине контура → дефект
  • CLAHE нормализует освещение перед анализом
  • Gaussian Blur подавляет текстуру поверхности (зерно дерева, риски металла)
  • Canny находит резкие границы по яркости
  • Фильтр по длине контура отсекает короткие текстурные рёбра — остаются только протяжённые линии стыков и трещин

Архитектура

Проект разбит на независимые микросервисы, общающиеся через queue.Queue:

CaptureService ──frame_queue──► DetectorService ──result_queue──► WebFrontend
                                      ▲                                │
                                 params dict                    FastAPI сервер
                                 (params_lock)            GET /video/defects  (MJPEG)
                                      │                   GET /video/light    (MJPEG)
                               POST /params  ◄────────────────────────┘
Файл Ответственность
main.py Точка входа, запуск потоков
capture_service.py Захват видео/изображений, CLAHE, зум (центральный кроп), пауза
detector_service.py Canny-детекция, классификация дефектов
web_frontend.py FastAPI сервер, MJPEG-стримы, REST API
static/index.html Веб-интерфейс (два видео + слайдеры)

Установка и запуск

Локально

git clone https://github.com/redizga/defect-detector.git
cd defect-detector
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python main.py

Открыть браузер: http://localhost:8000

Docker

docker compose up -d app

Веб-интерфейс

Два видеопотока в реальном времени:

Окно Содержимое
Дефекты Исходный кадр с зелёным контуром объекта и красными рамками дефектов
Световое пространство L-канал (яркость) + цветовая маска: синие рёбра Canny, красные зоны дефектов

Источники

  • Камера — автоматическое сканирование и выбор из списка, поддержка iPhone через Continuity Camera
  • Видеофайл — загрузка через 📁 Файл, поддержка mp4, avi, mov и других форматов
  • Изображение — загрузка jpg, png, bmp, webp, tiff; обрабатывается как статический кадр

Управление видеофайлом

Элемент Описание
⏸ / ▶ Пауза / возобновление
Скруббер Перемотка к нужной позиции
Скорость 0.1× – 3.0× (слайдер)

Снэпшот

Кнопка ⏸ Снэпшот замораживает оба видеопотока — удобно для детального изучения кадра.

Слайдеры

Камера:

Параметр Диапазон Описание
Zoom 100–500 Зум через центральный кроп. 100 = 1×, 500 = 5×

Детектор:

Параметр Диапазон Описание
Blur 1–21 Размытие перед Canny — подавляет текстуру
Canny Low 0–255 Нижний порог Canny (слабые края)
Canny High 0–255 Верхний порог Canny (сильные края)
Dilate 1–15 Дилатация рёбер — соединяет прерывистые линии
Min Perim 0–2000 Мин. длина контура (px) — главный фильтр дефектов
Min Area 0–5000 Мин. площадь зоны дефекта

Рекомендуемые настройки

Для деревянных поверхностей / стыков досок:

  • Blur = 7, Canny Low = 15, Canny High = 50
  • Поднимать Min Perim пока не останется только линия стыка

Для металлических поверхностей:

  • Blur = 3–5, Canny Low = 30, Canny High = 90

REST API

Метод Путь Описание
GET / Веб-интерфейс
GET /video/defects MJPEG-поток с метками дефектов
GET /video/light MJPEG-поток светового пространства
POST /params Обновить параметр {"name": "Blur", "value": 7}
GET /status Статус: дефекты, пауза, позиция воспроизведения
GET /trackbars Описание слайдеров детектора
GET /trackbars/camera Описание слайдеров камеры
GET /sources Список доступных камер
POST /source Переключить источник {"source": 0}
POST /upload Загрузить видеофайл или изображение
POST /seek Перемотать {"position": 0.0–1.0}
POST /pause Переключить паузу
POST /snapshot Переключить заморозку кадра

Зависимости

opencv-python    >= 4.8.0
numpy            >= 1.24.0
fastapi          >= 0.110.0
uvicorn          >= 0.27.0
python-multipart >= 0.0.9

Требуется Python 3.7+.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages