YOLO识别照片中的人像大头照

pip install ultralytics opencv-python
from ultralytics import YOLO
import cv2

# 加载模型(需要一个支持 face 和 hair 的模型)
# 你可以使用自己训练的模型(例如 yolov8_face_hair.pt)
model = YOLO("yolov8_face_hair.pt")  # 替换为你自己的模型路径

# 加载图片
img_path = "portrait.jpg"  # 替换为你要检测的照片
img = cv2.imread(img_path)

# 推理
results = model(img)[0]

# 提取框
face_box = None
hair_box = None

for r in results.boxes:
    cls_id = int(r.cls[0])
    label = model.names[cls_id]
    x1, y1, x2, y2 = map(int, r.xyxy[0])

    if label == "face":
        face_box = (x1, y1, x2, y2)
        cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
    elif label == "hair":
        hair_box = (x1, y1, x2, y2)
        cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 2)

# 判断遮挡
def calculate_overlap(boxA, boxB):
    if not boxA or not boxB:
        return 0

    ax1, ay1, ax2, ay2 = boxA
    bx1, by1, bx2, by2 = boxB

    inter_x1 = max(ax1, bx1)
    inter_y1 = max(ay1, by1)
    inter_x2 = min(ax2, bx2)
    inter_y2 = min(ay2, by2)

    inter_area = max(0, inter_x2 - inter_x1) * max(0, inter_y2 - inter_y1)
    face_area = (ax2 - ax1) * (ay2 - ay1)

    return inter_area / face_area if face_area > 0 else 0

overlap_ratio = calculate_overlap(face_box, hair_box)
print(f"头发遮挡脸部比例:{overlap_ratio:.2f}")

if overlap_ratio > 0.3:
    print("检测结果:头发遮住了脸")
else:
    print("检测结果:头发未遮住脸")

# 显示图片
cv2.imshow("Result", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值