業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【AI・機械学習】
プロセスの全体像前処理・特徴量生成Fine Tuning手法まとめ機械学習モデルの選び方モデル評価手法プロトタイピング探索的分析(EDA)
ドミナントカラー検出セグメンテーション技術の基礎と実装局所特徴量抽出Grad-CAMまとめ画像の二値化とその手法モルフォロジー演算とその手法【Vision AI】Painterの紹介pix2structの紹介
AI

執筆者:Handbook編集部

Pythonを使って動画を読み込んで画像を生成する方法

はじめに

本記事では、pythonによって動画から画像を生成する手法について解説します。画像抽出の際にはフレームレート(fps)を指定します。フレームレートとは、1秒間の動画が何枚の画像で構成されているかを示すの単位のこと。数値が高いと滑らかな動画、低いとカクカクした動画になります。

動画から画像を生成することで、映っている人の表情や姿勢を推定するなど画像認識の様々な分析が可能になります。

動作環境

実行環境はGoogle Colaboratryを使用します。

動画読み込み・画像生成

Google Driveのマウント

まず、Google DriveのフォルダをColabにマウントします。Google Driveのフォルダ構成は以下のようにします。

── data
    └── face_classfication
        ├── dst:加工した画像の出力用フォルダ
        ├── img:画像用のフォルダ
        └── video:動画用のフォルダ

マウントは以下のコードを実行後、Google Driveへのアクセス権限を許可します。

from google.colab import drive
drive.mount('/content/drive')

入出力用のフォルダを作成

import os

# 動画名を指定する
video_name = "動画名"

# imgフォルダをマウント(なければ作成)
src_img_dir = "/content/drive/MyDrive/data/face_classfication/img"

if not os.path.exists(src_img_dir):
    os.makedirs(src_img_dir)

# 画像を入れるフォルダをマウント(なければ作成)
src_img_fold = "/content/drive/MyDrive/data/face_classfication/img/"+video_name

if not os.path.exists(src_img_fold):
    os.makedirs(src_img_fold)

動画から画像を生成

次に、ffmpegを使って、動画を画像に変換します。画像抽出の際にはフレームレート(fps)を指定します。fpsは目的に応じて調整することができますが、ここでは1fps(1秒に1フレーム)を指定しています。

fpsが大きくなればなるほど出力結果はスムーズになりますが、その分処理の時間とファイルサイズが増大します。

video_file = video_name+".mp4"
!ffmpeg -i "/content/drive/MyDrive/data/face_classfication/video/$video_file" -vf fps=0.1 "$src_img_fold/%04d.jpg"

生成した画像を確認する

import os
import glob

os.chdir(src_img_fold)

src_files = glob.glob("*.jpg")
src_files.sort()

print(len(src_files), "image files")

1枚ずつ画像の加工を行う

ここでは、PILを使って画像の左上にフレーム番号を追加します。

from PIL import Image
from PIL import ImageDraw

# dstフォルダをマウント(なければ作成)
dst_img_dir = "/content/drive/MyDrive/data/face_classfication/dst"

if not os.path.exists(dst_img_dir):
    os.makedirs(dst_img_dir)

# 加工した画像を入れるフォルダをマウント(なければ作成)
dst_img_fold = "/content/drive/MyDrive/data/face_classfication/dst/"+video_name

if not os.path.exists(dst_img_fold):
    os.makedirs(dst_img_fold)

# PILを使って左上にフレーム番号を追加(使わないためコメントアウト)
for i, file in enumerate(src_files):
  im = Image.open(file)
  draw = ImageDraw.Draw(im)
  draw.text((10,10), "{0:04d}".format(i), fill="#ff0")
  dst_file = "{dir}/{index:04d}.jpg".format(dir=dst_img_fold,index=i)
  im.save(dst_file

まとめ

本記事は、pythonによって動画から画像を生成する方法と、生成した画像を加工して別フォルダに保存する方法を記載しました。動画データを解析する際の参考になれば幸いです。

参照

2025年06月13日に最終更新
読み込み中...