ラズパイでOpenCVでwebカメラ映像をMicroSDに保存するプログラミング
これまで、webカメラからの映像を
『OpenCV』画像処理ライブラリを使い
モニタに表示するところまですすみました。
ここでは、モニタ表示された映像を
保存するプログラミングをしていきます。
『OpenCV』画像処理ライブラリを
インストールされていない場合や
webカメラからの映像を
モニタに表示が出来ていない所まで
進んでいない方は
こちらの記事を参考にしてみてください
必要なモージュールをインストールする
今回は、さまざまな機能を利用するため
たくさんの関数を使用するため
必要なモジュールをインストールします。
ここでインポートする
モジュールをインストールします。
【インポートするもの】
import cv2
import sys
import readchar
import numpy as np
import datetime
import os
『OpenCV』 import cv2
コマンドラインからインストールします。
次のコマンドを入力して『エンターキー』を押します。
pip3 install opencv-python
インストールが開始され
次の画面が表示されたら
インストール成功です。
『NumPy』ライブラリを最新にする
NumPyはベクトル演算や行列演算等を
効率化するライブラリのため
古いバージョンでは、
OpenCVのプログラム実行時に
エラーとなる場合があります。
ここで、新しい状態にします。
コマンドラインから
次のコマンドを入力して『エンターキー』を押します。
pip3 install numpy --upgrade
libatlas3-baseをインストールする
libatlas3-baseは
線形代数の演算に関連したパッケージです。
OpenCV内で扱う処理に必要なため
あわせてインストールします。
コマンドラインから
次のコマンドを入力して『エンターキー』を押します。
sudo apt install libatlas3-base
実行後の画面 です。
『readchar』 import readchar
コマンドラインから
次のコマンドを入力して『エンターキー』を押します。
sudo pip3 install readchar
実行後の画面 です。
『numpy』import numpy as np
コマンドラインから
次のコマンドを入力して『エンターキー』を押します。
sudo apt-get install python3-numpy
『datetime』import datetime #時刻
webカメラ映像をMicroSDに保存する
ここからは、webカメラ映像を
MicroSDカードに保存する
プログラミングを始めていきます。
録画を保存するプログラム
webカメラ映像を
年月時分秒のファイル名で
MicroSDカードに保存する
プログラムを作成ました。
# Webカメラ保存サンプルプログラム
# Rキーで録画開始
# ENTERで録画終了
# ファイル名 日時分秒.mp4形式保存
import cv2 #Opencv
import sys #変数&関数
import readchar #input,key
import numpy as np #録画
import datetime #時刻
import os #FILE&directory
#VideoCaptureオブジェクト取得
cap = cv2.VideoCapture(0) #webカメラ1
#初期設定
inkey = 0
#ファイル名を時刻にするため時刻取得
dt_now = datetime.datetime.now()
file_name = dt_now.strftime('%Y%m%d%H%M%S')
folder = '/home/pi/' #保存フォルダ指定
#保存形式指定
fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') #MP4形式指定
fps = 20.0 #フレーム指定
size = (640, 480) #画像サイズ(1280,720) (640,480)
writer = cv2.VideoWriter(folder + file_name +'.mp4', fmt, fps, size) #ファイル名は時刻
while(True):
#フレームを取得
ret, frame = cap.read() #画像の取得が成功したかどうかの結果取得(True成功/Fales失敗)
print(ret)
if not ret:
print("画像取得エラー")
break
#画面サイズを指定&window表示
frame = cv2.resize(frame, (size)) #保存形式指定のフレーム
cv2.imshow("frame", frame) #webカメラ画像をウインドウに表示
#キーボード入力受付処理
key = cv2.waitKey(1)
if key == 13: #ENTER KEYでプログラム終了
print("Recording end")
break #ループ中断
if key == 114: #"R"KEYで録画開始フラグ
print("●Recording start")
inkey = 1
#break #ループ中断
#映像保存
if inkey == 1: #録画開始フラグチェック
print("Recording now")
_, frame = cap.read()
frame = cv2.resize(frame, size)
writer.write(frame)
cv2.imshow('frame', frame)
#終了処理
writer.release() #映像書込終了処理
cap.release() #カメラデバイスクローズ
cv2.destroyAllWindows() #カメラウィンドウクローズ
print("正常終了")
プログラムを実行してみます。
①”R”KEYを押すと録画が開始されます。
②”ENTER”KEYを押すと録画が停止します
③フォルダにFILE保存されます。
フォルダ:/home/pi/
フォルダの中に保存されていますので
ファイルマネージャーで確認してみます。
FILE名:年日時分秒.mp4
保存されていることがわかります。
プログラムを解説していきます。
ファイル名を時刻にする
ファイル名を時刻にするため
現在時刻を取得します。
dt_now = datetime.datetime.now()
file_name = dt_now.strftime('%Y%m%d%H%M%S')
このコードで
年,月,日,時,分,秒 の順に取得します。
file_nameに代入しておきます。
次にファイルを書き込むフォルダを指定します。
今後、わかりやすい場所に変更していきますので
ここで指定しています。
folder = '/home/pi/'
”folder”変数にフォルダの場所を入れます。
保存形式の指定
保存形式を指定します。
#保存形式指定
fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') #MP4形式指定
fps = 20.0 #フレーム指定
size = (640, 480) #画像サイズ
#ファイル名は取得した時刻
writer = cv2.VideoWriter(folder + file_name +'.mp4', fmt, fps, size)
以下のように指定しています。
映像フォーマット:MP4
FPS:20
size:640☓480
webカメラ映像が正常に取得できているかチェック
画像取得が正常かどうかをチェックします。
while(True):
#フレームを取得
ret, frame = cap.read() #画像取得が正常チェック(True成功/Fales失敗)
print(ret)
if not ret:
print("画像取得エラー")
break
正常の場合:Trueを返しますので次の処理に移ります。
異常の場合:Falesを返しますので
『break』処理でプログラム終了します。
webカメラ映像をモニタに表示
先頭に指定したサイズを
フレーム枠内にモニタ表示します。
#画面サイズを指定&window表示
frame = cv2.resize(frame, (size)) #保存形式指定のフレーム
cv2.imshow("frame", frame) #webカメラ画像をウインドウに表示
キーボード入力待ち処理
ここでは、キーボードからの入力待ちをしています。
録画開始~録画終了するための処理をしています。
#キーボード入力受付処理
key = cv2.waitKey(1)
if key == 13: #ENTER KEYでプログラム終了
print("Recording end")
break #ループ中断
if key == 114: #"R"KEYで録画開始フラグ
print("●Recording start")
inkey = 1
【キーボードからの入力】
”R”KEYを押す
録画開始の処理を次のプログラムで実行します
【キーボードからの入力】
”ENTER”KEYを押す
録画開始を停止して、動画保存します
プログラムを終了します。
webカメラ映像の静止画を蓄積して動画にする
webカメラ映像を保存する処理をしています。
”R”KEYを押されると録画開始されます。
静止画がどんどん蓄積されて動画になっていきます。
#映像保存
if inkey == 1: #録画開始フラグチェック
print("Recording now")
ret, frame = cap.read()
frame = cv2.resize(frame, size)
writer.write(frame)
cv2.imshow('frame', frame)
動画映像を指定したフォルダに保存する
”R”KEYが押され録画開始されてから
”ENTER”KEYが押されるまでの
動画を保存します。
#終了処理
writer.release() #映像書込終了処理
cap.release() #カメラデバイスクローズ
cv2.destroyAllWindows() #カメラウィンドウクローズ
print("正常終了")
動画保存した後、
カメラデバイスをクローズ処理にして
プログラム終了します。
まとめ
OpenCVを使い映像保存する
プログラミングを紹介しました。
徐々にPythonコードを書くことに
慣れてきたのではないでしょうか。
関数を使い映像処理ができます。
いかがでしたでしょうか
難しかったところもあると思いますが
プログラミングは
挫折することも多いです
ゆっくりと続けていきましょう。