位置: IT常识 - 正文

基于yolov5的目标检测和单目测距(基于yolov5的目标检测实验任务)

编辑:rootadmin
基于yolov5的目标检测和单目测距 废话在前头

推荐整理分享基于yolov5的目标检测和单目测距(基于yolov5的目标检测实验任务),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:基于yolov5的目标检测论文,基于yolov5的目标检测的sci论文怎么写,基于yolov5的目标检测的sci论文怎么写,基于yolov5的目标检测论文,基于yolov5的目标检测毕设论文,基于yolov5的目标检测,基于yolov5的目标检测,基于yolov5的目标检测论文,内容如对您有帮助,希望把文章链接给更多的朋友!

  因为我的毕业设计就是搞目标检测这一块的,前段时间好不容易实现了yolov5的目标检测,后来还需要实现目标测距,于是在B站和博客里不断摸索,效果很不理想,知识点零散,幸运的是最终琢磨懂了代码和原理。全文通俗易懂。

正文开始1、最终目的  实现目标检测跟踪和目标测距 !2、实现过程2.1 实现的前提

  前提是你要会用yolov5实现目标检测,我是跟着一位博主学做出来的——目标检测—教你利用yolov5训练自己的目标检测模型 。重点是在B站里也有他做的 保姆级视频,本文着重讲解单目测距。 实现了yolov5检测之后直接去我的gitee上下载我的测距项目: yolov5-main。下载并解压项目到PyCharm中,配置上运行yolov5的环境,然后跑一遍detect.py,看看我的案例效果,成功运行后再跟着教程慢慢搞。

2.2 知识点简要梳理

  因为条件的限制,我没有选择双目测距来研究,其实单目和双目各有优缺点。它们的原理网上搜也是一大把,本文直接跳过原理讲解,我们来讲公式:

D = (F*W)/P 其中D是目标到摄像机的距离(最终要推测的距离), F是摄像机焦距(根据下面教程来调试自己的镜头焦距), W是目标的宽度或者高度(看情况来定,行人检测一般以人的身高为基准), P是指目标在图像中所占据的x方向像素(宽)或者y方向像素(高)(程序来计算)。

2.3 单目测距代码基于yolov5的目标检测和单目测距(基于yolov5的目标检测实验任务)

  先来看看核心代码

foc = 1810.0 # 镜头焦距real_hight_person = 64.96 # 行人高度,注意单位是英寸# 自定义函数,单目测距def detect_distance_person(h): dis_inch = (real_hight_person * foc) / (h - 2) dis_cm = dis_inch * 2.54 dis_cm = int(dis_cm) dis_m = dis_cm/100 return dis_m

简单理解一下代码,定好焦距(通过下一步调试可得)和行人高度(这里定一般人的身高,我定165cm,可以调,单位为英寸),然后在调用这个测距函数的时候,把行人所占据的像素高度h(其实就是利用到方框的像素高度)传进来,这个函数首先会根据公式计算出单位为英尺的距离,然后转换,最终得到单位为米的距离。

2.4 调试焦距

网上有说相机标定这个操作,我没有深入研究,貌似可以矫正图片,减小误差。我是直接跳过这个操作,影响不大。 下面讲一下怎么调试焦距,我用的是手机摄像头。

先是准备一张A4纸,横放在地板上或者别的东西上面,要纯色为背景;用卷尺量出60cm的高度,或者用棍子画出60cm的高度,将手机打开录像,横拍,这个时候就不要放大镜头了,垂直方正的将A4纸录十几秒的视频,拍到的A4纸尽量不能歪;将视频放到项目的test目录里,在detect_A4.py的第13行代码换上这个视频。运行detect_A4.py,首先看一下有没有绿色的矩形出现并包裹住A4纸,如果没有或者有但是明显包裹不紧的话就调节25行代码的阈值,反复尝试,直到矩形出现并包裹紧A4纸。这个时候可以看到图像左上角有数值,这个就是A4纸到镜头的推测距离,我们需要通过调节foc焦距参数,让左上角这个数值接近60cm,最终的foc焦距就是你这个视频的焦距了,往后检测视频就用这个焦距,而且检测的视频都是用这个焦距拍出来的。2.5 拿到焦距就可以做目标测距了2.5.1 讲一下总体思路

这个时候公式 D = (F*W)/P 的三个参数已经知道了F和W两个,这个P在下面2.的(4)里可以被计算出来。

我在utils目录下定义了一个distance.py, 它的功能就是测距,我在里边定义了两个测距模型,一个是测人的,一个是测车的,这个时候先把之前调试好的焦距写在foc参数里,行人和车的高度只是大概数值,单位为英寸,自己可以改;然后来到根目录下的detect.py,这个文件我在基础上做了修改,讲一下改了哪些。 (1)第60行定义了一个函数,以1200为宽的比例更改显示图像的大小,因为原本的这个yolov5项目是按原图像显示的,按我的焦距拍出来的视频会撑爆整个屏幕,所以要缩小显示,这个函数会在150行显示的时候被调用;# 改变显示图片大小(自定义函数) def cv_show(p, im0): height, width = im0.shape[:2] a = 1200 / width # 宽为1200,计算比例 size = (1200, int(height * a)) img_resize = cv2.resize(im0, size, interpolation=cv2.INTER_AREA) cv2.imshow(p, img_resize) cv2.waitKey(1) # 1 millisecond

(2)116行做一个判断,置信度低的就不要显示了,有时候地上一个图案都能被识别成人,用官方权重来检测,检测到的东西几乎都会被框上,这样会很杂,我们可以根据需求选择我们想框的东西,像我一样在118行和131行各做了一个判断,分别是判断是不是人和车,是的话就框出来并做相应处理,128行调用的plot_one_box()就是画框的函数;

if conf2 > 0.4: # 置信度小于0.4时不显示# person,显示person标签的框,并单独做person的测距if names[int(cls)] == 'person':plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=3, name=names[int(cls)]) # 画框函数

(4)这个函数在utils里的polts.py里,我们来到polts.py里的59行,我给这个函数添加了一个参数name,在画框的时候函数会根据name是人还是车进行相应的测距函数调用(68行和70行,参数h是目标的高度,63~65行通过方框坐标计算得出),所调用的测距函数也就是前面我定义好的distance.py里边的。然后71行就是在原本的方框标签上追加我们测距得到的距离数据;

def plot_one_box(x, img, color=None, label=None, line_thickness=3, name=None):c1, c2 = (int(x[0]), int(x[1])), (int(x[2]), int(x[3])) # 传过来的x包含有框的两个对角坐标# w = int(x[2]) - int(x[0]) # 框的宽h = int(x[3]) - int(x[1]) # 框的高dis_m = 1.00 if name == 'person': # 根据标签名称调用不同函数计算距离 dis_m = detect_distance_person(h) elif name == 'car': dis_m = detect_distance_car(h) label += f' {dis_m}m' # 在标签后追加距离

(5)这点不是很重要,detect.py189行,是否保存检测结果到runs/detect目录下,我这里关闭了,省储存,这点根据需求来改,需要保存就把它改成store_true,然后在runs/detect目录下最后一个exp里找,因为每运行一次detect.py都会生成一个exp文件,最后一次运行结果自然保存在最后一个exp里;

# store_true为保存视频或者图片,路径为runs/detectparser.add_argument('--nosave', action='store_false', help='do not save images/videos') 总结就是,基于yolov5的检测,调用我们定义的测距函数,拿到检测距离之后,把距离追加到方框的标签后面。2.5.1 实测自己的视频自己用拍摄A4纸的方法,到路边横屏拍摄视频,相机到腰的位置,拍点人或者车,注意不能改变焦距来拍,用拍摄A4纸的状态来拍。要问为什么不能竖屏拍,我只能说,我竖屏拍了视频传到项目里运行,显示的图像会上下颠倒,不懂是什么原因;拍好视频后,把视频传电脑里,复制到项目data/videos目录下,重命名一下,其实放哪里都无所谓,等会路径写对就好。来到detect.py的181行,更改数据源,改成刚刚那个视频的路径。见证奇迹的时刻到了,运行detect.py,看看效果。3、后语

  小学弟我才学疏浅,非计算机科班出身,对编程感兴趣,自学Java出身,因为毕业设计意外选到人工智能的课题,所以临时自学Python,然后慢慢接触人工智能。   本文章虽然通俗易懂,但是缺乏专业术语。   代码中能看到的中文注释我建议简单理解一遍。   若有不足,望大佬指教!

本文链接地址:https://www.jiuchutong.com/zhishi/293753.html 转载请保留说明!

上一篇:2023前端面试题及答案整理(Vue)(2023前端面试题pdf)

下一篇:推荐国内免费使用chatGPT的工具(推荐国内免费使用的电影)

  • 博客是如何帮助企业获得口碑和声誉的(博客是如何帮助客户的)

    博客是如何帮助企业获得口碑和声誉的(博客是如何帮助客户的)

  • 苹果se2有3dtouch功能的吗(苹果SE2有没有NFC)

    苹果se2有3dtouch功能的吗(苹果SE2有没有NFC)

  • 华为p40有北斗导航系统吗(华为p40有北斗导航功能吗)

    华为p40有北斗导航系统吗(华为p40有北斗导航功能吗)

  • mesh路由器原理(mesh路由器的原理)

    mesh路由器原理(mesh路由器的原理)

  • 被拉黑的电话,拨打时会有提示吗(被拉黑的电话号码在哪里找)

    被拉黑的电话,拨打时会有提示吗(被拉黑的电话号码在哪里找)

  • 希沃视频展台的使用方法(希沃视频展台的摄像头有什么用)

    希沃视频展台的使用方法(希沃视频展台的摄像头有什么用)

  • 空间留言频繁如何解除(空间留言删不掉了,显示操作频繁怎么办)

    空间留言频繁如何解除(空间留言删不掉了,显示操作频繁怎么办)

  • 摄像头属于什么设备(摄像头属于什么透镜)

    摄像头属于什么设备(摄像头属于什么透镜)

  • 路由器一般用几年更换(路由器一般用几点会坏)

    路由器一般用几年更换(路由器一般用几点会坏)

  • 千兆网下载速度是多少(千兆网下载速度只有50兆)

    千兆网下载速度是多少(千兆网下载速度只有50兆)

  • 微信里面我的企业怎么删除(微信里面我的企业怎么删除掉)

    微信里面我的企业怎么删除(微信里面我的企业怎么删除掉)

  • vivoNEX3s支持光学防抖吗(vivonex3拍照有光学防抖吗)

    vivoNEX3s支持光学防抖吗(vivonex3拍照有光学防抖吗)

  • 电脑突然进入睡眠模式怎么办(电脑突然进入睡眠界面)

    电脑突然进入睡眠模式怎么办(电脑突然进入睡眠界面)

  • mix2s充电器支持pd吗(mix2的充电器)

    mix2s充电器支持pd吗(mix2的充电器)

  • 抖音能分身吗(抖音能分身吗怎么分身)

    抖音能分身吗(抖音能分身吗怎么分身)

  • 淘宝收的红包在哪里看(淘宝收的红包在哪里查看)

    淘宝收的红包在哪里看(淘宝收的红包在哪里查看)

  • oppoa9能不能闪充(oppoa9能用闪充数据线吗)

    oppoa9能不能闪充(oppoa9能用闪充数据线吗)

  • 华为软件哪些可以卸载(华为软件哪些可以删除)

    华为软件哪些可以卸载(华为软件哪些可以删除)

  • 荣耀play3支持指纹识别吗(荣耀play 3有指纹解锁的功能吗)

    荣耀play3支持指纹识别吗(荣耀play 3有指纹解锁的功能吗)

  • 车载蓝牙接收器怎么连接汽车音响(车载蓝牙接收器怎么调频率)

    车载蓝牙接收器怎么连接汽车音响(车载蓝牙接收器怎么调频率)

  • 贡献芝麻粒有什么用(贡献芝麻粒有什么影响)

    贡献芝麻粒有什么用(贡献芝麻粒有什么影响)

  • qq通话记录怎么查(qq通话记录怎么查找录音)

    qq通话记录怎么查(qq通话记录怎么查找录音)

  • 魅族备份的数据在哪恢复(魅族备份数据到电脑)

    魅族备份的数据在哪恢复(魅族备份数据到电脑)

  • mblu是什么牌子的手机(mbl属于什么档次)

    mblu是什么牌子的手机(mbl属于什么档次)

  • ecshop能免费使用吗(ecshop app)

    ecshop能免费使用吗(ecshop app)

  • cloud.huawei com找回手机密码(cloudhuaweicom找回密码激活手机)

    cloud.huawei com找回手机密码(cloudhuaweicom找回密码激活手机)

  • 做软件测试要学习那些知识(做软件测试学什么专业)

    做软件测试要学习那些知识(做软件测试学什么专业)

  • Flex 4 的十大变化(flex:4)

    Flex 4 的十大变化(flex:4)

  • python传递实参的方法(python中的参数传递)

    python传递实参的方法(python中的参数传递)

  • 会计上已资本化处理的工资企业所得税前应如何扣除?
  • 社保局发放的稳岗补贴怎么入账
  • 公司购买了地板可以退吗
  • 企业对外付汇怎么入账
  • 公司闲置资金理财做了三年定期存款
  • 个体户申报重复申报怎么办
  • 赔偿费计入费用减应收账款怎么做账
  • 无偿划拨资产的入账价值
  • 如何查询一个公司的资质情况
  • 救护车能随便买吗
  • 房屋租赁个人所得税缴纳标准是多少
  • 增值税建筑业税率几次调整
  • 事业单位个税可以抵扣吗
  • 建设单位收到施工承包单位的单位工程验收申请后应组织
  • 预付款对应的会计科目
  • 地税人工费税率计算是怎样的?
  • 2016年红冲发票流程
  • 增值税发票查验平台怎么查询发票
  • 安装属于劳务报酬吗
  • 固定资产在什么时候计提折旧
  • 外派人员计算个人所得税可否有附加扣除
  • 回迁安置房拆一次多少钱
  • 调整增值税税率
  • mac死机什么原因
  • 个体户和有限公司哪个税收低
  • 无形资产怎样计算折旧
  • 建筑业产值填哪个数据
  • 企业工会经费计提比例
  • windows10设备如何打开蓝牙
  • php判断ua
  • 拆迁地下室
  • scrfs.exe - scrfs是什么进程 有什么用
  • 育空怀特霍斯附近的北极光,加拿大 (© Design Pics/Danita Delimont)
  • 公司出租房屋怎样开发票的税务局率?
  • php多维数组遍历输出
  • uniapp打包成h5如何调用原生
  • 上年未结转的成本今年可以结转吗
  • 外经证核销期限是多久
  • 出差住宿费会计分录怎么做
  • npm ERR! notarget No matching version found for xxx@^1.0.64. npm 插件安装失败
  • 计算机视觉算法
  • ip命令查看ip地址
  • thinkphp框架设计原理
  • 委托代销商品委托方和受托方会计分录
  • 出口退税转内销的话如何算发票金额
  • 金融资产的转换
  • python怎么设置窗口界面
  • 红字发票可以跨越开吗
  • 企业收到工程款会计分录
  • 公司交公积金可以上调吗
  • mysql修改表结构会锁表吗
  • mongo删除数据库命令
  • 接待客户的住宿费发票是开谁的
  • 为什么应交增值税要转入未交增值税
  • 销项负数发票能作废吗
  • SQL2005 provider: 命名管道提供程序 error: 40 无法打开到 SQL Server 的连接
  • 定期定额个体经营所得税申报错了怎么办
  • 企业购买理财产品收益要交税吗
  • 财政补贴收入要交增值税税率
  • 缴纳的工会经费现金流量表怎么记
  • 主营业务收入的明细科目怎么写
  • 房地产开发票的时间?
  • 小规模公司月末报税吗
  • 航天信息开票软件客服
  • 锅炉设备销售
  • 商业零售企业商品进销差价
  • 会计中的记账是什么意思
  • mysql 5.7.34安装
  • freebsd怎么安装
  • mac怎么获取文件路径快捷键
  • JavaScript的strict模式与with关键字介绍
  • vue使用jssdk
  • jquery可以实现哪些效果
  • 个人经营所得定率征收税率表
  • 提高税务干部七种能力的意义
  • pageoffice控件安装不上
  • 浙江省打造先行省
  • 主管局长和分管局长谈心谈话
  • 税控盘口令密码怎么修改
  • 对方申请了红字信息表我这边怎么操作
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设