めもめもめも
import cv2
import numpy as np
from keras.applications import VGG16
from keras.applications.vgg16 import preprocess_input
from keras.preprocessing import image
import os
# フレームを保存するフォルダを作成
if not os.path.exists('frames_with_zero_crossings'):
os.makedirs('frames_with_zero_crossings')
# 教師データの画像フォルダ
teacher_images_folder = 'path_to_your_teacher_images_folder'
# 教師データの画像をロードして特徴量を抽出し、平均を計算
def extract_features_and_compute_average(images_folder):
images_features = []
for filename in os.listdir(images_folder):
img_path = os.path.join(images_folder, filename)
img = image.load_img(img_path, target_size=(224, 224))
img = image.img_to_array(img)
img = np.expand_dims(img, axis=0)
img = preprocess_input(img)
features = vgg16_model.predict(img)
images_features.append(features.flatten())
images_features = np.array(images_features)
return np.mean(images_features, axis=0)
# VGG16モデルをロードして特徴量を抽出
vgg16_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# 教師データ群の特徴量を抽出し、平均を計算
teacher_features = extract_features_and_compute_average(teacher_images_folder)
# 動画ファイルを読み込む
video_path = 'path_to_your_video.mp4'
cap = cv2.VideoCapture(video_path)
# フレームごとの特徴量のリストを初期化
frame_features_list = []
# フレームごとに処理
while True:
ret, frame = cap.read()
if not ret:
break
# フレームの前処理
frame = cv2.resize(frame, (224, 224))
frame = np.expand_dims(frame, axis=0)
frame = preprocess_input(frame)
# VGG16モデルで特徴量を抽出
frame_features = vgg16_model.predict(frame)
frame_features_list.append(frame_features.flatten()) # フレームごとの特徴量をリストに追加
# キャプチャを解放する
cap.release()
# フレームごとの特徴量の変化を計算
frame_features_array = np.array(frame_features_list)
# 各特徴量の時間微分を計算し、0となる時間を取得してフレームを保存
for i in range(frame_features_array.shape[1]):
diff = np.diff(frame_features_array[:, i]) # 時間微分を計算
zero_crossings = np.where(np.diff(np.signbit(diff)))[0] # 時間微分が0をまたぐ点のインデックスを取得
print(f'Feature {i+1}:')
for crossing in zero_crossings:
frame_time = crossing # 時間微分が0となるフレームの時間を取得
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_time) # キャプチャの位置を設定
ret, frame = cap.read() # フレームを読み込む
if ret:
cv2.imwrite(f'frames_with_zero_crossings/frame_{i+1}_time_{frame_time}.jpg', frame) # フレームを保存