在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

Python版test1實(shí)戰(zhàn)說(shuō)明

NVIDIA英偉達(dá)企業(yè)解決方案 ? 來(lái)源:NVIDIA英偉達(dá)中國(guó) ? 作者:NVIDIA英偉達(dá)中國(guó) ? 2021-10-09 14:28 ? 次閱讀

上一篇文章已經(jīng)帶著大家安裝 DeepStream 的 Python 開(kāi)發(fā)環(huán)境,并且執(zhí)行最簡(jiǎn)單的 deepstream-test1.py,讓大家體驗(yàn)一下這個(gè)范例的效果。本文則進(jìn)一步以這個(gè) Python 代碼講解 DeepStream 插件工作流,并且擴(kuò)充 USB 攝像頭作為輸入,以及將輸出透過(guò) RTSP 轉(zhuǎn)發(fā)到其他電腦上觀看。

如果還未安裝 Python 環(huán)境或下載 Python 范例的,請(qǐng)至前一篇文章中找安裝與下載的步驟,這里不再重復(fù)。

前面文章中已經(jīng)簡(jiǎn)單提過(guò) DeepStream 所用到的插件內(nèi)容,但那只是整個(gè)框架中非常基礎(chǔ)的一小部分,本文要用代碼開(kāi)始解說(shuō)范例的時(shí)候,還是得將 Gstreamer 一些重要構(gòu)成元素之間的關(guān)系說(shuō)明清楚,這樣才能讓大家在代碼過(guò)程得以一目了然。

現(xiàn)在先把這個(gè) test1 范例的執(zhí)行流程先講解清楚,這樣在閱讀后面的代碼就會(huì)更加容易掌握上下之間的交互關(guān)系。這里的流程對(duì) C/C++ 版本與 Python 版本是完全一樣的,只不過(guò)代碼不過(guò)用 Python 來(lái)說(shuō)明:

首先 filesrc 數(shù)據(jù)源元件負(fù)責(zé)從磁盤(pán)上讀取視頻數(shù)據(jù)

h264parse 解析器元件負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行解析

nvv4l2decoder 編碼器元件負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行解碼

nvstreammux 流多路復(fù)用器元件負(fù)責(zé)批處理幀以實(shí)現(xiàn)最佳推理性能

nvinfer 推理元件負(fù)責(zé)實(shí)現(xiàn)加速推理

nvvideoconvert 轉(zhuǎn)換器元件負(fù)責(zé)將數(shù)據(jù)格式轉(zhuǎn)換為輸出顯示支持的格式

nvdsosd 可視化元件負(fù)責(zé)將邊框與文本等信息繪制到圖像中

nvegltransform 渲染元件和 nveglglessink 接收器元件負(fù)責(zé)輸出到屏幕上

建立 DeepStream 應(yīng)用程式的步驟與 Gstreamer 幾乎一樣,都是有固定的步驟,只要熟悉之后就會(huì)發(fā)現(xiàn)其實(shí)并沒(méi)有什么難度,接下去就開(kāi)始我們的執(zhí)行步驟。

創(chuàng)建 DeepStream 應(yīng)用的7大步驟初始化 Gstreamer 與創(chuàng)建管道(pipeline)

1. 初始化 Gstreamer 與創(chuàng)建管道(pipeline)

# 從“def main(args):”開(kāi)始

GObject.threads_init()

# 標(biāo)準(zhǔn)GStreamer初始化

Gst.init(None)

# 創(chuàng)建Gst物件與初始化

pipeline = Gst.Pipeline()

# 創(chuàng)建與其他元素相連接的管道元素

2. 創(chuàng)建所有需要的元件(element):用Gst.ElementFactory.make() 創(chuàng)建所需要的元素,每個(gè)元素內(nèi)指定插件類(lèi)別(粗體部分)并給定名稱(chēng)(自行設(shè)定):

# 階段1-處理輸入源的插件:

# 建立“源”元素負(fù)責(zé)從文件讀入數(shù)據(jù)

source = Gst.ElementFactory.make(“filesrc”, “file-source”)

# 解析文件是否為要求的h264格式

h264parser = Gst.ElementFactory.make(“h264parse”, “h264-parser”)

# 調(diào)用NVIDIA的nvdec_h264硬件解碼器

decoder = Gst.ElementFactory.make(“nvv4l2decoder”, “nvv4l2-decoder”)

# 創(chuàng)建nvstreammux實(shí)例,將單個(gè)或多個(gè)源數(shù)據(jù),復(fù)用成一個(gè)“批(batch)”

streammux = Gst.ElementFactory.make(“nvstreammux”, “Stream-muxer”)

# 階段2-執(zhí)行推理的插件:

# 使用NVINFERE對(duì)解碼器的輸出執(zhí)行推理,推理行為是通過(guò)配置文件設(shè)置

pgie = Gst.ElementFactory.make(“nvinfer”, “primary-inference”)

# 階段3-處理輸出的插件:

# 根據(jù)nvosd的要求,使用轉(zhuǎn)換器將NV12轉(zhuǎn)換為RGBA

nvvidconv = Gst.ElementFactory.make(“nvvideoconvert”, “convertor”)

# 創(chuàng)建OSD以在轉(zhuǎn)換的RGBA緩沖區(qū)上繪制

nvosd = Gst.ElementFactory.make(“nvdsosd”, “onscreendisplay”)

# 最后將osd的繪制,進(jìn)行渲染后在屏幕上顯示結(jié)果

transform=Gst.ElementFactory.make(“nvegltransform”, “egltransform”)

sink = Gst.ElementFactory.make(“nveglglessink”, “nvvideo-renderer”)

3. 配置元件的參數(shù)

# 以args[1]給定的文件名為輸入源視頻文件

source.set_property(‘location’, args[1])

# 設(shè)定流復(fù)用器的尺寸、數(shù)量

streammux.set_property(‘width’, 1920)

streammux.set_property(‘height’, 1080)

streammux.set_property(‘batch-size’, 1)

streammux.set_property(‘batched-push-timeout’, 4000000)

# 設(shè)定pgie的配置文件

pgie.set_property(‘config-file-path’, “dstest1_pgie_config.txt”)

4. 將元件添加到導(dǎo)管之中:用pipeline.add()

pipeline.add(source)

pipeline.add(h264parser)

pipeline.add(decoder)

pipeline.add(streammux)

pipeline.add(pgie)

pipeline.add(nvvidconv)

pipeline.add(nvosd)

pipeline.add(sink)

if is_aarch64():

pipeline.add(transform)

5. 將元件按照要求連接起來(lái):本范例的管道流為file-source -》 h264-parser -》 nvh264-decoder -》 streammux -》 nvinfer -》 nvvidconv -》 nvosd -》 video-renderer

source.link(h264parser) # file-source -》 h264-parser

h264parser.link(decoder) # h264-parser -》 nvh264-decoder

# 下面粗線(xiàn)的三行,是streammux的特殊處理方式

sinkpad = streammux.get_request_pad(“sink_0”)

srcpad = decoder.get_static_pad(“src”)

srcpad.link(sinkpad)

streammux.link(pgie) # streammux -》 nvinfer

pgie.link(nvvidconv) # nvinfer -》 nvvidconv

nvvidconv.link(nvosd) # nvvidconv -》 nvosd

nvosd.link(transform) # nvosd -》 transform

transform.link(sink) # transform -》 video-renderer

前面5個(gè)步驟都是比較靜態(tài)的固定步驟,只要將想開(kāi)發(fā)的應(yīng)用所需要的插件元件進(jìn)行“創(chuàng)建”、“給值”、“連接”就可以。

接下去的部分是整個(gè)應(yīng)用中非常關(guān)鍵的靈魂,就是我們得為整個(gè)應(yīng)用去建構(gòu)“信息(message)傳遞系統(tǒng)”,這樣才能讓這個(gè)應(yīng)用與插件元件之間形成互動(dòng),進(jìn)而正確執(zhí)行我們想要得到的結(jié)果。其相互關(guān)系圖如下,這里并不花時(shí)間去講解調(diào)用細(xì)節(jié),想了解的請(qǐng)自行參考 Gstreamer 框架的詳細(xì)使用。

6. 創(chuàng)建一個(gè)事件循環(huán)(evnet loop):將信息(mesages)傳入并監(jiān)控bus的信號(hào)

loop = GObject.MainLoop()

bus = pipeline.get_bus()

bus.add_signal_watch()

bus.connect (“message”, bus_call, loop)

# 用osdsinkpad來(lái)確認(rèn)nvosd插件是否獲得輸入

osdsinkpad = nvosd.get_static_pad(“sink”)

# 添加探針(probe)以獲得生成的元數(shù)據(jù)的通知,我們將probe添加到osd元素的接收器板中,因?yàn)榈侥菚r(shí),緩沖區(qū)將具有已經(jīng)得到了所有的元數(shù)據(jù)。

osdsinkpad.add_probe(Gst.PadProbeType.BUFFER,

osd_sink_pad_buffer_probe, 0)

注意粗體“osd_sink_pad_buffer_probe”部分,這是代碼中另一個(gè)重點(diǎn),需要自行撰寫(xiě)代碼去執(zhí)行的部分,就是代碼中第41~126行的內(nèi)容,這里面的處理以“幀”為單位(在“while l_frame is not None:”里面),將該幀所檢測(cè)到的物件種類(lèi)進(jìn)行加總,并且將物件根據(jù)種類(lèi)的顏色畫(huà)出框框。

事實(shí)上在這80+行代碼中,真正與數(shù)據(jù)處理相關(guān)的部分,只有20行左右的內(nèi)容,注釋的部分占用不小的篇幅,這是作者為大家提供非常重要的說(shuō)明,只要耐心地去閱讀,就能輕松地掌握里面的要領(lǐng)。

7. 播放并收聽(tīng)事件:這部分就是個(gè)“啟動(dòng)器”,如同汽車(chē)鑰匙“執(zhí)行發(fā)動(dòng)”功能一樣。

# 配置導(dǎo)管狀態(tài)為PLAYING就可以

pipeline.set_state(Gst.State.PLAYING)

try:

loop.run() # 執(zhí)行前面創(chuàng)建的事件循環(huán)

except:

pass

# 執(zhí)行結(jié)束之后,需要清除導(dǎo)管,將狀態(tài)為NULL就可以

pipeline.set_state(Gst.State.NULL)

以上就是建立DeepStream應(yīng)用的標(biāo)準(zhǔn)步驟,可以將“def main(args):”部分的代碼當(dāng)作是個(gè)模板去加以利用。

至于“osd_sink_pad_buffer_probe”函數(shù)的作用,就是從osd接收器提取接收的元數(shù)據(jù),并更新繪圖矩形、對(duì)象信息等的參數(shù),里面的代碼也都是標(biāo)準(zhǔn)內(nèi)容,可以在別的應(yīng)用在重復(fù)套用。更多參數(shù)優(yōu)化的細(xì)節(jié)部分,須花時(shí)間詳細(xì)閱讀DeepStream開(kāi)發(fā)手冊(cè)。

接下來(lái)就實(shí)際執(zhí)行一下Python版本的deepstream-test1代碼,看看效果如何!

執(zhí)行deepstream_test_1.py

前面文章中已經(jīng)將NVIDIA/AI-IOT/deepstream-python-apps項(xiàng)目下載到Jetson Nano 2GB上的《deepstream《 span=“”》根目錄》/sources下面,現(xiàn)在就到這個(gè)目錄下去執(zhí)行

cd《deepstream《 span=“”》根目錄》/sources/deepstream_python_apps/apps

cd deepstream-test1

下面有執(zhí)行文件deepstream_test_1.py、配置文件dstest1_pgie_config.txt與說(shuō)明文件README,這個(gè)配置文件就是步驟3最后“pgie.set_property”里面指定的文件,在執(zhí)行文件里看不到任何與推理模型相關(guān)的內(nèi)容,原來(lái)都放在設(shè)定文件里面去指定了。

關(guān)于設(shè)定文件的參數(shù)設(shè)定部分,是相對(duì)容易了解的,這里不多花時(shí)間說(shuō)明,接下去直接執(zhí)行以下指令看看執(zhí)行結(jié)果:

python3 deepstream_test_1.py 。。/。。/。。/。。/samples/streams/sample_720p.h264

就能跑出我們熟悉的結(jié)果,

如果覺(jué)得左上方顯示的字體太小,請(qǐng)自行改動(dòng)代碼第110行的字體號(hào)數(shù)。字體放大到20號(hào)時(shí)候的顯示結(jié)果,現(xiàn)在就可以看到很清楚了。

到這里,相信您應(yīng)該對(duì)DeepStream代碼有更深層次的了解,在了解整個(gè)框架與工作流程之后,可以發(fā)現(xiàn)要開(kāi)發(fā)一個(gè)基礎(chǔ)應(yīng)用,并不是一件太困難的事情,不過(guò)建議您多反復(fù)閱讀代碼內(nèi)的每一行說(shuō)明,并且自行適度修改些參數(shù)看看效果會(huì)有什么變化,一旦熟悉這些邏輯與交互關(guān)系之后,就會(huì)覺(jué)得DeepStream其實(shí)很簡(jiǎn)單。

編輯:jq

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

    關(guān)注

    8

    文章

    7030

    瀏覽量

    89038
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68616
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84690

原文標(biāo)題:NVIDIA Jetson Nano 2GB 系列文章(35):Python版test1實(shí)戰(zhàn)說(shuō)明

文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    華為云 Flexus X 實(shí)例下的場(chǎng)景體驗(yàn)——小企業(yè)使用 Python 語(yǔ)言——超迅速搭建簡(jiǎn)單公網(wǎng) API 接口服務(wù)

    ,希望本文可以對(duì)小企業(yè)來(lái)說(shuō)有一定的幫助作用。 目錄 前言 環(huán)境說(shuō)明 連接并安裝 Python 環(huán)境 Python Web 接口編碼 上傳 WebAPI 接口代碼 安裝 flask
    的頭像 發(fā)表于 12-27 13:46 ?69次閱讀
    華為云 Flexus X 實(shí)例下的場(chǎng)景體驗(yàn)——小企業(yè)使用 <b class='flag-5'>Python</b> 語(yǔ)言——超迅速搭建簡(jiǎn)單公網(wǎng) API 接口服務(wù)

    ad12dj5200數(shù)據(jù)部分錯(cuò)誤且Transport Layer test有問(wèn)題,怎么解決?

    1、ADC是ADC12DJ5200RF,配置為JMOD1,Transport Layer部分的代碼參考ad12dj3200的示例工程寫(xiě)的,仔細(xì)核對(duì)過(guò)沒(méi)發(fā)現(xiàn)問(wèn)題。 2、JTEST=Ramp test
    發(fā)表于 12-02 08:27

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫(xiě)之test命令

    test命令用于測(cè)試某個(gè)條件是否成立,它可以進(jìn)行數(shù)值、字符和文件三個(gè)方面的測(cè)試。在shell文件中輸入命令,通過(guò)特定的參數(shù)可以對(duì)數(shù)值、字符串進(jìn)行比較,如下參數(shù)及示例。1、數(shù)值比較參數(shù)舉例,在
    發(fā)表于 09-05 09:09

    基于迅為RK3588【RKNPU2項(xiàng)目實(shí)戰(zhàn)1】:YOLOV5實(shí)時(shí)目標(biāo)分類(lèi)

    【RKNPU2項(xiàng)目實(shí)戰(zhàn)1】:YOLOV5實(shí)時(shí)目標(biāo)分類(lèi) https://www.bilibili.com/video/BV1ZN411D7V8/?spm_id_from=333.999.0.0
    發(fā)表于 08-15 10:51

    opa857在test mode下,out端輸出電壓不隨TEST_IN的電壓變化怎么解決?

    原理圖: CTRL(增益控制引腳): logic 0–5kΩ logic 1–20kΩ OPA857有兩種模式:normal mode 和 test mode ,由TEST_SD引腳控制
    發(fā)表于 08-02 07:15

    pytorch和python的關(guān)系是什么

    在當(dāng)今的人工智能領(lǐng)域,Python已經(jīng)成為了最受歡迎的編程語(yǔ)言之一。Python的易學(xué)易用、豐富的庫(kù)和框架以及強(qiáng)大的社區(qū)支持,使其成為了數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域的首選語(yǔ)言。而在深度學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 08-01 15:27 ?1967次閱讀

    opencv-python和opencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發(fā)表于 07-16 10:38 ?1195次閱讀

    python訓(xùn)練出的模型怎么調(diào)用

    Python中,訓(xùn)練出的模型可以通過(guò)多種方式進(jìn)行調(diào)用。 1. 模型保存與加載 在Python中,訓(xùn)練好的模型需要被保存,以便在其他程序或會(huì)話(huà)中使用。以下是一些常用的模型保存和加載方法。 1.1
    的頭像 發(fā)表于 07-11 10:15 ?1954次閱讀

    Espressif-IDE編譯報(bào)錯(cuò)的原因?

    also \"D:/Prj_esp/test/test1/build/CMakeFiles/CMakeOutput.log\". Failed to run Python
    發(fā)表于 06-07 07:34

    Matter最新Test Harness工具使用介紹(二)

    Matter的測(cè)試項(xiàng)根據(jù)聯(lián)盟的TestPlan目前可以分為五類(lèi):全自動(dòng)測(cè)試項(xiàng),半自動(dòng)測(cè)試項(xiàng),手動(dòng)測(cè)試項(xiàng),Python in docker測(cè)試項(xiàng)以及UI Python測(cè)試項(xiàng)。
    的頭像 發(fā)表于 05-08 10:42 ?2181次閱讀
    Matter最新<b class='flag-5'>Test</b> Harness工具使用介紹(二)

    ELF 1技術(shù)貼|如何將Python3.6.9移植到開(kāi)發(fā)板上

    在ELF1開(kāi)發(fā)板的Linux4.1.15eMMC鏡像中,默認(rèn)預(yù)裝了Python2.7。為了適應(yīng)更多應(yīng)用場(chǎng)景,有些小伙伴可能需要移植其他版本的Python,下面將以Python3.6.9
    的頭像 發(fā)表于 02-22 14:06 ?433次閱讀
    ELF <b class='flag-5'>1</b>技術(shù)貼|如何將<b class='flag-5'>Python</b>3.6.9移植到開(kāi)發(fā)板上

    python中open函數(shù)的用法詳解

    python中open函數(shù)的用法詳解 Python中的open()函數(shù)用于打開(kāi)文件。它接受文件名和模式作為參數(shù),并返回一個(gè)文件對(duì)象。文件對(duì)象可用于讀取、寫(xiě)入和管理文件。 open()函數(shù)的基本語(yǔ)法
    的頭像 發(fā)表于 01-30 15:31 ?2128次閱讀

    嵌入式學(xué)習(xí)-ElfBoard ELF 1板卡-移植python3.6.9

    。本篇文章以python3.6.9為例,在網(wǎng)址下載Python-3.6.9.tar.xz壓縮文件。1.拷貝Python-3.6.9.tar.xz到開(kāi)發(fā)環(huán)境/home/elf/work目
    發(fā)表于 01-24 16:50

    如何解決Python爬蟲(chóng)中文亂碼問(wèn)題?Python爬蟲(chóng)中文亂碼的解決方法

    Python爬蟲(chóng)中文亂碼問(wèn)題。 一、了解字符編碼 在解決亂碼問(wèn)題之前,我們首先需要了解一些基本的字符編碼知識(shí)。常見(jiàn)的字符編碼有ASCII、UTF-8和GBK等。 1. ASCII:是一種用于表示英文字母、數(shù)字和常用符號(hào)的字符編碼,它使用一個(gè)字節(jié)(8位)來(lái)表示一個(gè)字符。
    的頭像 發(fā)表于 01-12 15:11 ?2400次閱讀

    【核桃派1B 開(kāi)發(fā)板試用體驗(yàn)】+ Python編程篇

    在核桃派開(kāi)發(fā)板其系統(tǒng)配置了Python軟件,通過(guò)它完成編寫(xiě)和運(yùn)行Python代碼。 在使用Python時(shí),可分為2種情況,即一種是通過(guò)?終端來(lái)操作,它適用于無(wú)桌面操作系統(tǒng)的環(huán)境,見(jiàn)圖1
    發(fā)表于 01-03 22:08
    主站蜘蛛池模板: 在线女同免费观看网站| 玖玖福利| 222在线视频免费观看| 99热最新| 欧美干色| 神马午夜限制| 久久精品国产99国产精品澳门 | 5278欧美一区| 亚洲狠狠操| 福利社藏经阁| 欧美人与zoxxxx视频| 色天使视频| 亚洲第一视频在线观看| 中文字幕av一区二区三区| 人人人人澡| 人人爱干| 亚洲一卡二卡在线| 不卡一区二区在线观看| 日本xxxx18vr69| 日韩怡红院| 手机看片1024手机在线观看| 看a网站| 久久精品高清视频| 成人黄色在线网站| 四虎免费永久观看| 天天澡天天摸天天添视频| 热99热| 国产色噜噜| 国产操比视频| 口述他拿舌头进去我下面好爽| 国产性夜夜春夜夜爽| 五月天婷婷色| 五月天婷婷视频在线观看| 九九re热| a理论片| 男女全黄做爰视频| 国产精品黄网站免费进入| 69日本xxxhd| 激情六月天婷婷| 在线观看日本亚洲一区| 美女黄18|