tensorflow object detection API 使用记录3

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

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

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

冻结模型

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

# From tensorflow/models
python 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-mp4
videoWriter = 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值