机器视觉:用图像驱动智能小车

本篇大致探索下图像的识别。实现了颜色识别,以及利用直方图来计算图像相似度。先来个视频。

摄像头实时捕捉画面,从画面中解析出蓝色的区域,并与预设图像对比,相似度小于0.5(0为完全匹配),闪光灯闪5秒。注意流量和音量。

取一张返回到PC上的图像,分了四部分:

左上:640*480为摄像头实时图像

左下:为预设图片,以及预设图片蓝色通道的直方图,颜色空间为HSV

右上:640*480为识别出的蓝色区域,上边红色数字为直方图相似度

右下:实时图像获取的蓝色区域的直方图

如下图示:识别成功,直方图近似

识别失败,估计是光照和角度影响,直方图差异大

大致描述下实现过程,先准备预设图片,用树莓派的摄像头拍一下,准备好,省的后续环境因素影响大,难以匹配。预设图片和实时捕获的图片同样的处理方法,开始愉快的写代码:

转换颜色空间:

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

定义感兴趣的颜色区域

lower_blue = np.array([110, 50, 50])

upper_blue = np.array([130, 255, 255])

mask = cv2.inRange(hsv, lower_blue, upper_blue)

为了过滤掉其他小面积的蓝色噪点,用3*3的卷积核腐蚀2次,膨胀一次,

mask = cv2.inRange(hsv, lower_blue, upper_blue)

kernel = np.ones((3,3), np.uint8)

erosion = cv2.erode(mask, kernel, iterations = 2)

dilation = cv2.dilate(erosion, kernel, iterations = 1)

得到蓝色区域

res = cv2.bitwise_and(img, img, mask= dilation)

计算直方图

originHist = cv2.calcHist([res], [0], mask, [256], [0, 256])

比较两个直方图,用巴氏距离,其他还有卡方或是相关性比较等还没来得及对比测试。设置一个比较宽松的范围,0.5以下即认为匹配成功,最好的情况是0.16。匹配成功后让小车的灯闪5秒。

comp = cv2.compareHist(flashHist, currentHist, cv2.HISTCMP_BHATTACHARYYA)

if comp

car.flash_light_on(80)

time.sleep(5)

car.flash_light_off()

最后将拼接好的图片写到系统临时目录下,用mjpg-streamer通过http输出,浏览器可查看

output[0:480,-640:] = resImg

cv2.imwrite(('/tmp/cv/output%03d.jpg' % (i%100)), output)

启动mjpg_streamer

mjpg_streamer -i "input_file.so -f /tmp/cv/" -o "output_http.so -w /usr/local/share/mjpg-streamer/www"

如果OpenCV无法访问摄像头,执行下面命令:

sudo modprobe bcm2835-v4l2

最后执行

python3 SmartCarControlByCV.py

打开浏览器,用以下地址可查看效果,延迟比较大。mjpg-streamer的使用见历史文章。

http://ip:8080/?action=stream

当然也可以训练其他的图片,让小车做其他的行为,在树莓派之外的环境也可实现。本文写的比较稚嫩,方法也比较初级,慢慢升级,后续手势控制也有了可行性。

完整的代码见:SmartCarControlByCV.py

Git地址:

https://github.com/Cat-31/Cat31Driver.git

复制链接可在浏览器查看代码

https://github.com/Cat-31/Cat31Driver/tree/master

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玉树芝兰

如何用 R 绘制动态统计图?

漫长的演化史上,人类的感官只要能有效发现食物(包含猎物),快速捕获危险信号(例如捕食者逼近),和同类高效交流(使用声音、表情或肢体语言)就大概率可以在残酷的自然...

652
来自专栏PPV课数据科学社区

TensorFlow On Spark 开源项目分析

原文:http://sparkdata.org/?p=423&utm_source=tuicool&utm_medium=referral 作者:京东大数据技术...

9696
来自专栏Y大宽

TBtools基因家族分析详细教程(3)基因家族成员的进化分析1

其中,No.of Bootstrap Replication默认最小50,即使设定10也自动调整为50。

2063
来自专栏捷径库

【捷径App】捷径规则网站分享

iphone 捷径App 是一个可以把你手机一切操作都自动化的应用,能让手机自动完成一些平时操作起来比较繁琐的、步骤很多的人工操作。比如直接翻译剪贴板上的单词,...

1010
来自专栏AI科技大本营的专栏

Dropbox如何使用机器学习从数十亿图片中自动提取文字

【导读】提到 Dropbox,大家可能都知道这是一个文件同步、备份、共享的云存储软件。其实 Dropbox 可以实现的功能远不止这些。今天就为大家介绍 Drop...

602
来自专栏崔庆才的专栏

跟繁琐的模型说拜拜!深度学习脚手架 ModelZoo 来袭!

好多天没有更新原创文章了,国庆前的一段时间确实比较忙,整个九月在参加各种面试,另外还有公司的项目,还有自己的毕设,另外还需要准备参加一些活动和讲座,时间排的很紧...

632
来自专栏AI科技大本营的专栏

今天被TensorFlowLite刷屏了吧,偏要再发一遍

翻译 | 刘畅Troy 谷歌今天终于发布了TensorFlow Lite 的开发者预览!该项目是在5月份的I/O开发者大会上宣布的,据Google网站描述,对移...

4186
来自专栏IT大咖说

小米深度学习平台架构与实现

摘要 深度学习的概念源于人工神经网络的研究,含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的...

3666
来自专栏软件

可视化你的BLAST结果

人类已经使用数据可视化技术很长一段时间了,图像和图表已被证明是一种有效的方法来进行新信息的传达与教学。有研究表明,80%的人还记得他们所看到的,但只有20%的人...

26310
来自专栏AI研习社

手把手教你如何用 OpenCV + Python 实现人脸识别

下午的时候,配好了 OpenCV 的 Python 环境,OpenCV 的 Python 环境搭建。于是迫不及待的想体验一下 opencv 的人脸识别,如下文。...

5467

扫码关注云+社区