从imutils到tensorflow的视频供稿

时间:2018-04-02 14:23:14

标签: python opencv tensorflow

我是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兼容,可以让我在图片上添加一个文字来逐帧显示预测,这也是完美的。

1 个答案:

答案 0 :(得分:0)

来自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