Spaces:
Sleeping
Sleeping
A newer version of the Gradio SDK is available: 6.20.0
Kiến trúc hệ thống
Tổng quan
Hệ thống gồm 3 lớp chính:
- Template Matching (OpenCV): so khớp template với ảnh cần so sánh theo nhiều tỉ lệ và góc xoay.
- NMS: loại bỏ bbox trùng lặp theo IoU.
- 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: classTemplateMatcherchứa hàmfindtrả về danh sách bbox và thông tin khớp.models.py: classModelManagertả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ý
- Đọc ảnh đầu vào và danh sách template.
- Sinh biến thể template:
- Xoay theo các góc: 0, 45, 90, 135, 180, 225, 270, 315.
- Scale từ
scale_minđếnscale_maxtheoscale_steps.
- Template matching với
cv2.matchTemplate(TM_CCOEFF_NORMED). - Lấy các điểm >= match_threshold, tạo bbox, gom tất cả ứng viên.
- NMS để giảm trùng lặp.
- 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.
- 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.