Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -88,10 +88,16 @@ def homography_demo(flat_file, persp_file, json_file):
|
|
| 88 |
|
| 89 |
for method in methods:
|
| 90 |
kp1, kp2, good_matches = detect_and_match(flat_gray, persp_gray, method=method)
|
|
|
|
|
|
|
|
|
|
| 91 |
src_pts = np.float32([kp1[m.queryIdx].pt for m in good_matches]).reshape(-1,1,2)
|
| 92 |
dst_pts = np.float32([kp2[m.trainIdx].pt for m in good_matches]).reshape(-1,1,2)
|
| 93 |
H, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
|
| 94 |
|
|
|
|
|
|
|
|
|
|
| 95 |
roi_corners_flat = get_rotated_rect_corners(roi_x, roi_y, roi_w, roi_h, roi_rot_deg)
|
| 96 |
roi_corners_persp = cv2.perspectiveTransform(roi_corners_flat.reshape(-1,1,2), H).reshape(-1,2)
|
| 97 |
|
|
@@ -100,7 +106,7 @@ def homography_demo(flat_file, persp_file, json_file):
|
|
| 100 |
for (px, py) in roi_corners_persp:
|
| 101 |
cv2.circle(persp_debug, (int(px), int(py)), 5, (255,0,0), -1)
|
| 102 |
|
| 103 |
-
outputs.append(cv2.cvtColor(persp_debug, cv2.COLOR_BGR2RGB))
|
| 104 |
|
| 105 |
return outputs
|
| 106 |
|
|
@@ -111,7 +117,10 @@ with gr.Blocks() as demo:
|
|
| 111 |
flat_input = gr.File(label="Upload Flat Image", file_types=[".jpg",".png",".jpeg"])
|
| 112 |
persp_input = gr.File(label="Upload Perspective Image", file_types=[".jpg",".png",".jpeg"])
|
| 113 |
json_input = gr.File(label="Upload mockup.json", file_types=[".json"])
|
| 114 |
-
|
|
|
|
|
|
|
|
|
|
| 115 |
run_btn = gr.Button("Run Homography")
|
| 116 |
run_btn.click(homography_demo, inputs=[flat_input, persp_input, json_input], outputs=output_gallery)
|
| 117 |
|
|
|
|
| 88 |
|
| 89 |
for method in methods:
|
| 90 |
kp1, kp2, good_matches = detect_and_match(flat_gray, persp_gray, method=method)
|
| 91 |
+
if kp1 is None or kp2 is None or len(good_matches) < 4:
|
| 92 |
+
continue
|
| 93 |
+
|
| 94 |
src_pts = np.float32([kp1[m.queryIdx].pt for m in good_matches]).reshape(-1,1,2)
|
| 95 |
dst_pts = np.float32([kp2[m.trainIdx].pt for m in good_matches]).reshape(-1,1,2)
|
| 96 |
H, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
|
| 97 |
|
| 98 |
+
if H is None:
|
| 99 |
+
continue
|
| 100 |
+
|
| 101 |
roi_corners_flat = get_rotated_rect_corners(roi_x, roi_y, roi_w, roi_h, roi_rot_deg)
|
| 102 |
roi_corners_persp = cv2.perspectiveTransform(roi_corners_flat.reshape(-1,1,2), H).reshape(-1,2)
|
| 103 |
|
|
|
|
| 106 |
for (px, py) in roi_corners_persp:
|
| 107 |
cv2.circle(persp_debug, (int(px), int(py)), 5, (255,0,0), -1)
|
| 108 |
|
| 109 |
+
outputs.append((f"{method} Result", cv2.cvtColor(persp_debug, cv2.COLOR_BGR2RGB)))
|
| 110 |
|
| 111 |
return outputs
|
| 112 |
|
|
|
|
| 117 |
flat_input = gr.File(label="Upload Flat Image", file_types=[".jpg",".png",".jpeg"])
|
| 118 |
persp_input = gr.File(label="Upload Perspective Image", file_types=[".jpg",".png",".jpeg"])
|
| 119 |
json_input = gr.File(label="Upload mockup.json", file_types=[".json"])
|
| 120 |
+
with gr.Row():
|
| 121 |
+
gr.Image(type="filepath", label="Flat Image Preview").style(height=200)
|
| 122 |
+
gr.Image(type="filepath", label="Perspective Image Preview").style(height=200)
|
| 123 |
+
output_gallery = gr.Gallery(label="Perspective ROI Results", show_label=True, columns=2, height=600)
|
| 124 |
run_btn = gr.Button("Run Homography")
|
| 125 |
run_btn.click(homography_demo, inputs=[flat_input, persp_input, json_input], outputs=output_gallery)
|
| 126 |
|