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

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

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

相关文章

来自专栏一棹烟波

光场相机重聚焦之三——Matlab光场工具包使用、重聚焦及多视角效果展示

这一小节说一下Matlab光场工具包的使用,展示重聚焦和多视角的效果。 从Lytro illum中导出的raw数据为.lfp格式的光场图像文件(约52M大小),...

2665
来自专栏大数据智能实战

tensorflow model中目标对象检测包的编译和测试

前段时间,谷歌开放了 TensorFlow Object Detection API 的源码,并将它集成到model中。这个代码库是一个建立在 TensorFl...

1978
来自专栏北京马哥教育

Python破解验证码,只要15分钟就够了!

让我们一起攻破世界上最流行的WordPress的验证码插件 每个人都讨厌验证码——在你被允许访问一个网站之前,你总被要求输入那些烦人的图像中所包含的文本。 验...

3536
来自专栏人工智能的秘密

教你如何利用机器学习破解网站验证码

相信每个人都对验证码没有好感——你必须输入图像里的文本,然后才能访问网站。验证码的设计是为了防止计算机自动填写表格,以此验证你是一个真实的人。但随着深度学习和计...

9933
来自专栏应用案例

使用Python+Tensorflow的CNN技术快速识别验证码

2018年1月26/1月12日 ? NVIDIA 深度学习学院 带你快速进入火热的DL领域 正文共2929个字,17张图,预计阅读时间:8分钟。 近年来,机器学...

3456
来自专栏云时之间

深度学习与神经网络:基于自建手写字体数据集上的模型测试

在上一篇文章中,我们使用mnist数据集去做了一个识别的小型神经网络,在今天的这篇文章里,我们将要通过使用自建数据集去检验上一篇文章的模型,从而真正的可以去应用...

4297
来自专栏有趣的Python

5- OpenCV+TensorFlow 入门人工智能图像处理-图片的几何变换(一)

图片的几何变换 图片的几何变换章节介绍 图片位移 & 图片缩放 图片剪切 & 图片镜像 图片仿射变换 Hog + Svm 小狮子识别 计算机视觉的基础: 裁剪样...

3533
来自专栏数据小魔方

excel数据转置——一维表与二维表之间的转化!

今天跟大家分享excel数据转置——一维表与二维表之间的转化! ▽ 我们在做数据搜集整理的时候 通常会遇到要将原始数据做转置处理 如下图案例所示 ? 这是一张典...

3055
来自专栏专知

【干货】主题模型如何帮助法律部门提取PDF摘要及可视化(附代码)

【导读】本文是Oguejiofor Chibueze于1月25日发布的一篇实用向博文,详细介绍了如何将主题模型应用于法律部门。文章中,作者分析了律师在浏览大量的...

3287
来自专栏大数据挖掘DT机器学习

Python文本挖掘:基于共现提取《釜山行》人物关系

《釜山行》是一部丧尸灾难片,其人物少、关系简单,非常适合我们学习文本处理。这个项目将介绍共现在关系中的提取,使用python编写代码实现对《釜山行》文本的人物关...

3487

扫码关注云+社区