・OpenCVとUSBカメラを使った録画のPythonコードを調べている方
・日付時刻を動画中に表示する方法を調べてる方
など
今回は、PythonとOpenCVを使用してUSBカメラから動画を録画する方法をご紹介します。
さらに、録画されたビデオには日付と時刻を表示するトリックもお伝えします。
完成イメージは↓こんな感じです。
使用する機器
今回はMacBook Airと
Microsoftが販売しているタイプC変換アダプターとこれまたMicrosoftのteams用のUSBカメラ。
ちょっとちぐはぐ?な組み合わせですが
これを使ったコードを書いていきます。
Pythonコード
Python3系とOpenCVを使って書いたコードは以下のようになります。
import cv2
import datetime
# グローバル変数
recording = False
out = None
# USBカメラにアクセス
cap = cv2.VideoCapture(0)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
size = (int(width),int(height))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# キーボード入力を取得
key = cv2.waitKey(1) & 0xFF
if key == ord('s') and not recording:
# 録画を開始
recording = True
# ビデオの保存設定
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, size)
elif key == ord('q') and recording:
# 録画を停止
recording = False
out.release()
if recording:
# 現在の日付と時刻を取得
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# フレームに日付と時刻を表示
cv2.putText(frame, current_time, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# ビデオを保存
out.write(frame)
# フレームを表示
cv2.imshow('Frame', frame)
# 'q'キーでループを中断
if key == ord('q'):
break
# リソースを解放
cap.release()
cv2.destroyAllWindows()
ターミナルやコマンドプロンプトで
上記のコードを実行すると、カメラのリアルタイムのviewerが立ち上がります。
キーボードのSボタンで録画開始
Qボタンで録画停止するアプリになってます。
少し自分がつまずいた点としては
動画のフレームサイズとcv2.VideoWriteの引数のフレームサイズを同じにしないと
うまく動画が保存できない点でした。
↓ちょっと抜粋しますね。
#動画のフレームサイズを取得
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
size = (int(width),int(height))
# ビデオの保存設定
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, size)
おわりに
よく本ブログでも書いている話かもしれないですが
工場で働いていると、そんな簡単なアプリを?と思うようなアプリ作成を依頼されることがしばしば。
監視カメラのようなものを作ってほしいという話も時々あがって
今回紹介したようなPythonのコードをpyinstallerでexe化して配布をしたりもしてます。
もしPythonを勉強したいけど、何をしたらいいか分からない人は
OpenCVの技術はどこの生産現場でもなかなか使えるものだと思うので、OpenCVアプリ作成を個人的にはオススメしてます。