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
|