2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenCVで生成した動画をWebブラウザで表示する

Posted at

はじめに

OpenCVをDocker環境で動かそうとしたら、ホストOSにアプリのインストールが必要だったりとGUI環境の構築が面倒だったのでブラウザで表示できるようにしました。

ファイル

$ tree .
.
├── main.py
├── routes.py
├── sample.mp4
├── videos
│   └── output.webm
├── templates
    └── show.html
├── Dockerfile
└── docker-compose.yml

コード

main.py
import cv2

def run():
    videoCapture = cv2.VideoCapture('sample.mp4') # 読み込む動画
    video = cv2.VideoWriter('videos/output.webm', cv.VideoWriter_fourcc(*'VP90'), fps, size)
    while (videoCapture.isOpend()):
        success, frame = videoCapture.read()
        if not success:
            break

        # 任意の処理

        video.write(frame)

    video.release()

MP4でも動画の生成はできるのですが、WebM形式じゃないとブラウザで表示できなかったのでWebM形式で出力しています。

routes.py
from flask import Flask, render_template, request
import main

app = Flask(__name__, static_folder='videos') # static_folderは出力した動画のdirectory

@app.route('/show', methods=['GET'])
def show():    
    main.run()
    return render_template('show.html', video_url='videos/output.webm')

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8000, threaded=True)
show.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>opencv_web</title>
</head>
<body>
  <video controls src="{{video_url}}" type="video/webm"></video>
</body>
</html>
Dockerfile
FROM python:3.10

RUN apt-get update && apt-get upgrade -y
RUN pip3 install --upgrade pip setuptools

# OpenCV
RUN apt-get install -y libgl1-mesa-glx
RUN pip3 install opencv-python

# Flask
RUN pip3 install Flask

RUN apt-get clean

CMD ["python3", "routes.py"]
docker-compose.yml
version: '3'
services:
  opencv_web:
    tty: true
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./:/app
    working_dir: /app
    ports:
      - 8000:8000

使い方

$ docker compose up --build

で起動して、ブラウザでhttp://localhost:8000/showにアクセスすると表示されます。
OpenCV: FFMPEG: tag 0x30395056/'VP90' is not supported with codec id 167 and format 'webm / WebM'というエラーメッセージが出ますが動画は出力されるのでおそらく問題ないです。

感想

表示されるまでに少し時間かかるので、大きいサイズの動画の場合はローカルに環境を構築したほうがいいかもしれないです。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?