這是樹莓派社群聚會 #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
Raspberry Pi Camera 3 介紹台灣樹莓派 2023/01/16 @Raspberry Pi Meetup #35
View Slide
姓名標示 — 非商業性 — 相同方式分享CC (Creative Commons)姓名標示 — 你必須給予 適當表彰、提供指向本授權條款的連結,以及 指出(本作品的原始版本)是否已被變更。你可以任何合理方式為前述表彰,但不得以任何方式暗示授權人為你或你的使用方式背書。非商業性 — 你不得將本素材進行商業目的之使用。相同方式分享 — 若你重混、轉換本素材,或依本素材建立新素材,你必須依本素材的授權條款來散布你的貢獻物。
3●Raspberry Pi 官方經銷商●專注 Raspberry Pi 應用與推廣 , 舉辦社群活動關於我們
●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 教學
6●Raspberry Pi Camera v3 介紹●Sony IMX708 感光元件●自動對焦 (Autofocus)●廣視場 (Wide FOV)●標準視角和廣視場外觀比較●高動態範圍成像 (HDR)●只支援 libcamera 和 picamera2大綱
7Raspberry Pi Camera v3https://piepie.com.tw/product/pi-camera-module-v3
8https://www.raspberrypi.com/documentation/accessories/camera.html
自動對焦
●自動對焦需 Sensor, Focus Motor 和 Control System 配合●對焦演算法是通過 PDAF 和 CDAF 的混合實現的●IMX708 原生相位自動對焦 (PDAF, Phase DetectionAutofocus)●Raspberry Pi 對比度自動對焦 (CDAF, Contrast DetectionAutofocus)https://www.arducam.com/raspberry-pi-camera/autofocus/實現自動對焦功能的系統需求
libcamera-hello -t 0 --autofocus-mode continuousDEMOhttps://github.com/raspberrypi/libcamera-apps
廣視場 (Wide FOV)
https://sg.cytron.io/p-raspberry-pi-camera-module-3-12mp-with-auto-focus-lensCamera v3 vs. Camera v216:9 ~4:3
https://sg.cytron.io/p-raspberry-pi-camera-module-3-12mp-with-auto-focus-lensCamera v3 vs. Camera v3 wide75º 120º
HDR(High Dynamic Range Imaging)
HDR 是提供更大明暗差別的技術內部曝光不足以捕捉外部細節外部細節不清楚開啟 HDR 功能可捕捉內部和外部細節
●IMX708 將 4 個像素在同一通道 (R/G/B) 上具有不同的曝光 ( 長曝光 / 中曝光 / 短曝光 ) 在讀出後合併成一個大的 ,因此輸出限制為 3MPhttps://www.sony-semicon.com/en/technology/mobile/hdr.htmlIMX708 透過像素合成實現 HDR
只支援 libcamera 和 picamera2
相機硬體組成http://www.phonearena.com/news/13MP-camera-tipped-for-Samsung-Galaxy-S-IV_id351681. Lens( 透鏡 )2. VCM( 音圈馬達 )3. IR-Cut( 紅外光濾片 )4. Sensor( 感光元件 )5. PCB( 印刷電路板 )6. ISP( 影像訊號處理器 )
20各別硬體功能http://zhaoxuhui.top/blog/2021/10/28/image-formation-from-a-radiation-view.html
每一家實做都不一樣那樹莓派怎麼做?
22http://elinux.org/Raspberry_Pi_VideoCore_APIs
●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影像從相機模組到執行輸出的步驟
https://picamera.readthedocs.io/en/release-1.13/fov.html
●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.htmlGPU 的後處理用 pipeline 方式處理
27ISP 的處理步驟和結果https://karaimer.github.io/camera-pipeline/
28●開放多媒體加速層 (Open Media Acceleration)●由 Khronos Group 提出的標準●統一的介面 , 加速大量多媒體資料的處理OpenMAXhttps://www.khronos.org/openmax/
●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)
操作太複雜了 ,Linux 怎麼做?
31Webcamhttp://www.slideshare.net/gxben/abs-2014-android-kit-kat-internals
Linux 如何存取硬體?http://www.xml.com/ldd/chapter/book/ch01.html裝置節點
●是 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
https://forums.raspberrypi.com/viewtopic.php?t=62364Raspberry Pi 提供 V4L2 Driver
https://www.iottechtrends.com/product-review/raspberry-pi-camera-v2-review/同時支援 V4L2 和 MMAL
過了很久出現新的問題
●硬體必須支援 UVC(USB Video device Class)●但 USB 的速度比較慢 ( 相較於 DMA)●難以處理日益複雜的相機架構●硬體層的圖形處理演算法無法發揮作用使用 V4L2 的限制https://bit.ly/3QOgryr
https://forums.raspberrypi.com/viewtopic.php?t=281884OpenMAX 太複雜又沒維護 (2012~)
2020 年的大消息
https://www.raspberrypi.com/news/an-open-source-camera-stack-for-raspberry-pi-using-libcamera/採用 libcamera 作為 Camera Stack
●libcamera 是 Linux 和 Android 和 Chrome OS的使用者空間開源相機堆疊和框架 (An userspaceopen source camera stack and frameworkfor Linux, Android, and Chrome OS.)●libcamera 目的是提供一個統一的 API 來支援各種不同的相機模組 , 號稱是相機界的 Mesa( 一個開源的 3D/2D 圖形加速軟體 )●目前支援的硬體有 Intel IPU3( 僅限部分設備 ),NXP i.MX7, Raspberry Pi 3/4, RockChipRK3399, UVC 網路攝影機和 VIMC 虛擬測試設備什麼是 libcamera?https://libcamera.org/faq.html
libcamera 架構https://bit.ly/3QOgryr
●使用 plugin 方式載入 (pipeline handler), 讓開源和閉源的影像處理演算法 (IPA) 都能在受保護的環境下被執行●讓開發者可以使用統一的 API 進行應用程式開發 ,降低嵌入式相機硬體的複雜性●提供 Adaptation Layer 來相容 V4L2 和gstreamer 和 Android Camera HAL●提供 Python Binding( 例如 picamera2)●可支援多相機模組或是單相機模組的多個串流●可對每個幀進行控制 (per-frame controls)libcamera 特色
●提供開源的影像處理演算法 (3A 演算法 )●提供 libcamera-apps 命令列工具測試●提供 picamera2 讓 python 可存取 libcameraRaspberry Pi 整合 libcamera
Raspberry Pi 整合 libcamerahttps://datasheets.raspberrypi.com/camera/raspberry-pi-camera-guide.pdf
●$ sudo apt-get update●$ sudo apt-get install libcamera-appsraspberrypi-kernel●# 修改 /boot/config.txt 並加上一行dtoverlay=imx708●# 重開機之後就可以使用了開始使用 Raspberry Pi Camera 3
47●一套基於 libcamera 的小工具 , 用來取代 raspicam●libcamera-hello 只預覽不做其他動作●libcamera-still 單次拍照 , 功能和 raspistill 類似●libcamera-vid 視訊擷取 , 功能和 raspivid 類似●libcamera-raw 取得原始 Bayer 幀 , 和 -raw 類似libcamera-appshttps://github.com/raspberrypi/libcamera-apps
DEMO
●@Creative5 贊助 USB 小禮物●@ 台灣樹莓派贊助 Raspberry Pi Zero 2 W●@element14 贊助 Raspberry Pi 特色紅包袋感謝乾爹們~
Raspberry Pi Rocks the WorldThanks