使用Ultralytics YOLOv8 对对象进行裁剪 🚀
什么是对象裁剪?
对象裁剪 Ultralytics YOLOv8对象裁剪是指从图像或视频中分离并提取特定的检测对象。YOLOv8 模型功能可用于准确识别和划分物体,从而实现精确裁剪,以便进一步分析或处理。
对象裁剪的优势?
- 重点分析:YOLOv8 方便对目标对象进行裁剪,可对场景中的单个项目进行深入检查或处理。
- 减少数据量:通过只提取相关对象,对象裁剪有助于最大限度地减少数据量,从而提高数据存储、传输或后续计算任务的效率。
- 更高的精度:YOLOv8 的物体检测精度可确保裁剪后的物体保持空间关系,为详细分析保留完整的视觉信息。
视觉效果
机场行李 |
---|
使用机场传送带裁剪行李箱Ultralytics YOLOv8 |
使用YOLOv8 进行对象裁剪示例
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
import cv2
import os
model = YOLO("yolov8n.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()
论据 model.predict
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
source |
str |
'ultralytics/assets' |
图像或视频的源目录 |
conf |
float |
0.25 |
检测对象置信度阈值 |
iou |
float |
0.7 |
NMS 的 "相交大于结合"(IoU)阈值 |
imgsz |
int or tuple |
640 |
图像尺寸标量或(高,宽)列表,即(640,480) |
half |
bool |
False |
使用半精度 (FP16) |
device |
None or str |
None |
设备上运行,如 cuda device=0/1/2/3 或 device=cpu |
max_det |
int |
300 |
每幅图像的最大检测次数 |
vid_stride |
bool |
False |
视频帧速率跨度 |
stream_buffer |
bool |
False |
缓冲所有流媒体帧(真)或返回最新帧(假) |
visualize |
bool |
False |
可视化模型特征 |
augment |
bool |
False |
对预测源进行图像增强 |
agnostic_nms |
bool |
False |
不分等级的 NMS |
classes |
list[int] |
None |
按类别筛选结果,即 classes=0,或 classes=[0,2,3] |
retina_masks |
bool |
False |
使用高分辨率分割掩膜 |
embed |
list[int] |
None |
返回给定层的特征向量/嵌入值 |