摄像头对于颜色的识别,我们在上一篇文章中有具体的介绍,并介绍了OpenCV中的一些常见知识点,这里我们来对颜色识别在无人驾驶中,做一个具体应用。

有兴趣的可以先看下本人拍摄的一个视频:无人车识别颜色并跟踪

通过视频我们可以看到无人车,会跟着自己设定的颜色而行驶,包括转弯的实现。那么无人车是如何识别颜色并跟踪的呢?其中的转弯又是怎么做到的呢?我们先来看下代码,代码就是很好的解释:

1、无人驾驶代码

from jetbotmini import Camera
from jetbotmini import bgr8_to_jpeg
import cv2
import numpy as np
import torch
import torchvision
import traitlets
import ipywidgets.widgets as widgets
from IPython.display import display
from jetbotmini import Robot# 实例化摄像头
camera = Camera.instance(width=300, height=300)# 蓝色上下限数组
color_lower = np.array([100,43,46])
color_upper = np.array([124, 255, 255])# 初始化无人车驱动电机实例
robot = Robot()# 图片、速度进度条、转弯进度条组件的显示
image_widget = widgets.Image(format='jpeg', width=300, height=300)
speed_widget = widgets.FloatSlider(value=0.4, min=0.0, max=1.0, description='speed')
turn_gain_widget = widgets.FloatSlider(value=0.5, min=0.0, max=2.0, description='turn gain')
display(widgets.VBox([widgets.HBox([image_widget]),speed_widget,turn_gain_widget]))width = int(image_widget.width)
height = int(image_widget.height)center_x = 0
def execute(change):# -----这块属于对图像的处理与颜色检测,上篇文章有详细介绍------frame = camera.valueframe = cv2.resize(frame, (300, 300))frame_=cv2.GaussianBlur(frame,(5,5),0)hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)mask=cv2.inRange(hsv,color_lower,color_upper)mask=cv2.erode(mask,None,iterations=2)mask=cv2.dilate(mask,None,iterations=2)mask=cv2.GaussianBlur(mask,(3,3),0)cnts=cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]# ------------------------------------------------------------------------# 检测到了目标if len(cnts)>0:cnt = max(cnts,key=cv2.contourArea)(color_x,color_y),color_radius=cv2.minEnclosingCircle(cnt)if color_radius > 10:# 将检测到的颜色标记出来cv2.circle(frame,(int(color_x),int(color_y)),int(color_radius),(255,0,255),2)# 偏离中心位置来判断是否转弯# [-1,1]center_x = (150 - color_x)/150robot.set_motors(float(speed_widget.value + turn_gain_widget.value * center_x),float(speed_widget.value - turn_gain_widget.value * center_x))# 没有检测到就停止else:passrobot.stop()# 更新图像显示到Image组件image_widget.value = bgr8_to_jpeg(frame)

将摄像头初始化,并且定义了一个能够检测到颜色的方法,除了识别颜色之外,我们还做了一个颜色目标位置在摄像头左右的偏移量,这个是用来给左右马达更新不同的速度值的。这个就是为什么无人车可以进行转弯的原因了,目标的中心位置在图像中心位置的偏离值,我们将其添加到马达的速度中去,左右马达一个是加另一个是减,这样就形成了差速!
接下来我们调用这个方法:execute({'new': camera.value})
当然这种调用只能检测到一帧,我们需要的是实时更新摄像头的图像,实时的去跟踪变化的场景。
我们使用observe方法来实时处理:

camera.unobserve_all()
camera.observe(execute, names='value')

这样就可以实时检测蓝颜色目标,如果检测到目标,就会跟随目标行驶,如果没有检测到,无人车将会停止。

2、无人车停止

虽然上面代码可以在没有检测到目标的时候,无人车会自动停止,但有时候我们也想要强制停止无人车,如下:

import time
camera.unobserve_all()
time.sleep(1.0)
robot.stop()

我们可以看到上面的代码整体跟颜色识别章节差不多,区别在于多了一个无人车的加入,更准确来讲是多了左右两个轮子(马达),这两个轮子是差速轮,意思就是各自拥有一个马达驱动,速度可以不同(速度一样就是直行),这样才能够转弯和漂移等操作,根据识别到的颜色的中心位置来更新左右马达的速度,这样就有了跟踪的效果。

其中如何驱动无人车的更多详细介绍可以查阅:Jetson Nano驱动机器人的左右两路电机

3、camera.observe

observe(handler, names=traitlets.All, type='change')

设置一个在trait改变时调用的处理程序
其中handler是回调函数,调用的就是上面定义的execute函数,handler(change),其中change是一个字典,所以这也是调用execute时,参数是字典的原因{'new': camera.value}
在type为change的情况下,有以下几个键:

owner:HasTraits实例
old:修改后的trait属性的旧值
new:修改后的trait属性的新值
name:修改后的trait属性的名称

所以这里就做到了一个类似死循环的效果,可以对摄像头的每一帧进行更新。

4、camera.unobserve_all

camera.unobserve_all(name=traitlets.All)

删除指定名称的任何类型的trait更改处理程序。如果未指定名称,删除所有trait通知器。或者通俗来讲就是关闭视频流,释放资源的意思。
所以我们看到在camera.observe和robot.stop()之前都先做一步释放资源的处理以及停止无人车。

5、CSI摄像头

这里对摄像头做一个附加解释,随着人工智能的发展,自动驾驶,智能家居等应用都离不开摄像头,而一款低功耗低成本高清晰的摄像头就显得尤为重要了。一般大家见到的摄像头是USB接口,而这里是使用CSI接口协议的摄像头,如图:

可以看到这里是15针的排线,不是常见的USB接口,CSI接口是主机处理器与摄像头模块之间的高速串行接口,最关键点是能耗低,这也导致了现在手机高清摄像头的普及。

无人驾驶中如何识别颜色并跟踪的具体应用相关推荐

  1. 无人驾驶中识别颜色并跟踪的优化(加入PID算法控制)

    我们了解到无人驾驶是如何去识别颜色的,以及无人车能够跟随颜色目标的演示.回到现实中我们发现,无人车的速度控制是很关键的,这个涉及到安全问题,比如等待红绿灯时,该减速或加速超车等这样很常见的情形,在上节 ...

  2. 使用OpenCV-python实现颜色特征跟踪视频中的物体

    用颜色特征跟踪视频中的物体 文章目录 问题背景和基本思路 核心代码 完整代码和运行效果 问题背景和基本思路 这里模拟提取图片中的手机壳. 发现手机壳有一个显著的特征,就是颜色基本都是蓝色. 所以这里尝 ...

  3. 公开课精华 | 无人驾驶中感知的挑战与尝试

    本文总结于深圳元戎启行公司点云感知方向技术负责人邹晓艺,在深蓝学院的关于无人驾驶中感知的挑战与尝试的公开课演讲内容. 全文约3500字 主讲人邹晓艺来自深圳元戎启行公司,曾在百度IDL和ADU部门工作 ...

  4. 基于深度学习的计算机视觉技术在无人驾驶中的应用

    基于深度学习的计算机视觉技术在无人驾驶中的应用 背景 当前,人工智能是下一代信息技术的核心和焦点,而无人配送则是人工智能典型的落地场景,因为完成无人配送需要自动驾驶技术.机器人技术.视觉分析.自然语言 ...

  5. python识别魔方色块_【雕爷学编程】MicroPython动手做(08)——零基础学MaixPy之识别颜色...

    早上用百度搜了一下"颜色识别",多少有了一点大致的概念,还是老办法,动手做,多实验,往前走,还请各位老师多多指点. OpenCV(百度百科) 是一个基于BSD许可(开源)发行的跨平 ...

  6. 一文详解无人驾驶中的各种感知传感器

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 文章导读 本文介绍无人驾驶中几种主流的环境感知传感器,包括视觉摄像机.毫米波雷达.超声波雷达.激光雷达 ...

  7. 人工智能的十大应用(无人驾驶丨人脸识别丨医学图像处理)

    导读:人工智能已经逐渐走进我们的生活,并应用于各个领域,它不仅给许多行业带来了巨大的经济效益,也为我们的生活带来了许多改变和便利.下面,我们将分别介绍人工智能的一些主要应用场景.这篇文章,希望对你职业 ...

  8. 激光雷达和摄像头融合在无人驾驶中的应用

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 由于精度和可靠性的优势,激光雷达+摄像头方案在机器人和无人驾驶汽车中已经成为趋势.如何高效的融合不同的 ...

  9. 增强学习在无人驾驶中的应用

    作者:王江,吴双,刘少山 本文为<程序员>原创文章,未经允许不得转载,更多精彩文章请订阅2016年<程序员> 本文是无人驾驶技术系列的第六篇,着重介绍增强学习在无人驾驶中的应用 ...

最新文章

  1. 机器学习三要素之数据、模型、算法
  2. Java泛型 通配符? extends与super
  3. Flink并行度与Slot的关系
  4. shuffleNetv2 测试
  5. 黑苹果挂载不了分区_让黑苹果变得更完美——BCM94532HMB无线蓝牙接力完美驱动!...
  6. html5新特性:异步上传文件
  7. 为什么说机器学习不是人工智能?
  8. 软考系统架构师笔记-案例分析重点(一)
  9. IJKMediaFramework框架的集成和使用实例一枚
  10. 敏捷开发系列学习总结(16)——给Scrum Master的十个建议
  11. Ubuntu Linux服务器安装Hadoop并配置伪分布式
  12. c++ vector使用方法收集
  13. 2020 APP批量头像,高质量严选真实用户头像
  14. Android的SharedPreferences和SQLite
  15. RLC串联电路的谐振相关参数计算
  16. FOR 循环 珠峰折纸
  17. 【工程记录】基于松灵Scout mini底盘实现小车自主探索建图
  18. 创建表 编码_创建没有编码的专业商业网站
  19. Stream流分组求和
  20. 揭开程序员身上的「专业面纱」:非科班程序员,都来自哪些专业?

热门文章

  1. 大数据的技术包括什么?
  2. [RK3399][Android8.1/9]双屏异显
  3. 六、【服务器】基本概念-2-内存
  4. 串口实时数据显示、记录、绘图、计算软件(hdntCenter)
  5. python秒数变分钟_将毫秒转换为小时、分钟和秒python
  6. 检验基础的 JavaScript 面试题
  7. HTML淘宝网的制作实训关键点,《网页设计与制作》实训指导书.doc
  8. 论如何用添加任务计划来实现电脑自动关机
  9. 2018秋招blibli算法工程师
  10. Matlab中disp函数的使用