chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Docker容器中的TensorFlow目標(biāo)檢測(cè)API

新機(jī)器視覺 ? 來源:新機(jī)器視覺 ? 作者:機(jī)器之心 李詩萌、 ? 2020-11-27 09:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文展示了如何使用 Docker 容器中的 TensorFlow 目標(biāo)檢測(cè) API,通過網(wǎng)絡(luò)攝像頭執(zhí)行實(shí)時(shí)目標(biāo)檢測(cè),同時(shí)進(jìn)行視頻后處理。作者使用的是 OpenCV 和 Python3 多進(jìn)程和多線程庫。本文重點(diǎn)介紹了項(xiàng)目中出現(xiàn)的問題以及作者采用的解決方案。

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

用 YouTube 視頻進(jìn)行視頻處理測(cè)試

動(dòng)機(jī)

我是從這篇文章《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)開始探索實(shí)時(shí)目標(biāo)檢測(cè)問題,這促使我研究 Python 多進(jìn)程庫,使用這篇文章(https://www.pyimagesearch.com/2015/12/21/increasing-webcam-fps-with-python-and-opencv/)中介紹的方法提高每秒幀數(shù)(frames per second,F(xiàn)PS)。為了進(jìn)一步加強(qiáng)項(xiàng)目的可移植性,我試著將自己的項(xiàng)目整合到 Docker 容器中。這一過程的主要困難在于處理流入和流出容器的視頻流。

此外,我還在項(xiàng)目中添加了視頻后處理功能,這一功能也使用了多進(jìn)程,以減少視頻處理的時(shí)間(如果使用原始的 TensorFlow 目標(biāo)檢測(cè) API 處理視頻,會(huì)需要非常非常長的時(shí)間)。

在我的個(gè)人電腦上可以同時(shí)進(jìn)行高性能的實(shí)時(shí)目標(biāo)檢測(cè)和視頻后處理工作,該過程僅使用了 8GB 的 CPU。

用于數(shù)據(jù)科學(xué)的 Docker

鑒于大量文章對(duì) TensorFlow 目標(biāo)檢測(cè) API 的實(shí)現(xiàn)進(jìn)行了說明,因此此處不再贅述。作為一名數(shù)據(jù)科學(xué)家,我將展示如何在日常工作中使用 Docker。請(qǐng)注意,我用的是來自 Tensorflow 的經(jīng)典 ssd_mobilenet_v2_coco 模型。我在本地復(fù)制了模型(.pb 文件)和對(duì)應(yīng)的標(biāo)簽映射,以便后續(xù)個(gè)人模型的運(yùn)行。

我相信現(xiàn)在使用 Docker 已經(jīng)是數(shù)據(jù)科學(xué)家最基礎(chǔ)的技能了。在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的世界中,每周都會(huì)發(fā)布許多新的算法、工具和程序,在個(gè)人電腦上安裝并測(cè)試它們很容易讓系統(tǒng)崩潰(親身經(jīng)歷?。?。為了防止這一悲慘事件的發(fā)生,我現(xiàn)在用 Docker 創(chuàng)建數(shù)據(jù)科學(xué)工作空間。

你可以在我的庫中找到該項(xiàng)目的相關(guān) Docker 文件。以下是我安裝 TensorFlow 目標(biāo)檢測(cè)的方法(按照官方安裝指南進(jìn)行):

# 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

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

實(shí)時(shí)目標(biāo)檢測(cè)

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

將視頻流傳送到容器中

使用 Linux 的話,設(shè)備在 /dev/ 目錄中,而且通常可以作為文件進(jìn)行操作。一般而言,你的筆記本電腦攝像頭是「0」設(shè)備。為了將視頻流傳送到 docker 容器中,要在運(yùn)行 docker 圖像時(shí)使用設(shè)備參數(shù):

docker run --device=/dev/video0

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

從容器中恢復(fù)視頻流

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

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

xhost +local:docker

在成功使用該項(xiàng)目后,再將控制權(quán)限改回默認(rèn)值:

xhost -local:docker

創(chuàng)建兩個(gè)環(huán)境變量 XSOCK 和 XAUTH:

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

XSOCK 指 X11 Unix socket,XAUTH 指具備適當(dāng)權(quán)限的 X 認(rèn)證文件:

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

最后,我們還要更新 docker 運(yùn)行的命令行。我們發(fā)送 DISPLAY 環(huán)境變量,為 X11 Unix socket 和帶有環(huán)境變量 XAUTHORITY 的 X 認(rèn)證文件安裝卷:

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

現(xiàn)在我們可以運(yùn)行 docker 容器了,而它完成后是這樣的:

工作中的我和其他物體(因?yàn)楹π呔筒宦赌樍耍?/p>

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

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

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

視頻處理

為了成功用網(wǎng)絡(luò)攝像頭實(shí)時(shí)運(yùn)行目標(biāo)檢測(cè) API,我用了線程和多進(jìn)程 Python 庫。線程用來讀取網(wǎng)絡(luò)攝像頭的視頻流,幀按隊(duì)列排列,等待一批 worker 進(jìn)行處理(在這個(gè)過程中 TensorFlow 目標(biāo)檢測(cè)仍在運(yùn)行)。

就視頻處理而言,使用線程是不可能的,因?yàn)楸仨毾茸x取所有視頻幀,worker 才能對(duì)輸入隊(duì)列中的第一幀視頻應(yīng)用目標(biāo)檢測(cè)。當(dāng)輸入隊(duì)列滿了時(shí),后面讀取的視頻幀會(huì)丟失。也許使用大量 worker 和多個(gè)隊(duì)列可以解決這一問題(但會(huì)產(chǎn)生大量的計(jì)算損失)。

簡(jiǎn)單隊(duì)列的另一個(gè)問題是,由于分析時(shí)間不斷變化,輸出隊(duì)列中的視頻幀無法以與輸入隊(duì)列相同的順序發(fā)布。

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

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))

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

為了解決視頻幀順序的問題,我使用優(yōu)先級(jí)隊(duì)列作為第二輸出隊(duì)列:

1. 讀取視頻幀,并將視頻幀及其對(duì)應(yīng)的編號(hào)一并放到輸入隊(duì)列中(實(shí)際上是將 Python 列表對(duì)象放到隊(duì)列中)。

2.然后,worker 從輸入隊(duì)列中取出視頻幀,對(duì)其進(jìn)行處理后再將其放入第一個(gè)輸出隊(duì)列(仍帶有相關(guān)的視頻幀編號(hào))。

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. 如果輸出隊(duì)列不為空,則提取視頻幀,并將視頻幀及其對(duì)應(yīng)編號(hào)一起放入優(yōu)先級(jí)隊(duì)列,視頻編號(hào)即為優(yōu)先級(jí)編號(hào)。優(yōu)先級(jí)隊(duì)列的規(guī)模被設(shè)置為其他隊(duì)列的三倍。

# 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. 最后,如果輸出優(yōu)先級(jí)隊(duì)列不為空,則取出優(yōu)先級(jí)最高(優(yōu)先級(jí)編號(hào)最?。┑囊曨l(這是標(biāo)準(zhǔn)優(yōu)先級(jí)隊(duì)列的運(yùn)作)。如果優(yōu)先級(jí)編號(hào)與預(yù)期視頻幀編號(hào)一致,則將這一幀添加到輸出視頻流中(如果有需要的話將這一幀寫入視頻流),不一致的話則將這一幀放回優(yōu)先級(jí)隊(duì)列中。

# 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

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

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

總結(jié)

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

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

責(zé)任編輯:xj

原文標(biāo)題:教程 | 如何使用Docker、TensorFlow目標(biāo)檢測(cè)API和OpenCV實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測(cè)和視頻處理

文章出處:【微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • OpenCV
    +關(guān)注

    關(guān)注

    32

    文章

    642

    瀏覽量

    42893
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86747
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    330

    瀏覽量

    61179
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    515

    瀏覽量

    12965

原文標(biāo)題:教程 | 如何使用Docker、TensorFlow目標(biāo)檢測(cè)API和OpenCV實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測(cè)和視頻處理

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    創(chuàng)龍 瑞芯微 RK3562 國產(chǎn) 2GHz 四核A53 工業(yè)開發(fā)板—Docker容器部署方法說明

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

    干貨分享 | RK3588 Ubuntu系統(tǒng)Docker容器使用指南

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

    基于LockAI視覺識(shí)別模塊:C++目標(biāo)檢測(cè)

    檢測(cè)是計(jì)算機(jī)視覺領(lǐng)域中的一個(gè)關(guān)鍵任務(wù),它不僅需要識(shí)別圖像存在哪些對(duì)象,還需要定位這些對(duì)象的位置。具體來說,目標(biāo)檢測(cè)算法會(huì)輸出每個(gè)檢測(cè)到的對(duì)
    發(fā)表于 06-06 14:43

    如何使用Docker部署大模型

    隨著深度學(xué)習(xí)和大模型的快速發(fā)展,如何高效地部署這些模型成為了一個(gè)重要的挑戰(zhàn)。Docker 作為一種輕量級(jí)的容器化技術(shù),能夠?qū)⒛P图捌湟蕾嚟h(huán)境打包成一個(gè)可移植的容器,極大地簡(jiǎn)化了部署流程。本文將詳細(xì)介紹如何使用
    的頭像 發(fā)表于 05-24 16:39 ?344次閱讀

    Docker Compose的常用命令

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

    Docker常用命令大全

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

    【技術(shù)案例】Android in Docker

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

    基于Docker鏡像逆向生成Dockerfile

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

    使用WindowsDocker容器運(yùn)行DL Streamer出現(xiàn)報(bào)錯(cuò)怎么解決?

    使用 Windows* Docker 容器運(yùn)行 DL Streamer。 遇到錯(cuò)誤: gi.repository.GLib.GError: gst_parse_error: 無元素 “vaapih264enc” (1)
    發(fā)表于 03-05 07:04

    Docker-鏡像的分層-busybox鏡像制作

    docker hub里面查看busybox的Dockerfile, 知識(shí)點(diǎn)4:bootfs 和 rootfs? 知識(shí)點(diǎn)5:為什么Docker鏡像要采用這種分層結(jié)構(gòu)? 如果多個(gè)容器共享一份基礎(chǔ)鏡像,當(dāng)某個(gè)
    的頭像 發(fā)表于 01-15 10:44 ?605次閱讀
    <b class='flag-5'>Docker</b>-鏡像的分層-busybox鏡像制作

    在華為云上通過 Docker 容器部署 Elasticsearch 并進(jìn)行性能評(píng)測(cè)

    前言 ? 1. 華為云X實(shí)例介紹及優(yōu)勢(shì) ? 1.1 柔性算力 ? 1.2 vCPU和內(nèi)存的靈活配比 ? 1.3 成本效益與性能 ? 2. 安裝并運(yùn)行 Docker ? 2.1 修改倉庫配置文件
    的頭像 發(fā)表于 01-13 13:36 ?489次閱讀
    在華為云上通過 <b class='flag-5'>Docker</b> <b class='flag-5'>容器</b>部署 Elasticsearch 并進(jìn)行性能評(píng)測(cè)

    Dockerfile鏡像制作與Docker-Compose容器編排

    Dockerfile鏡像制作 docker/podman, 鏡像是容器的基礎(chǔ),每次執(zhí)行docker run的時(shí)候都會(huì)指定哪個(gè)基本鏡像作為容器
    的頭像 發(fā)表于 01-07 11:01 ?781次閱讀
    Dockerfile鏡像制作與<b class='flag-5'>Docker</b>-Compose<b class='flag-5'>容器</b>編排

    在華為云 FlexusX 實(shí)例上實(shí)現(xiàn) Docker 容器的實(shí)時(shí)監(jiān)控與可視化分析

    前言 華為云 Flexus X,以頂尖算力與智能調(diào)度,引領(lǐng) Docker 容器管理新風(fēng)尚。828 企業(yè)上云節(jié)之際,F(xiàn)lexus X 攜手前沿技術(shù),實(shí)現(xiàn)容器運(yùn)行的實(shí)時(shí)監(jiān)控與數(shù)據(jù)可視化,讓管理變得直觀
    的頭像 發(fā)表于 01-02 13:42 ?419次閱讀
    在華為云 FlexusX 實(shí)例上實(shí)現(xiàn) <b class='flag-5'>Docker</b> <b class='flag-5'>容器</b>的實(shí)時(shí)監(jiān)控與可視化分析

    在 Huawei Cloud EulerOS 系統(tǒng)安裝 Docker 的詳細(xì)步驟與常見問題解決

    Docker鏡像 ? 6. 配置Docker鏡像加速 ? 6.1 修改daemon.json文件 ? 6.2 再次拉取鏡像 ? 結(jié)語 ? 前言 Docker 是一種輕量級(jí)的容器技術(shù),廣
    的頭像 發(fā)表于 12-26 18:12 ?1343次閱讀
    在 Huawei Cloud EulerOS 系統(tǒng)<b class='flag-5'>中</b>安裝 <b class='flag-5'>Docker</b> 的詳細(xì)步驟與常見問題解決

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    及依賴包到一個(gè)可移植的鏡像,然后發(fā)布到任何流行的Linux或Windows機(jī)器上,亦可實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。使用Docker,可像管理應(yīng)用程序一樣管理基礎(chǔ)結(jié)構(gòu)
    發(fā)表于 07-25 14:36