国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

實時目標檢測

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

將視頻流傳送到容器中

使用 Linux 的話,設備在 /dev/ 目錄中,而且通常可以作為文件進行操作。一般而言,你的筆記本電腦攝像頭是「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. 最后,如果輸出優先級隊列不為空,則取出優先級最高(優先級編號最小)的視頻(這是標準優先級隊列的運作)。如果優先級編號與預期視頻幀編號一致,則將這一幀添加到輸出視頻流中(如果有需要的話將這一幀寫入視頻流),不一致的話則將這一幀放回優先級隊列中。

# 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
    +關注

    關注

    33

    文章

    652

    瀏覽量

    44784
  • python
    +關注

    關注

    57

    文章

    4876

    瀏覽量

    90025
  • tensorflow
    +關注

    關注

    13

    文章

    334

    瀏覽量

    62176
  • Docker
    +關注

    關注

    0

    文章

    532

    瀏覽量

    14243

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Docker容器網絡模式全解析

    容器網絡是Docker使用中最容易出問題的部分。容器之間怎么通信、容器怎么訪問外網、外部怎么訪問容器內的服務——這三個問題搞不清楚,排查網絡
    的頭像 發表于 02-26 16:39 ?232次閱讀

    如何通過API接口獲取Target平臺的目標詳情數據

    ? ?在現代軟件開發API(應用程序編程接口)是連接不同系統和服務的關鍵橋梁。Target平臺(這里指代一個通用平臺,如社交媒體、電商或數據服務)通常提供API來允許開發者獲取特定目標
    的頭像 發表于 02-03 17:43 ?119次閱讀
    如何通過<b class='flag-5'>API</b>接口獲取Target平臺的<b class='flag-5'>目標</b>詳情數據

    創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—Docker容器部署方法說明

    本文圍繞創龍科技研發的評估板,詳細說明 Docker 容器部署方法,包括 Docker 架構介紹、安裝步驟(依賴包安裝、GPG 密鑰添加等)、本地鏡像倉庫搭建,以及單個 / 多個鏡像的構建、推送
    的頭像 發表于 10-22 17:21 ?723次閱讀
    創龍 瑞芯微 RK3588 國產2.4GHz八核 工業開發板—<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法說明

    深入剖析Docker全鏈路安全防護策略

    在云原生時代,Docker容器安全已成為運維工程師必須面對的核心挑戰。本文將從實戰角度深入剖析Docker全鏈路安全防護策略,涵蓋鏡像構建、容器運行、網絡隔離等關鍵環節,助你構建企業級
    的頭像 發表于 08-18 11:17 ?1035次閱讀

    國產!全志T113-i 雙核Cortex-A7@1.2GHz 工業開發板—Docker容器部署方法說明

    本指導文檔主要演示Docker容器部署的方法,并基于Docker運行led_flash例程。
    的頭像 發表于 08-06 15:55 ?485次閱讀
    國產!全志T113-i 雙核Cortex-A7@1.2GHz 工業開發板—<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法說明

    Docker容器安全攻防實戰案例

    在云原生時代,Docker已成為現代應用部署的基石。然而,容器化帶來便利的同時,也引入了新的安全挑戰。作為一名在生產環境管理過數千個容器的運維工程師,我將通過真實的攻防實戰案例,帶你
    的頭像 發表于 08-05 09:52 ?1323次閱讀

    創龍 瑞芯微 RK3562 國產 2GHz 四核A53 工業開發板—Docker容器部署方法說明

    Docker是一個開源的應用容器引擎,讓開發者可打包他們的應用以及依賴包至一個可移植的鏡像,然后發布至任何流行的Linux或Windows機器上,亦可實現虛擬化。容器是完全使用沙箱機
    的頭像 發表于 07-03 11:00 ?570次閱讀
    創龍 瑞芯微 RK3562 國產 2GHz 四核A53 工業開發板—<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法說明

    干貨分享 | RK3588 Ubuntu系統Docker容器使用指南

    前言:在瑞芯微RK3588高性能AIoT平臺上運行Ubuntu系統時,Docker容器技術能極大提升開發部署效率。通過輕量級虛擬化實現環境隔離與快速遷移,本文將從零開始詳解RK3588平臺
    的頭像 發表于 06-27 12:01 ?3851次閱讀
    干貨分享 | RK3588 Ubuntu系統<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>使用指南

    基于LockAI視覺識別模塊:C++目標檢測

    檢測是計算機視覺領域中的一個關鍵任務,它不僅需要識別圖像存在哪些對象,還需要定位這些對象的位置。具體來說,目標檢測算法會輸出每個檢測到的對
    發表于 06-06 14:43

    如何使用Docker部署大模型

    隨著深度學習和大模型的快速發展,如何高效地部署這些模型成為了一個重要的挑戰。Docker 作為一種輕量級的容器化技術,能夠將模型及其依賴環境打包成一個可移植的容器,極大地簡化了部署流程。本文將詳細介紹如何使用
    的頭像 發表于 05-24 16:39 ?1112次閱讀

    Docker Compose的常用命令

    大家好,今天給大家分享Docker Compose的常用命令,以及docker-compose文件的屬性。Docker Compose 是一個用于定義和運行多容器
    的頭像 發表于 04-30 13:40 ?1197次閱讀

    Docker常用命令大全

    Docker 是一種開源的應用容器引擎,廣泛應用于開發、部署和運行分布式應用。掌握 Docker 常用命令對于開發人員和運維人員來說非常重要。本文將為大家整理常用的Docker 命令,
    的頭像 發表于 04-22 12:47 ?859次閱讀

    【技術案例】Android in Docker

    Docker介紹Docker是一個開源的容器化平臺,用于打包、分發和運行應用程序。它通過將應用及其所有依賴打包到獨立的容器,確保應用在不同
    的頭像 發表于 04-02 16:33 ?1756次閱讀
    【技術案例】Android in <b class='flag-5'>Docker</b>

    基于Docker鏡像逆向生成Dockerfile

    在本文中, 我們將通過理解Docker鏡像如何存儲數據, 以及如何使用工具查看鏡像方方面面的信息來逆向工程一個Docker鏡像; 以及如何使用Python的Docker API來構建一
    的頭像 發表于 03-10 09:45 ?1544次閱讀
    基于<b class='flag-5'>Docker</b>鏡像逆向生成Dockerfile

    無法轉換TF OD API掩碼RPGA模型怎么辦?

    \'/Tensorflow-Object-Detection-API-train-custom-Mask-R-CNN-model-master/inference_graph/saved_model\' >
    發表于 03-06 06:44