【问题标题】:video feed from imutils to tensorflow从 imutils 到 tensorflow 的视频源
【发布时间】:2018-04-02 14:23:14
【问题描述】:

我是 tensorflow 和 opencv 的新手。

我正在使用 imutils 包从网络摄像头流式传输视频以实现更高的 fps。我想将这些帧输入到我通过迁移学习训练的 CNN 初始模型中。目前我正在做以下事情:

初始化

from imutils.video import WebcamVideoStream

stream = WebcamVideoStream(src=0).start()

提供每一帧的片段

while True:

 frame=stream.read() 
 cv2.imwrite('pic.jpg',frame)
 im_data=tf.gfile.FastGFile('pic.jpg', 'rb').read()
 text=run_graph(im_data, labels, FLAGS.input_layer, FLAGS.output_layer)
 cv2.putText(frame,text,topLeftCornerOfText,font,fontScale,fontColor,lineType)
 cv2.imshow("Frame",frame)
 key = cv2.waitKey(1) & 0xFF
 fps.update()
 if key == ord('q'):
    break

我从队列中读取每一帧,将其保存为“pic.jpg”,然后将文件名作为参数传递给tf.gfile.FastGFile,以将其提供给函数run_graph,该函数将其预测为我在图像上显示的变量 text 的内容。

这行得通,但由于读写速度很慢。什么是执行此操作的有效方法或如何将视频流直接输入到 tensorflow。

cv2.VideoCapture(0) 阻塞主线程,直到从相机中读取一帧。 imutil 在单独的线程中执行此操作并将帧添加到队列中,然后在调用 read() 时在单独的线程中从队列中读取帧,这会提供高 fps。如果有其他代码可以做到这一点,并且兼容tensorflow,并且可以让我在图片上添加文本以逐帧显示预测,那也将是完美的。

【问题讨论】:

    标签: python opencv tensorflow


    【解决方案1】:

    来自datascience.stackexchange

    修改后的代码

    while True:
    
     frame=stream.read() 
     frame = cv2.resize(frame, (299, 299), interpolation=cv2.INTER_CUBIC)
     numpy_frame = np.asarray(frame)
     numpy_frame = cv2.normalize(numpy_frame.astype('float'), None, -0.5, .5, cv2.NORM_MINMAX)
     numpy_final = np.expand_dims(numpy_frame, axis=0)
     text=run_graph(numpy_final, labels, FLAGS.input_layer, FLAGS.output_layer)
     cv2.putText(frame,text,topLeftCornerOfText,font,fontScale,fontColor,lineType)
     cv2.imshow("Frame",frame)
     key = cv2.waitKey(1) & 0xFF
     fps.update()
     if key == ord('q'):
        break
    

    【讨论】:

      猜你喜欢
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 2018-06-14
      • 2012-11-17
      • 2020-10-01
      • 1970-01-01
      相关资源
      最近更新 更多