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

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

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

3天內不再提示

Python版test1實戰(zhàn)說明

NVIDIA英偉達企業(yè)解決方案 ? 來源:NVIDIA英偉達中國 ? 作者:NVIDIA英偉達中國 ? 2021-10-09 14:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

前面文章中已經簡單提過 DeepStream 所用到的插件內容,但那只是整個框架中非?;A的一小部分,本文要用代碼開始解說范例的時候,還是得將 Gstreamer 一些重要構成元素之間的關系說明清楚,這樣才能讓大家在代碼過程得以一目了然。

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

首先 filesrc 數據源元件負責從磁盤上讀取視頻數據

h264parse 解析器元件負責對數據進行解析

nvv4l2decoder 編碼器元件負責對數據進行解碼

nvstreammux 流多路復用器元件負責批處理幀以實現最佳推理性能

nvinfer 推理元件負責實現加速推理

nvvideoconvert 轉換器元件負責將數據格式轉換為輸出顯示支持的格式

nvdsosd 可視化元件負責將邊框與文本等信息繪制到圖像中

nvegltransform 渲染元件和 nveglglessink 接收器元件負責輸出到屏幕上

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

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

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

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

GObject.threads_init()

# 標準GStreamer初始化

Gst.init(None)

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

pipeline = Gst.Pipeline()

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

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

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

# 建立“源”元素負責從文件讀入數據

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

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

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

# 調用NVIDIA的nvdec_h264硬件解碼器

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

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

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

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

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

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

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

# 根據nvosd的要求,使用轉換器將NV12轉換為RGBA

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

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

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

# 最后將osd的繪制,進行渲染后在屏幕上顯示結果

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

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

3. 配置元件的參數:

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

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

# 設定流復用器的尺寸、數量

streammux.set_property(‘width’, 1920)

streammux.set_property(‘height’, 1080)

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

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

# 設定pgie的配置文件

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

4. 將元件添加到導管之中:用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. 將元件按照要求連接起來:本范例的管道流為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

# 下面粗線的三行,是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個步驟都是比較靜態(tài)的固定步驟,只要將想開發(fā)的應用所需要的插件元件進行“創(chuàng)建”、“給值”、“連接”就可以。

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

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

loop = GObject.MainLoop()

bus = pipeline.get_bus()

bus.add_signal_watch()

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

# 用osdsinkpad來確認nvosd插件是否獲得輸入

osdsinkpad = nvosd.get_static_pad(“sink”)

# 添加探針(probe)以獲得生成的元數據的通知,我們將probe添加到osd元素的接收器板中,因為到那時,緩沖區(qū)將具有已經得到了所有的元數據。

osdsinkpad.add_probe(Gst.PadProbeType.BUFFER,

osd_sink_pad_buffer_probe, 0)

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

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

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

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

pipeline.set_state(Gst.State.PLAYING)

try:

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

except:

pass

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

pipeline.set_state(Gst.State.NULL)

以上就是建立DeepStream應用的標準步驟,可以將“def main(args):”部分的代碼當作是個模板去加以利用。

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

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

執(zhí)行deepstream_test_1.py

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

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

cd deepstream-test1

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

關于設定文件的參數設定部分,是相對容易了解的,這里不多花時間說明,接下去直接執(zhí)行以下指令看看執(zhí)行結果:

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

就能跑出我們熟悉的結果,

如果覺得左上方顯示的字體太小,請自行改動代碼第110行的字體號數。字體放大到20號時候的顯示結果,現在就可以看到很清楚了。

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

編輯:jq

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

    關注

    8

    文章

    7340

    瀏覽量

    94887
  • 代碼
    +關注

    關注

    30

    文章

    4972

    瀏覽量

    74116
  • python
    +關注

    關注

    58

    文章

    4879

    瀏覽量

    90151

原文標題:NVIDIA Jetson Nano 2GB 系列文章(35):Python版test1實戰(zhàn)說明

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RK3562 單板機 Linux 應用開發(fā)實戰(zhàn)手冊:LED/CAN/TCP/UART 案例與 Python 開發(fā)(二)

    本文為創(chuàng)龍科技RK3562 單板機應用開發(fā)指南,核心包含交叉編譯工具鏈部署、GDB 遠程調試,以及 LED、CAN、TCP/UDP、MQTT 等實戰(zhàn)案例。文檔支持 C/C++ 與 Python 雙語
    的頭像 發(fā)表于 02-25 11:35 ?736次閱讀
    RK3562 單板機 Linux 應用開發(fā)<b class='flag-5'>實戰(zhàn)</b>手冊:LED/CAN/TCP/UART 案例與 <b class='flag-5'>Python</b> 開發(fā)(二)

    1688 商品詳情 API 調用與數據解析 Python 實戰(zhàn)

    你想要的是 1688 商品詳情 API 的 Python 調用與數據解析實戰(zhàn)方案,核心是完成 API 憑證配置、接口請求(含簽名)、響應數據解析、異常處理 的全流程落地,我會提供可直接運行的代碼,并
    的頭像 發(fā)表于 02-10 11:23 ?290次閱讀

    DR1平臺Linux應用開發(fā)指南:含GDB調試、Python及MQTT實戰(zhàn)

    流程,以及 LED、按鍵、CAN、TCP/UDP、串口等常用開發(fā)案例,同時覆蓋 Python 腳本開發(fā)與 MQTT 消息發(fā)布 / 訂閱實戰(zhàn)。文檔基于 Ubuntu22.04
    的頭像 發(fā)表于 01-05 16:48 ?4641次閱讀
    DR<b class='flag-5'>1</b>平臺Linux應用開發(fā)指南:含GDB調試、<b class='flag-5'>Python</b>及MQTT<b class='flag-5'>實戰(zhàn)</b>

    京東關鍵詞搜索商品列表的Python爬蟲實戰(zhàn)

    京東關鍵詞搜索商品列表 Python 爬蟲實戰(zhàn) 你想要實現京東關鍵詞搜索商品的爬蟲,我會從 合規(guī)聲明、環(huán)境準備、頁面分析、代碼實現、反爬優(yōu)化 五個方面展開,幫助你完成實戰(zhàn)項目。 一、前置聲明(重要
    的頭像 發(fā)表于 01-04 10:16 ?876次閱讀

    Linux中13個基本Cat命令示例

    test1終端中的文件。 # cat test test1 Hello everybody Hi world, 3、用 cat 命令創(chuàng)建文件 我們將創(chuàng)建一個名為test2帶有以下
    發(fā)表于 12-26 06:09

    C語言全局變量重點使用

    如下: int f(void); int g(void); int errs; void test1(void) { errs += f(); errs += g(); } void
    發(fā)表于 12-12 06:58

    Termux中調試圣誕樹Python代碼

    python --version 如果輸出Python 3.x.x(比如3.11.4),說明安裝成功。 二、代碼編寫(兩種方式可選) 方式1:用Termux自帶編輯器(nano
    發(fā)表于 12-09 09:02

    LABVIEW 2023 Q1調用python后一直報錯1671

    LABVIEW 2023Q1調用python后一直報錯1671報錯信息:PythonNode_AddTwoDoubles.vi中的打開Python會話Python returned
    發(fā)表于 11-12 09:51

    Python 給 Amazon 做“全身 CT”——可量產、可擴展的商品詳情爬蟲實戰(zhàn)

    一、技術選型:為什么選 Python 而不是 Java? 結論: “調研階段用 Python,上線后如果 QPS 爆表再考慮 Java 重構。” 二、整體架構速覽(3 分鐘看懂) 三、開發(fā)前準備(5
    的頭像 發(fā)表于 10-21 16:59 ?551次閱讀
    用 <b class='flag-5'>Python</b> 給 Amazon 做“全身 CT”——可量產、可擴展的商品詳情爬蟲<b class='flag-5'>實戰(zhàn)</b>

    淘寶商品詳情接口(item_get)企業(yè)級全解析:參數配置、簽名機制與 Python 代碼實戰(zhàn)

    本文詳解淘寶開放平臺taobao.item_get接口對接全流程,涵蓋參數配置、MD5簽名生成、Python企業(yè)級代碼實現及高頻問題排查,提供可落地的實戰(zhàn)方案,助你高效穩(wěn)定獲取商品數據。
    的頭像 發(fā)表于 09-26 09:13 ?945次閱讀
    淘寶商品詳情接口(item_get)企業(yè)級全解析:參數配置、簽名機制與 <b class='flag-5'>Python</b> 代碼<b class='flag-5'>實戰(zhàn)</b>

    孔夫子舊書網開放平臺接口實戰(zhàn):古籍圖書檢索與商鋪數據集成

    本文詳解孔夫子舊書網古籍數據接口的實戰(zhàn)調用,涵蓋認證簽名、古籍檢索、商鋪集成與特色數據處理四大場景,提供可復用的Python代碼及避坑指南,助力學術研究、舊書商管理與古籍數字化落地。
    的頭像 發(fā)表于 09-23 13:59 ?787次閱讀

    深圳站報名火熱進行中!睿擎工業(yè)平臺線下實戰(zhàn) Workshop,親手實戰(zhàn)4小時解鎖工業(yè)級開發(fā)!|活動預告

    想一站式實戰(zhàn)QT圖形開發(fā)、EtherCAT通信、RPMSG多核交互?睿擎工業(yè)平臺深度實戰(zhàn)Workshop深圳站報名火熱進行中!這是一場專為工業(yè)開發(fā)者打造的沉浸式實戰(zhàn)體驗,4小時高強度實戰(zhàn)
    的頭像 發(fā)表于 09-14 10:04 ?1320次閱讀
    深圳站報名火熱進行中!睿擎工業(yè)平臺線下<b class='flag-5'>實戰(zhàn)</b> Workshop,親手<b class='flag-5'>實戰(zhàn)</b>4小時解鎖工業(yè)級開發(fā)!|活動預告

    termux如何搭建python游戲

    模擬器,支持通過APT包管理器安裝軟件。搭建Python游戲開發(fā)環(huán)境前需完成以下基礎配置: 1. 更換國內源 為提升下載速度,需替換Termux默認源為清華源,執(zhí)行以下命令: ```bash
    發(fā)表于 08-29 07:06

    【創(chuàng)龍TL3562-MiniEVM開發(fā)板試用體驗】7、python測試

    )) # 刷新窗口 pygame.display.flip() time.sleep(5) sys.exit() python lcd_test1.py
    發(fā)表于 08-05 11:09

    目前Mirco Python sdk觸摸到底支持什么驅動啊 ?

    目前的Mirco Python sdk觸摸到底支持什么驅動啊 能不能有資料詳細說明 GT911 觸摸驅動是否支持啊
    發(fā)表于 06-24 07:02