當前位置:
首頁 > 新聞 > 玩轉谷歌物體識別API,用TensorFlow和OpenCV打造實時識別應用

玩轉谷歌物體識別API,用TensorFlow和OpenCV打造實時識別應用

玩轉谷歌物體識別API,用TensorFlow和OpenCV打造實時識別應用

新智元編譯

玩轉谷歌物體識別API,用TensorFlow和OpenCV打造實時識別應用

TensorFlow』s (TF) 的 Object Detection API 剛剛開源,就有人利用它做出了對象識別的應用。評論的口徑很一致:這麼快就部署出來了,太牛了!讓我們看看他是如何操作的。有請 Pivotal Labs 的 Dat Tran:

本文將告訴大家如何使用 TensorFlow 新的 Object Detection API 和OpenCV(Python3.5)來開發你自己的實時對象識別的app,著重介紹了其中的難點。

玩轉谷歌物體識別API,用TensorFlow和OpenCV打造實時識別應用

我在使用這個 app 隨機識別桌子上的東西:)

谷歌剛剛發布了新的 TensorFlow 對象識別(Object Detection)API。第一版發布包括:

  • 一些預訓練模型(特別是一些可以運行在移動終端的輕量模型)

  • 配有一個模型的 Jupyter notebook 示例

  • 一些可用於模型再訓練的很方便的腳本,比如,在你自己的數據集上。

首先,我們看一下 TensorFlow 的 models repo,再看看他們發布的 notebook。

玩轉谷歌物體識別API,用TensorFlow和OpenCV打造實時識別應用

玩轉谷歌物體識別API,用TensorFlow和OpenCV打造實時識別應用

玩轉谷歌物體識別API,用TensorFlow和OpenCV打造實時識別應用

玩轉谷歌物體識別API,用TensorFlow和OpenCV打造實時識別應用

它基本上用預訓練模型把對象識別從頭到尾走了一遍。在示例中,他們用了「 SSD with Mobilenet」模型,不過你也可以在他們稱為「TensorFlow detection model zoo」的地方下載其他預訓練模型。順便說一句,這些模型在 COCO 數據集上訓練,隨不同的模型速度(慢、中、快)和模型性能(mAP-平均精度)而不同。

接著我照示例跑了一下。示例已經寫得很清楚了,它無非是做了以下幾件事:

1.導入TensorFlow 、PIL 這樣的package;

2.定義一些變數,比如級數、模型名稱等等;

3.下載凍結模型(.pb-protobuf),load 到 memory;

4.load一些輔助代碼,比如標籤翻譯索引;

5.對兩張測試圖像的識別代碼。

注意:跑示例之前,留意一下 setup note。需要特別注意 protobuf compilation:

# Fromtensorflow/models/

protocobject_detection/protos/*.proto --python_out=.

不運行這個命令,示例就無效。

接著我相應調整了他們的代碼:

  • 刪掉了模型下載的部分

  • PIL 也用不著了,因為 OpenCV 里的視頻流已經是 numpy array 了(PIL 很佔資源)

  • 不保留 TensorFLow session 的 with 語句,同樣是因為太佔資源,尤其是每個視頻流之後 session 需要啟動的時候。

然後,我將 OpenCV 連接到了我自己的網路攝像頭。有很多關於這一步的示例,官方文件里也有。這裡我就不詳述了。最有趣的部分是我為了提升 app 性能做的優化。對我來說,就是對 fps(每秒幀數)的追求。

總的來說,OpenCV 上很多文件的直接應用效果並不是很好,例如,OpenCV 的很多功能都是 I/O 受限的。因此,我不得不想出幾種方法來解決這個問題:

從網路攝像頭讀取幀會引發大量輸入輸出。我最初的想法是把這部分直接移植到另外一個Python multiprocessing 中,但這個方法並不奏效。Stackoverflow 上對這個問題有所解釋,不過我還沒有深究過。幸運的是,我從 Adrian Rosebrock 的網站 pyimagesearch 上找到了一個非常好的方法,即利用 threading,大大提高了fps。如果你想了解 multiprocessing 和 threading 的區別,Stackoverflow 上有非常好的回答。

每次應用程序開始時,下載固化好的模型都需要耗費大量內存。我已經在每次運行中都使用了一個 TF session,但速度仍然非常慢。我是如何解決這個問題的呢?方法非常簡單。我使用 multiprocessing library 把目標檢測部分的龐大工作量移到多個進程中。應用之初速度還會有些慢,因為每個進程都需要下載模型到內存並啟動一個TF session,但之後,多進程同時工作的效率就顯現出來了。

Demo地址:https://asciinema.org/a/125852

減小視頻流中幀的寬度和高度也能大量提升 fps。

注意:如果你和我一樣,用的是 Mac OSX 和 OpenCV 3.1,OpenCV 的 VideoCapture 過一段時間就會 crash 一次。可以試著用回到 OpenCV 3.0。

趕快自己去試試吧,上手確實不難。接下來我想做的是用這個 API 訓練我自己的數據集,還想把預訓練的模型用在我設想的其他 app 上。fps rate 還不夠優化。OpenCV 里還有不少瓶頸,目前我沒有什麼好辦法,但有一些替代方案,比如用 WebRTC,可惜它是 web-based。另外,我也希望使用稱為 async 的 asynchronous 方法來提升我的 fps rate。敬請期待吧!

原文地址:https://medium.com/towards-data-science/building-a-real-time-object-recognition-app-with-tensorflow-and-opencv-b7a2b4ebdc32

點擊閱讀原文查看新智元招聘信息

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

CMU成立最大AI研究團體,培訓綜合AI技能幫助學生找工作
「AI TOP 10」吳恩達加入Drive.ai董事會,二輪募資5000萬刀;印度IT大量裁員;讀AI名校CMU四年要花多少錢?
「矽谷腦機介面狂潮」馬斯克、扎克伯格都想「黑」入你的大腦
2035年AI將為中國帶來7萬億美元產出,埃森哲分析全球12大產業(28PDF)
量子計算機商業化6大賽道:人工智慧、分子模擬、粒子物理等

TAG:新智元 |

您可能感興趣

Python解決FlowJo軟體識別LMD文件出現的問題
Facebook 開源 CV 開發平台 Detectron,打包支持各種物體識別演算法
Facebook開源物體識別工具Detectron,加速計算機視覺研究
Chatito-使用簡單的DSL為AI聊天機器人、NLP任務、命名實體識別或文本分類模型生成數據集
Google AI提出物體識別新方法:端到端發現同類物體最優3D關鍵點——NeurIPS 2018提前看
專欄 | SimpleDet:一套簡單通用的目標檢測與物體識別框架
alt Inc.在VLSP-2018命名實體識別競賽中奪冠
Alt公司:擴展命名實體識別API及其在語言教育中的應用
Unity2019.2Beta:增AR面部追蹤和3D物體識別
UT Austin博士生沈彥堯:基於深度主動學習的命名實體識別|分享總結
Nature:科學家闡明機體識別緻死性煙麴黴菌感染的分子機制
深度學習在NLP的命名實體識別中的應用
AIDA 6.0版本發布:支持最新軟硬體識別測試
NLP 教程:詞性標註、依存分析和命名實體識別解析與應用
《自然:神經科學》論文:動物視覺系統里的RNN能加速物體識別
《自然:神經科學》論文:動物視覺系統里的RNN能加速物體識別
一個應用於物體識別的遷移學習工具鏈
麻省理工新型AI技術 融合了語音和物體識別技術
NEC開發出高速攝像頭物體識別技術、提高生產線點檢效率
簡易版物體識別!