找回树莓派的 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 评论

发表评论

你的邮件地址不会公开


*