前回の続きです)

今度はカメラ画像の処理と動画の処理のサンプルを作成しました。

開発と動画確認の環境は「深層学習 Windwos10 に TensorFlow Object Detection API をインストール
Ubuntu 20.04 に TensorFlow Object Detection API をインストール」と同じです。

(このプログラムのオブジェクト検出部分の処理は TensorFlow 2 Object Detection API tutorial の Example を参考にして作成されています)
(練習のためのサンプルプログラムです。詳細の動作確認は行っていません。)

(1)概要
①カメラ画像から検出するサンプルプログラム
PCに接続したカメラの画像から、特定の動物を検出して動画として保存する。

②動画から検出するサンプルプログラム
選択された動画ファイルから、特定の動物を検出して動画として保存する。

(2)プログラム

Pythonプログラム(テキストファイル UTF-8)

①カメラ画像から検出するサンプルプログラム
camerasample.py

②動画から検出するサンプルプログラム
moviesample.py

(3)解説

①カメラ画像から検出するサンプルプログラム

カメラ処理はOpenCVの機能を使っています。
パラメータはとりあえず0にしています。

camerasample.py

def openCamera() :
・・・
  src = cv2.VideoCapture(0)
・・・

対象の動物は mscoco_label_map.pbtxt の中から選択して定義しています。

# 選択対象となるクラス
# mscoco_label_map.pbtxtから動物を選択する
TARGET_CLASSES = {
16: “bird” , # 鳥
17: “cat” , # 猫
18: “dog” , # 犬
19: “horse” , # 馬
20: “sheep” , # 羊
21: “cow” , # 牛
22: “elephant”, # 象
23: “bear” , # 熊
24: “zebra” , # 縞馬
25: “giraffe” # 麒麟
}

ビデオパラメータは環境や目的に合わせてい変更してください。
動画の速さは適当に 1 FPS としてあります。
保存する動画のコーディックの候補は以下の通りです。

# 動画書き込み用のコーディック (動作環境に依存します)
CODEC = [[*’MJPG’], ‘avi’]
#CODEC = [[*’DIV3′], ‘avi’]
#CODEC = [[*’MP4V’], ‘mp4′]
#CODEC = [[*’mp4v’], ‘mov’]

# 動画の速さ fps
FPS = 1

データとモデルのディレクトリはデフォルトの’data’としています。
BASE_DIR = ‘data’
DATA_DIR = os.path.join(os.getcwd(), BASE_DIR)

②動画から検出するサンプルプログラム

基本的にはカメラと同じで OpenCV の機能を利用しています。
カメラ処理の代わりに動画ファイルの選択画面が開きます。

moviesample.py

def selectVideo(defaultDir = “./”) :
・・・
  # 動画ファイル選択
  filepath = filedialog.askopenfilename(title=”元動画ファイル選択”, filetypes=MOVIE_FILETYPE, initialdir=defaultDir)
  print(filepath)
  if len(filepath) == 0 :
    print(‘Canceled.’)
    return video, filepath
・・・
   video = cv2.VideoCapture(filepath)
・・・

(3)動作確認

①カメラ画像から検出するサンプルプログラム
とりあえず手元にあった鳥類図鑑で試してしました。

出力結果AVIファイル(353KB)

②動画から検出するサンプルプログラム

動画から鳥を検出してみました。

出力結果AVIファイル(32MB)

(2024/07/27 Shin Onda)