This commit is contained in:
HuangHai
2026-01-17 07:55:20 +08:00
parent e8eda77cb1
commit b12c9de620
6 changed files with 63 additions and 37 deletions

View File

@@ -877,17 +877,57 @@ def crop_cards_from_image(img_path, output_dir=None, save_debug=True):
# 准备 _vl.jpg (只画框,不画红点)
vl_img = img.copy()
# 预先在整张图上标记“兔子广告潜在区域”的蓝色矩形,方便标定
try:
rabbit_x1 = int(w * 0.04)
rabbit_x2 = int(w * 0.96)
rabbit_y1 = int(h * 0.74)
rabbit_y2 = int(h * 0.86)
cv2.rectangle(debug_img, (rabbit_x1, rabbit_y1), (rabbit_x2, rabbit_y2), (255, 0, 0), 3)
cv2.rectangle(vl_img, (rabbit_x1, rabbit_y1), (rabbit_x2, rabbit_y2), (255, 0, 0), 3)
logger.info(f" 标记兔子广告蓝色区域: X={rabbit_x1}-{rabbit_x2}, Y={rabbit_y1}-{rabbit_y2}")
except Exception as e:
logger.warning(f"标记兔子广告蓝色区域失败: {e}")
# 预先计算“列表浮动区域”的蓝色矩形坐标
rabbit_x1 = int(w * 0.04)
rabbit_x2 = int(w * 0.96)
rabbit_y1 = int(h * 0.74)
rabbit_y2 = int(h * 0.86)
# 在调试图上画出蓝色矩形
try:
cv2.rectangle(debug_img, (rabbit_x1, rabbit_y1), (rabbit_x2, rabbit_y2), (255, 0, 0), 3)
cv2.rectangle(vl_img, (rabbit_x1, rabbit_y1), (rabbit_x2, rabbit_y2), (255, 0, 0), 3)
logger.info(f" 标记列表浮动蓝色区域: X={rabbit_x1}-{rabbit_x2}, Y={rabbit_y1}-{rabbit_y2}")
except Exception as e:
logger.warning(f"标记兔子广告蓝色区域失败: {e}")
# 基于蓝色矩形过滤与列表浮动区域有交集的场站卡片
if final_cards:
logger.info(f" [蓝框过滤] 初始卡片数量: {len(final_cards)}")
logger.info(
f" [蓝框过滤] 蓝框坐标: X={rabbit_x1}-{rabbit_x2}, Y={rabbit_y1}-{rabbit_y2}"
)
def _intersects(card):
y1, y2, x1, x2 = card
cx1, cy1, cx2, cy2 = x1, y1, x2, y2
ix1 = max(cx1, rabbit_x1)
iy1 = max(cy1, rabbit_y1)
ix2 = min(cx2, rabbit_x2)
iy2 = min(cy2, rabbit_y2)
return ix1 < ix2 and iy1 < iy2
original_cards = list(final_cards)
filtered_cards = []
for idx, card in enumerate(original_cards, start=1):
y1, y2, x1, x2 = card
if _intersects(card):
logger.info(
f" [蓝框过滤] 丢弃卡片#{idx}: X={x1}-{x2}, Y={y1}-{y2} (与蓝框有交集)"
)
else:
logger.info(
f" [蓝框过滤] 保留卡片#{idx}: X={x1}-{x2}, Y={y1}-{y2} (与蓝框无交集)"
)
filtered_cards.append(card)
logger.info(
f" [蓝框过滤] 最终保留 {len(filtered_cards)} 个卡片, 丢弃 {len(original_cards) - len(filtered_cards)} 个"
)
final_cards = filtered_cards
else:
logger.info(" [蓝框过滤] 没有可过滤的卡片。")
logger.info(f" Step [2.1/VL] 准备在 VL 图片上绘制 {len(final_cards)} 个场站的绿色方框...")