基於Tensorflow的視頻目標檢測API實現

最近在看如何實現視頻中道路目標的檢測的相關博文,過程遇坑,簡單總結。原文在此

測試環境:Win10、TF-CPU、Opencv、Anaconda

一、Anaconda下Tensorflow安裝

由於僅做測試,不用訓練,簡裝CPU版本,Anaconda官網下載即可,打開cmd:

pip install --opgrade tensorflow

等待片刻後,打開spyder編輯器,新建文件下複製以下內容

import tensorflow as tf
hello = tf.constant("Hello, Tensorflow")
sess = tf.Session()
print(sess.run(hello))

彈出 “Hello, Tensorflow”則安裝成功。

二、Protoc安裝

什麼是Protoc?Protoc是用來編譯.Proto文件,Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司開發的一種數據描述語言,類似於XML能夠將結構化數據序列化,可用於數據存儲、通信協議等方面。現階段支持C++、JAVA、Python等三種編程語言
原作者推薦的網址中包含了最新版的壓縮包和老版本的壓縮包,我使用了最新的壓縮包報錯,返回老版本就可以了


三、Git安裝

git +網址是目前主流的在線下載指令,在官網找到Windows下載安裝

四、安裝其他

pip install pillow

pip install lxml
原博主還增加了別的安裝,我覺得沒必要,好像結果也沒有影響

五、下載模型並編譯

開cmd輸入

git clone http://github/tensorflow/models.git

下載好後會放在用戶下的models文件夾內,然後再是編譯

protoc object_detection/protos/*.proto --python_out=. #*.proto表示一次編譯該文件夾下所有的.porto文件 

打開ipynb文件,可以看到瀏覽器下的python代碼。先轉到絕對路徑到object_detection文件夾,再cmd運行:

jupyter-notebook

打開object_detection_tutorial.ipynb,可以直接Run all cell運行測試。

結果略,原博主寫的很詳細,這裏主要講

1.若是要測試自己的圖片記得在文件夾路徑指明

2.測試圖片數量也可以做相應修改,在路徑下一行

3.有多種模型可以供選擇,可以自己選擇一種,供修改名稱如下

MODEL_NAME = 'ssd_inception_v2_coco_11_06_2017'

MODEL_NAME = 'rfcn_resnet101_coco_11_06_2017'

MODEL_NAME = 'faster_rcnn_resnet101_coco_11_06_2017'

MODEL_NAME = 'faster_rcnn_inception_resnet_v2_atrous_coco_11_06_2017'

六、運行視頻目標檢測

終於講到了最關鍵的一步了

1.現在準備視頻檢測下的環境配置,安裝opencv,我的上篇博客裏提到過,這裏略。

2.添加視頻識別代碼,此處由於原博主寫的很詳細,我不在贅述,這是網址

注意:代碼有些地方值得優化,例如

imageio.plugins.ffmpeg.download()

          此處表示下載ffmpeg.exe視頻處理軟件,下載一次就夠,所以運行成功一次後可屏蔽此處

from moviepy.editor import *
clip1 = VideoFileClip("video1_out.mp4")
clip1.write_gif("final.gif")

           最後一段代碼是指將輸出檢測結果的mp4文件轉化爲gif,沒有必要,可以刪除

clip1 = VideoFileClip("video1.mp4").subclip(25,30)

           代表指定的文件,以及裁剪該文件中第xx秒到xx秒的視頻圖像來處理

演示就講到這,接下來討論下實現原博主博客中遇到的bug

七、BUG分析

運行

protoc object_detection/protos/*.proto --python_out=. #*.proto表示一次編譯該文件夾下所有的.porto文件 

出現No such file or directory的報錯,但文件夾下有該目錄,查閱資料後發現protoc3.5不穩定,改換3.4即可

運行視頻檢測時出現

ImportError: No module named 'moviepy'

好像moviepy庫並沒有在Anaconda中,但是作者並沒有提到這一點,感覺比較奇怪,還是默默掏出了

pip install moviepy

結果竟然報錯,且好像還跟Anaconda有關,我頓時無語凝噎,後來我找到了這個博客的解決方案,主要就是我的Anaconda下有很多包需要更新,pip也要更新到新版本,我按照提示將能更的都更新了一遍,然後在安裝的時候就沒有報錯了。

3  最後一個問題出現在重複運行代碼時會有這個

OSError: [WinError 6] 句柄無效。

由於對python的問題還不夠了解,我的解決方法是關閉jupyter-notebook後重新在cmd中打開,就可以再次運行了,問了下師兄好像是因爲這個代碼沒有設置返回值,以後慢慢摸索吧,然後小問題就沒有po上來了,暫時就這樣,圖片的檢測結果如下

視頻的檢測結果可供下載參考  https://download.csdn.net/download/along1617188/10325180

謝謝指點!

八、相關參考

1、https://blog.csdn.net/xiaoxiao123jun/article/details/76605928(轉自此文)













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章