Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Raspberry Pi Camera 3 介紹

Raspberry Pi Camera 3 介紹

這是樹莓派社群聚會 #35 的分享,介紹 Raspberry Pi Camera 3 的特色和架構。

購買 Raspberry Pi Camera 3。
https://www.piepie.com.tw/product/pi-camera-module-v3

台灣樹莓派社群聚會 #35。
https://raspberrypi-tw-bdfa45.kktix.cc/events/meetup35

台灣樹莓派
PRO

January 24, 2023
Tweet

More Decks by 台灣樹莓派

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. 3

    Raspberry Pi 官方經銷商

    專注 Raspberry Pi 應用與推廣 , 舉辦社群活動
    關於我們

    View Slide


  4. 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 教學

    View Slide

  5. View Slide

  6. 6

    Raspberry Pi Camera v3 介紹

    Sony IMX708 感光元件

    自動對焦 (Autofocus)

    廣視場 (Wide FOV)

    標準視角和廣視場外觀比較

    高動態範圍成像 (HDR)

    只支援 libcamera 和 picamera2
    大綱

    View Slide

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

    View Slide

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

    View Slide

  9. 自動對焦

    View Slide


  10. 自動對焦需 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/
    實現自動對焦功能的系統需求

    View Slide

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

    View Slide

  12. 廣視場 (Wide FOV)

    View Slide

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

    View Slide

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

    View Slide

  15. HDR(High Dynamic Range Imaging)

    View Slide

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

    View Slide


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

    View Slide

  18. 只支援 libcamera 和 picamera2

    View Slide

  19. 相機硬體組成
    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( 影像訊號處理器 )

    View Slide

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

    View Slide

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

    View Slide

  22. 22
    http://elinux.org/Raspberry_Pi_VideoCore_APIs

    View Slide


  23. 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
    影像從相機模組到執行輸出的步驟

    View Slide

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

    View Slide


  25. 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 方式處理

    View Slide

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

    View Slide

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

    View Slide

  28. 28

    開放多媒體加速層 (Open Media Acceleration)

    由 Khronos Group 提出的標準

    統一的介面 , 加速大量多媒體資料的處理
    OpenMAX
    https://www.khronos.org/openmax/

    View Slide


  29. 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)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide


  33. 是 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

    View Slide

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

    View Slide

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

    View Slide

  36. 過了很久出現新的問題

    View Slide


  37. 硬體必須支援 UVC(USB Video device Class)

    但 USB 的速度比較慢 ( 相較於 DMA)

    難以處理日益複雜的相機架構

    硬體層的圖形處理演算法無法發揮作用
    使用 V4L2 的限制
    https://bit.ly/3QOgryr

    View Slide

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

    View Slide

  39. 2020 年的大消息

    View Slide

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

    View Slide


  41. 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

    View Slide

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

    View Slide


  43. 使用 plugin 方式載入 (pipeline handler), 讓開
    源和閉源的影像處理演算法 (IPA) 都能在受保護的
    環境下被執行

    讓開發者可以使用統一的 API 進行應用程式開發 ,
    降低嵌入式相機硬體的複雜性

    提供 Adaptation Layer 來相容 V4L2 和
    gstreamer 和 Android Camera HAL

    提供 Python Binding( 例如 picamera2)

    可支援多相機模組或是單相機模組的多個串流

    可對每個幀進行控制 (per-frame controls)
    libcamera 特色

    View Slide


  44. 提供開源的影像處理演算法 (3A 演算法 )

    提供 libcamera-apps 命令列工具測試

    提供 picamera2 讓 python 可存取 libcamera
    Raspberry Pi 整合 libcamera

    View Slide

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

    View Slide


  46. $ sudo apt-get update

    $ sudo apt-get install libcamera-apps
    raspberrypi-kernel

    # 修改 /boot/config.txt 並加上一行
    dtoverlay=imx708

    # 重開機之後就可以使用了
    開始使用 Raspberry Pi Camera 3

    View Slide

  47. 47

    一套基於 libcamera 的小工具 , 用來取代 raspicam

    libcamera-hello 只預覽不做其他動作

    libcamera-still 單次拍照 , 功能和 raspistill 類似

    libcamera-vid 視訊擷取 , 功能和 raspivid 類似

    libcamera-raw 取得原始 Bayer 幀 , 和 -raw 類似
    libcamera-apps
    https://github.com/raspberrypi/libcamera-apps

    View Slide

  48. DEMO

    View Slide


  49. @Creative5 贊助 USB 小禮物

    @ 台灣樹莓派贊助 Raspberry Pi Zero 2 W

    @element14 贊助 Raspberry Pi 特色紅包袋
    感謝乾爹們~

    View Slide

  50. Raspberry Pi Rocks the World
    Thanks

    View Slide