-
Notifications
You must be signed in to change notification settings - Fork 11
Yanshee 人工智能 4 图像及视频记录中的奥妙
通过本课程你可以学习一些机器人视觉的基本常识:包括图像与视频传播原理等,此外我们会通过简单的例子来说明Yanshee机器人是如何利用树莓派本身的摄像头功能完成拍照和视频录制和视频流传输的。
人类通过自己的眼睛来完成对周边环境世界的感知与记录,我们可以看到流动的白云、高速行驶的列车、连绵的大山。但是机器人也想拥有这种能力,于是摄像头就应用而生了。我们都知道摄像头有两个基本功能,那就是拍照和视频传输,他们的基本原理是什么呢?我们的机器人本身又是如何通过摄像头来完成拍照和视频传输的工作的呢。这节课将为大家展开谈论这些问题。
摄像头一种视频输入设备,一般具有视频摄像/传播和静态图像捕捉等基本功能,它是借由镜头采集图像后,由摄像头内的感光组件电路及控制组件对图像进行处理并转换成电脑所能识别的数字信号,然后借由并行端口或USB连接输入到电脑后由软件再进行图像还原。摄像头可分为数字摄像头和模拟摄像头两大类。数字摄像头可以将视频采集设备产生的模拟视频信号转换成数字信号,进而将其储存在计算机里。模拟摄像头捕捉到的视频信号必须经过特定的视频捕捉卡将模拟信号转换成数字模式,并加以压缩后才可以转换到计算机上运用。数字摄像头可以直接捕捉影像,然后通过串、并口或者USB接口传到计算机里。电脑市场上的摄像头基本以数字摄像头为主,而数字摄像头中又以使用新型数据传输接口的USB数字摄像头为主,市场上可见的大部分都是这种产品。被广泛的运用于视频会议,远程医疗及实时监控等方面。
分辨率是用于度量位图图像内数据量多少的一个参数,通常表示成dpi(dot per inch,每英寸点)。简单地说,摄像头的分辨率是指摄像头解析图象的能力,也即摄像头的影像传感器的像素数。最高分辨率就是指摄像头能最高分辨图像的能力的大小,即摄像头的最高像素数。现在市面上较多的30万像素CMOS的分辨率为640×480,50万像素CMOS的分辨率为800×600。分辨率的两个数字表示的是图片在长和宽上占的点数的单位,一张数码图片的长宽比通常是4:3。
图像是人类视觉的基础,是自然景物的客观反映,是人类认识世界和人类本身的重要源泉。“图”是物体反射或透射光的分布,“像“是人的视觉系统所接受的图在人脑中所形版的印象或认识,照片、绘画、剪贴画、地图、书法作品、手写汉学、传真、卫星云图、影视画面、X光片、脑电图、心电图等都是图像。图像可以分为模拟图像和数字图像,通过摄像头获得的图像一般为数字图像。图像的格式一般分为:bmp、jpg、gif、jpeg、png、raw等。
图像处理(image processing),用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。图像处理一般指数字图像处理。数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。这部分知识点后续我们会在看图识物章节里进行更加详细的讲解。
机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,得到被摄目标的形态信息,根据像素分布和亮度、颜色等信息,转变成数字化信号;图像系统对这些信号进行各种运算来抽取目标的特征,进而根据判别的结果来控制现场的设备动作或为机器人行为决策做出依据等。
视频是一种多媒体存储方式,类似于一组连续的图像。我们通常通过这种方式来完成现场信息录制、多媒体信息传播等工作,为人类的生产和生活带来非常实用的价值。视频文件格式是指视频保存的一种格式,视频是现在电脑中多媒体系统中的重要一环。为了适应储存视频的需要,人们设定了不同的视频文件格式来把视频和音频放在一个文件中,以方便同时回放。常用的视频格式包括:AVI、WMV、MPEG、Mp4、FLV、3Gp等等我们可以通过视频格式转换工具完成各种视频文件的转换。
所谓视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。视频流传输中最为重要的编解码标准有国际电联的H.261、H.263、H.264,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,此外在互联网上被广泛应用的还有Real-Networks的RealVideo、微软公司的WMV以及Apple公司的QuickTime等。
为了让视频能更好的在计算机系统中处理或者在网络上远程传输人们引入了视频的编解码技术,这种技术通过多视频格式的压缩和解压缩完成视频远程传输的目的。一般地,可以分为:硬件编解码和软件编解码技术等。而压缩技术本身又可以分为有损压缩和无损压缩。
一位叫Dave Jones的曼彻斯特数据库管理员,为了方便python编程,而写的一个针对树莓派camera的python接口库,里面包括了所有摄像头应该有的基本操作步骤(包括camera 创建、camera参数设置、拍照、录像、视频流格式设置等等)。为python程序员控制硬件摄像头提供了非常便捷的接口。
Yanshee机器人一台
树莓派Rasbian系统、python环境
树莓派CSI摄像头
摄像头的工作原理大致为:景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D (模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过USB接口传输到电脑中处理,通过显示器就可以看到图像了。
Yanshee身上的摄像头位置:
该部分我们将通过Yanshee机器人来完成一个简单的拍照功能、一个录制视频的动作和一个视频实时监控的实验。为后续研究机器人视觉打下坚实的基础。
方法一:使用命令行方式完成拍照
打开终端输入如下命令:
raspistill -t 2000 -o image1.jpg
raspistill -t 2000 -o image2.jpg -w 640 -h 480
第一句命令为:两秒钟延时拍一张照片,保存本地名为imag1.jpg。
第二句命令为:两秒钟延时拍一张照片,保存本地名为imag2.jpg,分辨率为640X480。
方法二:直接通过python调用完成拍照功能,这个可以结合其它场景来编写python代码。
以下为python代码:我们通过Pi Camera库的接口来完成拍照功能,其中先建立了camera设备,然后设置分辨率为1024X768,开始预览,预热2秒之后,拍照并存本地文件名为foo.jpg。
import time
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (1024, 768)
camera.start_preview()
#摄像头预热2秒
time.sleep(2)
camera.capture('foo.jpg')
保存以上代码为takePhoto.py,然后在命令行执行如下命令:python takePhoto.py之后就会发现在本地目录下生成了一个名为foo.jpg的图片文件。 结果输出:双击图片,结果发现我们拍到了预期的现场照片。
import picamera
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.start_recording('my_video.h264')
camera.wait_recording(60)
camera.stop_recording()
保存以上代码为record.py,在命令行敲入python record.py 大概经过60秒之后就会发现视频录制完成。本地生成一个名称为my_video.h264的录制文件。结果输出:通过VLC播放器来播放刚刚录制的一段视频。发现就是我们刚刚录制的这段视频。
随着我们对机器人摄像头部件的逐步了解,我们学会了利用摄像头拍照、录像、和本地视频流监控等方法。这些都为我们在后续研究机器人视觉打下了坚实的基础。后续在人脸识别、图像识别等章节里,我们都是基于piCamera拍到照片并取得图像之后,完成相应的分析操作的。此外,本文最后的高级实验用到了opencv,后续视觉章节会详细介绍这个部分。希望这节课为你了解机器人视觉打开一个有趣的开端。