- Update ASR, face, OCR, pose processors - Add release pre-flight check script - Add synonym generation, chunk processing scripts - Add face recognition, stamp search utilities
81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
#!/opt/homebrew/bin/python3.11
|
|
"""
|
|
Crop stamp from magnifying glass scene at highest quality
|
|
"""
|
|
|
|
import cv2
|
|
import os
|
|
|
|
BASE_DIR = "output/384b0ff44aaaa1f1/stamp_closeup"
|
|
OUTPUT_DIR = "output/384b0ff44aaaa1f1/stamp_closeup/cropped"
|
|
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
|
|
|
# Bounding boxes from OWL-ViT detection
|
|
# Format: [x1, y1, x2, y2]
|
|
DETECTIONS = {
|
|
"5733": [519, 147, 1383, 931], # Best frame
|
|
"5734": [516, 147, 1384, 936],
|
|
"5735": [528, 151, 1381, 936],
|
|
}
|
|
|
|
# Also extract a wider area to see context
|
|
WIDER_MARGIN = 100
|
|
|
|
for sec, bbox in DETECTIONS.items():
|
|
frame_path = os.path.join(BASE_DIR, f"frame_{sec}s.jpg")
|
|
img = cv2.imread(frame_path)
|
|
if img is None:
|
|
continue
|
|
|
|
x1, y1, x2, y2 = bbox
|
|
|
|
# 1. Crop exact detection area
|
|
crop = img[y1:y2, x1:x2]
|
|
if crop.size > 0:
|
|
cv2.imwrite(os.path.join(OUTPUT_DIR, f"stamp_{sec}s_crop.jpg"), crop)
|
|
print(f" 📍 {sec}s: Saved crop ({crop.shape[1]}x{crop.shape[0]})")
|
|
|
|
# 2. Crop wider area with margin
|
|
wx1 = max(0, x1 - WIDER_MARGIN)
|
|
wy1 = max(0, y1 - WIDER_MARGIN)
|
|
wx2 = min(img.shape[1], x2 + WIDER_MARGIN)
|
|
wy2 = min(img.shape[0], y2 + WIDER_MARGIN)
|
|
wide_crop = img[wy1:wy2, wx1:wx2]
|
|
if wide_crop.size > 0:
|
|
cv2.imwrite(os.path.join(OUTPUT_DIR, f"stamp_{sec}s_wide.jpg"), wide_crop)
|
|
print(
|
|
f" 📍 {sec}s: Saved wide crop ({wide_crop.shape[1]}x{wide_crop.shape[0]})"
|
|
)
|
|
|
|
# 3. Annotate full frame with green box
|
|
annotated = img.copy()
|
|
cv2.rectangle(annotated, (x1, y1), (x2, y2), (0, 255, 0), 4)
|
|
cv2.putText(
|
|
annotated,
|
|
"STAMP AREA",
|
|
(x1, y1 - 15),
|
|
cv2.FONT_HERSHEY_SIMPLEX,
|
|
1.0,
|
|
(0, 255, 0),
|
|
3,
|
|
)
|
|
cv2.imwrite(os.path.join(OUTPUT_DIR, f"annotated_{sec}s.jpg"), annotated)
|
|
|
|
# 4. Draw on the original HQ frame too
|
|
hq_path = os.path.join(BASE_DIR, f"frame_{sec}s.jpg")
|
|
hq_img = cv2.imread(hq_path)
|
|
if hq_img is not None:
|
|
cv2.rectangle(hq_img, (x1, y1), (x2, y2), (0, 255, 0), 4)
|
|
cv2.putText(
|
|
hq_img,
|
|
"STAMP",
|
|
(x1, y1 - 15),
|
|
cv2.FONT_HERSHEY_SIMPLEX,
|
|
1.0,
|
|
(0, 255, 0),
|
|
3,
|
|
)
|
|
cv2.imwrite(os.path.join(OUTPUT_DIR, f"full_annotated_{sec}s.jpg"), hq_img)
|
|
|
|
print(f"\n🏁 Done. Check {OUTPUT_DIR}")
|