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

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

摄像头实时捕捉画面,从画面中解析出蓝色的区域,并与预设图像对比,相似度小于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 条评论
登录 后参与评论

相关文章

来自专栏IT派

TensorFlow轻度入门

导语:虽然已经发过很多篇关于Tensorflow的入门推文了,不过我觉得有的读者应该是处于门外汉的状态,何不趁此就开始自己动手走一遍呢?另外再次感谢支持小编上课...

3514
来自专栏AI研习社

可应用的目标检测代码来了,一秒锁定你

计算机视觉是人工智能的一个重要领域。计算机视觉是一门关于计算机和软件系统的科学,可以让计算机对图像及场景进行识别和理解。计算机视觉还包括图像识别、目标检测、图像...

731
来自专栏大数据文摘

手把手 | 如何训练一个简单的音频识别网络

2443
来自专栏目标检测和深度学习

用好这几款炼丹利器,调参从此得心应手 | Let's Fork

#实现显示结果的CV开发环境 ? Live CV 是一个用于实现显示结果的计算机视觉算法开发环境,基于 QtQuick 开发。它可以用于交互、链接和调整算法,以...

3578
来自专栏磐创AI技术团队的专栏

TensorFlow + Keras 实战 YOLO v3 目标检测图文并茂教程(文末有惊喜)

1753
来自专栏人工智能头条

如何确保机器学习最重要的起始步骤"特征工程"的步骤一致性?

关于特征工程,业界有这么一句话:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。

522
来自专栏AI研习社

Github 项目推荐 | 微软开源 MMdnn,模型可在多框架间转换

近期,微软开源了 MMdnn,这是一套能让用户在不同深度学习框架间做相互操作的工具。比如,模型的转换和可视化,并且可以让模型在 Caffe、Keras、MXNe...

3738
来自专栏杨熹的专栏

详解 TensorBoard-如何调参

什么是 TensorBoard TensorBoard 是 TensorFlow 上一个非常酷的功能,我们都知道神经网络很多时候就像是个黑盒子,里面到底是什么样...

5308
来自专栏ATYUN订阅号

TensorFlow.js发布:使用JS进行机器学习并在浏览器中运行

TensorFlow.js是为JavaScript开发者准备的开源库,可以使用JavaScript和高级图层API完全在浏览器中定义,训练和运行机器学习模型!如...

1506
来自专栏技术翻译

Orange:用于创建机器学习模型的便捷开源工具

在本教程中,我将演示Orange,一种用于机器学习的工具。Orange是一款极易使用,轻巧的拖放式工具。更重要的是,它是开源的!如果您是Anaconda用户,那...

720

扫码关注云+社区