【发布时间】:2021-05-04 21:24:49
【问题描述】:
在 Android Kotlin 中预处理视频数据以准备输入 PyTorch Android 模型的最佳方法是什么?具体来说,我在 PyTorch 中有一个现成的模型,我已经将它转换为准备好用于PyTorch Mobile。
在训练期间,模型从手机中获取原始素材并进行预处理,以 (1) 为灰度,(2) 压缩为我指定的特定较小分辨率,(3) 转换为张量以输入神经网络(或可能将压缩视频发送到远程服务器)。我为此使用 OpenCV,但我想知道在 Android Kotlin 中最简单的方法是什么?
Python代码供参考:
def save_video(filename):
frames = []
cap = cv2.VideoCapture(filename)
frameCount = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
frameWidth = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frameHeight = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
buf_c = np.empty((frameCount, frameHeight, frameWidth, 3), np.dtype('uint8'))
buf = np.empty((frameCount, frameHeight, frameWidth), np.dtype('uint8'))
fc = 0
ret = True
# 9:16 ratio
width = 121
height = 216
dim = (width, height)
# Loop until the end of the video
while fc < frameCount and ret:
ret, buf_c[fc] = cap.read()
# convert to greyscale
buf[fc] = cv2.cvtColor(buf_c[fc], cv2.COLOR_BGR2GRAY)
# reduce resolution
resized = cv2.resize(buf[fc], dim, interpolation = cv2.INTER_AREA)
frames.append(resized)
fc += 1
# release the video capture object
cap.release()
# Closes all the windows currently opened.
cv2.destroyAllWindows()
return frames
【问题讨论】:
标签: android kotlin computer-vision pytorch video-processing