TensorFlow 视频帧与静止图像

TensorFlow video frames versus still images

我在使用 TensorFlow 时遇到了一个奇怪的问题,我怀疑有一个简单的解决方案。

我正在处理视频数据。为了创建我的训练数据,我使用 ffmpeg 将视频帧提取到 PNG 文件,然后使用 LabelImg 创建边界框数据集。经过训练的网络在这些 PNG 文件上表现出色。

但是,如果我使用 OpenCV 打开视频并将帧从视频馈送到网络,它根本不起作用。我使用 OpenCV VideoCapture class 喜欢:

video = cv2.VideoCapture(path_to_video)
status, frame = video.read()
output_dict = run_inference_for_single_image(frame, detection_graph)

请注意,run_inference_for_single_image 是 TensorFlow 库提供的函数,同样用于 运行 对打开并转换为 numpy 数组的 PNG 文件进行检测。

我得到了一些检测结果,但准确率几乎降为零。相反,如果我将同一帧保存为 PNG 文件并将该文件提供给网络,它会按预期工作。

我需要更改什么才能避免将视频帧保存为 PNG 文件的步骤?

OpenCV 有这种加载彩色图像的奇怪行为 in the BGR format。您可以使用

im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)

将它们转换为 RGB,然后再将它们送入您的网络。