这串代码输出后中文标签显示为问号import cv2
from sahi.predict import get_sliced_prediction
from sahi import AutoDetectionModel
from ultralytics import YOLO
# 初始化模型
detection_model = AutoDetectionModel.from_pretrained(
model_type='yolov8',
model_path='yolov8n_chinese.pt',
confidence_threshold=0.4,
#device='cuda:0' # 或 'cpu'
)
# 视频处理参数
VIDEO_PATH = "视频检测源/sample_video.mp4"
OUTPUT_PATH = ("output/output_video.mp4")
SLICE_SIZE = 256 # 切片尺寸
OVERLAP_RATIO = 0.2 # 切片重叠比例
# 打开视频文件
cap = cv2.VideoCapture(VIDEO_PATH)
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
# 创建视频写入器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(OUTPUT_PATH, fourcc, fps, (frame_width, frame_height))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 使用SAHI进行切片推理
result = get_sliced_prediction(
frame,
detection_model,
slice_height=SLICE_SIZE,
slice_width=SLICE_SIZE,
overlap_height_ratio=OVERLAP_RATIO,
overlap_width_ratio=OVERLAP_RATIO
)
# 绘制检测结果
for pred in result.object_prediction_list:
# 解析预测结果
bbox = pred.bbox.to_voc_bbox()
label = pred.category.name
confidence = pred.score.value
# 绘制矩形框和标签
cv2.rectangle(frame,
(int(bbox[0]), int(bbox[1])),
(int(bbox[2]), int(bbox[3])),
(0, 255, 0), 2)
cv2.putText(frame,
f"{label} {confidence:.2f}",
(int(bbox[0]), int(bbox[1] - 5)),
cv2.FONT_HERSHEY_SIMPLEX, 0.7,
(0, 0, 255), 2)
# 写入输出视频
out.write(frame)
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
最新发布