色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Docker容器中的TensorFlow目標檢測API

新機器視覺 ? 來源:新機器視覺 ? 作者:機器之心 李詩萌、 ? 2020-11-27 09:08 ? 次閱讀

本文展示了如何使用 Docker 容器中的 TensorFlow 目標檢測 API,通過網絡攝像頭執行實時目標檢測,同時進行視頻后處理。作者使用的是 OpenCV 和 Python3 多進程和多線程庫。本文重點介紹了項目中出現的問題以及作者采用的解決方案。

完整代碼地址:https://github.com/lbeaucourt/Object-detection

用 YouTube 視頻進行視頻處理測試

動機

我是從這篇文章《Building a Real-Time Object Recognition App with Tensorflow and OpenCV》(https://towardsdatascience.com/building-a-real-time-object-recognition-app-with-tensorflow-and-opencv-b7a2b4ebdc32)開始探索實時目標檢測問題,這促使我研究 Python 多進程庫,使用這篇文章(https://www.pyimagesearch.com/2015/12/21/increasing-webcam-fps-with-python-and-opencv/)中介紹的方法提高每秒幀數(frames per second,FPS)。為了進一步加強項目的可移植性,我試著將自己的項目整合到 Docker 容器中。這一過程的主要困難在于處理流入和流出容器的視頻流。

此外,我還在項目中添加了視頻后處理功能,這一功能也使用了多進程,以減少視頻處理的時間(如果使用原始的 TensorFlow 目標檢測 API 處理視頻,會需要非常非常長的時間)。

在我的個人電腦上可以同時進行高性能的實時目標檢測和視頻后處理工作,該過程僅使用了 8GB 的 CPU。

用于數據科學的 Docker

鑒于大量文章對 TensorFlow 目標檢測 API 的實現進行了說明,因此此處不再贅述。作為一名數據科學家,我將展示如何在日常工作中使用 Docker。請注意,我用的是來自 Tensorflow 的經典 ssd_mobilenet_v2_coco 模型。我在本地復制了模型(.pb 文件)和對應的標簽映射,以便后續個人模型的運行。

我相信現在使用 Docker 已經是數據科學家最基礎的技能了。在數據科學和機器學習的世界中,每周都會發布許多新的算法、工具和程序,在個人電腦上安裝并測試它們很容易讓系統崩潰(親身經歷?。榱朔乐惯@一悲慘事件的發生,我現在用 Docker 創建數據科學工作空間。

你可以在我的庫中找到該項目的相關 Docker 文件。以下是我安裝 TensorFlow 目標檢測的方法(按照官方安裝指南進行):

# Install tensorFlow RUN pip install -U tensorflow # Install tensorflow models object detection RUN git clone https://github.com/tensorflow/models /usr/local/lib/python3.5/dist-packages/tensorflow/models RUN apt-get install -y protobuf-compiler python-pil python-lxml python-tk #Set TF object detection available ENV PYTHONPATH "$PYTHONPATH:/usr/local/lib/python3.5/dist-packages/tensorflow/models/research:/usr/local/lib/python3.5/dist-packages/tensorflow/models/research/slim" RUN cd /usr/local/lib/python3.5/dist-packages/tensorflow/models/research && protoc object_detection/protos/*.proto --python_out=.

同樣,我還安裝了 OpenCV:

# Install OpenCV RUN git clone https://github.com/opencv/opencv.git /usr/local/src/opencv RUN cd /usr/local/src/opencv/ && mkdir build RUN cd /usr/local/src/opencv/build && cmake -D CMAKE_INSTALL_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/ .. && make -j4 && make install

建立圖像會花幾分鐘的時間,但是之后用起來就會又快又容易。

實時目標檢測

首先我試著將目標檢測應用于網絡攝像頭視頻流?!禕uilding a Real-Time Object Recognition App with Tensorflow and OpenCV》完整地介紹了這項工作的主體部分。困難在于如何將網絡攝像頭視頻流傳送到 Docker 容器 中,并使用 X11 服務器恢復輸出流,使視頻得以顯示出來。

將視頻流傳送到容器中

使用 Linux 的話,設備在 /dev/ 目錄中,而且通??梢宰鳛槲募M行操作。一般而言,你的筆記本電腦攝像頭是「0」設備。為了將視頻流傳送到 docker 容器中,要在運行 docker 圖像時使用設備參數

docker run --device=/dev/video0

對 Mac 和 Windows 用戶而言,將網絡攝像頭視頻流傳送到容器中的方法就沒有 Linux 那么簡單了(盡管 Mac 是基于 Unix 的)。本文并未對此進行詳細敘述,但 Windows 用戶可以使用 Virtual Box 啟動 docker 容器來解決該問題。

從容器中恢復視頻流

解決這個問題時花了我一些時間(但解決方案仍舊不盡如人意)。我在 http://wiki.ros.org/docker/Tutorials/GUI 網頁發現了一些使用 Docker 圖形用戶界面的有用信息,尤其是將容器和主機的 X 服務器連接,以顯示視頻。

首先,你必須要放開 xhost 權限,這樣 docker 容器才能通過讀寫進 X11 unix socket 進行正確顯示。首先要讓 docker 獲取 X 服務器主機的權限(這并非最安全的方式):

xhost +local:docker

在成功使用該項目后,再將控制權限改回默認值:

xhost -local:docker

創建兩個環境變量 XSOCK 和 XAUTH:

XSOCK=/tmp/.X11-unix XAUTH=/tmp/.docker.xauth

XSOCK 指 X11 Unix socket,XAUTH 指具備適當權限的 X 認證文件:

xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -

最后,我們還要更新 docker 運行的命令行。我們發送 DISPLAY 環境變量,為 X11 Unix socket 和帶有環境變量 XAUTHORITY 的 X 認證文件安裝卷:

docker run -it --rm --device=/dev/video0 -e DISPLAY=$DISPLAY -v $XSOCK:$XSOCK -v $XAUTH:$XAUTH -e XAUTHORITY=$XAUTH

現在我們可以運行 docker 容器了,而它完成后是這樣的:

工作中的我和其他物體(因為害羞就不露臉了)。

盡管主機配置有 X 服務器,但我還是無法完全刪除我代碼中疑似錯誤的部分。OpenCV 需要通過調用 Python 腳本使用 cv2.imshow 函數進行「初始化」。我收到了以下錯誤信息:

The program 'frame' received an X Window System error.

然后,我可以調用 Python 主腳本(my-object-detection.py),視頻流也可以發送到主機的顯示器了。我對使用第一個 Python 腳本初始化 X11 系統的解決方法并不十分滿意,但是我尚未發現其他可以解決這一問題的辦法。

視頻處理

為了成功用網絡攝像頭實時運行目標檢測 API,我用了線程和多進程 Python 庫。線程用來讀取網絡攝像頭的視頻流,幀按隊列排列,等待一批 worker 進行處理(在這個過程中 TensorFlow 目標檢測仍在運行)。

就視頻處理而言,使用線程是不可能的,因為必須先讀取所有視頻幀,worker 才能對輸入隊列中的第一幀視頻應用目標檢測。當輸入隊列滿了時,后面讀取的視頻幀會丟失。也許使用大量 worker 和多個隊列可以解決這一問題(但會產生大量的計算損失)。

簡單隊列的另一個問題是,由于分析時間不斷變化,輸出隊列中的視頻幀無法以與輸入隊列相同的順序發布。

為了添加視頻處理功能,我刪除了讀取視頻幀的線程,而是通過以下代碼來讀取視頻幀:

while True: # Check input queue is not full if not input_q.full(): # Read frame and store in input queue ret, frame = vs.read() if ret: input_q.put((int(vs.get(cv2.CAP_PROP_POS_FRAMES)),frame))

如果輸入隊列未滿,則接下來會從視頻流中讀取下一個視頻幀,并將其放到隊列中去。否則輸入隊列中沒有視頻幀是不會進行任何處理的。

為了解決視頻幀順序的問題,我使用優先級隊列作為第二輸出隊列:

1. 讀取視頻幀,并將視頻幀及其對應的編號一并放到輸入隊列中(實際上是將 Python 列表對象放到隊列中)。

2.然后,worker 從輸入隊列中取出視頻幀,對其進行處理后再將其放入第一個輸出隊列(仍帶有相關的視頻幀編號)。

while True: frame = input_q.get() frame_rgb = cv2.cvtColor(frame[1], cv2.COLOR_BGR2RGB) output_q.put((frame[0], detect_objects(frame_rgb, sess, detection_graph)))

3. 如果輸出隊列不為空,則提取視頻幀,并將視頻幀及其對應編號一起放入優先級隊列,視頻編號即為優先級編號。優先級隊列的規模被設置為其他隊列的三倍。

# Check output queue is not empty if not output_q.empty(): # Recover treated frame in output queue and feed priority queue output_pq.put(output_q.get())

4. 最后,如果輸出優先級隊列不為空,則取出優先級最高(優先級編號最?。┑囊曨l(這是標準優先級隊列的運作)。如果優先級編號與預期視頻幀編號一致,則將這一幀添加到輸出視頻流中(如果有需要的話將這一幀寫入視頻流),不一致的話則將這一幀放回優先級隊列中。

# Check output priority queue is not empty if not output_pq.empty(): prior, output_frame = output_pq.get() if prior > countWriteFrame: output_pq.put((prior, output_frame)) else: countWriteFrame = countWriteFrame + 1 # Do something with your frame

要停止該進程,需要檢查所有的隊列是否為空,以及是否從該視頻流中提取出所有的視頻了。

if((not ret) & input_q.empty() & output_q.empty() & output_pq.empty()): break

總結

本文介紹了如何使用 docker 和 TensorFlow 實現實時目標檢測項項目。如上文所述,docker 是測試新數據科學工具最安全的方式,也是我們提供給客戶打包解決方案最安全的方式。本文還展示了如何使用《Building a Real-Time Object Recognition App with Tensorflow and OpenCV》中的原始 Python 腳本執行多進程視頻處理。

原文鏈接:https://towardsdatascience.com/real-time-and-video-processing-object-detection-using-tensorflow-opencv-and-docker-2be1694726e5

責任編輯:xj

原文標題:教程 | 如何使用Docker、TensorFlow目標檢測API和OpenCV實現實時目標檢測和視頻處理

文章出處:【微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • OpenCV
    +關注

    關注

    31

    文章

    634

    瀏覽量

    41338
  • python
    +關注

    關注

    56

    文章

    4792

    瀏覽量

    84628
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60527
  • Docker
    +關注

    關注

    0

    文章

    457

    瀏覽量

    11846

原文標題:教程 | 如何使用Docker、TensorFlow目標檢測API和OpenCV實現實時目標檢測和視頻處理

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ARM平臺實現Docker容器技術

    及依賴包到一個可移植的鏡像,然后發布到任何流行的Linux或Windows機器上,亦可實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。使用Docker,可像管理應用程序一樣管理基礎結構
    發表于 07-25 14:36

    ARM平臺實現Docker容器技術

    及依賴包到一個可移植的鏡像,然后發布到任何流行的Linux或Windows機器上,亦可實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。使用Docker,可像管理應用程序一樣管理基礎結構
    發表于 07-17 11:05

    目標檢測與識別技術有哪些

    視頻識別并定位感興趣的目標,通常包括目標的類別和位置信息。目標識別(Object Recognition)是指對檢測到的
    的頭像 發表于 07-17 09:40 ?590次閱讀

    目標檢測與識別技術的關系是什么

    任務是在圖像或視頻快速準確地定位出感興趣的目標,并給出目標的位置信息。目標檢測技術通常包括候選區域提取、特征提取、分類器設計等步驟。
    的頭像 發表于 07-17 09:38 ?581次閱讀

    Jtti:Docker會替代調虛機嗎

    嗎? 答案:不會。 原因:是有些遺留應用是運行在windows系統上的。有些應用可以直接遷移到虛擬上,但是不能直接在容器運行?,F在得趨勢是虛擬機和容器同時發展。容器的優點是敏捷性和高
    的頭像 發表于 07-12 14:38 ?312次閱讀
    Jtti:<b class='flag-5'>Docker</b>會替代調虛機嗎

    keras模型轉tensorflow session

    在這篇文章,我們將討論如何將Keras模型轉換為TensorFlow session。 Keras和TensorFlow簡介 Keras是一個高級神經網絡API,它提供了一種簡單、快
    的頭像 發表于 07-05 09:36 ?511次閱讀

    關于Docker 的清理命令集錦

    這篇文章主要介紹了Docker 清理命令集錦,需要的朋友可以參考下 復制代碼代碼如下: docker kill $(docker ps -a -q) ?刪除所有已經停止的容器 復制代碼
    的頭像 發表于 06-13 15:56 ?371次閱讀

    適合大學生的鴻蒙開發板-Purple Pi OH之安裝Docker

    個開放源代碼的應用容器引擎,允許開發者打包他們的應用及依賴包到一個可移植的容器,這個容器可以在任何支持Docker的Linux機器上運行。
    的頭像 發表于 05-10 08:32 ?585次閱讀
    適合大學生的鴻蒙開發板-Purple Pi OH之安裝<b class='flag-5'>Docker</b>

    基于全志T113-i的Docker容器實現方案

    通過使用Docker,開發人員可以更容易地構建、交付和運行應用程序,同時確保應用程序的一致性及可移植性。它也使得應用程序的部署更加靈活、高效,因為它可以快速地啟動、停止和擴展容器,而不會影響其他容器或主機系統。
    發表于 04-19 09:45 ?889次閱讀
    基于全志T113-i的<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>實現方案

    Docker容器技術的安裝和使用

    通過Docker,開發人員可以更容易地構建、交付和運行應用程序,同時確保應用程序的一致性和可移植性。它也使得應用程序的部署更加靈活和高效,因為它可以快速地啟動、停止和擴展容器,而不會影響其他容器或主機系統。
    發表于 04-16 11:24 ?320次閱讀
    <b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技術的安裝和使用

    OpenVINO? Java API應用RT-DETR做目標檢測器實戰

    本文將從零開始詳細介紹環境搭建的完整步驟,我們基于英特爾開發套件AIxBoard為硬件基礎實現了Java在Ubuntu 22.04系統上成功使用OpenVINO? Java API,并且成功運行了RT-DETR實現實時端到端目標檢測
    的頭像 發表于 03-18 15:04 ?794次閱讀
    OpenVINO? Java <b class='flag-5'>API</b>應用RT-DETR做<b class='flag-5'>目標</b><b class='flag-5'>檢測</b>器實戰

    Docker容器實現開機自動啟動策略

    如果你的容器依賴于其他服務(例如數據庫或其他容器),你需要確保這些服務在你的容器啟動之前就已經可用。這可以通過編排工具如Docker Compose來管理,或者通過編寫自定義的啟動腳本
    的頭像 發表于 03-11 10:33 ?2847次閱讀

    ARM平臺實現Docker容器技術

    什么是Docker? (1)Docker的架構 Docker是一個開源的應用容器引擎,讓開發者可打包他們的應用以及依賴包到一個可移植的鏡像
    的頭像 發表于 03-07 13:48 ?798次閱讀
    ARM平臺實現<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技術

    TLT507-Docker容器部署方法說明

    TLT507-Docker容器部署方法說明
    的頭像 發表于 01-26 09:49 ?466次閱讀
    TLT507-<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法說明

    RK3568-Docker容器部署方法說明

    RK3568-Docker容器部署方法說明
    的頭像 發表于 01-22 10:12 ?1378次閱讀
    RK3568-<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法說明
    主站蜘蛛池模板: 国产精品久久久久影院色| 双腿打开揉弄高潮H苏安安秦慕深 双腿被绑成M型调教PLAY照片 | 夫妻日本换H视频| 青青热久精品国产亚洲AV无码| 99视频在线免费| 强行撕开衣服捏胸黄文| 成人国产在线24小时播放视频| 日韩在线中文字幕无码| 丰满少妇69激情啪啪无码| 色综合五月激情综合色一区| 国产精品.XX视频.XXTV| 睡觉被偷偷进入magnet| 国产乱人视频在线观看| 亚洲精品成人久久久影院| 精品国内自产拍在线观看视频| 一个人看的WWW高清电影| 久久精品九九亚洲精品天堂| 影音先锋男人资源813.| 理论片午午伦夜理片久久| 92国产精品午夜免费福利视频| 欧美精品熟妇乱| 大睾丸内射老师| 午夜理伦大片一级| 九九九精品国产在线| 18女下面流水不遮网站免费| 欧美成 人 网 站 免费| 疯狂小护士| 亚洲欧洲日韩国产一区二区三区| 久久精品一本到99热| 97在线观看免费| 肉小说高h| 好男人在线高清WWW免费观看| 影音先锋电影资源av| 欧美激情视频一区二区| 闺蜜扒开我尿口使劲揉| 亚洲精品高清在线| 六级黄色片| 跪趴式啪啪GIF动态图27报| 亚洲精品天堂无码中文字幕影院| 啦啦啦 中文 中国 免费 高清在线| 99视频久九热精品|