template_matching_DL / docs /ARCHITECTURE.md
levietanh's picture
update gradio
630e498
|
Raw
History Blame Contribute Delete
2.11 kB
# Kiến trúc hệ thống
## Tổng quan
Hệ thống gồm 3 lớp chính:
1. **Template Matching (OpenCV)**: so khớp template với ảnh cần so sánh theo nhiều tỉ lệ và góc xoay.
2. **NMS**: loại bỏ bbox trùng lặp theo IoU.
3. **CNN Verification (tùy chọn)**: cắt crop bbox, resize template tương ứng về cùng kích thước, trích xuất embedding và tính cosine similarity.
## Thành phần
- `template_matcher.py`: class `TemplateMatcher` chứa hàm `find` trả về danh sách bbox và thông tin khớp.
- `models.py`: class `ModelManager` tải model timm, tiền xử lý ảnh, và tính cosine similarity.
- `utils.py`: các hàm hỗ trợ (rotate, resize, NMS, vẽ bbox, JSON).
- `app.py`: giao diện Gradio.
- `main.py`: CLI.
## Pipeline xử lý
1. **Đọc ảnh đầu vào** và danh sách template.
2. **Sinh biến thể template**:
- Xoay theo các góc: 0, 45, 90, 135, 180, 225, 270, 315.
- Scale từ `scale_min` đến `scale_max` theo `scale_steps`.
3. **Template matching** với `cv2.matchTemplate` (TM_CCOEFF_NORMED).
4. **Lấy các điểm >= match_threshold**, tạo bbox, gom tất cả ứng viên.
5. **NMS** để giảm trùng lặp.
6. **CNN (tùy chọn)**:
- Crop theo bbox, resize template tương ứng về cùng kích thước crop.
- Trích xuất embedding bằng model chọn trong UI.
- Tính cosine similarity và lọc theo ngưỡng.
7. **Vẽ bbox** và xuất JSON kết quả.
## JSON output
Mỗi phần tử có các trường:
- `template_name`: tên file template.
- `bbox`: (x, y, w, h).
- `match_score`: điểm template matching.
- `angle`: góc xoay template.
- `scale`: tỉ lệ scale.
- `cosine_similarity`: điểm CNN (có thể null nếu tắt CNN).
## Lưu ý
- Template quá lớn sẽ tự động bị bỏ qua ở tỉ lệ không phù hợp.
- Thời gian xử lý tăng theo số lượng template, góc xoay, và số bước scale.
- CNN giúp lọc nhiều false positive nhưng sẽ làm chậm hệ thống.