testsAndMisc/python_pkg/praca_magisterska_video/visualize_q24.py

143 lines
4.1 KiB
Python
Raw Normal View History

2026-02-22 16:57:36 +01:00
"""MoviePy visualization for PYTANIE 24: Object Detection.
Creates animated video demonstrating:
- What detection is (bounding box + class + confidence)
- HOG + SVM pipeline (gradient histogram classify)
- Viola-Jones (Haar features, integral image, cascade)
- R-CNN evolution (R-CNN Fast Faster)
- YOLO one-stage detection
- Building a detector from a classifier
"""
from __future__ import annotations
import logging
2026-02-22 16:57:36 +01:00
import os
os.environ["FFMPEG_BINARY"] = "/usr/bin/ffmpeg"
from _q24_classical import (
_detection_concept,
_hog_svm_demo,
_viola_jones_demo,
2026-02-22 16:57:36 +01:00
)
from _q24_common import FPS, OUTPUT, _logger, _make_header
from _q24_nms_final import (
_detector_from_classifier,
_methods_comparison,
_nms_iou_demo,
)
from _q24_rcnn import (
_rcnn_detailed,
_rcnn_evolution,
_roi_pooling_demo,
)
from _q24_rpn_yolo import _rpn_anchors_demo, _yolo_demo
from _q24_yolo_arch_detr import _detr_demo, _yolo_architecture
from moviepy import VideoClip, concatenate_videoclips
2026-02-22 16:57:36 +01:00
# ── Main ──────────────────────────────────────────────────────────
def main() -> None:
"""Generate the Q24 object detection visualization video."""
sections: list[VideoClip] = []
sections.append(
_make_header(
"Pytanie 24: Detekcja obiektów",
"Problem, metody klasyczne, deep learning",
duration=4.0,
)
)
# What is detection
sections.append(
_make_header("Co to detekcja?", "Lokalizacja (bbox) + klasyfikacja (klasa)")
)
sections.extend(_detection_concept())
# HOG + SVM
sections.append(
_make_header("HOG + SVM (2005)", "Klasyczny pipeline — gradient histogramy")
)
sections.extend(_hog_svm_demo())
# Viola-Jones
sections.append(
_make_header("Viola-Jones (2001)", "Haar features + Integral Image + Cascade")
)
sections.extend(_viola_jones_demo())
# R-CNN evolution (overview)
sections.append(_make_header("Ewolucja R-CNN", "R-CNN → Fast R-CNN → Faster R-CNN"))
sections.extend(_rcnn_evolution())
# R-CNN detailed pipeline
sections.append(
_make_header("R-CNN: krok po kroku", "Selective Search → 2000xCNN → SVM → NMS")
)
sections.extend(_rcnn_detailed())
# ROI Pooling
sections.append(
_make_header("ROI Pooling (Fast R-CNN)", "CNN raz + ROI Pool → 25x szybciej")
)
sections.extend(_roi_pooling_demo())
# RPN + Anchors
sections.append(
_make_header("RPN + Anchor Boxes", "Faster R-CNN: propozycje W SIECI")
)
sections.extend(_rpn_anchors_demo())
# YOLO
sections.append(
_make_header("YOLO (2016)", "You Only Look Once — jednoetapowy detektor")
)
sections.extend(_yolo_demo())
# YOLO architecture detail
sections.append(
_make_header("YOLO: Architektura", "Backbone → Neck → Head → tensor SxS")
)
sections.extend(_yolo_architecture())
# DETR
sections.append(_make_header("DETR (2020)", "Transformer: bez NMS, bez anchorów!"))
sections.extend(_detr_demo())
# NMS + IoU
sections.append(_make_header("NMS + IoU", "Post-processing — usuwanie duplikatów"))
sections.extend(_nms_iou_demo())
# Detector from classifier
sections.append(
_make_header(
"Detektor z klasyfikatora", "3 podejścia: Sliding → Region → Fine-tune"
)
)
sections.extend(_detector_from_classifier())
# Comparison table
sections.append(_methods_comparison())
# Summary
sections.append(
_make_header(
"Podsumowanie",
"Klasyczne: HOG+SVM, Viola-Jones | DL: R-CNN, YOLO, DETR",
duration=4.0,
)
)
final = concatenate_videoclips(sections, method="compose")
final.write_videofile(
OUTPUT, fps=FPS, codec="libx264", audio=False, preset="medium", threads=4
)
_logger.info("Video saved to: %s", OUTPUT)
2026-02-22 16:57:36 +01:00
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
2026-02-22 16:57:36 +01:00
main()