当前位置: 首页 > 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.rkmt.cn/news/1464216.html

相关文章:

  • DoIP网关实战:如何用Python模拟一个简易的DoIP网关(支持CAN转以太网)
  • 三菱PLC通信避坑指南:从GX Works2设置到C#代码,一步步排查MX Component连接失败
  • 2026年6月市面上靠谱的冷冻库供应商推荐,防爆冷库/冷库/土建冷库/大型冷库/气调库/双温冷库,冷冻库公司哪家好 - 品牌推荐师
  • 2026年天津二手车地址在哪?本地化服务与信任构建成竞争关键分水岭 - 2026年企业资讯
  • 告别一堆遥控器!用几十块钱成本搭建家庭红外控制中心,支持小爱、小度、天猫精灵
  • 别再只盯着集中式和分布式了:聊聊BMS硬件架构选型背后的那些‘坑’与实战考量
  • 抖音批量下载神器:三步搞定视频收藏与内容管理
  • 丝杆升降机运行不安全?一份完整检查指南送给你
  • 告别一堆遥控器!用NodeMCU搭建家庭红外控制中枢,一个App搞定所有设备
  • 2026年5月AI无损测糖分选机品牌推荐,冬枣选果机/智能无损选果机/圣女果分选机,AI无损测糖分选机供应商推荐 - 品牌推荐师
  • 嵌入式开发必知:Hex、Bin、Srec文件到底有啥区别?看完这篇别再搞混了
  • 声学引力波的非线性效应与宇宙学研究
  • GEO优化行业权威白皮书:GEO优化的核心定义
  • 从‘异步’到‘同步’:聊聊电源里MOS管如何‘卷’掉了二极管(附SP6012驱动芯片实战解析)
  • 2026年当下北京专业滚针轴承直销厂商市场格局剖析与选择指南 - 2026年企业资讯
  • 嵌入式Linux启动提速:手把手教你配置Buildroot生成带Ramdisk的内核镜像
  • 告别拍照模糊!用Python+OpenCV手把手教你实现一个简单的自动对焦模拟程序
  • 告别32位限制!手把手教你用MX Component V5在Win10/11上搞定三菱PLC通信(C#/VB.NET通用)
  • 婴幼儿人脸识别技术挑战与深度学习解决方案
  • 【鸿蒙 PC三方库构建系统】SHA 库 鸿蒙PC 适配详解
  • 一文讲清楚 Agent 权限怎么做:从最小权限到提示注入防护
  • 别再死记硬背BMS架构了!用一张图搞懂集中式与分布式的核心差异与选型指南
  • 从MobileNetV3的h-swish激活函数聊起:为什么Google要放弃Swish?手把手复现与性能对比
  • HMS Core 5.2.0实战:用Network Kit给你的App网络请求和文件传输“提提速”
  • 如何突破文档下载限制:kill-doc一站式解决方案
  • 逆向思维抓包:当APP检测代理时,如何用Fiddler+夜神模拟器依然搞定数据捕获?
  • 从“分不清”到“分得清”:用粗糙集思想,5分钟看懂数据挖掘中的特征选择核心
  • PyTorch转ONNX时,那个神秘的ScatterND算子到底在干啥?一个例子讲透
  • 2026年整理的Web3九大核心赛道
  • 别再只盯着宏块了!H.265/HEVC里的CTU、Tile和Slice到底怎么选?实战配置避坑指南