树莓派摄像头学习必备 —— Picamera2 测试版发布

最近发布的 Raspberry Pi OS 映像,终于预装了Picamera2库的 beta 版本。它是旧 PiCamera 库的替代,也是未来树莓派摄像头的官方首选开发库。

从早期版本开始,PiCamera 就非常受用户欢迎,因为它提供了一种非常简单而开放的Raspberry Pi 摄像头调用方式,让大家远离了专有和闭源的摄像头API(比如Broadcom的)。

Picamera2 主要特点

1、支持命令行驱动,你可以将 Picamera2 的命令直接通过Python 解释器或 Python 脚本调用。
2、使用OpenGL加速硬件辅助渲染,或在X windows未运行时使用DRM/KMS进行高速渲染。
3、支持将现成的 Picamera2 组件嵌入到 Qt 应用程序中。
4、原生支持 numpy,使其与 OpenCV、TensorFlow 和其他 Python 库一起使用非常自然。
5、所有源代码都可以在Picamera2 GitHub 页面上获得,或者作为libcamera 项目的一部分。
6、支持所有官方树莓派相机,也支持一些第三方相机

还有一些功能,例如视频编码和录制(可自定义输出对象),同时录制音频和视频的能力。在摄像头图像上显示叠加层等等。

要了解更多信息,请查阅大量示例脚本应用程序,或查阅我们的Picamera2 用户手册

Picamera2 可以在 TensorFlow 的帮助下检测和圈出狗

安装和升级

Picamera2 仅在最近的 Bullseye (新的树莓派系统代号)上受支持。

Buster 或更早的版本不支持它,Raspberry Pi OS Legacy 也不支持。所有这些用户都只能继续使用旧的 PiCamera 库。

在最新的 Bullseye 系统上已经安装了 Picamera2。

需要命令行安装的话可以输入:

sudo apt install -y python3-picamera2

树莓派操作系统

Raspberry Pi OS 用户会发现新的系统中, Picamera2 已经完整安装,包括 Qt 和 OpenGL。

Raspberry Pi OS Lite 默认随 Picamera2 一起安装,但没有 Qt 和 OpenGL。原因是用 Raspberry Pi OS Lite 的低配Pi 运行基于 X Windows 的应用程序或通过 X Windows 显示堆栈进行渲染会比较卡。

如果需要在Raspberry Pi OS Lite上使用 Qt 和 OpenGL,可以这么安装。

sudo apt install -y python3-pyqt5 python3-opengl

如果你用的是未安装 Picamera2 的较早版本的 Bullseye,又不用 Qt 和 OpenGL 的话,安装它的命令:

sudo apt install -y python3-picamera2 –-no-install-recommends

之前通过 pip 安装过 Picamera2 的用户

一些用户可能以前使用pip,那需要先卸载再安装。当然,你可以继续用pip的方式。

如何尝试 Picamera2?

有一些示例脚本很有帮助,你可以下载并运行它们:

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

python picamera2/examples/preview.py

在 Python 解释器中输入 Picamera2 指令

提示

如果遇到任何困难,请注意以下几点:

  • Raspberry Pi 3 或更早版本设备的用户将需要重新启用 Glamour(如果他们以前没有这样做)才能使用任何 X Windows/OpenGL 预览功能。
  • libcamera 在控制台窗口中可以非常“健谈”。如果这让你感到困扰,请在运行 Python 之前键入:export LIBCAMERA_LOG_LEVELS=*:3(或将其放入.bashrc)。
  • Picamera2使用一种特定类型的 Linux 系统内存,称为 CMA 内存。系统资源不足的话会有问题。

如果有任何其他问题或疑问,可加入树莓派摄像头论坛讨论。

树莓派摄像头Picamera2库公测中

作者:大卫·普洛曼

如果你使用过任何 Raspberry Pi 相机,你可能对Picamera很熟悉,这是一个出色的 Python 库,旨在轻松操作 Raspberry Pi 的拍摄功能。

但你可能也知道,随着我们最近转向更开放和更标准的 Linux API,Picamera库(建立在专有的 Broadcom 相机堆栈之上)将来不会再支持了。

带有Raspberry Pi HQ 摄像头的Raspberry Pi 4

最初的Picamera库是第三方软件,由 Dave Jones 开发。事实证明该库在我们的用户中非常受欢迎,因此我们承诺提供替代品。命名为Picamera2的新库正在由 Raspberry Pi 在剑桥内部开发,最终将成为官方支持的软件包。

所以今天我们要宣布Picamera2的第一个预览版

在 Bullseye 桌面上运行的Picamera2示例

预览版是什么意思?

我们所说的预览版是指正在进行的工作。它已经有很多你可以尝试的功能,但仍然缺少一些重要的东西,在我们更广泛地发布该库之前,功能和API 的许多方面也会发生变化。

当前版本中支持的功能包括:

  • 你可以配置和启动摄像头,并接收多个图像流。
  • Picamera2支持预览窗口,无论是独立的还是嵌入在Qt应用程序中。
  • 可以查询和设置相机参数。
  • 你可以将全分辨率图像捕获为JPEGPNG
  • 或者,你可以将它们捕获为numpy数组,以提供给图像分析程序。

但有一个明显缺失的功能,就是我们仍在使用 Raspberry Pi 的硬件h.264编码器进行视频录制。如果你想使用Picamera2从 Python 录制视频,那现在还无法做到,可能还需要“几周”的时间。

如果你有兴趣查看新的Picamera2库(预览版),我们也很想听到相关反馈。比如不该忽略的功能,或者可以优化的地方。

我能用它做什么?

最好的解释可能只是显示一些代码片段!第一个示例启动一个预览窗口,然后进行全分辨率的JPEG捕获:

from qt_gl_preview import *
from picamera2 import *
import time

picam2 = Picamera2()
preview = QtGlPreview(picam2)

preview_config = picam2.preview_configuration()
capture_config = picam2.still_configuration()
picam2.configure(preview_config)

picam2.start()
time.sleep(2)

picam2.switch_mode_and_capture_file(capture_config, "capture.jpg")

在下一个示例中,我们捕获预览图像并将它们传递给OpenCV,以查看它是否可以使用Haar 级联检测图像中的任何人脸。

一位树莓派博主的脸部识别测试

它会在找到的任何人脸周围绘制检测框,并再次在预览窗口中显示图像:

#!/usr/bin/python3

import cv2

from null_preview import *
from picamera2 import *

# Grab images as numpy arrays and leave everything else to OpenCV.

face_detector = cv2.CascadeClassifier("/usr/local/lib/python3.9/dist-packages/cv2/data/haarcascade_frontalface_default.xml")
cv2.startWindowThread()

picam2 = Picamera2()
preview = NullPreview(picam2)
picam2.configure(picam2.preview_configuration(main={"size": (640, 480)}))
picam2.start()

while True:
    im = picam2.capture_array()

    grey = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    faces = face_detector.detectMultiScale(grey, 1.1, 5)

    for (x, y, w, h) in faces:
        cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0))

    cv2.imshow("Camera", im)

除了这两个之外,我们还创建了 20 多个小示例脚本作为非正式教程,并帮助人们探索此预览版本中可用的功能。在适当的时候,一旦事情变化的速度稳定下来,我们将努力扩展这些信息并添加一些更正式的文档和教程。

我该如何尝试?

你可以在 Github 上找到Picamera2 的预览版,并且存储库README.md提供了完整的安装说明。

但是,预览版不适合胆小的人。由于Picamera2是建立在libcamera自己的 Python 绑定之上的,这些绑定目前处于原始阶段,因此目前的安装涉及libcamera库的一个特殊版本,需要手动编译它。

目前还无法通过包管理器或其他机制安装Picamera2的预览版。你必须从源代码构建它。如果你对此感到不自在,最好等待稳定版本。

但是,如果你有机会查看示例代码并尝试使用该库,我们将非常感谢任何有用的建议。我将密切关注相机论坛上的讨论,以便尝试回答你遇到的任何问题。