基于openCV实现的单目相机行人和减速带检测

概述

在计算机视觉项目中,相机标定是一项至关重要的任务,因为它可以校正相机内部参数,消除因镜头畸变等因素导致的图像失真,从而提高后续图像处理和分析的精度。在这个项目中,相机标定的核心功能集成在名为`calibration.py`的Python脚本中,涵盖了从采集原始图像、进行相机标定计算到应用畸变矫正算法的全过程。特别地,针对鱼眼相机的畸变校正遇到了一些挑战,而其他类型的相机则能够顺利完成标定流程。

在这里插入图片描述

使用方法

用户在运行calibration.py时,会遵循清晰的操作指南逐步完成整个标定过程。首先,程序会在用户的指示下自动或选择性地清空标定板图片文件夹,以便收集新的图像数据。接下来,用户可以通过capture阶段预设拍照数量,确保获取足够丰富的标定样本。这些样本将用于后续的calibrate阶段,其中程序会根据拍摄的标定板图像精确估计相机的内参和畸变系数,并将不同类型的相机标定结果分别写入各自的配置文件中。最后,undistort阶段允许用户将原始图像应用所获得的标定参数进行去畸变处理。

关于标定板的选择和使用,作者在个人博客“雨白的博客小屋”中有详细介绍,并指明了本项目采用的是具有11列和8行黑白棋盘格图案的标定板,每格宽度为1cm。使用者需确保在程序中正确设置标定板参数,例如在calibration.py中声明为board = Board(11,8,10),若使用不同规格的标定板,则务必相应修改这些参数。

随着时间的推进,项目在2023年5月14日进行了重要更新,将部分标定相关的辅助函数拆分并整合到utils/calibrate模块中,以方便其他程序调用。同时,虽然提到了新增了生成鸟瞰图的功能并通过birdeye.py实现,但这一功能在后期已被移除。值得注意的是,鸟瞰图转化过程中,采用了以标定板左上角为基础,并向左上方向平移200mm的方式来定义标定板平面坐标系的原点。

另一方面,项目还包含了单应矩阵标定的内容。为了实现空间坐标与图像坐标的映射关系,作者巧妙地利用宿舍内的瓷砖作为特征点进行标定。通过OpenCV中的findHomography函数,可以从多个匹配点对中计算出单应矩阵H。然而,此处作者强调了一个易忽视的细节:findHomography得到的H矩阵实际上只满足了一个近似的线性变换关系,它并未直接给出标准齐次坐标形式的转换,因此在实际应用中需要额外处理,将其转换为符合齐次坐标的表示形式。用户通过运行getHomography.py脚本来拍照、标记像素点并进行标定,进而利用得到的H矩阵,配合getDistance.py进行基于像素点的测距实验。

结果

在这里插入图片描述

在目标检测方面,随着项目的深入,于2023年5月29日开始尝试使用YOLOv7框架训练自定义数据集。作者精心组织了数据集的构建流程,其中包括将待标注的图片放置于"data/images"文件夹,使用labelimg工具进行精细标注,将标注结果存放在"data/labels"文件夹。随后,依据具体指导文档,在YOLOv7项目目录下运行data_process.py脚本,将原始数据划分为训练集、验证集等,并生成相应的路径文件。

更新

在此过程中,作者列举了一系列训练过程中踩过的“坑”,为后续开发者提供了宝贵的经验教训:

  1. 对于train.py中的config文件,当尝试使用预训练模型时,曾出现"assets"的KeyError,这通常指向预训练模型路径的错误,提醒用户仔细检查配置文件中的路径设置。
  2. 在train.txt等文件中记录的路径建议使用绝对路径,可以通过Python内置的os模块获取当前工作目录并结合os.join()函数拼接路径,确保程序运行时能找到正确的文件位置。
  3. 若计划使用CPU而非GPU进行训练,需在utils/loss.py文件中将涉及设备分配的部分从"gpu: 0"改为"cpu: 0"。
  4. 当利用预训练权重初始化模型训练新类别时,必须在cfg/training/yolov7.yaml文件中将nc参数修改为对应的类别数量。
  5. 强烈建议在yaml配置文件中避免使用中文字符,以免引发编码错误。

代码

"""
This .py is to compute H between two planes:image plane and ground plane
(本程序实现:求解成像平面和大地平面的单应矩阵)
"""import cv2
import numpy as np
from utils.calibrate import *
from utils.capture import Capture
from utils.opFile import writeHomographyToFile
from configs.Intrinsic_normal import cameraMatrix,distCoeff
from utils.measureDistance import getDistance# mouse callback function
def click_corner(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDOWN:xy = "%d,%d" % (x, y)cv2.circle(img, (x, y), 1, (255, 0, 0), thickness = -1)cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,1.0, (0,0,0), thickness = 1)print(x,y)dist = round(getDistance(x,y),5)print("dist=",dist,"m")if __name__ == '__main__':img = cv2.imread("./groundImg/61.png")cv2.destroyAllWindows()# click the cornercv2.namedWindow("groundBoard")cv2.setMouseCallback("groundBoard",click_corner)while(1):cv2.imshow("groundBoard", img)key = cv2.waitKey(1) & 0xffif key == ord('q') or key == ord('Q'):break

此外,项目还进行了技术创新和优化,比如加入了CBAM(Convolutional Block Attention Module)注意力机制,增强了网络对目标特征的学习能力;并且尝试了二值化处理等图像预处理手段,旨在提升模型性能。

然而,在最终的试验结果展示中,尽管已经付出了诸多努力,但目标检测在视频截图中的远程表现并不理想。作者推测这可能是由于相机本身的分辨率限制,导致在较远距离处捕捉到的物体特征模糊不清,从而影响了模型的训练效果和预测精度。这也提示我们在实际应用场景中,除了算法设计和训练策略之外,硬件设备的选择同样至关重要。

最后,计算机视觉、图像处理、毕业辅导、作业帮助、代码获取,远程协助,代码定制,私聊会回复!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/542077.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音频占用磁盘空间太多 需要把mp3音频转aac音频缩小占用空间 应该怎么操作?

一:什么是aac格式? aac是一种音频压缩格式,它是MPEG-2标准下的一种音频压缩方式,也可以作为HE-AAC,AAC或AAC-LC格式使用,是音频压缩领域中的一种重要格式。与MP3的比较,aac在保证音质的同时可以…

uniapp uview 头像裁剪组件的问题

当切换页面频繁进出头像裁剪组件u-avatar-cropper.vue 获取同一个设备信息时会出现两种不同的高度具体如下 导致 头像裁剪页面高度出现问题,下方按钮被canvas组件遮盖了 解决方法 在进入这个页面前的一个页面做如下代码操作 直接将设备信息提前获取,保…

ZooKeeper命令和监控详解

ZooKeeper监控命令详解 在分布式系统中,ZooKeeper作为一个非常重要的协调服务,它的健康状态直接影响到整个系统的可靠性和稳定性。因此,对ZooKeeper进行有效监控是非常必要的。本文将详细介绍ZooKeeper提供的命令行工具zkCli.sh,…

树莓派与电脑视频实时传输实现

编程环境 1、 树莓派 4B 2、 windows 编程语言 python 应用 tkinter scoket opencv 效果 视频同传 服务端视频初始化 服务端视频读取 windows 客户端接收视频流,队列存储 解析视频,存入队列 ui页面数据刷新 下载链接:https://…

移远通信亮相AWE 2024,以科技力量推动智能家居产业加速发展

科技的飞速发展,为我们的生活带来了诸多便利,从传统的家电产品到智能化的家居设备,我们的居家生活正朝着更智能、更便捷的方向变革。 3月14日,中国家电及消费电子博览会(Appliance&electronics World Expo&#xf…

使用 Boot Camp 助理查明您的 Mac 需不需要 Windows 安装介质

使用 Boot Camp 助理查明您的 Mac 需不需要 Windows 安装介质 当前的 Mac 机型无需介质即可安装 Windows,也就是说,您不需要用到外置驱动器。较早的 Mac 机型需要用到 USB 驱动器或光盘驱动器。使用 Boot Camp 助理可查明您需要用到什么。 Boot Camp 助…

CSS之字体镂空

方法一(有缺陷)&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Examples</title> <style> .num1{-webkit-text-stroke: 0.4px red; }</style> </head> <body><div clas…

git bash 命令行反应慢、卡顿(定位出根本原因)

参考该博主&#xff1a; https://blog.csdn.net/weixin_50212044/article/details/131575987?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-131575987-blog-130024908.235v43pc_blog_bottom_relevance_base4&spm1001.210…

无硫防静电手指套:高科技产业的纯净与安全新选择

随着科技的飞速发展&#xff0c;高科技产业对于生产环境的纯净度和产品的防静电要求日益严格。为了满足这一高标准的需求&#xff0c;无硫防静电手指套应运而生&#xff0c;以其独特的无硫特性和出色的防静电功能&#xff0c;迅速成为了高科技产业中的纯净与安全新选择。 无硫手…

Linux:网络的初步认知

文章目录 网络的认知如何理解协议 本篇将会引入到网络的话题 网络的认知 第一个问题是&#xff0c;网卡是文件吗&#xff1f;答案是显然的&#xff0c;在Linux下一切皆文件&#xff0c;基于这个原理对于网卡依然是文件&#xff0c;所以第一个建立起的初步认识是&#xff0c;不…

AI日报:欧盟人工智能法案通过后行业面临合规障碍

文章目录 人工智能新规对web爬网的影响对英国的影响。 人工智能新规 立法者已经通过了欧盟人工智能法案。企业现在必须确保其人工智能应用程序符合规则。 全面的新规定对可能影响公民权利的人工智能系统实施制裁&#xff0c;并有可能彻底禁止某些系统。 违反规定的公司可能面…

excel导入功能(适用于vue和react都可)

如图所示&#xff08;需求&#xff09;&#xff1a;点击导入excel后&#xff0c;数据自动新增到列表数据内 这里以vue3 andt 为例 template 标签内代码 &#xff1a; <a-uploadname"file":multiple"true":show-upload-list"false":customR…