当前位置: 首页 > news >正文

深度学习目标检测中yolov5单目相机测速测距,,pyqt

深度学习目标检测中yolov5单目相机测速测距,,pyqt

文章目录

      • 一、环境准备
        • 1. 安装必要的库
        • 2. 下载YOLOv5模型
      • 二、目标检测与深度估计
        • 1. 使用YOLOv5进行目标检测
        • 2. 单目相机深度估计
      • 三、运动分析与轨迹追踪
        • 1. 轨迹追踪
      • 四、PyQt GUI开发
        • 1. 创建基本的PyQt界面
      • 五、整合与测试


yolov5单目相机测速测距,测速测距,pyqt

基于YOLOv5的单目相机测速、测距,并结合PyQt进行可视化展示,是一个复杂的项目。它涉及到多个步骤和技术点,包括目标检测、深度估计、运动分析以及GUI开发。大致的框架和学习代码示例,帮助你开始这个项目。仅供参考学习使用。

一、环境准备

1. 安装必要的库

确保安装了以下Python库:

pipinstalltorch torchvision opencv-python PyQt5 numpy scipy
2. 下载YOLOv5模型

从YOLOv5官方仓库下载预训练模型:

gitclone https://github.com/ultralytics/yolov5.gitcdyolov5 pipinstall-rrequirements.txt

二、目标检测与深度估计

1. 使用YOLOv5进行目标检测
importtorchfrommodels.experimentalimportattempt_loadfromutils.datasetsimportLoadStreams,LoadImagesfromutils.generalimportcheck_img_size,non_max_suppression,scale_coordsfromutils.torch_utilsimportselect_device,time_synchronizeddefdetect_objects(weights='yolov5s.pt',imgsz=640,source='data/images'):device=select_device('')half=device.type!='cpu'# half precision only supported on CUDAmodel=attempt_load(weights,map_location=device)# load FP32 modelstride=int(model.stride.max())# model strideimgsz=check_img_size(imgsz,s=stride)# check img_sizeifhalf:model.half()# to FP16dataset=LoadImages(source,img_size=imgsz,stride=stride)names=model.module.namesifhasattr(model,'module')elsemodel.names colors=[[random.randint(0,255)for_inrange(3)]for_innames]forpath,img,im0s,vid_capindataset:img=torch.from_numpy(img).to(device)img=img.half()ifhalfelseimg.float()# uint8 to fp16/32img/=255.0# 0 - 255 to 0.0 - 1.0ifimg.ndimension()==3:img=img.unsqueeze(0)pred=model(img,augment=False)[0]pred=non_max_suppression(pred,0.25,0.45,classes=None,agnostic=False)fori,detinenumerate(pred):# detections per imagep,s,im0,frame=path,'',im0s,getattr(dataset,'frame',0)gn=torch.tensor(im0.shape)[[1,0,1,0]]# normalization gain whwhiflen(det):det[:,:4]=scale_coords(img.shape[2:],det[:,:4],im0.shape).round()for*xyxy,conf,clsinreversed(det):label=f'{names[int(cls)]}{conf:.2f}'plot_one_box(xyxy,im0,label=label,color=colors[int(cls)],line_thickness=3)returnim0
2. 单目相机深度估计

使用预训练的深度估计模型(如MiDaS)进行深度估计:

importcv2importtorchimportnumpyasnpfrommidas.dpt_depthimportDPTDepthModelfrommidas.midas_netimportMidasNetfrommidas.transformsimportResize,NormalizeImage,PrepareForNetdefestimate_depth(image_path):model_type="dpt_large"# MiDaS v3 - Large (highest accuracy, slowest inference speed)midas=DPTDepthModel(path="models/dpt_large-midas-2f21e586.pt",backbone="vitl16_384",non_negative=True,)device=torch.device("cuda")iftorch.cuda.is_available()elsetorch.device("cpu")midas.to(device)midas.eval()transform=Resize(384,384,resize_target=None,keep_aspect_ratio=True,ensure_multiple_of=32,resize_method="upper_bound",image_interpolation_method=cv2.INTER_CUBIC,)image=cv2.imread(image_path)image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)/255.0image_transformed=transform({"image":image})["image"]image_transformed=torch.from_numpy(image_transformed).permute(2,0,1).unsqueeze(0).to(device)withtorch.no_grad():prediction=midas(image_transformed)prediction=torch.nn.functional.interpolate(prediction.unsqueeze(1),size=image.shape[:2],mode="bicubic",align_corners=False,).squeeze().cpu().numpy()returnprediction

三、运动分析与轨迹追踪

1. 轨迹追踪

使用卡尔曼滤波器进行目标跟踪:

importnumpyasnpimportcv2classKalmanFilter:kf=cv2.KalmanFilter(4,2)kf.measurementMatrix=np.array([[1,0,0,0],[0,1,0,0]],np.float32)kf.transitionMatrix=np.array([[1,0,1,0],[0,1,0,1],[0,0,1,0],[0,0,0,1]],np.float32)defpredict(self,coordX,coordY):measured=np.array([[np.float32(coordX)],[np.float32(coordY)]])self.kf.correct(measured)predicted=self.kf.predict()x,y=int(predicted[0]),int(predicted[1])returnx,y

四、PyQt GUI开发

1. 创建基本的PyQt界面
importsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QVBoxLayout,QWidgetfromPyQt5.QtGuiimportQPixmapclassMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("YOLOv5 Single Camera Detection System")layout=QVBoxLayout()self.label=QLabel(self)layout.addWidget(self.label)container=QWidget()container.setLayout(layout)self.setCentralWidget(container)defupdate_image(self,image_path):pixmap=QPixmap(image_path)self.label.setPixmap(pixmap)if__name__=='__main__':app=QApplication(sys.argv)window=MainWindow()window.show()sys.exit(app.exec_())

五、整合与测试

将上述各个部分整合起来,形成一个完整的系统。你可以根据实际需求调整代码逻辑和参数设置。构建出一个功能完善的YOLOv5单目测距检测系统。

代码示例,仅供参考学习使用。

http://www.jsqmd.com/news/952600/

相关文章:

  • DoIP网关实战:如何用Python模拟一个简易的DoIP网关(支持CAN转以太网)
  • 在Ubuntu 22.04上跑通你的第一个SDR LTE基站:基于srsRAN与USRP B210的完整配置流程
  • 中关村科金 AICC 智能联络中心:170 + 分院 2000 坐席无感切换,破解体检呼叫中心运维难题
  • 2026年6月市面上靠谱的冷冻库供应商推荐,防爆冷库/冷库/土建冷库/大型冷库/气调库/双温冷库,冷冻库公司哪家好 - 品牌推荐师
  • 三菱PLC通信避坑指南:从GX Works2设置到C#代码,一步步排查MX Component连接失败
  • ai辅助开发:让智能体设计并实现基于rabbitmq的日志分析系统
  • PyBullet仿真进阶:如何为你的UR5机器人模型自定义关节限位与颜色材质
  • Maya到Web 3D转换神器:5步掌握glTF插件使用技巧
  • Flutter Icons 图标库保姆级使用指南:从基础调用到自定义图标实战
  • 保姆级教程:在Windows 10上用PyBullet加载UR5机器人URDF模型(附完整文件下载)
  • 2026年天津二手车地址在哪?本地化服务与信任构建成竞争关键分水岭 - 2026年企业资讯
  • 从《哈利·波特》到代码:用Java词频统计带你发现文本中的秘密(附完整源码)
  • 避坑指南:Xilinx SelectIO IP核仿真中的异步复位与bitslip机制详解
  • 保姆级教程:用Omnic和Origin搞定FTIR光谱图,从CSV数据到发表级图表
  • 保姆级教程:不root不越狱,用华为电脑助手和MMRecovery完整导出微信聊天记录(含备份文件解析)
  • 告别一堆遥控器!用几十块钱成本搭建家庭红外控制中心,支持小爱、小度、天猫精灵
  • 别再只盯着集中式和分布式了:聊聊BMS硬件架构选型背后的那些‘坑’与实战考量
  • 抖音批量下载神器:三步搞定视频收藏与内容管理
  • LendNova:AI驱动的信用风险评估创新实践
  • 丝杆升降机运行不安全?一份完整检查指南送给你
  • 效率提升秘籍:用快马AI一键生成‘香香’宠物应用可扩展代码框架
  • 2026年海珠区黄金回收值得关注!这些专业广州黄金回收品牌你知道几个? - 极速版本
  • HP M126nw打印机实测:PS切片打印超长PDF的完整避坑指南(含Acrobat页眉页脚设置)
  • 不逐产业风口,坚守关键赛道:中国电子云以专属AI云,重新定义关键行业智能新底座
  • BilibiliDown终极指南:3步完成B站音频无损下载的完整教程
  • 告别一堆遥控器!用NodeMCU搭建家庭红外控制中枢,一个App搞定所有设备
  • OpenCore Legacy Patcher终极指南:如何让旧Mac焕发新生
  • 2026年5月AI无损测糖分选机品牌推荐,冬枣选果机/智能无损选果机/圣女果分选机,AI无损测糖分选机供应商推荐 - 品牌推荐师
  • 2026苏州管道疏通公司实测榜单|首选老牌靠谱店,避坑指南收好 - 极速版本
  • 时序伪造定位技术:DDNet框架解析与应用