该测试依然基于网络图传
在开始测试之前,需要在电脑上安装numpy以及yoloV5
在电脑端,编写Python代码如下,其中url地址为开发板屏幕显示的网址
其运行流程为:从url获取图像并进行预处理 -> 基于yolo模型对物体进行分类 -> 框选物体并显示名称和当前帧率,在终端打印计算时间和帧率
import cv2 import torch import time from yolov5 import YOLOv5 import urllib.request import numpy as np url = 'http://192.168.1.15:80/capture' # M5CoreS3的IP地址 # Load the YOLOv5 model model_path = "./yolov5s.pt" # 模型路径 device = torch.device("cpu") model = YOLOv5(model_path, device=device) while True: img_resp = urllib.request.urlopen(url) # 从URL获取图像数据 imgnp = np.array(bytearray(img_resp.read()), dtype=np.uint8) # 将图像数据转换为NumPy数组 frame = cv2.imdecode(imgnp, -1) # 解码JPEG图像数据 # 记录处理开始时间 start_time = time.time() # 将帧传递给模型进行预测 results = model.predict(frame, size=640) # 调整输入图像大小为640x640 # 获取预测结果并在图像上绘制 annotated_frame = results.render()[0] # 直接取第一个结果(YOLOv5的render返回的是列表) # 确保annotated_frame是可写的 if not annotated_frame.flags['WRITEABLE']: annotated_frame = annotated_frame.copy() # 记录处理结束时间 end_time = time.time() # 计算帧率 processing_time = end_time - start_time fps = 1 / processing_time # 在图像上绘制帧率 cv2.putText(annotated_frame, f"FPS: {fps:.2f}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA) # 显示带有预测结果的帧 cv2.imshow("YOLOv5 Detection", annotated_frame) # 打印详细信息到终端 print(f"Processed frame in {processing_time:.4f} seconds, FPS: {fps:.2f}") # 按下 'q' 键退出 if cv2.waitKey(1) & 0xFF == ord('q'): break # 关闭所有窗口 cv2.destroyAllWindows()
其中yoloV5模型如下,之于源代码同一文件路径下
实现效果如下