This commit is contained in:
yooooger 2025-08-01 15:42:38 +08:00
parent 0ea0d1a81a
commit 91ba7882e3

View File

@ -149,8 +149,6 @@ def process_frames(frame_queue, processed_frame_queue, ov_model, cls, confidence
# 优化推理性能 # 优化推理性能
try: try:
# 导入torch库
import torch
# 尝试启用ONNX Runtime加速 # 尝试启用ONNX Runtime加速
ov_model.to('cuda:0' if torch.cuda.is_available() else 'cpu') ov_model.to('cuda:0' if torch.cuda.is_available() else 'cpu')
# 调整批处理大小为1减少内存占用 # 调整批处理大小为1减少内存占用
@ -215,14 +213,24 @@ def process_frames(frame_queue, processed_frame_queue, ov_model, cls, confidence
results = ov_model(process_frame, classes=cls, show=False) results = ov_model(process_frame, classes=cls, show=False)
last_results = results[0] # 保存检测结果用于后续帧 last_results = results[0] # 保存检测结果用于后续帧
# 如果尺寸调整过,需要将结果转换回原始尺寸 # 统计数量
num_objs = len(last_results.boxes) if hasattr(last_results, "boxes") else 0
# 统计各类别数量
class_counts = {}
if hasattr(last_results, "boxes") and hasattr(last_results.boxes, "cls"):
for c in last_results.boxes.cls.cpu().numpy():
class_counts[int(c)] = class_counts.get(int(c), 0) + 1
# # 绘制检测框
if resize_scale < 1.0: if resize_scale < 1.0:
# 绘制检测框
annotated_frame = cv2.resize(results[0].plot(conf=False, line_width=1, font_size=1.5), annotated_frame = cv2.resize(results[0].plot(conf=False, line_width=1, font_size=1.5),
(frame.shape[1], frame.shape[0])) (frame.shape[1], frame.shape[0]))
else: else:
annotated_frame = results[0].plot(conf=False, line_width=1, font_size=1.5) annotated_frame = results[0].plot(conf=False, line_width=1, font_size=1.5)
# 在画面左上角写入统计信息
text = f"Total: {num_objs} " + " ".join([f"cls{c}:{n}" for c, n in class_counts.items()])
cv2.putText(annotated_frame, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)
# 在负载高时启用跳帧处理 # 在负载高时启用跳帧处理
if frame_queue.qsize() > frame_queue.maxsize * 0.5: if frame_queue.qsize() > frame_queue.maxsize * 0.5:
skip_counter = max_skip skip_counter = max_skip