tensorflow object detection API 使用记录3

来源:互联网 发布:淘宝小二电话 编辑:程序博客网 时间:2024/06/01 08:08

将训练好的模型用于视频上的目标检测

  • 将训练好的模型用于视频上的目标检测
    • 冻结模型
    • 处理图片
    • 处理视频

前言:一直都是用来检测图片,未来肯定是要应用在视频上,刚好想做个在视频上检测的小demo,不是做跟踪,所以实现起来很简单,只要把视频的每一帧都处理,另存到另一个视频里就可以了。
流程:

  1. 把已经训练好的模型冻结下来,即得到.pb文件(既包括权重也包括网络结构)
  2. 利用模型对视频每一帧进行处理并保存

冻结模型

每次保存模型的时候会生成三个文件,其中×××.meta代表网络结构,×××.data 代表权重,要将其存为.pb文件,采用API提供的方法:冻结模型

# From tensorflow/modelspython object_detection/export_inference_graph.py \    --input_type image_tensor \    --pipeline_config_path ${PIPELINE_CONFIG_PATH} \    --checkpoint_path model.ckpt-${CHECKPOINT_NUMBER} \    --inference_graph_path YOUR_NAME.pb

处理图片

官方的demo:quick start,正是使用.pb模型离线检测图片的例子,写的非常清楚不再赘述

处理视频

我是采用opencv读取视频帧并处理的方式,很简单,直接上代码,这里做的仅仅是把quick start里面检测部分改成了函数的形式:即下面的detect函数

videoCapture = cv2.VideoCapture('video_path')#获得码率及尺寸fps = videoCapture.get(cv2.cv.CV_CAP_PROP_FPS)size = (int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),         int(videoCapture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))#指定写视频的格式, I420-avi, MJPG-mp4videoWriter = cv2.VideoWriter('video.avi', cv2.cv.CV_FOURCC('I', '4', '2', '0'), fps, size)with detection_graph.as_default():    with tf.Session(graph=detection_graph) as sess:        success, frame = videoCapture.read()        while success:            frame = detect(frame, detection_graph, sess)            cv2.imshow('frame', frame) #显示            cv2.waitKey(1000/int(fps))            videoWriter.write(frame)            success, frame = videoCapture.read()videoCapture.release()cv2.destroyAllWindows()

运行程序可以看到训练好的模型处理每一帧的情况,所以如果网络结构能达到实时,那看起来就像放视频,啊,好想有那种效果又好,又能达到实时的结构跑一下,求推荐好的目标检测的tensorflow资源!
另外推荐一个采用另外一个库moviepy对视频做处理的小demo, 用起来比opencv方便一些:基于moviepy的视频检测小demo