本章节内容:拿到项目的思考以及表盘识别
我基本上把优快云上所有的关于指针读数文章以及下载都看过了,有需求或者疑问的同学可以来交流,资源也可以免费给了,最后的识别效果就如上一篇的图片所示,运行程序占用的资源经过优化之后特别小,GPU可有可无。回头写个论文弄个专利应该挺轻松的。
开发语言:python3.0+
调用包:
1.sys 用于退出程序:sys.exit()
2.time 用于计算时间,还用于matplotlib画图的计时
3. win32api 用于监测按钮 win32api.GetKeyState(27)
4. cv2 主要调用,大部分处理都需要opencv,版本为3.4
5. imutils 主要用于计算中心点坐标
6. matplotlib 画图
7. numpy 数学
8. PIL 主要用于转化arry数组为图像
具体版本见下表,懒得一一对应了,自己找一下吧
说一下刚拿到需求的思路以及后来否定的过程:
拿到的需求:一个表盘,识别速度以及信号,表盘为圆形
想法:hog+svm训练模型,实时追踪表盘位置,霍夫直线识别直线,以角度识别对应的速度
实践:hog+svm的速度可以,但是霍夫直线检测效果特别差
原因: 因为表盘使用的指针是一个椭圆形指针,前端有一小节指针,识别效果不理想,
应对办法:使用opencv图像处理对表盘进行二值化之后,使用细化算法(Image Thinning),和之前看的腐蚀膨胀差不多,看了都可以很快理解,但是加上细化算法之后识别效果还是很差,此路不通,换方案。
由于中间厂家换了一种表盘,使用的hog+svm寻找表盘就不可以用了,换为霍夫圆形检测(hough cirlce Transform),调参是一门大学问,可以根据自己需求进行调参。
circles = cv2.HoughCircles(
binary, cv2.HOUGH_GRADIENT, 2, 1000, param1=100, param2=100, minRadius=10, maxRadius=5000)
但是有一个问题,一直进行霍夫检测圆对于计算机的性能要求特别高,时间复杂度空间复杂度大,对于处理视频而言效率达不到,这里我想到了一个解决办法,使用第一次识别出来的圆形对图像进行切割,后续视频中所有的圆形全部按照这个切割区域进行识别,大大降低了设备性能损耗。摄像机位置后期固定,此方案为多种方案对比下最好的方案。
对比方案:1.优快云某博文方案:模板匹配法
2.自己之前的方案:hog+svm
3.视频每一帧都进行霍夫圆形检测方案
4.优快云某下载方案:忘了啥方案反正我这边做的效果都没上述对比效果好。
本章写到这里吧,工作原因,改天继续