คู่มือใช้งาน AI Camera บน Raspberry Pi 5 ผ่าน Docker แบบจับมือทำ!

Raspberry Pi AI Camera Project

สวัสดีครับสาย Dev และเมกเกอร์ทุกคน! โปรเจกต์นี้เราจะมาพูดถึงวิธีการสร้างและรันคอนเทนเนอร์ Docker บน Raspberry Pi 5 เพื่อใช้ควบคุม Raspberry Pi AI Camera กันครับ โดยบทความนี้จะแจก Source Code ให้เอาไปรันตามได้เลย ทั้งแอปพลิเคชัน ตรวจจับวัตถุ (Object Detection) และ ตรวจจับท่าทาง (Pose Estimation) แบบเรียลไทม์ครับ!

ทำไมถึงควรสร้างแอปพลิเคชันด้วย Docker?

เวลาที่เราต้องทำระบบที่รวมเอา Raspberry Pi เข้ากับกล้อง การใช้ Docker จะช่วยให้ชีวิตเราง่ายขึ้นมากด้วยข้อดีเหล่านี้ครับ:

  1. Setup ง่าย & ทำซ้ำได้สบาย (High reproducibility): สามารถก๊อปปี้สภาพแวดล้อมเดิมไปลงเครื่องอื่นๆ ได้เลย สภาพแวดล้อมการทำงานระหว่างเครื่อง Dev กับเครื่องผู้ใช้งานก็จะเหมือนกันเป๊ะ
  2. สตาร์ท / สต็อป / อัปเดต ได้ลื่นไหล: ทนทานต่อการรีสตาร์ทเครื่อง แถมยังแยกส่วนการ Debug ได้ง่าย แค่ใช้คำสั่งง่ายๆ อย่าง:
    • docker-compose up -d (เพื่อเริ่มการทำงาน)
    • docker-compose down (เพื่อหยุดการทำงาน)
    • docker-compose up --build (เพื่ออัปเดตและรีสตาร์ท)
  3. ผูกเข้ากับ CI/CD และ GitHub ได้ง่าย: เมื่อเราเอา Docker images ไปลงทะเบียนใน GitHub Actions หรือ GitHub Container Registry ก็สามารถตั้งค่าให้มัน Build และ Deploy อัตโนมัติทุกครั้งที่มีการอัปเดตโค้ดได้เลย

อุปกรณ์และระบบที่ต้องใช้ (Operating Environment)

ของที่ต้องใช้มีตามนี้ครับ (ถ้าใครกำลังตามหาบอร์ด, โมดูลกล้อง AI หรือกำลังอยากได้ เส้นพลาสติก 3D Print คุณภาพดีเพื่อเอาไปปริ้นท์เคสใส่ Raspberry Pi ของคุณให้ดูโปร สามารถแวะไปช้อปอุปกรณ์สายเมกเกอร์ได้ที่ Globalbyte เลยครับ พร้อมส่งทันที!)

  • Raspberry Pi 5
  • microSD card ที่ติดตั้ง Raspberry Pi OS (64-bit, Bookworm)
  • Raspberry Pi AI Camera x1

ทริคเด็ด: วิธีให้ Docker เข้าถึงกล้อง AI Camera

ตั้งแต่ Raspberry Pi OS เวอร์ชัน Bullseye (พ.ย. 2021) เป็นต้นมา ระบบได้เปลี่ยนสเปกนิดหน่อยครับ โดยยกเลิกการใช้ raspistill และ raspivid แบบเก่า แล้วเปลี่ยนมาใช้ระบบใหม่ที่อิงจาก libcamera แทน ทำให้การเรียกใช้กล้องผ่าน Docker ต้องมีการตั้งค่าพิเศษดังนี้:

1. แชร์ udev ของ Docker Host ให้ Container
การเข้าถึงกล้องต้องมีการ Mount /dev/video0 (ซึ่งเป็น V4L2 interface สำหรับ libcamera และ PiCamera2) และต้องแชร์ข้อมูล udev จากเครื่อง Host ด้วย เพื่อให้ libcamera ตรวจจับกล้องได้ โดยตั้งค่าในไฟล์ docker-compose.yml ดังนี้:

docker-compose.yml (Volumes & Devices)
devices:
  - /dev/video0:/dev/video0
volumes:
  - /run/udev:/run/udev:ro

หมายเหตุ: คุณต้องลงไดรเวอร์ที่เครื่อง Host ให้เรียบร้อยก่อนนะครับ โดยรันคำสั่ง sudo apt install imx500-all แล้วรีสตาร์ทเครื่อง (สามารถอ่านคู่มือเสริมได้ที่ Official Raspberry Pi AI Camera documentation)

2. รัน Container ในโหมด "Privileged Mode"
ปกติ Docker จะจำกัดการเข้าถึงฮาร์ดแวร์ เราต้องปลดล็อคด้วยการเปิดโหมดพิเศษ เพื่อให้ Container เข้าถึง /dev/media* ได้ครับ:

docker-compose.yml (Privileged)
privileged: true

ตัวอย่างที่ 1: Real-Time Object Detection + Web UI (Flask)

แอปพลิเคชันนี้จะดึงภาพจากกล้อง AI Camera (IMX500) มาทำการตรวจจับวัตถุ (Object Detection) แบบเรียลไทม์ และแสดงผลผ่านหน้าเว็บเบราว์เซอร์ โดยฝั่งซ้ายจะเป็นวิดีโอสดพร้อมกรอบตรวจจับ และฝั่งขวาเป็นกราฟสถิติครับ

หมายเหตุ: สามารถดูโค้ดฉบับเต็มจาก Sony Semiconductor Solutions ได้ที่ GitHub

ด้านล่างนี้คือโค้ด Dockerfile ที่ใช้ในการตั้งค่า Environment ครับ:

Dockerfile (Object Detection)
FROM debian:bookworm

# Install gnupg and add Raspberry Pi repository
RUN apt update && apt install -y --no-install-recommends gnupg && \
    echo "deb http://archive.raspberrypi.org/debian/ bookworm main" > /etc/apt/sources.list.d/raspi.list && \
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E

# Upgrade packages
RUN apt update && apt -y upgrade

# Install required packages (imx500-all installs sample models automatically)
RUN apt install -y --no-install-recommends \
         python3-pip \
         python3-picamera2 \
         imx500-all && \
    apt-get clean && \
    apt-get autoremove && \
    rm -rf /var/cache/apt/archives/* && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copy application files
COPY app/ /app/

# Install Python dependencies
RUN pip install --break-system-packages --no-cache-dir -r requirements.txt

# Expose port 5000
EXPOSE 5000

# Run the application
CMD ["python3", "app.py"]

วิธีรันโปรเจกต์ Object Detection:

Terminal
# 1. โหลด Repository
git clone https://github.com/SonySemiconductorSolutions/aitrios-rpi-sandbox.git
cd aitrios-rpi-sandbox/examples/docker_webui

# 2. ติดตั้ง Docker บน Raspberry Pi 5
./install_docker

# 3. รัน Docker container
docker-compose up --build

จากนั้นเปิดเบราว์เซอร์แล้วเข้าไปที่ http://<IP_ของ_Raspberry_Pi>:5000/ หรือ http://raspberrypi.local:5000/ เพื่อดูผลลัพธ์ได้เลยครับ!

ตัวอย่างที่ 2: Pose Estimation (แสดงเฉพาะโครงกระดูก) + Web UI

แอปพลิเคชันนี้เป็นการทำ Pose Estimation (จับท่าทาง) แบบเรียลไทม์ครับ จุดเด่นคือ "เน้นความเป็นส่วนตัว (Privacy-conscious)" เพราะระบบจะจับแค่ Metadata แล้ววาดโครงกระดูก (Skeleton) ทับลงบนพื้นหลังที่เตรียมไว้ (Dynamic background) โดยไม่แสดงภาพคนจริงๆ ออกมาเลย!

หมายเหตุ: สามารถดูโค้ดฉบับเต็มของโปรเจกต์นี้ได้ที่ GitHub

วิธีรันโปรเจกต์ Pose Estimation:

ถ้าคุณติดตั้ง Docker จากขั้นตอนด้านบนเสร็จแล้ว ให้เข้าไปรันคำสั่งตามนี้ได้เลยครับ:

Terminal
cd aitrios-rpi-sandbox/examples/docker_pose_estimation
docker-compose up --build

เข้าไปดูผลลัพธ์ผ่านเบราว์เซอร์ที่พอร์ต 5000 เช่นเดิมครับ

บทสรุปและการแก้ปัญหา (Conclusion & Troubleshooting)

ในโปรเจกต์นี้ เราได้เห็นวิธีการรันแอปพลิเคชันประมวลผลวิดีโอและจับท่าทางผ่าน Docker บน Raspberry Pi 5 กันไปแล้วครับ สิ่งที่ท้าทายที่สุดคือการเจาะให้ Docker เข้าถึงฮาร์ดแวร์กล้องได้ ซึ่งเราก็แก้เกมด้วยการแชร์ udev และตั้งโหมด privileged หวังว่าแอปพลิเคชันตัวอย่างเหล่านี้จะเป็นประโยชน์ให้เพื่อนๆ เอาไปพัฒนาต่อยอดโปรเจกต์ AI Vision ที่ใส่ใจเรื่อง Privacy กันนะครับ!

ถ้าทำตามแล้วติดขัดปัญหาทางเทคนิค สามารถเข้าไปพูดคุยสอบถามเพิ่มเติมได้ที่ Raspberry Pi Forums ได้เลยครับ (สังคมนักพัฒนาที่นั่นพร้อมช่วยเหลือเสมอ!)

อ้างอิงข้อมูลจาก: Globalbyteshop Blog

ต้นฉบับบทความโดย: patrick-johnson2 | Original Link

*คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากบทความต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือย่อเนื้อหา สามารถตรวจสอบเนื้อหาเชิงเทคนิคโดยละเอียดได้ที่ ต้นฉบับภาษาอังกฤษ

 

แท็ก


Blog posts

เข้าสู่ระบบ

ลืมรหัสผ่านใช่ไหม?

ยังไม่มีบัญชีใช่ไหม?
สร้างบัญชี