Computer Vision · Raspberry Pi

Raspberry Pi Camera with OpenCV and Python

Xin chào, hôm nay mình sẽ giới thiệu đến các bạn cách truy cập vào RPi Camera module cùng với OpenCV và Python. Việc truy cập vào webcam với OpenCV là khá đơn giản, còn với RPi Camera module thì sao, cùng tìm hiểu nhé.

Chú ý: Ở bài viết này chúng ta cần phải sử dụng RPi ở chế độ Desktop để hiển thị hình ảnh.


ENABLE AND TESTING CAMERA MODULE

Để enable Camera module trên RPi, chúng ta sử dụng lệnh:

$ sudo raspi-config

raspiconfig

Figure 1 – Enable Camera module

Để test Camera module, chúng ta sử dụng lệnh:

$ cd ~
$ sudo raspistill -o test.jpg

File test.jpg sẽ được lưu tại /home/pi.


INSTALLING PICAMERA MODULE

Để cài đặt picamera, ta sử dụng pip:

$ pip3 install “picamera[array]”


ACCESSING RPI CAMERA

Trong ví dụ đầu tiên, chúng ta sẽ truy cập vào RPi Camera và capture một bức ảnh.

Example 1 – Capture an image from the RPi Camera

from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2

# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
rawCapture = PiRGBArray(camera)

# sleep 0.1 second
time.sleep(0.1)

# capture an image from the camera and output to rawCapture
camera.capture(rawCapture, format="bgr")
image = rawCapture.array

# display the image on screen and wait for a keypress
cv2.imshow("Image", image)
cv2.keyWait(0)

Giải thích

Ở các dòng 1-4 chúng ta import các module cần thiết.

Ở dòng 7 chúng ta khởi tạo PiCamera object. Ở dòng 8 chúng ta tạo một PiRGBArray object để cho phép chúng ta trực tiếp truy cập vào camera stream và tránh việc nén file thành định dạng JPEG, nói cách khác là tạo một 3-dimensional RGB array từ một RGB capture.

Ở dòng 14 chúng ta capture một bức ảnh từ PiCamera và output vào PiRGBArray object với định dạng BGR cho phù hợp với openCV.

Ở dòng 18, 19 chúng ta hiển thị ảnh lên màn hình.

Example 2 – Capture a video from the RPi Camera

from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2

# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (640, 480)
camera.framrate = 32
rawCapture = PiRGBArray(camera, size=(640, 480))

# sleep 0.1 second
time.sleep(0.1)

# capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
    # convert frame to array
    image = frame.array
    # display a frame
    cv2.imshow("Frame", image)
    key = cv2.waitKey(1) & 0xFF
    # clear the stream in preparation for the next frame
    rawCapture.truncate(0)
    #wait for 'q' key was pressed and break from the loop
    if key == ord('q'):
        break

Giải thích

Ở các dòng 1-4 chúng ta import các module cần thiết.

Ở các dòng 7-10 chúng ta khởi tạo PiCameraPiRGBArray object với kích thước frame là 640×480, framrate = 32.

Ở dòng 16 chúng ta truy cập vào video stream với method capture_continuous(). Method này trả về một infinite iterator của các frame nhận được từ RPi Camera.

Ở dòng 18 chúng ta chuyển frame thành dạng array để hiển thị ra màn hình ở dòng 20.

Ở dòng 23 chúng ta bắt buộc phải xóa frame đang được hiển thị trước khi nhận frame tiếp theo.

Cuối cùng, nhấn ‘q’ nếu muốn kết thúc chương trình.

Qua bài viết này chúng ta đã biết cách truy cập vào RPi Camera module để capture image và video. Cảm ơn các bạn đã theo dõi bài viết.

Thân ái và quyết thắng.
Reference:
[1] Accessing the Raspberry Pi Camera with OpenCV and Python
[2] API – The PiCamera Class.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s