尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
基于YOLOv5的单目视觉深度学习目标检测与测距算法研究
深度学习目标检测算法 通过训练大量的带有深度信息的数据来训练 估计模型 构建基于深度学习Yolov5的单目测距检测识别文章目录1. 环境搭建安装依赖2. 数据准备数据预处理3. 模型训练YOLOv5模型训练深度估计模型训练4. 距离计算5. 用户界面设计yolo单目测距11构建一个基于YOLOv5的单目测距系统是一个涉及目标检测、深度估计和距离计算等多个步骤的过程。以下是一个详细的指南包括环境搭建、模型训练、距离计算以及使用Python实现整个系统的代码示例。1. 环境搭建首先确保你的开发环境已经安装了必要的库和工具。这里以Anaconda和PyTorch为例。安装依赖# 创建并激活虚拟环境conda create-nyolov5python3.8conda activate yolov5# 安装PyTorch和YOLOv5pipinstalltorch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113gitclone https://github.com/ultralytics/yolov5.gitcdyolov5 pipinstall-rrequirements.txt2. 数据准备收集和标注数据集用于训练YOLOv5模型进行目标检测。同时需要一些带有深度信息的数据来训练深度估计模型。数据预处理对数据进行预处理包括裁剪、缩放、归一化等操作以便于模型训练。importcv2importnumpyasnpdefpreprocess_image(image):# 裁剪和缩放imagecv2.resize(image,(640,480))# 归一化imageimage/255.0returnimage3. 模型训练YOLOv5模型训练使用YOLOv5进行目标检测模型训练。# 训练YOLOv5模型python train.py--img640--batch16--epochs100--datacoco128.yaml--weightsyolov5s.pt深度估计模型训练选择一个适合深度估计的深度学习模型如DepthNet或DORN等。这里以DepthNet为例。importtorchimporttorch.nnasnnimporttorch.optimasoptimclassDepthNet(nn.Module):def__init__(self):super(DepthNet,self).__init__()# Encoderself.conv1nn.Conv2d(3,64,kernel_size3,padding1)self.conv2nn.Conv2d(64,128,kernel_size3,padding1)self.conv3nn.Conv2d(128,256,kernel_size3,padding1)# Decoderself.upconv3nn.ConvTranspose2d(256,128,kernel_size2,stride2)self.conv4nn.Conv2d(256,128,kernel_size3,padding1)self.upconv2nn.ConvTranspose2d(128,64,kernel_size2,stride2)self.conv5nn.Conv2d(128,64,kernel_size3,padding1)self.conv6nn.Conv2d(64,1,kernel_size1)defforward(self,x):# Encoderx1F.relu(self.conv1(x))x2F.max_pool2d(F.relu(self.conv2(x1)),2)x3F.max_pool2d(F.relu(self.conv3(x2)),2)# DecoderxF.relu(self.upconv3(x3))xtorch.cat((x2,x),dim1)xF.relu(self.conv4(x))xF.relu(self.upconv2(x))xtorch.cat((x1,x),dim1)xF.relu(self.conv5(x))xself.conv6(x)returnx# 初始化模型和优化器modelDepthNet()optimizeroptim.Adam(model.parameters(),lr0.001)# 定义损失函数criterionnn.MSELoss()# 训练循环forepochinrange(num_epochs):forimages,depthsindataloader:optimizer.zero_grad()outputsmodel(images)losscriterion(outputs,depths)loss.backward()optimizer.step()print(fEpoch [{epoch1}/{num_epochs}], Loss:{loss.item()})4. 距离计算在完成模型训练后可以使用训练好的模型进行目标检测和深度估计并计算目标的距离。defcalculate_distance(depth_map,bbox):x_min,y_min,x_max,y_maxbbox depth_valuesdepth_map[y_min:y_max,x_min:x_max]average_depthnp.mean(depth_values)# 假设相机焦距为f图像中心点到物体的水平距离为df500# 相机焦距daverage_depth*freturnd# 使用YOLOv5进行目标检测fromyolov5.models.experimentalimportattempt_loadfromyolov5.utils.datasetsimportLoadImagesfromyolov5.utils.generalimportnon_max_suppression devicetorch.device(cudaiftorch.cuda.is_available()elsecpu)modelattempt_load(yolov5s.pt,map_locationdevice)datasetLoadImages(test_image.jpg)forpath,img,im0s,vid_capindataset:imgtorch.from_numpy(img).to(device)imgimg.float()/255.0ifimg.ndimension()3:imgimg.unsqueeze(0)predmodel(img,augmentFalse)[0]prednon_max_suppression(pred,conf_thres0.25,iou_thres0.45)fordetinpred:iflen(det):for*xyxy,conf,clsinreversed(det):bbox[int(x)forxinxyxy]# 使用深度估计模型计算深度图depth_mapdepth_model(preprocess_image(im0s)).squeeze().detach().cpu().numpy()# 计算目标距离distancecalculate_distance(depth_map,bbox)print(fDistance to object:{distance}meters)5. 用户界面设计使用PyQt5等库设计一个图形用户界面GUI。fromPyQt5.QtWidgetsimportQApplication,QMainWindow,QPushButton,QLabel,QVBoxLayout,QWidget,QFileDialogfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQTimerimportsysclassDistanceMeasurementApp(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(Yolo v5 单目测距系统)self.setGeometry(100,100,800,600)self.labelQLabel(self)self.label.setGeometry(10,10,640,480)self.open_buttonQPushButton(打开图片,self)self.open_button.move(10,490)self.open_button.clicked.connect(self.open_image)self.measure_buttonQPushButton(开始测距,self)self.measure_button.move(170,490)self.measure_button.clicked.connect(self.measure_distance)defopen_image(self):optionsQFileDialog.Options()file_name,_QFileDialog.getOpenFileName(self,QFileDialog.getOpenFileName(),,Images (*.png *.xpm *.jpg *.bmp);;All Files (*),optionsoptions)iffile_name:self.image_pathfile_name self.display_image(file_name)defdisplay_image(self,file_name):imageQImage(file_name)pixmapQPixmap.fromImage(image)self.label.setPixmap(pixmap)defmeasure_distance(self):ifhasattr(self,image_path):imagecv2.imread(self.image_path)resultsdetect_objects_and_measure_distance(image,model,depth_model)forresultinresults:label,bbox,distanceresult x_min,y_min,x_max,y_maxbbox cv2.rectangle(image,(x_min,y_min),(x_max,y_max),(0,255,0),2)cv2.putText(image,f{label}:{distance:.2f}m,(x_min,y_min-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)height,width,channelimage.shape bytes_per_line3*width q_imgQImage(image.data,width,height,bytes_per_line,QImage.Format_RGB888)pixmapQPixmap.fromImage(q_img)self.label.setPixmap(pixmap)if__name____main__:appQApplication(sys.argv)windowDistanceMeasurementApp()window.show()sys.exit(app.exec_())以上就是构建一个基于YOLOv5的单目测距系统的详细步骤和关键代码示例。
RELATED

相关推荐

NewId与传统UUID对比:为什么它是分布式系统的更好选择?

NewId与传统UUID对比:为什么它是分布式系统的更好选择?

NewId与传统UUID对比:为什么它是分布式系统的更好选择? 【免费下载链接】NewId A sequential id generator that works across nodes with no collisions 项目地址: https://gitcode.com/gh_mirrors/ne/NewId 在分布式系统中,唯一标识…

📅 2026/8/22 18:37:58
阿普斯特为不耐受生物制剂患者提供的替代方案,阿普斯特仿制药怎么买?

阿普斯特为不耐受生物制剂患者提供的替代方案,阿普斯特仿制药怎么买?

近年来生物制剂已成为中重度斑块状银屑病、活动性银屑病关节炎的主流治疗选择,但仍有相当比例的患者会出现生物制剂不耐受情况,包括注射部位持续严重过敏、反复出现上呼吸道感染、结核潜伏激活风险、长期用药后产生抗药抗体导致疗效衰减等,这…

📅 2026/8/31 0:13:55
Obsidian Web Clipper:模块化浏览器扩展架构与知识管理系统的技术实现原理

Obsidian Web Clipper:模块化浏览器扩展架构与知识管理系统的技术实现原理

Obsidian Web Clipper:模块化浏览器扩展架构与知识管理系统的技术实现原理 【免费下载链接】obsidian-clipper Highlight and capture the web in your favorite browser. The official Web Clipper extension for Obsidian. 项目地址: https://gitcode.com/gh_mi…

📅 2026/9/2 13:01:09
MORE NEWS

更多资讯

📰

Atlas 300V 24G部署YOLOv8实战:从环境搭建到推理优化

最近帮一个视频分析项目组把YOLOv8检测服务从GPU迁移到Atlas 300V上,整个过程折腾了快两周,踩了不少坑。现在项目已经稳定跑了一个多月了,趁热把这块推理卡的真实表现、环境搭建流程和部署YOLO的完整方案写出来。如果你正准备用Atlas 300V 24…

📰

Skill 用 qwen-plus,模型通道走 TaoToken 行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

云端量化平台双均线策略实操:Python量化新手半小时跑通全流程

很多朋友学Python量化,第一反应是先去装Python、配VSCode、学爬虫,折腾一圈下来,发现连“策略代码长什么样”都还没见过。其实像iQuant这类云端量化平台,早就把环境搭建、行情数据、回测引擎这些脏活累活全包了,你只需…

📰

基于深度学习与注意力机制的智能合约漏洞检测实战解析

简介:这套基于深度学习的智能合约漏洞检测毕业设计资源,面向区块链安全方向的学生与开发者,围绕LSTM、BLSTM及BLSTM注意力机制构建检测模型,解决智能合约代码漏洞自动识别问题。压缩包共1428个文件,涵盖1388个sol合约样…

📰

2025年六款文生图工具中文提示词横评:语义理解与文化意象还原实测

中文提示词在文生图工具上的表现,这两年变化非常快。2023年那会儿,我拿一句“一只戴着草帽的橘猫蹲在江南水乡的石桥上,背景是烟雨朦胧的乌篷船”去测主流工具,十张里有八张会把“草帽”和“乌篷船”揉成一团,猫倒是画…

📰

量化多市场数据统一:跨市场策略回测的7个隐藏坑与解决方案

做量化这行,多数人一开始都特别自信,觉得数据源嘛,挑个行情全的、更新快的就行。A股用免费接口拉一拉,美股用现成库抓一抓,单市场策略跑得挺顺,连回测曲线都漂亮得让人想直接上实盘。但只要你开始把策略从单…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬