ラズパイでOpenCVでwebカメラ映像をMicroSDに保存するプログラミング
![](https://www.makigadget.com/wp-content/uploads/2023/01/razupicam600.jpg)
これまで、webカメラからの映像を
『OpenCV』画像処理ライブラリを使い
モニタに表示するところまですすみました。
ここでは、モニタ表示された映像を
保存するプログラミングをしていきます。
『OpenCV』画像処理ライブラリを
インストールされていない場合や
webカメラからの映像を
モニタに表示が出来ていない所まで
進んでいない方は
こちらの記事を参考にしてみてください
![](https://www.makigadget.com/wp-content/uploads/2023/01/ラズパイでOpenCVを使い映像を取込む方法600-320x180.png)
必要なモージュールをインストールする
今回は、さまざまな機能を利用するため
たくさんの関数を使用するため
必要なモジュールをインストールします。
ここでインポートする
モジュールをインストールします。
【インポートするもの】
import cv2
import sys
import readchar
import numpy as np
import datetime
import os
『OpenCV』 import cv2
コマンドラインからインストールします。
次のコマンドを入力して『エンターキー』を押します。
pip3 install opencv-python
インストールが開始され
次の画面が表示されたら
インストール成功です。
![](https://www.makigadget.com/wp-content/uploads/2023/01/com_opencv700.jpg)
『NumPy』ライブラリを最新にする
NumPyはベクトル演算や行列演算等を
効率化するライブラリのため
古いバージョンでは、
OpenCVのプログラム実行時に
エラーとなる場合があります。
ここで、新しい状態にします。
コマンドラインから
次のコマンドを入力して『エンターキー』を押します。
pip3 install numpy --upgrade
libatlas3-baseをインストールする
libatlas3-baseは
線形代数の演算に関連したパッケージです。
OpenCV内で扱う処理に必要なため
あわせてインストールします。
コマンドラインから
次のコマンドを入力して『エンターキー』を押します。
sudo apt install libatlas3-base
実行後の画面 です。
![](https://www.makigadget.com/wp-content/uploads/2023/02/libatlas3_base700.jpg)
『readchar』 import readchar
コマンドラインから
次のコマンドを入力して『エンターキー』を押します。
sudo pip3 install readchar
実行後の画面 です。
![](https://www.makigadget.com/wp-content/uploads/2023/02/reacher700.jpg)
『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を押すと録画が開始されます。
![](https://www.makigadget.com/wp-content/uploads/2023/02/wッbカメラ表示800.jpg)
②”ENTER”KEYを押すと録画が停止します
③フォルダにFILE保存されます。
フォルダ:/home/pi/
フォルダの中に保存されていますので
ファイルマネージャーで確認してみます。
![](https://www.makigadget.com/wp-content/uploads/2023/02/ファイルマネージャー保存解説800.jpg)
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コードを書くことに
慣れてきたのではないでしょうか。
関数を使い映像処理ができます。
いかがでしたでしょうか
難しかったところもあると思いますが
プログラミングは
挫折することも多いです
ゆっくりと続けていきましょう。
![](https://www.makigadget.com/wp-content/uploads/2022/08/防犯カメラRaspberry-Piで作る500-320x180.png)