5、树莓派连接官⽅CSI摄像头的使⽤
本篇博⽂⼤部分转
其中有部分细节根据⾃⼰的实际操作进⾏了修改
5.1基本操作
⽬前提供了三个应⽤程序,分别为:raspistill、raspivid、raspistillyuv。其中 raspistill 和 raspistillyuv ⾮常相似,并且都是⽤于捕捉图像,⽽ raspivid ⽤于捕捉视频。 在树莓派3B+的树莓派的 raspberry 2018.04.18 stretch版本的系统中已经⾃带raspistill,raspivid这两个应⽤程序,另外⼀个不⽀持。
所有应⽤程序均基于⽅式运⾏,通过 OpenMAX 的 mmal API 进⾏编写。OpenMAX 的 mmal API 提供了更易使⽤的系统组件。注意,mmal 是⼀个由 Broadcom 为 Videocore 4 系统定制的 API。
应⽤程序使⽤了四个 OpenMAX(mmal)组件:camera(摄像)、preview(预览)、encoder(编码)、null_sink。所有应⽤程序均使⽤了摄像组件,raspistill 使⽤了图像编码组件,raspivid使⽤了视频编码组件,raspistillyuv没有使⽤编码组件,⽽是直接将 YUV 或 RGB 从摄像组件输出到⽂件。
预览显⽰为可选参数,但是可以⽤于全屏或输出到指定的显⽰器显⽰区域进⾏显⽰。如果预览被禁⽤,
那么 null_silk 组件将会对预览帧进⾏“吸收”。这是由于尽管不需要摄像头⽣成供显⽰所⽤的的预览帧,但是仍需要使⽤它们进⾏曝光计算和⽩平衡设置的缘故。
此外,还可以省略⽂件名参数,这样既可以直接预览显⽰⽽不写⼊⽂件,或者直接输出到标准输出设备上。命令⾏帮助可以通过直接输⼊应⽤程序名称获得。
5.1.1安装摄像头硬件
警告:摄像头对静电⾮常敏感。如果您在安装摄像头电路板时没有防静电⼿环,可以尝试触摸⼀下⽔龙头、⾦属⽔槽或其它类似的东西即可。
摄像头电路板与 Raspberry Pi 通过⼀条 15 芯的排线进⾏连接。仅有两个连接座需要连接,排线需要安装到摄像头电路板和Raspberry Pi 上。您需要正确安装,否则摄像头⽆法⼯作。对于摄像头电路板,排线末端的蓝⾊标记应该背对着电路板。⽽ Raspberry
Pi 部分,蓝⾊标记应该正对着⽹络接⼝⽅向。
尽管两部分连接座不尽相同,但它们的⼯作⽅式很相似。对于 Raspberry Pi,拉起连接座两端的卡扣。它应该很容易拉起,并能够轻微活动。把排线完全插⼊到连接座中,并保证竖直,然后轻轻按下两端的卡扣。摄像头电路板⽅⾯,也需要您将卡扣向电路板相反⽅向拉开,然后轻轻插⼊排线,最后
将卡扣推回。摄像头电路板的连接座与 Pi 上的区别就在这⾥。
5.1.2安装摄像头软件
执⾏下⽂介绍的命令⾏进⾏下载并安装最新的内核,GPU 固件及应⽤程序。您需要连接到互联⽹才可以实现以下操作。
1$sudo apt-get update
2$sudo apt-get upgrade
接下来,您⾸先需要在 Raspberry Pi 的 raspi-config 程序中启⽤摄像头的⽀持。
1)连接摄像头与树莓派
2)修改树莓派配置,开启摄像头模块。
图1
将光标移动到摄像头选项(Camera option)处,并选择启⽤(Enable)。在退出 raspi-config 时会要求您重新启动。启⽤选项是为舒高老公
了确保重启后 GPU 固件能够正确运⾏(包括摄像头驱动和调节电路),并且 GPU 从主内存划分到了⾜够的内存使摄像头能够正确运⾏。
图2
测试系统已经完成安装并正常⼯作,可尝试以下命令:
这个命令将显⽰来⾃摄像头 5 秒钟的预览图像,并且拍摄⼀张照⽚,然后保存为⽂件 test.jpg,保存
在/home/pi的⽬录下⾯,同时显⽰出需要相关信息。
5.1.3通⽤命令⾏参数
预览窗⼝
–preview, -p 预览窗⼝设置 <‘x,y,w,h’>
允许⽤户在屏幕上定义预览窗⼝的⼤⼩和位置。注意,这将在所有其它窗⼝/图像的上层显⽰。
–fullscreen, -f 全屏预览模式
强制预览屏幕全屏显⽰。注意,这将会保留输⼊图像的长宽⽐例,所以可能会在图像的边缘出现填充条。
–nopreview, -n 不显⽰预览窗⼝    完全禁⽤预览窗⼝。注意,尽管预览窗⼝被禁⽤,但摄像头仍然在进⾏处理,所以会继续消耗资源。 sudo raspi-config
$raspistill -v -o test.jpg
–opacity, -op 设置预览窗⼝透明度
设置预览窗⼝的透明度。0 为完全透明,255 为完全不透明。
摄像头控制参数
–sharpness, -sh 设置图像锐度(-100 – 100)
设置图像的锐度,默认为 0。
–contrast, -co 设置图像对⽐度(-100 – 100)
设置图像的对⽐度,默认为 0。
–brightness, -br 设置图像亮度(0 – 100)
设置图像的亮度,默认为 50。0 为最暗,100 为最亮。
–saturation, -sa 设置图像饱和度(-100 – 100)
设置图像⾊彩饱和度。默认为 0。
–ISO, -ISO 设置捕捉 ISO
为捕捉图像设置 ISO。范围为 100 到 800。
–vstab, -vs 打开视频稳定
仅⽤于视频模式,⽤于开启视频稳定。
–ev, -ev 设置曝光补偿
设置图像的曝光补偿。范围为 -10 到 10,默认为 0。
–exposure, -ex 设置曝光模式
可能⽤到的参数为:
auto – 使⽤⾃动曝光模式
night – 夜间拍摄模式
nightpreview -夜间预览拍摄模式(暂且这么称呼)
backlight – 逆光拍摄模式
spotlight – 聚光灯拍摄模式
sports – 运动拍摄模式(⾼速快门等)
snow – 雪景优化拍摄模式
beach – 海滩优化拍摄模式
verylong – 长时间曝光拍摄模式
fixedfps – 帧约束拍摄模式
antishake – 防抖模式
fireworks – 烟⽕优化拍摄模式
注意,不是所有的设置都会在对摄像头进⾏微调时得到相应作⽤。 –awb, -awb 设置⾃动⽩平衡
可能⽤到的参数为:
off – 关闭⽩平衡测算
auto – ⾃动模式(默认)
sun – ⽇光模式
cloud – 多云模式
shade – 阴影模式
tungsten – 钨灯模式
fluorescent – 荧光灯模式
incandescent – ⽩炽灯模式
flash – 闪光模式
horizon – 地平线模式
–imxfx, -ifx 设置图像特效
最好的轮胎品牌设置应⽤于图像上的特效
可能⽤到的参数为:
none – ⽆特效(默认)
negative – 反⾊图像
solarise – 曝光过度图像
posterize – ⾊调图像
whiteboard – ⽩板特效
blackboard – ⿊板特效
sketch – 素描风格特效
denoise – 降噪图像
emboss – 浮雕图像
oilpaint – 油画风格特效
hatch – 草图特效
gpen – 马克笔特效
pastel – 柔化风格特效
watercolour – ⽔彩风格特效
film – 胶⽚颗粒风格特效
blur – 模糊图像
saturation – ⾊彩饱和图像
colourswap – 暂未可⽤
washedout – 暂未可⽤
posterise – 暂未可⽤
colourpoint – 暂未可⽤
colourbalance – 暂未可⽤
cartoon – 暂未可⽤
–colfx, -cfx 设置⾊彩特效
中国冬奥会金牌总数
指定图像 U 和 V 通道的参数(范围 0 到 255)。例如:–colfx 128:128 将得到⼀张单⾊图像。
–metering, -mm 设置测光模式
为预览和捕捉指定测光模式
可能⽤到的参数为:
average – 全画⾯平衡测光
spot – 点测光
backlit – 模拟背光图像
matrix – 阵列测光
–rotation, -rot 设置图像旋转(0 – 359)
对取景器和最终得到的图像进⾏旋转。可以接受 0 以上任何值,但由于硬件限制,只⽀持 0、90、180、270 度。
–hflip, -hf 设置⽔平翻转
⽔平翻转预览和保存的图像。
–vflip, -vf 设置垂直翻转
垂直翻转预览和保存的图像。
–roi, -roi 设置传感器感光区域
允许指定⽤于预览和捕捉的源所使⽤的传感器区域。该功能中 x 和 y 参数指定了坐上⾓的坐标,以及定义了宽度和⾼度值,并且所有值都为标准化坐标(0.0 到 1.0)。那么,感光区域设置为横向和纵向都为⼀半,并且宽度和⾼度都为传感器的四分之⼀时,可以写为:
-roi 0.5,0.5,0.25,0.25
–shutter, -ss 设置快门速度
设置快门的速度为指定的值(单位为微秒)。据当前的考证,⽬前未定义时,快门速度上限⼤约为 330000us(330ms 或 0.33s)。
5.1.4应⽤程序专有设置
raspistill
–width, -w 设置图像宽度
–height, -h 设置图像⾼度
–quality, -q 设置 JPEG 品质,品质为 100 时⼏乎等同于未压缩。75 相对是⽐较好的选择。
–raw, -r 向 JPEG 元数据中添加 RAW 信息,该参数将从摄像头获取到的 RAW 信息插⼊到 JPEG 元数据中。
–output, -o 输出⽂件名,指定输出的⽂件名。如果不指定,将不保存到⽂件。如果⽂件名为“-”,将输出发送⾄标准输出设备。
–latest, -l 链接最后⼀帧到⽂件名,基于该名称做⼀个指向最后⼀帧的⽂件系统链接。
–verbose, -v 在运⾏过程中输出详细信息,在程序运⾏过程中,输出调试/详细信息。
–timeout, -t 获取图⽚前的时间,程序将执⾏指定的时长,然后进⾏获取操作(前提是 output 已指定)。如果未指定,将设置为 5 秒。 –timelapse, -tl 间隔拍摄模式,指定多次拍摄之间所间隔的毫秒值。注意,您需要在⽂件名中加⼊ %04d 做为画⾯计数。
-t 30000 -tl 2000 -o image%04d.jpg,将会在 30 秒的时间内,每两秒拍摄⼀次,并且将⽂件命名为:image1.jpg、
image0002.jpg…image0015.jpg。注意 %04d 表⽰在⽂件名中数字部分加⼊前导零,使其成为 4 位数。例如,%08d 将⽣成 8 位数字。如果间隔时间设置为 0,程序将不间断(取决于系统负担及存储速度)进⾏拍摄。不过需要注意,每次捕捉前还是会有 30ms 的最⼩暂停时间,⽤于曝光计算操作。
–thumb, -th 设置缩略图参数(x:y:quality),允许指定插⼊到 JPEG ⽂件中缩略图信息。如果不指定,将为默认的 64×48 质量为 35的缩略图。如果设置为 –thumb none,那么将不会向⽂件中插⼊缩略图信息。⽂件的尺⼨也会稍微变⼩。
–demo, -d 运⾏演⽰模式,该参数将循环使⽤所有摄像头参数,并且不会捕捉。⽽且⽆论是否完成所
英语故事短文带翻译有的循环,在超时周期到达时都会停⽌演⽰操作。循环之前的时间需要设置毫秒值。
–encoding, -e 指定输出⽂件的编码,可⽤的参数为 jpg、bmp、gif、png。注意,未被硬件加速⽀持的图像格式(gif、png、bmp)在保存的时候要⽐ jpg 格式耗时更长。还需要注意,⽂件扩展名在编码时将被完全忽略。
–exif, -x 在捕捉的内容中加⼊ EXIF 标签(格式为 ‘key=value’),允许在 JPEG 图像中插⼊特定的 EXIF 标签。您可以插⼊ 32 条记录。这是⾮常实⽤的功能,⽐如插⼊ GPS 元数据。例如设置经度。
–exif GPS.GPSLongitude=5/1,10/1,15/100,该命令将会设置经度为 5 度 10 分 15 秒。查看 EXIF ⽂档获得所有可⽤标签的详细信息。⽀持的标签如下:
IFD0. 或 IFD1.
$raspivid -o test.h264 -t 25000 -timed 2500,5000
黄晓明和杨颖离了婚吗将进⾏ 25 秒的录制操作。录制操作包括若⼲个 2500 毫秒(2.5 秒)录制和 5000 毫秒(5秒)暂停的操作,并且重复时长超过 20秒。所以该录制过程中实际只录制了 10 秒的内容。包括 4 段 2.5 秒的视频⽚断 = 被若⼲个 5 秒钟暂停操作分隔开的 10 秒钟视频。
陈志朋发文回应
–keypress, -k 使⽤回车键在录制和暂停两种状态间进⾏切换,每次点击回车键将会暂停或重新开始录制进程。点击 X 键后点击回车键将停⽌录制并关闭程序。注意,超时设置值将影响录制结束时间,但仅在每次回车键点击后进⾏检查,所以如果系统正在等待按键操作,尽管超时设置已过期,录制进程退出前也会等待按键操作。
–signal, -s 使⽤ SIGUSR1 信号在录制和暂停两种状态间进⾏切换,向 Raspivid 进程发送 USR1 信号来切换录制和暂停。该操作可以通过使⽤ kill 命令来实现。您可以使⽤“pgrep raspivid” 命令到 raspivid 的进程 ID。
kill -USR1
【注意】超时设置值将影响录制结束时间,但仅在每次发送 SIGUSR1 信号后进⾏检查,所以如果系统正在等待信号,尽管超时设置已过期,录制进程退出前也会等待信号的发送操作。
–initial, -i 定义启动时的初始状态。定义摄像头初始状态为暂停或⽴即开始录像。选项可以为“record”(录像)或“pause”(暂停)。注意,如果您设置的超时时长很短,⽽且初始状态设置为“暂停”,那么将不会录制任何输出的内容。
–segment, -sg 将视频流分段存储到多个⽂件,与存储在单个⽂件中不同,该参数将视频分段存储在
以毫秒为单位所指定长度的数个⽂件中。为了将⽣成的⽂件命名为不同的名称,您需要在⽂件名中合适的位置添加 %04d 或类似的参数来让⽂件名中显⽰计数值。例如:
–segment 3000 -o video%04d.h264,将分割成每段长度 3000 毫秒(3 秒)并且命名为 video0001.h264,video0002.h264等。每个段落都是可⽆缝连接的(段落之间不会丢帧),但每个⽚段的长度将取决于帧内周期值,原因是每个分割的段落都需要起始于 I-frame 处。因此,每个段落都会等于或⼤于指定的时间长度。