Streaming video với Raspberry Pi Camera lên web server

Streaming video với Raspberry Pi Camera lên web server

14:33 - 01/02/2019

Streaming video với Raspberry Pi Camera lên web server

NVIDIA Jetson AGX Orin hiệu suất AI mạnh nhất của NVIDIA Jetson Family với 275 TOPS, 2048 NVIDIA® CUDA® cores, 64 Tensor Cores
NVIDIA Jetson AGX Orin Hardware Layout and GPIO Expansion Header Pinout
NVIDIA Jetson là nền tảng hàng đầu thế giới dành cho Trí tuệ nhân tạo (AI) và Deep Learning
Cách sử dụng Camera CSI với hệ điều hành Raspberry Pi Bulleyes mới nhất
Jetson Stats dùng cho Giám sát và Điều khiển trên NVIDIA Jetson Ecosystem [Xavier NX, Nano, AGX Xavier, TX1, TX2]

Streaming video với Raspberry Pi Camera lên web server

Xin chào các bạn !

Trong bài viết trước mình đã hướng dẫn các bạn một số thao tác cơ bản với camera cho Raspberry Pi như chụp ảnh và quay phim. Hôm nay mình sẽ giới thiệu cho các bạn cách mà các bạn có thể streaming video với Raspberry Pi (Link here) và Camera Raspberry Pi (Link here). Cách live stream video vào một trang web mà bạn có thể truy cập trong bất kỳ thiết bị nào có trình duyệt và được kết nối với cùng một mạng Pi. Tính năng này rất hữu ích để áp dụng cho một camera giám sát gia đình.

Đầu tiên thì các bạn cần phải lắp case Camera của mình vào khe cắm camera trên Pi như hình sau đây :

Tiếp theo thì mình sẽ nhắc lại cách kích hoạt camera cho Raspberry Pi ( Ở đây mình sẽ dùng cách thứ 2 trong bài hướng dẫn cơ bản )

Các bạn mở Raspberry Pi lên, sau đó nhấp chuột vào Menu, chọn Preferences(Tùy thích) , chọn Raspberry Pi Configuration.

Một hộp thoại hiện lên, bạn chọn tab Interfaces, ở mục Camera chọn Enable và nhấn OK

Bây giờ mình sẽ đi vào việc thiết lập để có thể streaming video nhé !

Bước 1 : Tìm địa chỉ IP của Raspberry Pi

Để truy cập máy chủ web streaming video của bạn, bạn cần biết địa chỉ IP Raspberry Pi của mình. Để tìm ip bạn sử dụng lệnh sau : 

ifconfig

Bạn sẽ được cung cấp một loạt thông tin, bao gồm địa chỉ IP Raspberry Pi của bạn. Cụ thể ở đây địa chỉ IP RPi của mình là 192.168.1.216 .

 

Bước 2 Viết script

Các bạn bật Terminal lên và tạo một file trên Desktop bằng lệnh sau đây :

cd Desktop/

nano rpi_camera_surveillance_system.py

Sau đó các bạn copy đoạn code sau  vào file vừa tạo :

# Web streaming example
# Source code from the official PiCamera package
# http://picamera.readthedocs.io/en/latest/recipes2.html#web-streaming

import io
import picamera
import logging
import socketserver
from threading import Condition
from http import server

PAGE="""\
<html>
<head>
<title>Raspberry Pi - Surveillance Camera</title>
</head>
<body>
<center><h1>Raspberry Pi - Surveillance Camera</h1></center>
<center><img src="stream.mjpg" width="640" height="480"></center>
</body>
</html>
"""

class StreamingOutput(object):
    def __init__(self):
        self.frame = None
        self.buffer = io.BytesIO()
        self.condition = Condition()

    def write(self, buf):
        if buf.startswith(b'\xff\xd8'):
            # New frame, copy the existing buffer's content and notify all
            # clients it's available
            self.buffer.truncate()
            with self.condition:
                self.frame = self.buffer.getvalue()
                self.condition.notify_all()
            self.buffer.seek(0)
        return self.buffer.write(buf)

class StreamingHandler(server.BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            self.send_response(301)
            self.send_header('Location', '/index.html')
            self.end_headers()
        elif self.path == '/index.html':
            content = PAGE.encode('utf-8')
            self.send_response(200)
            self.send_header('Content-Type', 'text/html')
            self.send_header('Content-Length', len(content))
            self.end_headers()
            self.wfile.write(content)
        elif self.path == '/stream.mjpg':
            self.send_response(200)
            self.send_header('Age', 0)
            self.send_header('Cache-Control', 'no-cache, private')
            self.send_header('Pragma', 'no-cache')
            self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')
            self.end_headers()
            try:
                while True:
                    with output.condition:
                        output.condition.wait()
                        frame = output.frame
                    self.wfile.write(b'--FRAME\r\n')
                    self.send_header('Content-Type', 'image/jpeg')
                    self.send_header('Content-Length', len(frame))
                    self.end_headers()
                    self.wfile.write(frame)
                    self.wfile.write(b'\r\n')
            except Exception as e:
                logging.warning(
                    'Removed streaming client %s: %s',
                    self.client_address, str(e))
        else:
            self.send_error(404)
            self.end_headers()

class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):
    allow_reuse_address = True
    daemon_threads = True

with picamera.PiCamera(resolution='640x480', framerate=24) as camera:
    output = StreamingOutput()
    #Uncomment the next line to change your Pi's Camera rotation (in degrees)
    #camera.rotation = 90
    camera.start_recording(output, format='mjpeg')
    try:
        address = ('', 8160)
        server = StreamingServer(address, StreamingHandler)
        server.serve_forever()
    finally:
        camera.stop_recording() 

Chúng ta dùng tổ hợp phím Ctrl + X để thoát, chọn Y và enter để lưu file.

Bước cuối là truy cập máy chủ web phát trực tuyến video của mình.

Sau khi viết xong script chúng ta tiến hành chạy nó bằng python3 bằng cách thực hiện lệnh  :

python3 rpi_camera_surveillance_system.py

Khi tập lệnh đang chạy, bạn có thể truy cập máy chủ web streaming video của mình tại: http:// <Your_Pi_IP_Address>: 8160. Thay thế bằng địa chỉ IP Raspberry Pi của bạn. Bạn có thể truy cập streaming video qua bất kỳ thiết bị nào có trình duyệt và được kết nối với cùng một mạng mà Pi của bạn. Bạn có thể sử dụng Pi của mình để giám sát nhà của bạn như một camera giám sát: 

 

Ahihi. Hiện tại mình đang không được đẹp trai cho lắm vậy nên mình xin được phép che mặt. Trong các bài viết tiếp theo mình sẽ giới thiệu đến các bạn các tính năng thú vị khác của  Raspberry Pi Camera. Rất mong sự ủng hộ của các bạn !!!

Các bạn hãy làm theo các bước mà mình đã hướng dẫn để trải nghiệm tính năng thú vị này nhé !

Nếu các bạn có bất kỳ ý tưởng mới nào đừng ngần ngại mà hãy inbox trực tiếp cho fanpage . Xin chào và hẹn gặp lại các bạn trong các bài viết tiếp theo !!!

PIVIETNAM.COM.VN CHÚC CÁC BẠN THÀNH CÔNG !!!

Thực hiện bài viết : Đào Văn Hậu


Để cập nhật các tin tức công nghệ mới các bạn làm theo hướng dẫn sau đây :

Các bạn vào Trang chủ >> Tin tức. ở mục này có các bài viết kỹ thuật thuộc các lĩnh vực khác nhau các bạn có thể lựa chọn lĩnh vực mà mình quan tâm để đọc nhé !!!

Các bạn cũng có thế kéo xuống cuối trang để xem những tin tức công nghệ mới nhất.