7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5Stack Module LLM Advent Calendar 2024

Day 13

Module-LLMからPCのブラウザへ動画データを送る

Last updated at Posted at 2024-12-12

目的

Module-LLMでmp4を再生してhttp経由でPCのブラウザに送ってみました。

PCのブラウザに画像を送る

Module-LLMのrootアカウントにログインし、pipでOpenCVとFastAPIをインストールします。

# apt install libopencv-dev
# pip install opencv-python fastapi
# python3 send_http_mp4.py

 このプログラムはFastAPIフレームワークを利用してビデオストリーミングサーバーを実装したものです。指定されたビデオファイルを読み込み、フレームごとにリサイズしてブラウザにストリーミング配信します。
 処理の流れとしては、まずFastAPIのアプリケーションインスタンスを作成し、ビデオ処理のための補助関数として、入力フレームを320x240ピクセルにリサイズするresize_frame関数を定義します。続いて、ビデオストリーミングの核となるget_video_stream関数では、OpenCVを使用してビデオファイルを読み込み、フレームごとに処理を行います。各フレームはリサイズされ、JPEGフォーマットにエンコードされ、マルチパート形式でストリームデータとして生成されます。
 ウェブブラウザで http://localhost:8888/video にアクセスすることで、ストリーミングされるビデオを視聴することができます。

send_http_mp4.py
from fastapi import FastAPI, Response
from fastapi.responses import StreamingResponse
import cv2
import numpy as np
from typing import Generator
import time

app = FastAPI()

def resize_frame(frame: np.ndarray, width: int = 320, height: int = 240) -> np.ndarray:
    return cv2.resize(frame, (width, height), interpolation=cv2.INTER_AREA)

def get_video_stream(video_path: str) -> Generator[bytes, None, None]:
    video = cv2.VideoCapture(video_path)
    try:
        while True:
            success, frame = video.read()
            if not success:
                break
            frame = resize_frame(frame)
            time.sleep(0.01)
            _, buffer = cv2.imencode('.jpg', frame)
            yield (b'--frame\r\n'
                  b'Content-Type: image/jpeg\r\n\r\n' + buffer.tobytes() + b'\r\n')
    finally:
        video.release()
@app.get("/video")
async def video_endpoint():
    video_path = "./video.mp4"
    return StreamingResponse(
        get_video_stream(video_path),
        media_type='multipart/x-mixed-replace; boundary=frame'
    )
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8888)
7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?