YOLOv11模型通过精确的目标检测和裁剪,为图像和视频分析提供了强大的支持。
YOLOv11模型的核心优势在于其能够从图像或视频中准确识别并提取特定目标。这种能力使得可以对目标进行深入分析或处理,而无需关注场景中的其他元素。例如,在机场行李传送带的场景中,YOLOv11能够识别并裁剪出传送带上的行李箱,为行李检查和分类提供便利。
使用YOLOv11进行目标裁剪的优势包括:
1. 集中分析:YOLOv11支持对特定目标进行裁剪,使得可以对场景中的单个物品进行深入的检查或处理。
2. 减少数据量:通过仅提取相关目标,目标裁剪有助于最小化数据大小,从而提高存储、传输或后续计算任务的效率。
3. 提高精确度:YOLOv11的目标检测精度确保裁剪出的目标保持其空间关系,为详细分析保留了视觉信息的完整性。
下面是一个使用YOLOv11进行目标裁剪的示例代码:
import os
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n.pt")
names = model.names
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
crop_dir_name = "ultralytics_crop"
if not os.path.exists(crop_dir_name):
os.mkdir(crop_dir_name)
# Video writer
video_writer = cv2.VideoWriter("object_cropping_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
idx = 0
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.predict(im0, show=False)
boxes = results[0].boxes.xyxy.cpu().tolist()
clss = results[0].boxes.cls.cpu().tolist()
annotator = Annotator(im0, line_width=2, example=names)
if boxes is not None:
for box, cls in zip(boxes, clss):
idx += 1
annotator.box_label(box, color=colors(int(cls), True), label=names[int(cls)])
crop_obj = im0[int(box[1]):int(box[3]), int(box[0]):int(box[2])]
cv2.imwrite(os.path.join(crop_dir_name, str(idx) + ".png"), crop_obj)
cv2.imshow("ultralytics", im0)
video_writer.write(im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
video_writer.release()
cv2.destroyAllWindows()