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

台灣樹莓派

January 24, 2023
Tweet

More Decks by 台灣樹莓派

Other Decks in Technology

Transcript

  1. 姓名標示 — 非商業性 — 相同方式分享 CC (Creative Commons) 姓名標示 —

    你必須給予 適當表彰、提供指向本授權 條款的連結,以及 指出(本作品的原始版本)是否已 被變更。你可以任何合理方式為前述表彰,但不得以 任何方式暗示授權人為你或你的使用方式背書。 非商業性 — 你不得將本素材進行商業目的之使 用。 相同方式分享 — 若你重混、轉換本素材,或依本 素材建立新素材,你必須依本素材的授權條款來 散布你的貢獻物。
  2. • 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 教學
  3. 6 • Raspberry Pi Camera v3 介紹 • Sony IMX708

    感光元件 • 自動對焦 (Autofocus) • 廣視場 (Wide FOV) • 標準視角和廣視場外觀比較 • 高動態範圍成像 (HDR) • 只支援 libcamera 和 picamera2 大綱
  4. • 自動對焦需 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/ 實現自動對焦功能的系統需求
  5. • IMX708 將 4 個像素在同一通道 (R/G/B) 上具有不同的曝 光 ( 長曝光

    / 中曝光 / 短曝光 ) 在讀出後合併成一個大的 , 因此輸出限制為 3MP https://www.sony-semicon.com/en/technology/mobile/hdr.html IMX708 透過像素合成實現 HDR
  6. 相機硬體組成 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( 影像訊號處理器 )
  7. • 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 影像從相機模組到執行輸出的步驟
  8. • 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 方式處理
  9. 28 • 開放多媒體加速層 (Open Media Acceleration) • 由 Khronos Group

    提出的標準 • 統一的介面 , 加速大量多媒體資料的處理 OpenMAX https://www.khronos.org/openmax/
  10. • 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)
  11. • 是 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
  12. • 硬體必須支援 UVC(USB Video device Class) • 但 USB 的速度比較慢

    ( 相較於 DMA) • 難以處理日益複雜的相機架構 • 硬體層的圖形處理演算法無法發揮作用 使用 V4L2 的限制 https://bit.ly/3QOgryr
  13. • 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
  14. • 使用 plugin 方式載入 (pipeline handler), 讓開 源和閉源的影像處理演算法 (IPA) 都能在受保護的

    環境下被執行 • 讓開發者可以使用統一的 API 進行應用程式開發 , 降低嵌入式相機硬體的複雜性 • 提供 Adaptation Layer 來相容 V4L2 和 gstreamer 和 Android Camera HAL • 提供 Python Binding( 例如 picamera2) • 可支援多相機模組或是單相機模組的多個串流 • 可對每個幀進行控制 (per-frame controls) libcamera 特色
  15. • 提供開源的影像處理演算法 (3A 演算法 ) • 提供 libcamera-apps 命令列工具測試 •

    提供 picamera2 讓 python 可存取 libcamera Raspberry Pi 整合 libcamera
  16. • $ sudo apt-get update • $ sudo apt-get install

    libcamera-apps raspberrypi-kernel • # 修改 /boot/config.txt 並加上一行 dtoverlay=imx708 • # 重開機之後就可以使用了 開始使用 Raspberry Pi Camera 3
  17. 47 • 一套基於 libcamera 的小工具 , 用來取代 raspicam • libcamera-hello

    只預覽不做其他動作 • libcamera-still 單次拍照 , 功能和 raspistill 類似 • libcamera-vid 視訊擷取 , 功能和 raspivid 類似 • libcamera-raw 取得原始 Bayer 幀 , 和 -raw 類似 libcamera-apps https://github.com/raspberrypi/libcamera-apps
  18. • @Creative5 贊助 USB 小禮物 • @ 台灣樹莓派贊助 Raspberry Pi

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