ラズパイ

ラズパイでOpenCVを使いwebカメラ映像をMicroSDに保存するプログラミング

ラズパイでOpenCVでwebカメラ映像をMicroSDに保存するプログラミング

これまで、webカメラからの映像を

『OpenCV』画像処理ライブラリを使い

モニタに表示するところまですすみました。

ここでは、モニタ表示された映像を

保存するプログラミングをしていきます。

 

『OpenCV』画像処理ライブラリを

インストールされていない場合や

webカメラからの映像を

モニタに表示が出来ていない所まで

進んでいない方は

こちらの記事を参考にしてみてください

【初心者向け】ラズパイでOpenCVでwebカメラ映像をモニタ画面に表示するプログラミングラズパイでOPENCVを使いwebカメラの映像をモニタ画面に映すためのプログラミング方法を解説しています。 簡単なwhile文を使い、繰り返し処理を行った練習をしながらプログラミング学習をしていきます。...

 

必要なモージュールをインストールする

今回は、さまざまな機能を利用するため

たくさんの関数を使用するため

必要なモジュールをインストールします。

モジュールのインストール方法はこちら

 

ここでインポートする

モジュールをインストールします。

【インポートするもの】
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コードを書くことに

慣れてきたのではないでしょうか。

関数を使い映像処理ができます。

 

いかがでしたでしょうか

難しかったところもあると思いますが

プログラミングは

挫折することも多いです

ゆっくりと続けていきましょう。



 

【初心者向け】防犯カメラをRaspberry Piで作る!Pythonでプログラミング学習Raspberry Pi(ラズパイ)を使い防犯カメラを作成歩法を紹介しています。手順を追って解説しながら楽しくPython言語を使いプログラムを作成していきます。こkでは楽しく作っていくことを目的としています。...