使用libcamera函式库操控树莓派摄影机

电子说

1.3w人已加入

描述

libcamera是什么?它是两个字的合写,一是函式库library的简称lib,另一是摄影机的camera(或称影像传感器imagesensor)。它是一套开放源代码的函式库,最初是Nokia为了开发Linux智慧手机而配套发展的软件,之后Nokia取消这个开发计划,然软件被接续发展至今。

libcamera可以用在各种Linux相关的操作系统上,如Android、ChromeOS、Linux等,用其来设定、操控摄影机,因此也能用来操控树莓派(Raspberry Pi)官方的摄影机模块(Camera Module),毕竟树莓派也是跑Linux的。

树莓派摄影机模块已经是第三代了,第一代是2013年推出,只有500万画素,之后2016年推出800万画素的第二代,今(2023)年则推出第三代,并把画素拉高到1,200万,第三代发表后第一代也就不再供货。

如何使用

麦克风

用libcamera操控摄影机是透过命令行(command line)方式达到的,例如最简单是先打libcamera-hello(类似一般写程序的Hello World),就可以看到5秒的镜头画面预览。

或者可以用libcamera-jpeg来要求摄影机捕捉画面,并以 .jpg格式存档,例如打libcamera-jpeg -o test.jpg就会把影像捕捉后输出(Output, 参数o的由来)成一个test.jpg图档。类似的,libcamera-still也是捕捉静态画面用的命令,但比较能支持旧版的相关参数选项。

或者还有libcamera-raw指令,能运用摄影机最原生的规格来录像,不过录的过程中不会同步显示预览画面,典型的使用方式如libcamera-raw -t 2000 -o test.raw,是指连续录2秒钟,并以test.raw为文件名存下录像的内容;或者还有libcamera-detect指令,一般在Raspberry Pi OS下没有这个指令,主要是搭配TensorFlow Lite一起使用。

在各种操作设定中,libcamera-vid可能是最为常用且好用的,vid估计是video的简称,libcamera-vid是用于一般录像用的,用它来录像可以启动树莓派主控芯片内的H.264硬件编码器,可以更快速、顺畅且省电的方式进行录像。

libcamera-vid默认是使用640 x 480分辨率,但可以手动指定分辨率,例如要以Full HD分辨率录像,命令可以下libcamera-vid –width 1920 –height 1080 -o

full_hd.h264,这样就可以将录像内容以full_hd.h264的文件名存下来,编码格式为H.264。

如果还要指定每秒的录制画面张数(framerate),或称画面更新率,对岸称为帧率,也可以加上–framerate 50,50是指每秒50张,数字可以依需要调整。

进一步的也可以调整比特率(bitrate),参数可以下–bitrate或-b都可以,例如libcamera-vid -b 1000000 –width 1920 –height 1080-o test.h264这段指令是指使用1920 x 1080分辨率录像,比特率为1Mbps,即命令行中的数字1000000。若是把数字调高,从1000000增加到5000000、9000000等,则录下来的画质比较好。

除了H.264格式外其实也可以用MJPEG来录制,命令libcamera -t 20000 –codec mjpeg -o test.mjpeg即表示录2秒然后以test.mjpeg文件名储存,录像的编码格式为MJPEG。这里要注意,单纯指定档名为 .mjpeg但却没有加–codec参数其实是无效的,一定要加。

不仅录像可能还需要同步录音,这时得帮树莓派装上麦克风,然后透过另外一个函式库的协助来完成,一样要下codec参数,命令为libcamera-vid –codec libav –libav-audio -o test.mp4,这里即呼叫了前面纯录像时没用到的libav函式库。

到这里可能还有个疑问:开始录制后该如何停止吗?很简单,使用键盘组合键Ctrl+C即可,要恢复继续录就重新下一次命令。或者,也可以用–timeout参数来预先设定录像时间,最小单位为1毫秒,如果下–timeout 1000就是录制一秒的意思。

第三代模块参数设定

接下来要启用第三代摄影模块的特有功能,如自动对焦、高动态范围等,自动对焦要使用到–lens-position(镜头位置)参数,参数值是焦距的倒数,类似屈光率,如果数值是10,则1/10是0.1,表示焦距位置为0.1公尺;如果数值是0.5,则1/0.5为2,表示焦距位置为2公尺,范例命令如libcamera-vid –lens-position 0.5 -o test.h264(镜头焦距放在2公尺位置)

麦克风

树莓派第三代摄影镜头的四种类型

至于要启用高动态范围功能,就只要下–hdr参数(即high dynamic range)即可,不需要搭配数值,例如libcamera-vid –hdr -o test.h264

要注意的是,启用高动态范围就无法使用镜头原有的最高分辨率(4608 x 2592),必须在长宽分辨率都打对折(2304 x 1296)。不过,若最后选择用H.264格式储存影像,由于H.264格式最高到1920 x 1080,所以开启与不开启的分辨率改变几乎没有差别。

结语

有关libcamera的参数还非常多,例如可以用串流方式输出视讯画面,或设定以时间为单位把原本该连续录制的图像文件案自动切割、编号储存,更多参数有待创客们亲自去尝试、摸索、体验。

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分