You need to enable JavaScript to run this app. Colab中cv2_imshow展示CNN+LSTM视频预测结果无输出问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Colab中cv2_imshow展示CNN+LSTM视频预测结果无输出问题求助

问题排查与解决方案

核心问题1:cv2_imshow无内容输出

错误原因

  • 输入模型的帧序列完全错误:你在处理完单帧视频后,直接用frame_set=np.arange(10*width*height*3).reshape(10,width, height, 3)覆盖了读取到的视频帧,输入模型的是无意义的等差数组,输出结果自然不是可显示的合法图像
  • 时序输入逻辑缺失:你的模型是10帧输入的CNN+LSTM时序模型,当前代码每次循环仅读取1帧,没有维护10帧的滑动窗口,输入维度不符合模型要求
  • 显示格式不匹配:cv2_imshow要求输入为0~255范围的uint8类型数组,模型输出的result多为float类型的预测值,数值范围和类型不符合显示要求

修复方法

维护10帧的滑动队列作为模型输入,同时对模型输出做类型和范围转换后再显示,示例逻辑:

from collections import deque
import numpy as np
import cv2
import time
from tensorflow.keras import models

# 新增:开启GPU显存动态分配,解决显存不足提示
import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    try:
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)
    except RuntimeError as e:
        print(e)

model_path = 'Model/CCTV_10Frame_Adam_Model_1e2_b16_regul.h5'
model = models.load_model(model_path)

vid = cv2.VideoCapture("Data16_116.mp4")
width = 299
height = 299
dim = (width, height)
# 新增:10帧滑动队列
frame_queue = deque(maxlen=10)

while(True):
    ret, frame = vid.read()
    if not ret:
        break
    # 预处理当前帧
    draw = cv2.cvtColor(frame.copy(), cv2.COLOR_BGR2RGB)
    resized_frame = cv2.resize(draw, dim, interpolation = cv2.INTER_AREA)
    frame_queue.append(resized_frame)

    # 队列满10帧再做预测
    if len(frame_queue) == 10:
        frame_set = np.array(frame_queue)
        frame_set = np.expand_dims(frame_set, axis=0)
        result=model.predict(frame_set, verbose=0)[0]
        # 转换预测结果为可显示格式
        result = (result * 255).astype(np.uint8)
        result = cv2.cvtColor(result, cv2.COLOR_RGB2BGR)
        cv2.imshow("Prediction", result)
    
    # 修复:删除错误的else break逻辑,仅按q退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

vid.release()
cv2.destroyAllWindows()

核心问题2:VS Code运行窗口1秒就关闭

错误原因

你在循环中写了错误的分支逻辑:if cv2.waitKey(1) & 0xFF == ord('q'): break else: break,不管是否按下q键,都会直接跳出循环,处理完第一帧就释放资源关闭窗口。

修复方法

删除else分支的break语句,仅在读取不到视频帧或按下q键时退出循环,参考上述修正后的代码逻辑。

核心问题3:GPU显存不足提示

错误原因

你的GPU空闲显存不足,TensorFlow的BFC分配器无法申请到1.25G的连续显存,虽然不会直接报错,但会导致运行卡顿甚至异常。

修复方法

  • 上述代码中已经添加了GPU显存动态分配的逻辑,避免TensorFlow一次性占用全部显存
  • 可以适当降低输入分辨率,比如把299x299调整为224x224,大幅降低显存占用
  • 预测时添加verbose=0参数关闭预测日志输出,也可以减少不必要的资源占用

内容的提问来源于stack exchange,提问作者JuniorPython

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 10:33:02