找回树莓派的 V4L2 摄像头驱动和 raspistill/vid 命令

在 Raspberry Pi OS 2021-10-30 的版本更新中。之前的摄像头命令 raspistill 被移除,替代方案是 libcamera

这导致之前的一些基于 raspistill 命令的教程无法在新系统里奏效。根据官方的说明,64 位版本的 Raspberry Pi OS 只有 libcamera 而没有 raspistill。但 32 位版本的 Raspberry Pi OS 中,V4L2 驱动程序可以通过手动配置来加载。下面我们来介绍配置方法,让你的程序可以继续在新系统上使用 V4L2 驱动,并可以让 raspistill 命令重新工作。

1、修改 /boot/config.txt


sudo nano /boot/config.txt



#注释掉原来的摄像头自动检测语句,并添加"start_x=1"和"gpu_mem=128"

#camera_auto_detect=1

gpu_mem=128

start_x=1

该操作会让树莓派重新加载老版本的 V4L2 驱动。

2、修改 /etc/modules


sudo nano /etc/modules



#在最后面添加

bcm2835-v4l2



保存、重启树莓派之后再运行检测命令。

vcgencmd get_camera

#应该会返回

supported=1 detected=1

此时摄像头可通过ffplay、fswebcam等正常使用


fswebcam /dev/video0 -r 640x480 ~/test.jpg

#or

ffplay -f v4l2 -framerate 60 -video_size hd720 /dev/video0

3、编译安装 raspistill/vid 命令
如果你希望继续使用 raspistill 和 raspivid 命令,按照下面的方法来编译安装。


cd ~

sudo apt install cmake

mkdir bin

git clone https://github.com/raspberrypi/userland

cd userland

./buildme

cp build/bin/* ~/bin/

并将 /home/pi/bin 加入 PATH


PATH=$PATH:/home/pi/bin



export PATH

修改完记得执行行下面的命令,让上一步的修改生效


source ./.profile

raspistill 



"raspistill" Camera App (commit bab9bf8790cd)



Runs camera for specific time, and take JPG capture at end if requested



usage: raspistill [options]



Image parameter commands



-q, --quality   : Set jpeg quality <0 to 100>

-r, --raw   : Add raw bayer data to jpeg metadata

-l, --latest    : Link latest complete image to filename 

-t, --timeout   : Time (in ms) before takes picture and shuts down (if not specified, set to 5s)

-th, --thumb    : Set thumbnail parameters (x:y:quality) or none

-d, --demo  : Run a demo mode (cycle through range of camera options, no capture)

-e, --encoding  : Encoding to use for output file (jpg, bmp, gif, png)

-x, --exif  : EXIF tag to apply to captures (format as 'key=value') or none

-tl, --timelapse    : Timelapse mode. Takes a picture every ms. %d == frame number (Try: -o img_%04d.jpg)

-fp, --fullpreview  : Run the preview using the still capture resolution (may reduce preview fps)

-k, --keypress  : Wait between captures for a ENTER, X then ENTER to exit

-s, --signal    : Wait between captures for a SIGUSR1 or SIGUSR2 from another process

-g, --gl    : Draw preview to texture instead of using video render component

-gc, --glcapture    : Capture the GL frame-buffer instead of the camera image



# vcgencmd 树莓派专有命令用来对硬件做各种检测,如下检查摄像头信息

vcgencmd get_camera



# 返回0,说明没有检测到摄像头信息

supported=0 detected=0

树莓派默认将摄像头通信关闭,此时需要开启:



# 运行命令行配置

sudo raspi-config

依次选择 "Interfacing Options" -> " Camera",确定后重启树莓派。

此时再次执行以下命令,可以得到摄像头信息了!


vcgencmd get_camera

supported=1 detected=1

树莓派自带 raspistill 可以用来进行摄像头拍照功能,如下命令:


raspistill -v -o test.jpg

raspistill -ifx pastel -hf -vf -o test.jpg



1 评论

发表评论

你的邮件地址不会公开


*