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

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

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

3天內不再提示

什么是CMUX?為什么使用CMUX?

RTThread物聯網操作系統 ? 來源:RTThread物聯網操作系統 ? 2020-06-03 11:22 ? 次閱讀

1. 什么是 CMUX

CMUX( Connection Multiplexing ),即連接(串口)多路復用,其功能主要在一個真實的物理通道上虛擬多個通道,每個虛擬通道上的連接和數據通訊可獨立進行。

CMUX 的設計需求來自于蜂窩模塊:蜂窩模塊作為一種基礎通信模塊,設計時就有電話,短信,上網等需求,但通常模塊上的片上外設資源比較少,于是 GSMMUX 應運而生。

GSM0707/GSM0710 協議提供了解決問題的方法,在同一個串口上同時傳輸 AT, PPP, MODEM 等數據而互不干擾,也就是可以傳輸電話,上網,短信等數據。

2. 為什么使用 CMUX

GSMMUX 可以解決在一個串口上與蜂窩模塊通信傳輸多種數據的場景,那 CMUX 就同樣可以解決在兩個 CMUX 上只使用一個物理串口傳輸多種 APP 數據的使用場景。

這就是我們 CMUX 軟件包推出的目的,一方面可以兼容 GSMMUX ,實現 PPP 與 AT 模式同時進行,解決之前 PPP 數據單獨占用物理串口,而無法實時查詢模塊狀態的問題;另一方面,也可以由兩塊 MCU 在搭載 CMUX 的情況下僅使用一個物理串口實現多種傳輸場景的需求。

3. 軟件包介紹

3.1 框架圖

CMUX 是一種類似于傳輸層的協議,用戶使用時無法感知該層;數據傳輸依賴一個真實串口傳輸,cmux 層負責解析數據用以分發到不同的 virtual uart ;從而實現一個真實串口虛擬出多個 UART 的目的

CMUX 在應用場景中多用于 UART, 如有必要也可以支持 SPI 方式

3.2 功能介紹

支持所有基于 GSM0707 / GSM0710 協議的蜂窩模塊

兼容 PPP_DEVICE 軟件包,實現 CMUX+PPP 場景,在一個串口上同時傳輸 AT 命令與 PPP 數據;解決PPP 通信獨占一個物理串口的問題

CMUX 的 GSM 功能已經在 Luat Air720, SIM7600, SIM800C 模塊測試通過

支持通過一個真實串口虛擬出多個串口

CMUX 協議限制,理論上一個物理串口最多可以虛擬出 63 個虛擬串口

虛擬出的串口使用與真實串口一致,擁有 open,write,read 操作,設置 rx_indicate 接收回調

兩方的 MCU 接收時要注意 DLCI ( Data Link Connection Identifier ) 數據鏈路連接接標識,相同的 DLCI 才可以互相正常通信

低資源占用

使用 GSM 支持時,對 PPP_DEVICE 軟件包同時開啟的情況,做了一些處理,以節省 ROM 資源占用。

因為解析出的數據,掛載在不同虛擬端口的鏈表上,理論上占用 RAM 的大小只與鏈表上數據個數與長度相關,1.57 K 是在 CMUX + PPP 環境下測出。

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

    關注

    0

    文章

    46

    瀏覽量

    12162
  • 蜂窩模塊
    +關注

    關注

    0

    文章

    7

    瀏覽量

    3462

原文標題:CMUX 軟件包發布 | 不一樣的串口復用

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    國家專項新政落地!虛擬電廠獲千億級市場“通行證”

    電子發燒友網綜合報道 虛擬電廠作為電力系統中的新型運行組織模式,在新型電力系統建設和電力市場發展的進程中扮演著愈發關鍵的角色。隨著新能源的大規模接入,電力系統面臨著調節壓力增大、供需匹配難度提升等挑戰,而虛擬電廠通過聚合分布式電源、可調節負荷、儲能等分散資源,以系統化、智能化的方式參與電力系統優化和市場交易,為解決這些問題提供了創新思路與有效途徑。 ? 從定義與功能定位來看,虛擬電廠并非傳統意義上的實體
    的頭像 發表于 06-22 00:03 ?891次閱讀

    技術創新+產業鏈優勢!國產割草機器人走向海外

    電子發燒友網綜合報道 在自動化作業和高質量生活需求的推動下,割草機器人市場迎來發展機遇。歐美地區因草坪文化盛行,對割草機器人需求旺盛,全球割草機市場規模不斷擴大。根據市場研究數據,2024 年全球割草機器人市場規模已達22億美元,預計到2029 年,這一數字有望增長至39億美元,年復合增長率達11.5%。 ? 從競爭格局來看,行業呈現多元化態勢。國際品牌如Husqvarna、GARDENA等憑借先發優勢占據一定市場份額,但中國企業正以技術創新和成本控
    的頭像 發表于 06-22 00:02 ?1031次閱讀

    美國造車新勢力Rivian,下一代車型將使用英飛凌功率模塊

    電子發燒友網綜合報道 近期英飛凌宣布,將為Rivian的R2平臺提供適用于牽引逆變器的功率模塊。R2平臺將使用英飛凌HybridPACK Drive G2產品系列的碳化硅(SiC)和硅(Si)模塊。英飛凌預計將從2026年開始供貨。此外,英飛凌還將為該平臺提供其他產品,包括AURIX ?TC3x微控制器和電源管理IC。 ? HybridPACK Drive是英飛凌面向電動汽車的市場領先功率模塊系列。自2017年以來,該系列產品銷量已突破1050萬件,為電動化轉型作出了重要貢獻。這一轉型將推動功率半導體
    的頭像 發表于 06-22 00:02 ?804次閱讀

    永磁同步電機啟動裝置詳解

    永磁同步電機(PMSM)作為現代工業與新能源汽車領域的核心動力部件,其啟動性能直接影響系統效率與可靠性。本文將從工作原理、關鍵技術、應用場景及未來趨勢四個維度,全面解析永磁同步電機啟動裝置的技術奧秘。 一、工作原理:磁場與電流的精密協同 永磁同步電機的啟動過程本質上是轉子永磁場與定子旋轉磁場建立同步的過程。與傳統異步電機不同,PMSM轉子的永磁體在靜止時已產生恒定磁場,這要求啟動裝置必須解決兩大核心問題:初始位置
    的頭像 發表于 06-21 17:40 ?59次閱讀

    如何實現PC對多臺TD3000變頻器的實時監控?

    在工業自動化控制系統中,變頻器作為電機調速的核心設備,其運行狀態的實時監控至關重要。TD3000系列變頻器以其穩定性和可靠性廣泛應用于各類工業場景。本文將詳細介紹如何通過PC實現對多臺TD3000變頻器的集中監控方案,涵蓋硬件連接、通信協議配置、監控軟件設計等關鍵環節。 一、系統架構設計 1. 硬件連接方案 實現PC對多臺TD3000變頻器的監控,首先需要建立可靠的物理連接。推薦采用RS485總線架構,這是工業領域成熟的組網方案: 通信介質:使
    的頭像 發表于 06-21 17:40 ?81次閱讀
    如何實現PC對多臺TD3000變頻器的實時監控?

    1553B總線常見三種組網方式

    1553B總線作為航空電子系統中的關鍵通信協議,其組網方式直接影響系統的可靠性和實時性。本文將深入解析1553B總線的三種典型組網結構:單總線結構、雙冗余總線和多總線分層架構,并結合實際應用場景分析其技術特點與選型策略。 一、單總線結構:基礎架構與成本優勢 單總線是1553B系統最簡單的組網形式,由一條主干總線連接所有終端設備(最多31個遠程終端RT),通過總線控制器(BC)集中管理通信。這種結構的核心優勢在于硬件成本低、布線簡
    的頭像 發表于 06-21 17:39 ?57次閱讀
    1553B總線常見三種組網方式

    重新定義具身觸覺感知,專注柔性纖維傳感器的「矩僑工業」獲數千萬元Pre-A輪融

    威海矩僑工業科技有限公司(以下簡稱「矩僑工業」)宣布完成數千萬元 Pre-A 輪融資。投資方為金慧豐投資、教育科技集團戰略方、青島和信。本輪融資將主要用于觸覺及機器人皮膚研發迭代、增擴產線交付以及市場推廣。截止目前,「矩僑工業」已完成兩輪融資,并開啟新一輪融資,進一步推動機器人觸覺產品研發及推廣,多維資本擔任本輪及長期獨家戰略財務顧問。 「矩僑工業」成立于 2024 年初,是一家專注于柔性纖維傳感器的研發與生產的公司
    的頭像 發表于 06-21 16:57 ?75次閱讀
    重新定義具身觸覺感知,專注柔性纖維傳感器的「矩僑工業」獲數千萬元Pre-A輪融

    中國農業科學院北京畜牧獸醫研究所:研究基于卟啉和半導體單壁碳納米管的場效應氣體傳感器檢測草莓惡疫

    ? ? 惡疫霉(Phytophthora cactorum, P. cactorum)是一種壞性極強的植物病原真菌,草莓植株感染惡疫霉會引起革腐病和冠腐病。統計表明,感染惡疫霉草莓植株果實產量平均下降20%~30%,部分可達50%,嚴重影響草莓果實產量。因此,惡疫霉已成為草莓產業發展的主要病害。 由于草莓惡疫霉缺乏低成本的治療手段,快速準確診斷該病原真菌對預防由其引起的疾病擴散、控制疾病、減少種植戶的損失具有重要意義。目前,常規的診斷方法有組織分離法、顯微鏡分
    的頭像 發表于 06-21 16:57 ?54次閱讀
    中國農業科學院北京畜牧獸醫研究所:研究基于卟啉和半導體單壁碳納米管的場效應氣體傳感器檢測草莓惡疫

    中國MEMS芯片第一股:打造國產MEMS供應鏈,國際沖突無影響

    近日,“中國MEMS傳感器芯片第一股”敏芯股份發布投資者互動關系記錄表,回應關稅等近期熱門問題: 1、美國本次加征關稅對公司的經營業績和供應鏈安全帶來什么樣的影響? 答:目前公司的客戶結構中,大陸之外的客戶銷售占比很小,下游終端市場應用較為分散,基本上沒有直接銷售產品到美國本土的業務。關稅政策對公司業績產生的直接影響微乎其微。從公司供應鏈安全的角度來看,公司一直致力于 MEMS 傳感器全產業鏈研發和全生產環節國產化,
    的頭像 發表于 06-21 16:56 ?60次閱讀

    電動機空載電流平衡,但數值大的原因及修復

    電動機空載電流平衡但數值偏大是電氣設備運行中常見的異常現象,其背后可能涉及多種因素的綜合作用。以下從原因分析、診斷方法和修復措施三個層面展開詳細探討,并結合實際案例說明處理流程。 一、空載電流偏大的核心原因 1. 磁路設計異常 電動機定轉子間的氣隙若因制造誤差或裝配不當超出標準值(通常小型電機氣隙應控制在0.25-0.35mm),會導致磁阻增大。根據磁路歐姆定律,為維持相同磁通量,勵磁電流需相應增加。某紡織廠案例顯示,當
    的頭像 發表于 06-21 16:55 ?40次閱讀
    電動機空載電流平衡,但數值大的原因及修復

    變頻器無法正常控制負載原因及解決

    變頻器無法正常控制負載的原因可能涉及多個方面,以下是一些常見的原因及相應的解決方法: 一、原因分析 1. 控制信號損壞或錯誤 控制信號是變頻器與電機之間溝通的橋梁,如果信號在傳輸過程中受到干擾或丟失,變頻器就無法準確地接收并執行控制指令。常見表現如PLC輸出的啟動信號或速度調節信號異常,變頻器無法正確響應,導致負載無法按預期運行。 2. 電機主回路故障 電機主回路包括變頻器輸出端到電機之間所有的電氣連接,如果出現接線
    的頭像 發表于 06-21 16:54 ?43次閱讀
    變頻器無法正常控制負載原因及解決

    第三屆大會回顧第3期 | FFRT并發框架在OpenHarmony中的設計與實踐

    演講嘉賓 | 黃佑鐘 回顧整理 | 廖 ? 濤 排版校對 | 宋夕明 嘉賓介紹 開發框架分論壇? 黃佑鐘 ,海思Kirin解決方案并行與異構計算專家。 正文內容 多任務并發能更有效地利用CPU資源,特別是在多核處理器上,可以顯著提高程序的運行速度和整體性能,從而改善用戶體驗。OpenHarmony的FFRT并發編程模型為開發者提供了構建異步并發任務的能力,以更高效地開發和管理并發任務。FFRT是如何設計與實現的,有哪些重要特性?海思Kirin解決方案并行與異構計算專家
    的頭像 發表于 06-21 16:53 ?51次閱讀
    第三屆大會回顧第3期 | FFRT并發框架在OpenHarmony中的設計與實踐

    【HarmonyOS 5】桌面快捷方式功能實現詳解

    【HarmonyOS 5】桌面快捷方式功能實現詳解 ##鴻蒙開發能力 ##HarmonyOS SDK應用服務##鴻蒙金融類應用 (金融理財# 一、前言 在移動應用開發中,如何讓用戶快速觸達核心功能,是目前很常見的功能之一。 鴻蒙系統提供的**桌面快捷方式(Shortcuts)**功能,允許開發者為應用內常用功能創建直達入口,用戶通過長按應用圖標即可快速啟動特定功能,大幅減少操作層級。 本文將結合地圖導航場景,詳細解析鴻蒙快捷方式的實現原理與開發流程。結合華為官方開源
    的頭像 發表于 06-21 16:42 ?51次閱讀
    【HarmonyOS 5】桌面快捷方式功能實現詳解

    同質化的GPU云市場,誰能逃離內卷?

    真正的技術領導者,將贏下這場AI算力革命的主導權
    的頭像 發表于 06-21 16:41 ?133次閱讀
    同質化的GPU云市場,誰能逃離內卷?

    【正點原子STM32MP257開發板試用】基于 YOLO 模型的物體識別

    【正點原子STM32MP257開發板試用】基于 YOLO 模型的物體識別 本文介紹了正點原子 STM32MP257 開發板基于 YOLO-v5 模型實現物體識別的項目設計。 項目介紹 YOLO 模型介紹; 官方 Demo 測試; 動態識別:加載 USB 攝像頭實現動態畫面的物體識別,結果顯示在板載LCD屏; 靜態識別:通過加載本地圖片并執行板端推理實現靜態圖片的識別,結果保存至本地路徑。 YOLO 模型 YOLOv5 是 YOLO 目標檢測算法系列的版本之一。作為計算機視覺領域的重要進展,YOLOv5 在目標檢測方面取得了顯著的性能提升。 與之前的版本相比,YOLOv5 采用了單階段檢測策略,通過一次前向傳播即可實現物體的定位和分類。它引入了 CSPDarknet53 架構作為基礎網絡,以提取豐富的特征信息,從而有效地增強了檢測的準確性。 YOLOv5 還在多尺度檢測上做出了改進,能夠檢測不同尺度的目標,從小物體到大物體。這在處理多樣化場景時表現出色。 此外,數據增強技術也被廣泛應用,通過隨機裁剪、顏色變換等方式增加了訓練數據的多樣性,提升了模型的泛化能力。 在計算效率方面,YOLOv5 在保持高檢測性能的同時,優化了模型的大小和速度,適用于嵌入式設備、移動端以及實時應用。其開源性質使得研究人員和開發者可以自由訪問代碼和預訓練模型,進行研究和定制。 總之,YOLOv5 通過單階段檢測、高效網絡架構、多尺度策略和數據增強等技術,極大地提升了目標檢測的性能。它在計算機視覺、自動駕駛、安防監控等領域具有廣泛的應用前景,為實時目標檢測任務帶來了新的解決方案。 YOLOv5 模型詳見: ultralytics/yolov5 . 模型檢測 Demo 下載例程并解壓,路徑為 01、程序源碼/05、AI例程源碼/07、yolov5n_weston/atk_yolov5_weston_demo.zip ; 該 Demo 例程使用 python 語言,因此將解壓后的 python 程序和模型等文件傳輸至開發板; 進入例程可執行文件對應目錄,終端執行如下指令 cd atk_yolov5_weston_demo/ python3 atk_yolov5_weston.py -m yolov5n-uint.nb 將目標識別物體置于攝像頭前,即可在屏幕上顯示識別結果、包括物體外框、推理時間以及置信度等信息。 動態識別 介紹了使用 USB 攝像頭獲取動態畫面并進行推理,進而實現物體識別的主要流程。 流程圖 代碼 終端執行指令 touch object_yolov5_camera.py 新建 python 程序文件,添加如下代碼 import argparse from yolov5_pp import NeuralNetwork import cv2 # YOLOv5的80個類別標簽 CLASS_NAMES = [ \"person\", \"bicycle\", \"car\", \"motorcycle\", \"airplane\", \"bus\", \"train\", \"truck\", \"boat\", \"traffic light\", \"fire hydrant\", \"stop sign\", \"parking meter\", \"bench\", \"bird\", \"cat\", \"dog\", \"horse\", \"sheep\", \"cow\", \"elephant\", \"bear\", \"zebra\", \"giraffe\", \"backpack\", \"umbrella\", \"handbag\", \"tie\", \"suitcase\", \"frisbee\", \"skis\", \"snowboard\", \"sports ball\", \"kite\", \"baseball bat\", \"baseball glove\", \"skateboard\", \"surfboard\", \"tennis racket\", \"bottle\", \"wine glass\", \"cup\", \"fork\", \"knife\", \"spoon\", \"bowl\", \"banana\", \"apple\", \"sandwich\", \"orange\", \"broccoli\", \"carrot\", \"hot dog\", \"pizza\", \"donut\", \"cake\", \"chair\", \"couch\", \"potted plant\", \"bed\", \"dining table\", \"toilet\", \"tv\", \"laptop\", \"mouse\", \"remote\", \"keyboard\", \"cell phone\", \"microwave\", \"oven\", \"toaster\", \"sink\", \"refrigerator\", \"book\", \"clock\", \"vase\", \"scissors\", \"teddy bear\", \"hair drier\", \"toothbrush\" ] def main(): # 參數解析 parser = argparse.ArgumentParser() parser.add_argument(\"-m\", \"--model_file\", required=True, help=\"Path to YOLOv5 model file\") args = parser.parse_args() # 初始化神經網絡 nn = NeuralNetwork( model_file=args.model_file, score_threshold=0.45, iou_threshold=0.5 ) # 攝像頭初始化 cap = cv2.VideoCapture(\"/dev/video7\") if not cap.isOpened(): print(\"無法打開攝像頭\") return try: while True: ret, frame = cap.read() if not ret: break # 預處理 input_img = cv2.resize(frame, (nn.width, nn.height)) input_img = cv2.cvtColor(input_img, cv2.COLOR_BGR2RGB) # 執行推理 nn.launch_inference(input_img) detections = nn.get_results() # 繪制結果 for det in detections: x, y, w, h, score, cls_id = det x1, y1 = int(x * frame.shape[1]), int(y * frame.shape[0]) x2, y2 = int((x + w) * frame.shape[1]), int((y + h) * frame.shape[0]) # 獲取類別名稱 class_name = CLASS_NAMES[int(cls_id)] if int(cls_id) < len(CLASS_NAMES) else str(cls_id) label = f\"{class_name}: {score:.2f}\" # 繪制邊界框和標簽 cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(frame, label, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) # 顯示結果 cv2.imshow(\"YOLOv5 Detection\", frame) if cv2.waitKey(1) & 0xFF == ord(\'q\'): break finally: cap.release() cv2.destroyAllWindows() if __name__ == \"__main__\": main() 終端執行指令 touch yolov5_pp.py 新建 python 程序文件,添加如下代碼 from stai_mpu import stai_mpu_network import numpy as np class NeuralNetwork: def __init__(self, model_file, score_threshold=0.45, iou_threshold=0.5): \"\"\"初始化YOLOv5模型\"\"\" self.model = stai_mpu_network(model_path=model_file) self.score_thres = score_threshold self.iou_thres = iou_threshold # 獲取模型輸入輸出信息 input_info = self.model.get_input_infos()[0] self.input_shape = input_info.get_shape()# (C,H,W)格式 self.height, self.width = self.input_shape[1], self.input_shape[2] # 輸出處理參數(根據實際模型調整) self.output_scale = 0.005922 self.output_zero_point = 3 def get_img_size(self): \"\"\"返回模型輸入尺寸 (width, height, channels)\"\"\" return (self.width, self.height, self.input_shape[0]) def launch_inference(self, img): \"\"\"執行推理\"\"\" input_data = np.expand_dims(img, axis=0)# 添加batch維度 self.model.set_input(0, input_data) self.model.run() def get_results(self): \"\"\"獲取并后處理檢測結果\"\"\" # 獲取原始輸出并反量化 raw_output = self.model.get_output(0)[0] pred = (raw_output - self.output_zero_point) * self.output_scale # 提取邊界框、置信度和類別 boxes = pred[:, :4]# [x_center, y_center, width, height] conf = pred[:, 4]# 物體置信度 cls_probs = pred[:, 5:]# 類別概率 # 合并分數并過濾低置信度檢測 class_ids = np.argmax(cls_probs, axis=1) scores = conf * cls_probs[np.arange(len(cls_probs)), class_ids] mask = scores > self.score_thres if not np.any(mask): return [] boxes, scores, class_ids = boxes[mask], scores[mask], class_ids[mask] # 轉換框格式 (center -> corner) 并執行NMS boxes[:, :2] -= boxes[:, 2:] / 2# xywh to xyxy keep = self.nms(boxes, scores) return np.column_stack([boxes[keep], scores[keep], class_ids[keep]]).tolist() def nms(self, boxes, scores): \"\"\"簡化的非極大值抑制\"\"\" x1, y1 = boxes[:, 0], boxes[:, 1] x2, y2 = boxes[:, 0] + boxes[:, 2], boxes[:, 1] + boxes[:, 3] areas = (x2 - x1) * (y2 - y1) order = scores.argsort()[::-1] keep = [] while order.size > 0: i = order[0] keep.append(i) xx1 = np.maximum(x1[i], x1[order[1:]]) yy1 = np.maximum(y1[i], y1[order[1:]]) xx2 = np.minimum(x2[i], x2[order[1:]]) yy2 = np.minimum(y2[i], y2[order[1:]]) w, h = np.maximum(0, xx2 - xx1), np.maximum(0, yy2 - yy1) iou = (w * h) / (areas[i] + areas[order[1:]] - w * h) order = order[np.where(iou <= self.iou_thres)[0] + 1] return keep 連接 USB 攝像頭,終端執行指令 python3 object_yolov5_camera.py -m yolov5n-uint.nb ; 開啟攝像頭并運行畫面采集、物體識別推理和識別結果顯示等。 效果 動態效果見頂部視頻。 靜態識別 介紹了通過對本地圖片的 板端推理 實現物體識別的主要流程。 流程圖 代碼 終端執行指令 touch yolov5_inference.py 新建 python 程序文件,添加如下代碼 代碼中調用了前面動態識別建立的 yolov5_pp.py 文件 import argparse import cv2 import os from yolov5_pp import NeuralNetwork # YOLOv5的80個類別標簽 CLASS_NAMES = [ \"person\", \"bicycle\", \"car\", \"motorcycle\", \"airplane\", \"bus\", \"train\", \"truck\", \"boat\", \"traffic light\", \"fire hydrant\", \"stop sign\", \"parking meter\", \"bench\", \"bird\", \"cat\", \"dog\", \"horse\", \"sheep\", \"cow\", \"elephant\", \"bear\", \"zebra\", \"giraffe\", \"backpack\", \"umbrella\", \"handbag\", \"tie\", \"suitcase\", \"frisbee\", \"skis\", \"snowboard\", \"sports ball\", \"kite\", \"baseball bat\", \"baseball glove\", \"skateboard\", \"surfboard\", \"tennis racket\", \"bottle\", \"wine glass\", \"cup\", \"fork\", \"knife\", \"spoon\", \"bowl\", \"banana\", \"apple\", \"sandwich\", \"orange\", \"broccoli\", \"carrot\", \"hot dog\", \"pizza\", \"donut\", \"cake\", \"chair\", \"couch\", \"potted plant\", \"bed\", \"dining table\", \"toilet\", \"tv\", \"laptop\", \"mouse\", \"remote\", \"keyboard\", \"cell phone\", \"microwave\", \"oven\", \"toaster\", \"sink\", \"refrigerator\", \"book\", \"clock\", \"vase\", \"scissors\", \"teddy bear\", \"hair drier\", \"toothbrush\" ] def process_image(model, image_path, input_width, input_height): # 讀取圖片 frame = cv2.imread(image_path) if frame is None: print(f\"Error: 無法讀取圖片 {image_path}\") return None, [] original_height, original_width = frame.shape[:2] # 預處理 input_img = cv2.resize(frame, (input_width, input_height)) input_img = cv2.cvtColor(input_img, cv2.COLOR_BGR2RGB) # 執行推理 model.launch_inference(input_img) detections = model.get_results() # 轉換坐標到原始圖像尺寸并繪制結果 results = [] for det in detections: x, y, w, h, score, cls_id = det x_abs = int(x * original_width) y_abs = int(y * original_height) w_abs = int(w * original_width) h_abs = int(h * original_height) class_name = CLASS_NAMES[int(cls_id)] if int(cls_id) < len(CLASS_NAMES) else str(cls_id) results.append({ \"class\": class_name, \"confidence\": float(score), \"bbox\": [x_abs, y_abs, w_abs, h_abs] }) # 在圖片上繪制檢測結果 cv2.rectangle(frame, (x_abs, y_abs), (x_abs+w_abs, y_abs+h_abs), (0, 255, 0), 2) label = f\"{class_name}: {score:.2f}\" cv2.putText(frame, label, (x_abs, y_abs-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) return frame, results def main(): # 參數解析 parser = argparse.ArgumentParser() parser.add_argument(\"-m\", \"--model_file\", required=True, help=\"YOLOv5模型文件路徑\") parser.add_argument(\"-p\", \"--image_path\", required=True, help=\"待檢測圖片路徑\") args = parser.parse_args() # 檢查文件是否存在 if not os.path.exists(args.model_file): print(f\"錯誤: 模型文件 {args.model_file} 不存在\") return if not os.path.exists(args.image_path): print(f\"錯誤: 圖片文件 {args.image_path} 不存在\") return # 初始化模型 nn = NeuralNetwork( model_file=args.model_file, score_threshold=0.45, iou_threshold=0.5 ) # 獲取模型輸入尺寸 input_width, input_height, _ = nn.get_img_size() # 處理圖片 result_img, detections = process_image(nn, args.image_path, input_width, input_height) if result_img is not None: # 生成輸出文件名 dir_name, file_name = os.path.split(args.image_path) name, ext = os.path.splitext(file_name) output_path = f\"{name}_detected{ext}\" # 保存帶標注的結果圖片 cv2.imwrite(output_path, result_img) # 打印結構化檢測結果 print(\"\\\\n===== 檢測結果 =====\") print(f\"輸入圖片: {args.image_path}\") print(f\"輸出圖片: {output_path}\") print(f\"檢測到 {len(detections)} 個對象:\\\\n\") for i, det in enumerate(detections, 1): print(f\"{i}. 類別: {det[\'class\']}\") print(f\"置信度: {det[\'confidence\']:.4f}\") print(f\"位置: x={det[\'bbox\'][0]}, y={det[\'bbox\'][1]}\") print(f\"尺寸: w={det[\'bbox\'][2]}, h={det[\'bbox\'][3]}\\\\n\") print(\"===================\") if __name__ == \"__main__\": main() 終端執行指令 python3 yolov5_inference.py -m ./model/yolov5n-uint.nb -p ./model/test3.jpg ; 加載模型和目標圖片、執行物體識別的推理、識別結果保存和打印等。 效果 運行指令結束后,生成識別結果圖片 同時終端打印識別結果信息 詳見底部視頻。 更多場景的推理測試如下 總結 本文介紹了正點原子 STM32MP257 開發板基于 YOLO-v5n 模型實現物體識別的項目設計,包括YOLOv5模型介紹、官方Demo例程測試、攝像頭采集畫面的動態識別、板端圖片靜態識別等,為該開發板在人工智能等相關領域的開發、產品的設計和應用等方面提供了參考。
    發表于 06-21 16:32
    主站蜘蛛池模板: 2022年永久免费观看 | 停停色| 中国又粗又大又爽的毛片 | 日日干干夜夜 | 看全黄大片狐狸视频在线观看 | 女女同免费播放毛片 | 六月婷婷导航福利在线 | 男男生子大肚play做到生 | 污污视频网址 | 哪里可以看免费毛片 | 五月婷婷深爱五月 | 国产毛片一区二区三区精品 | 久久综合九色综合97_ 久久久 | 亚洲国产一区二区三区在线观看 | 日本媚薬痉挛在线观看免费 | 欧美深深色噜噜狠狠yyy | 色多多在线观看视频 | 国产国产人免费人成成免视频 | 激五月| 欧美成人免费夜夜黄啪啪 | 久久新地址| 99香蕉精品视频在线观看 | 亚洲高清色图 | 国产一级特黄aa大片爽爽 | www婷婷 | 色妞视频资源在线观看 | 亚洲综合成人网在线观看 | 亚洲狼色专区 | 一级特黄aaa大片在线观看视频 | 女bbbbxxxx毛片视频丶 | 久热首页| 天天看影院 | 老汉影视永久免费视频 | 四虎网址大全 | 一级黄色毛片免费看 | 欧美最猛性xxxx高清 | 亚洲成人7777| 午夜影院日韩 | 高清xxx | 一级日本高清视频免费观看 | 波多野结衣久久精品 |