Slide 1

Slide 1 text

Raspberry Pi Camera 3 介紹 台灣樹莓派 2023/01/16 @Raspberry Pi Meetup #35

Slide 2

Slide 2 text

姓名標示 — 非商業性 — 相同方式分享 CC (Creative Commons) 姓名標示 — 你必須給予 適當表彰、提供指向本授權 條款的連結,以及 指出(本作品的原始版本)是否已 被變更。你可以任何合理方式為前述表彰,但不得以 任何方式暗示授權人為你或你的使用方式背書。 非商業性 — 你不得將本素材進行商業目的之使 用。 相同方式分享 — 若你重混、轉換本素材,或依本 素材建立新素材,你必須依本素材的授權條款來 散布你的貢獻物。

Slide 3

Slide 3 text

3 ● Raspberry Pi 官方經銷商 ● 專注 Raspberry Pi 應用與推廣 , 舉辦社群活動 關於我們

Slide 4

Slide 4 text

● COSCUP , MakerConf, PyCon, HKOSCon 講者 ● 投影片 ● https://speakerdeck.com/piepie_tw ● 程式碼 ● https://github.com/piepie-tw ● 台灣樹莓派網站 : ● https://piepie.com.tw/ ● Facebook: ● https://www.facebook.com/RaspberryPi.Taiwan 分享 x 教學

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

6 ● Raspberry Pi Camera v3 介紹 ● Sony IMX708 感光元件 ● 自動對焦 (Autofocus) ● 廣視場 (Wide FOV) ● 標準視角和廣視場外觀比較 ● 高動態範圍成像 (HDR) ● 只支援 libcamera 和 picamera2 大綱

Slide 7

Slide 7 text

7 Raspberry Pi Camera v3 https://piepie.com.tw/product/pi-camera-module-v3

Slide 8

Slide 8 text

8 https://www.raspberrypi.com/documentation/accessories/camera.html

Slide 9

Slide 9 text

自動對焦

Slide 10

Slide 10 text

● 自動對焦需 Sensor, Focus Motor 和 Control System 配合 ● 對焦演算法是通過 PDAF 和 CDAF 的混合實現的 ● IMX708 原生相位自動對焦 (PDAF, Phase Detection Autofocus) ● Raspberry Pi 對比度自動對焦 (CDAF, Contrast Detection Autofocus) https://www.arducam.com/raspberry-pi-camera/autofocus/ 實現自動對焦功能的系統需求

Slide 11

Slide 11 text

libcamera-hello -t 0 --autofocus-mode continuous DEMO https://github.com/raspberrypi/libcamera-apps

Slide 12

Slide 12 text

廣視場 (Wide FOV)

Slide 13

Slide 13 text

https://sg.cytron.io/p-raspberry-pi-camera-module-3-12mp-with-auto-focus-lens Camera v3 vs. Camera v2 16:9 ~4:3

Slide 14

Slide 14 text

https://sg.cytron.io/p-raspberry-pi-camera-module-3-12mp-with-auto-focus-lens Camera v3 vs. Camera v3 wide 75º 120º

Slide 15

Slide 15 text

HDR(High Dynamic Range Imaging)

Slide 16

Slide 16 text

HDR 是提供更大明暗差別的技術 內部曝光不足以捕捉外部細節 外部細節不清楚 開啟 HDR 功能可捕捉內部和外部細節

Slide 17

Slide 17 text

● IMX708 將 4 個像素在同一通道 (R/G/B) 上具有不同的曝 光 ( 長曝光 / 中曝光 / 短曝光 ) 在讀出後合併成一個大的 , 因此輸出限制為 3MP https://www.sony-semicon.com/en/technology/mobile/hdr.html IMX708 透過像素合成實現 HDR

Slide 18

Slide 18 text

只支援 libcamera 和 picamera2

Slide 19

Slide 19 text

相機硬體組成 http://www.phonearena.com/news/13MP-camera-tipped-for-Samsung-Galaxy-S-IV_id35168 1. Lens( 透鏡 ) 2. VCM( 音圈馬達 ) 3. IR-Cut( 紅外光濾片 ) 4. Sensor( 感光元件 ) 5. PCB( 印刷電路板 ) 6. ISP( 影像訊號處理器 )

Slide 20

Slide 20 text

20 各別硬體功能 http://zhaoxuhui.top/blog/2021/10/28/image-formation-from-a-radiation-view.html

Slide 21

Slide 21 text

每一家實做都不一樣 那樹莓派怎麼做?

Slide 22

Slide 22 text

22 http://elinux.org/Raspberry_Pi_VideoCore_APIs

Slide 23

Slide 23 text

● BCM2835 SoC 使用 VideoCore Host Interface (VCHI) 處 理 ARM Cortex CPU 和 VideoCore IV GPU 之間的通訊 ● 1. 影像從 CSI-2 進到 GPU 的 buffer ● 2. GPU 對 buffer 進行後處理 ● 3. myscript.py 在 CPU 使用 picamera 模組做 capture ● 4. picamera 模組使用 MMAL API 執行請求 ● 5. MMAL 透過 VCHI 請求 capture frame ● 6. GPU 透過 DMA 將 RAM 資料複製到 CPU ● 7. GPU 透過 VCHI 發送完成的訊息 ● 8. MMAL API 會 callback picamera ● 9. picamera 模組呼叫 write 將影像輸出 https://picamera.readthedocs.io/en/release-1.13/fov.html 影像從相機模組到執行輸出的步驟

Slide 24

Slide 24 text

https://picamera.readthedocs.io/en/release-1.13/fov.html

Slide 25

Slide 25 text

● GPU 是由許多組件組合而成 , 依序 (pipeline) 負責不同功能 ● 1. 翻轉 , 隔行採樣 , 像素分箱在 Sensor 處理 ● 2. frame lines 會傳到 GPU, 再由 Unicam 組件寫到 RAM ● 3. GPU 的 ISP 會進行後處理 ( 多個步驟 ) ● 4. 如果僅做未編碼輸出 ,Frame 將透過 DMA 複製到 CPU ● 5. 如果有編碼 , 編碼 block 會執行對應的編碼 ( 如 H.264) ● 6. 編碼後 , 輸出將透過 DMA 複製到 CPU ● 7. VPU 負責協調以上各組件 , 並回應來自 VCHI 的訊息 https://picamera.readthedocs.io/en/release-1.13/fov.html GPU 的後處理用 pipeline 方式處理

Slide 26

Slide 26 text

https://picamera.readthedocs.io/en/release-1.13/fov.html

Slide 27

Slide 27 text

27 ISP 的處理步驟和結果 https://karaimer.github.io/camera-pipeline/

Slide 28

Slide 28 text

28 ● 開放多媒體加速層 (Open Media Acceleration) ● 由 Khronos Group 提出的標準 ● 統一的介面 , 加速大量多媒體資料的處理 OpenMAX https://www.khronos.org/openmax/

Slide 29

Slide 29 text

● MMAL 是一個由 Broadcom 為 VideoCore 4 系 統定製的 API, 因此如果要做硬體加速 , 可以透過 MMAL 的 API 存取 VideoCore GPU ● raspicam 應用程式使用了三個 OpenMAX 組件 : camera 和 preview 和 encoder ● 樹莓派提供 OpenMAX IL 1.1.2 文件和 IL 組件 ● 但還是很難理解和使用 ... https://kwasi-ich.de/blog/2017/11/26/omx/ MMAL (Multimedia Abstraction Layer)

Slide 30

Slide 30 text

操作太複雜了 ,Linux 怎麼做?

Slide 31

Slide 31 text

31 Webcam http://www.slideshare.net/gxben/abs-2014-android-kit-kat-internals

Slide 32

Slide 32 text

Linux 如何存取硬體? http://www.xml.com/ldd/chapter/book/ch01.html 裝置節點

Slide 33

Slide 33 text

● 是 Linux 對視訊設備 ( 如 Webcam 或電視擷取卡 ) 的 Userspace API, 用於將 video buffer 傳遞給 不同的硬體設備和 / 或從不同的硬體設備接收它們 Video For Linux 2nd(V4L2) https://www.linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/spec-single/v4l2.html

Slide 34

Slide 34 text

https://forums.raspberrypi.com/viewtopic.php?t=62364 Raspberry Pi 提供 V4L2 Driver

Slide 35

Slide 35 text

https://www.iottechtrends.com/product-review/raspberry-pi-camera-v2-review/ 同時支援 V4L2 和 MMAL

Slide 36

Slide 36 text

過了很久出現新的問題

Slide 37

Slide 37 text

● 硬體必須支援 UVC(USB Video device Class) ● 但 USB 的速度比較慢 ( 相較於 DMA) ● 難以處理日益複雜的相機架構 ● 硬體層的圖形處理演算法無法發揮作用 使用 V4L2 的限制 https://bit.ly/3QOgryr

Slide 38

Slide 38 text

https://forums.raspberrypi.com/viewtopic.php?t=281884 OpenMAX 太複雜又沒維護 (2012~)

Slide 39

Slide 39 text

2020 年的大消息

Slide 40

Slide 40 text

https://www.raspberrypi.com/news/an-open-source-camera-stack-for-raspberry-pi-using-libcamera/ 採用 libcamera 作為 Camera Stack

Slide 41

Slide 41 text

● libcamera 是 Linux 和 Android 和 Chrome OS 的使用者空間開源相機堆疊和框架 (An userspace open source camera stack and framework for Linux, Android, and Chrome OS.) ● libcamera 目的是提供一個統一的 API 來支援各種 不同的相機模組 , 號稱是相機界的 Mesa( 一個開源 的 3D/2D 圖形加速軟體 ) ● 目前支援的硬體有 Intel IPU3( 僅限部分設備 ), NXP i.MX7, Raspberry Pi 3/4, RockChip RK3399, UVC 網路攝影機和 VIMC 虛擬測試設備 什麼是 libcamera? https://libcamera.org/faq.html

Slide 42

Slide 42 text

libcamera 架構 https://bit.ly/3QOgryr

Slide 43

Slide 43 text

● 使用 plugin 方式載入 (pipeline handler), 讓開 源和閉源的影像處理演算法 (IPA) 都能在受保護的 環境下被執行 ● 讓開發者可以使用統一的 API 進行應用程式開發 , 降低嵌入式相機硬體的複雜性 ● 提供 Adaptation Layer 來相容 V4L2 和 gstreamer 和 Android Camera HAL ● 提供 Python Binding( 例如 picamera2) ● 可支援多相機模組或是單相機模組的多個串流 ● 可對每個幀進行控制 (per-frame controls) libcamera 特色

Slide 44

Slide 44 text

● 提供開源的影像處理演算法 (3A 演算法 ) ● 提供 libcamera-apps 命令列工具測試 ● 提供 picamera2 讓 python 可存取 libcamera Raspberry Pi 整合 libcamera

Slide 45

Slide 45 text

Raspberry Pi 整合 libcamera https://datasheets.raspberrypi.com/camera/raspberry-pi-camera-guide.pdf

Slide 46

Slide 46 text

● $ sudo apt-get update ● $ sudo apt-get install libcamera-apps raspberrypi-kernel ● # 修改 /boot/config.txt 並加上一行 dtoverlay=imx708 ● # 重開機之後就可以使用了 開始使用 Raspberry Pi Camera 3

Slide 47

Slide 47 text

47 ● 一套基於 libcamera 的小工具 , 用來取代 raspicam ● libcamera-hello 只預覽不做其他動作 ● libcamera-still 單次拍照 , 功能和 raspistill 類似 ● libcamera-vid 視訊擷取 , 功能和 raspivid 類似 ● libcamera-raw 取得原始 Bayer 幀 , 和 -raw 類似 libcamera-apps https://github.com/raspberrypi/libcamera-apps

Slide 48

Slide 48 text

DEMO

Slide 49

Slide 49 text

● @Creative5 贊助 USB 小禮物 ● @ 台灣樹莓派贊助 Raspberry Pi Zero 2 W ● @element14 贊助 Raspberry Pi 特色紅包袋 感謝乾爹們~

Slide 50

Slide 50 text

Raspberry Pi Rocks the World Thanks