使用深度学习进行视频修剪
GOOGLE Teachable Machine概述
构建深度学习模式
训练模型
导出模型
项目实施
import numpy as np
import cv2
import tensorflow.keras
from keras.preprocessing import image
# Access WebCam
cap = cv2.VideoCapture(0)
state = True
# Load the TensorFlow model weights
model = tensorflow.keras.models.load_model('keras_model.h5')
labels = ['thumb_up','thumb_down','random']
# Set the width and height of the frame for video to be saved
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# Create a writer object to save the frames
writer = cv2.VideoWriter(r'C:UsersSharan BabuDesktoptrimmed_video.mp4',cv2.VideoWriter_fourcc(*'XVID'),25, (width, height))
final_video = [] // List to store our video frames
# Video editing!
while True:
success, image = cap.read()
if success==True:
final_video.append(image)
img = image.copy()
# Draw a rectangle to indicate the region of interest and crop it
img = cv2.flip(img,1)
cv2.rectangle(img,pt1=(450,100),pt2=(620,300),color=(0,255,0),thickness=3)
cv2.imshow('Video',img)
roi = img[102:298,448:618]
# Image pre-processing for making predictions
data = cv2.resize(roi,(224,224))
data = np.array(data,dtype=np.float32)
data = np.expand_dims(data,axis=0)
data = data/255
# Predict output class for the image and save video accordingly
prediction = model.predict(data)
predicted_class = labels[np.argmax(prediction)]
print(prediction, predicted_class)
if predicted_class == 'thumb_up':
for frame in final_video:
writer.write(frame)
final_video = []
elif predicted_class == 'thumb_down':
final_video = []
# Break the program when key 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Close webcam and other connections
writer.release()
cap.release()
cv2.destroyAllWindows()
导入所需的库:NumPy(图像处理)、cv2(用于视频捕获的OpenCV)、TensorFlow和Keras以加载模型。 使用OpenCV库连接网络摄像头。 将模型加载到“model”中,并创建一个名为“labels”的列表,该列表将存储模型的类名称。 创建writer对象,该对象负责写入新的视频帧。 我们把视频帧存储在一个名为“final_video”的Python列表中。 现在,当视频打开时,我们将不断地将当前帧附加到writer对象中。 创建此图像的副本。在这张图上画出一个矩形框来表示模型的感兴趣区域之后,我们会把它显示给用户。 仅裁剪该部分并对其进行预处理,以便将其输入到我们的模型中。 如果预测类是“thumb_up”,这意味着用户对拍摄的帧很满意,因此我们可以将它们写入新的视频文件,然后清空数组。 如果预测的类是“thumb_down”,则意味着用户希望重新获取视频的该部分,因此通过清空数组来删除这些视频帧。 当按下按钮“q”时,程序将结束,这相当于停止录制。 最后,我们释放所有打开的连接。 修整后的视频可以在创建writer对象时选择的路径中找到。