34 lines
962 B
Python
34 lines
962 B
Python
import cv2
|
|
import numpy as np
|
|
from tensorflow.keras.preprocessing.image import img_to_array
|
|
from tensorflow.keras.applications.vgg16 import preprocess_input
|
|
|
|
def preprocess_frame(frame, target_size=(224, 224)):
|
|
frame = cv2.resize(frame, target_size)
|
|
frame = img_to_array(frame)
|
|
frame = np.expand_dims(frame, axis=0)
|
|
frame = preprocess_input(frame)
|
|
return frame
|
|
|
|
def generate_video_embedding(video_path, model):
|
|
cap = cv2.VideoCapture(video_path)
|
|
frames = []
|
|
while cap.isOpened():
|
|
ret, frame = cap.read()
|
|
if not ret:
|
|
break
|
|
frames.append(preprocess_frame(frame))
|
|
if len(frames) >= 16: # Process 16 frames at a time
|
|
break
|
|
cap.release()
|
|
|
|
if not frames:
|
|
return None
|
|
|
|
# Generate embeddings
|
|
embeddings = model.predict(np.vstack(frames))
|
|
|
|
# Average the embeddings
|
|
avg_embedding = np.mean(embeddings, axis=0)
|
|
|
|
return avg_embedding |