【Python】Webカメラ・内蔵カメラの映像(動画)を録画:OpenCVの利用
2022.10.26 /
本記事ではPythonのOpenCVによる、カメラ(Web、内蔵)の映像(動画)を録画する方法について解説していきます。
OpenCVとは画像処理や動画処理、画像解析に利用されるライブラリです。OpenCVを利用すると、映像録画アプリケーションや防犯カメラのようなシステムを簡単に作成できます。
OpenCVについて詳しくは以下記事をご参照ください。
【Python】OpenCVによる画像処理について:基本的なメソッドの使い方
本記事を参考にして、OpenCVで映像を録画する方法について理解を深めてください。
カメラの映像(動画)を録画する流れ
以下にカメラからの映像を録画するプログラムの流れを記します。
- OpenCVのインポート
- ビデオキャプチャの取得
- コーデックの設定
- 動画ファイルの保存先、FPS、サイズを指定
- 動画の録画を行う
- 録画の終了操作が実行されたら録画の終了処理を行う
各項目の詳細については次項より詳しく解説していきます。
OpenCVのインポート
カメラ映像を録画するためにOpenCVを使用します。そのためスクリプトの先頭でOpenCVをインポートします。
import cv2
インポートではimport opencvではなく、import cv2と記述します
Pythonの環境でまだOpenCVをインストールしていない場合はpipコマンドでインストールしてください。
pip install opencv-python
ビデオキャプチャの取得
cv2.VideoCapture()を使ってビデオキャプチャを取得します。
ビデオキャプチャとは映像を扱う機器(ここではWebカメラや内蔵カメラ)からの映像データをパソコンに取り込むこと
import cv2
# ビデオキャプチャの取得
cap = cv2.VideoCapture(0)
上記では取得したVideoCaptureオブジェクトは変数capに格納しています。
VideoCapture()の引数にはパソコンのカメラ番号を指定します。ノートパソコンに内蔵されているカメラであれば0、USBで接続したカメラは1を指定します。
コーデック(fourcc)の設定
cv2.VideoWriter_fourcc()を使用してコーデック(fourcc)を指定します。
コーデックとはデータの圧縮と復元(エンコードとデコード)を行う機器・ソフトウェアです。映像や音声などの処理に利用されます
import cv2
# ビデオキャプチャの取得
cap = cv2.VideoCapture(0)
# コーデック(fourcc)の設定
fourcc = cv2.VideoWriter_fourcc(*'XVID')
動画のファイルの保存先、FPS、サイズを指定
録画する動画ファイルの設定をcv2.VideoWriter()で行います。
cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor=ture)
ここでは動画の保存先とFPS、サイズを指定します。以下のようにして生成されたVideoWriterオブジェクトを変数に格納してください。
import cv2
# ビデオキャプチャの取得
cap = cv2.VideoCapture(0)
# コーデック(fourcc)の設定
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 動画ファイルの設定(保存先、FPS、サイズ)
video = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480))
動画の録画を行う
カメラ映像の読み込みができているかの判定
VideoCapture()でカメラからの映像が問題なく読み込みできているかをVideoCaptureクラスのisOpened()メソッドを使って確認できます。
映像の読み込みに問題がなければTrueを返します。以下プログラムではwhile文と組み合わせて、映像の読み込みに問題がない限りwhile内の処理(録画の処理)を実行するようにします。
import cv2
# ビデオキャプチャの取得
cap = cv2.VideoCapture(0)
# コーデック(fourcc)の設定
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 動画ファイルの設定(保存先、FPS、サイズ)
video = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480))
# カメラ映像の読み込みに問題がない限り処理を継続する
while(cap.isOpened()):
# ここに処理を記入
カメラ映像から画像データを取得
カメラ映像から1フレーム分の画像データを取得するためにVideoCaptureクラスのread()メソッドを使います。
read()メソッドの返り値はBool値(TrueまたはFalse)とキャプチャした画像データです。以下のように二つの変数に格納します。
# Bool値とキャプチャ画像を変数に格納
ret, frame = cap.read()
Bool値は正しく画像データが読み込めればTrueを返します。if判定を使って、画像データが正しく読み込めていなければwhile文をbreakで抜けるようにしましょう。
# カメラ映像の読み込みに問題がない限り処理を継続する
while(cap.isOpened()):
# Bool値とキャプチャ画像を変数に格納
ret, frame = cap.read()
if ret==True:
# 処理を記入
else:
break
リサイズを行う
read()で読み込んだ画像をVideoWriter()で指定したサイズにリサイズします。読み込んだ画像をリサイズするにはresize ()メソッドを使用します。
# リサイズを行う
frame = cv2.resize(frame, (640,480))
録画の実行
VideoWriterクラスのwrite()メソッドでフレームの書き込み、つまり録画を実行します。
write()メソッドの引数にはread()メソッドで取得したフレームを指定します。
# フレームの書き込み(保存)
out.write(frame)
録画中の映像(画像)を表示する
録画中の映像(画像)を表示するにはcv2.imshow()を使用します。
# 録画中の映像(画像)を表示
cv2.imshow('recoding', frame)
特定のキーが入力されたら録画を終了する
録画を終了するタイミングとして、ここでは特定のキーが入力されたら録画を終了するようにします。
以下は「q」が押されたらbreakしてwhile文を抜けるようにしています。
# qが押されたら録画を終了
if cv2.waitKey(1) & 0xFF == ord('q'):
break
録画の終了処理
録画を終了する際は必ずrelease()やdestroyAllWindows()を使って終了処理を行ってください。
cap.release()
out.release()
cv2.destroyAllWindows()
プログラムの全体ソースコード
ここまでがPythonのOpenCVでカメラ映像を録画する方法です。
以下に本記事で解説したスクリプトの全体ソースコードを記します。
import cv2
# ビデオキャプチャの取得
cap = cv2.VideoCapture(0)
# コーデック(fourcc)の設定
fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 動画ファイルの設定(保存先、FPS、サイズ)
video = cv2.VideoWriter('C:\EAS\output.avi', fourcc, 20.0, (640,480))
# 動画の読み込みに問題がない限り処理を継続する
while(cap.isOpened()):
# Bool値とキャプチャ画像を変数に格納
ret, frame = cap.read()
if ret==True:
# リサイズを行う
frame = cv2.resize(frame, (640,480))
# フレームの書き込み(保存)
video.write(frame)
# 録画中の映像(画像)を表示
cv2.imshow('recoding', frame)
# qが押されたら録画を終了
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 終了処理
cap.release()
video.release()
cv2.destroyAllWindows()
OpenCVによる画像処理・動画処理
画像から顔認識・顔検出する方法
PythonのOpenCVによる画像から顔認識・顔検出する方法については以下記事をご参照ください。
【Python】OpenCVによる顔認識:画像から顔を検出する方法
カメラ映像や動画から顔認識・顔検出する方法
PythonのOpenCVによるカメラの映像や動画からリアルタイムで顔認識・顔検出する方法については以下記事をご参照ください。
【Python】OpenCVを利用したカメラ映像や動画から顔認識・顔検出を行う方法