91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

AI模型部署邊緣設(shè)備的奇妙之旅:如何在邊緣端部署OpenCV

福州市凌睿智捷電子有限公司 ? 2024-12-14 09:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 簡介

Opencv(Open Source Computer Vision Library)是一個基于開源發(fā)行的跨平臺計算機視覺庫,它實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法,已成為計算機視覺領(lǐng)域最有力的研究工具。在深度學(xué)習(xí)中,我們會經(jīng)常接觸到兩個名稱,圖像處理和計算機視覺,它們之間有什么區(qū)別呢?圖像處理 (Image Processing)

目的:圖像處理主要集中在改善或轉(zhuǎn)換圖像的質(zhì)量,使得圖像更適合人類觀察或者為后續(xù)的分析做準(zhǔn)備。

方法:通常涉及像素級別的操作,比如調(diào)整亮度、對比度、顏色校正、濾波(如高斯模糊、中值濾波去噪)、邊緣檢測、形態(tài)學(xué)變換(膨脹、腐蝕)等。

計算機視覺 (Computer Vision)

目的:計算機視覺的目標(biāo)是使計算機能夠理解和解釋圖像或視頻的內(nèi)容,實現(xiàn)類似于人類視覺系統(tǒng)的感知能力。

方法:使用高級算法來解析圖像中的內(nèi)容,包括但不限于特征提取、物體識別、分類、跟蹤、場景重建等。這可能涉及到機器學(xué)習(xí)和深度學(xué)習(xí)模型的應(yīng)用。

簡而言之,圖像處理是計算機視覺的基礎(chǔ),提供了必要的工具和技術(shù)來預(yù)處理和優(yōu)化圖像數(shù)據(jù);而計算機視覺則是在此基礎(chǔ)之上,通過更加復(fù)雜的算法和模型來解析圖像的意義。在實際應(yīng)用中,這兩者往往是緊密結(jié)合的,共同作用于解決復(fù)雜的問題。例如,在一個自動駕駛系統(tǒng)中,圖像處理可能會用于清理傳感器輸入的數(shù)據(jù),而計算機視覺則負(fù)責(zé)識別道路上的行人、車輛和其他重要元素。

2 基礎(chǔ)知識

OpenCV 是一個開源的計算機視覺和機器學(xué)習(xí)軟件庫,廣泛用于圖像處理、視頻捕捉、物體檢測等領(lǐng)域。一些常用操作及其目的:

讀取圖片

使用cv2.imread()函數(shù)加載圖像。

目的:為后續(xù)處理和分析準(zhǔn)備圖像數(shù)據(jù)。

轉(zhuǎn)換色彩空間

使用cv2.cvtColor()進行色彩空間轉(zhuǎn)換。

目的:適應(yīng)不同算法的需求,例如灰度圖用于簡化計算,HSV用于顏色分割等。

濾波

高斯模糊 (cv2.GaussianBlur)、均值濾波 (cv2.blur) 和雙邊濾波 (cv2.bilateralFilter) 等。

目的:降噪和平滑圖像,或在保持邊緣的同時模糊細(xì)節(jié)。

繪制圖形

使用cv2.line()、cv2.rectangle()、cv2.circle()和cv2.polylines()來繪制直線、矩形、圓形或多邊形。

目的:可視化結(jié)果,標(biāo)注圖像中的特征或者創(chuàng)建掩碼。

邊緣檢測

Canny 邊緣檢測 (cv2.Canny) 或 Sobel 操作符 (cv2.Sobel)。

目的:檢測圖像中物體的邊界,是很多高級計算機視覺任務(wù)的基礎(chǔ)步驟。

閾值操作

cv2.threshold()用于二值化圖像。

目的:突出顯示感興趣區(qū)域,簡化圖像以利于進一步分析。

Sobel 濾波

使用cv2.Sobel()計算圖像梯度。

目的:增強邊緣,通常與邊緣檢測相關(guān)聯(lián)。

文件保存

cv2.imwrite()將圖像保存到磁盤。

目的:保存處理后的圖像以便將來使用或分享。

此外,還有其他重要的OpenCV功能,如:

直方圖均衡化(cv2.equalizeHist) 提升圖像對比度。

模板匹配(cv2.matchTemplate) 用于查找一個圖像中的另一個小圖像的位置。

特征點檢測和描述子計算,如 SIFT, SURF, ORB 等,用于圖像配準(zhǔn)、拼接等任務(wù)。

這些基礎(chǔ)操作和高級特性共同構(gòu)成了強大的工具集,可以用來開發(fā)從簡單的圖像編輯應(yīng)用到復(fù)雜的計算機視覺系統(tǒng)。 這些操作是構(gòu)建復(fù)雜圖像處理流水線的基礎(chǔ),可以單獨使用,也可以組合起來解決更復(fù)雜的視覺問題。例如,預(yù)處理階段可能會包括去噪、邊緣檢測和形態(tài)學(xué)操作;而在后處理階段,則可能會涉及閾值操作和繪制幾何圖形來標(biāo)注或解釋結(jié)果。以上這些算子僅僅是OpenCV庫的一小部分的內(nèi)容,但是它們是支持我們進行復(fù)雜操作的基礎(chǔ)。

3 實際操作

在學(xué)習(xí)OpenCV的初期,可能會覺得每個算子或函數(shù)就像是獨立的知識點,雖然能夠理解它們各自的功能和用法,但當(dāng)面對實際問題時,卻難以將這些知識點有效地組合起來解決問題。這是因為從理論到實踐的應(yīng)用需要一個過渡的過程,在這個過程中,不僅需要掌握單個算子的操作,還需要學(xué)會如何根據(jù)具體的需求選擇合適的算子,并且合理地調(diào)整參數(shù)以達到預(yù)期的效果。OpenCV的強大之處在于它提供了豐富的圖像處理功能,但這也意味著使用它的難點在于:

理解和記憶大量的算子:OpenCV庫中包含了大量的算子,每個算子都有其特定的應(yīng)用場景和參數(shù)設(shè)置。對于初學(xué)者來說,理解和記住這么多的內(nèi)容可能是一個挑戰(zhàn)。

算子之間的組合應(yīng)用:很多情況下,單獨使用一個算子并不能完成復(fù)雜的任務(wù),而是需要多個算子相互配合。這就要求學(xué)習(xí)者不僅要了解各個算子的工作原理,還要懂得如何將它們有機地結(jié)合起來,以實現(xiàn)更復(fù)雜的功能。

參數(shù)調(diào)優(yōu):每個算子通常都帶有一系列可調(diào)節(jié)的參數(shù),這些參數(shù)的選擇直接影響到最終的結(jié)果。找到一組最優(yōu)化的參數(shù)值往往需要通過不斷的實驗和嘗試,這既考驗?zāi)托囊部简灲?jīng)驗。

解決實際問題的能力:將理論知識應(yīng)用于實踐,解決真實世界中的問題是學(xué)習(xí)任何技術(shù)的關(guān)鍵。對于OpenCV而言,這意味著要能夠分析給定的任務(wù)需求,確定所需的操作步驟,并正確地執(zhí)行這些步驟。為了克服上述困難,建議多做練習(xí),特別是針對不同類型的圖像處理任務(wù)進行實戰(zhàn)演練。同時,可以參考官方文檔、在線教程以及社區(qū)討論來加深對算子的理解,學(xué)習(xí)他人是如何解決問題的。此外,不斷積累經(jīng)驗和案例研究也會有助于提高解決新問題的能力。

本文章主要講述如何在邊緣端設(shè)備上使用OpenCV。本次使用的邊緣端設(shè)備是凌智電子開發(fā)的凌智視覺模塊,具體如下:

4214312e-b9b8-11ef-8084-92fbcf53809c.png

如對該邊緣端設(shè)備感興趣,可到Gitee倉庫:凌智視覺模塊查看該設(shè)備的具體信息。

接下來我們通過幾個例子來介紹如何在邊緣端設(shè)備使用OpenCV進行形狀檢測。

3.1 矩形檢測

importlockzhiner_vision_module.cv2ascv2fromlockzhiner_vision_module.editimportEditimporttimeimportsysif__name__ =="__main__": args = sys.argv iflen(args) !=3: print("Need model path. Example: python test_capture.py width height") exit(1) edit = Edit() edit.start_and_accept_connection() video_capture = cv2.VideoCapture() video_capture.set_width(int(args[1])) video_capture.set_height(int(args[2])) ifvideo_capture.open(0)isFalse: print("Failed to open capture") exit(1) whileTrue: read_index =0 total_time_ms =0 foriinrange(30): start_time = time.time() ret, mat = video_capture.read() ifretisFalse: continue end_time = time.time() # 轉(zhuǎn)換為灰度圖像 gray = cv2.cvtColor(mat, cv2.COLOR_BGR2GRAY) # 高斯模糊 blurred = cv2.GaussianBlur(gray, (5, 5), 0) # 二值化 _, binary = cv2.threshold(blurred, 127, 255, cv2.THRESH_BINARY_INV) edges = cv2.Canny(binary, 30, 200) contours, _ = cv2.findContours(edges.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: # 近似輪廓 # 計算輪廓周長 epsilon = 0.02 * cv2.arcLength(contour, True) # 將輪廓近似為多邊形 if epsilon < 15:? ? ? ? ? ? ? ? ? ? continue? ? ? ? ? ? ? ? approx = cv2.approxPolyDP(contour, epsilon, True)? ? ? ? ? ? ? ? # 如果近似輪廓有4個頂點,則認(rèn)為是矩形? ? ? ? ? ? ? ? if len(approx) == 4:? ? ? ? ? ? ? ? ? ? cv2.putText(mat, "Rectangle", (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)? ? ? ? ? ? ? ? ? ? cv2.drawContours(mat, [approx], -1, (0, 255, 0), 2)? ? ? ? ? ? edit.print(mat)? ? ? ? ? ? total_time_ms += end_time - start_time? ? ? ? ? ? read_index += 1? ? ? ? print(f"FPS is {1.0 / (total_time_ms / read_index)}")

在這一段代碼中的檢測效果如下圖所示

42383592-b9b8-11ef-8084-92fbcf53809c.png

但是當(dāng)我們只想要外部的矩形時,我們可以怎么做呢?

contours, _ = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

426099a6-b9b8-11ef-8084-92fbcf53809c.png

效果如上圖所示,接下來我們就得深究一下cv2.findContours mode 參數(shù) 和 method 參數(shù)的區(qū)別及作用了,我就不一一演示了,大家伙可以自行實驗,畢竟我也踩過。mode: 輪廓檢索模式,定義了如何檢索輪廓及其層次結(jié)構(gòu)。有以下幾種選擇:

cv2.RETR_EXTERNAL: 只檢索最外層的輪廓。

cv2.RETR_LIST: 檢索所有的輪廓,但不建立它們之間的等級關(guān)系。

cv2.RETR_CCOMP: 檢索所有的輪廓,并將它們組織為兩級層次結(jié)構(gòu):頂層是外部邊界,次級是孔洞。

cv2.RETR_TREE: 檢索所有輪廓,并重建完整的包含關(guān)系。

method: 輪廓近似方法,決定了輪廓的精度。有以下幾種選擇:

cv2.CHAIN_APPROX_NONE: 存儲所有的輪廓點,即沒有近似。

cv2.CHAIN_APPROX_SIMPLE: 壓縮水平、垂直和對角方向上的元素,只保留端點。

cv2.CHAIN_APPROX_TC89_L1: 使用一種稱為 Teh-Chin 鏈逼近算法的更復(fù)雜的壓縮方式。

cv2.CHAIN_APPROX_TC89_KCOS: 同樣使用 Teh-Chin 鏈逼近算法,但與 L1 不同,它是基于 KCOS 的。

3.2 圓形檢測

OpenCV 提供了HoughCircles函數(shù)來檢測圓形。Hough變換是一種用于從圖像中提取幾何形狀(如直線、圓等)的技術(shù),它通過參數(shù)空間的投票機制來實現(xiàn)。對于圓形檢測,Hough變換可以識別出滿足特定條件的圓形結(jié)構(gòu)。下面是使用 OpenCV 進行圓形檢測的基本步驟:

首先加載需要檢測圓的圖像,并將其轉(zhuǎn)換為灰度圖,因為顏色信息對于圓形檢測不是必要的。調(diào)用cv2.HoughCircles函數(shù)進行圓形檢測。該函數(shù)接受幾個重要參數(shù):

method:定義了檢測方法,通常使用cv2.HOUGH_GRADIENT。

dp:累加器分辨率與圖像分辨率的反比。dp=1 表示累加器具有與輸入圖像相同的分辨率。

minDist:檢測到的圓心之間的最小距離。如果設(shè)置得太小,可能會檢測到多個相鄰的圓;如果太大,可能會漏檢一些圓。

param1:Canny邊緣檢測的高閾值,低閾值是高閾值的一半。

param2:累加器閾值。該閾值越小,檢測到的圓越多(包括不完美的圓)。越大則只檢測到更明顯的圓。

minRadius和maxRadius:分別為檢測到的圓的最小和最大半徑。

請注意,上述參數(shù) (dp,minDist,param1,param2,minRadius,maxRadius) 需要根據(jù)具體應(yīng)用場景調(diào)整,以獲得最佳檢測效果。例如,不同的光照條件、背景復(fù)雜度或者目標(biāo)圓的大小都會影響這些參數(shù)的選擇。實例代碼

fromlockzhiner_vision_module.cv2importVideoCaptureimportlockzhiner_vision_module.cv2ascv2fromlockzhiner_vision_module.editimportEditimporttimeimportsyspi =3.14159265358979323846if__name__ =="__main__": args = sys.argv iflen(args) !=3: print("Need model path. Example: python test_capture.py width height") exit(1) edit = Edit() edit.start_and_accept_connection() video_capture = VideoCapture() video_capture.set_width(int(args[1])) video_capture.set_height(int(args[2])) ifvideo_capture.open(0)isFalse: print("Failed to open capture") exit(1) whileTrue: read_index =0 total_time_ms =0 foriinrange(30): start_time = time.time() ret, mat = video_capture.read() ifretisFalse: continue end_time = time.time() # 轉(zhuǎn)換為灰度圖像 # 轉(zhuǎn)換為灰度圖像 gray = cv2.cvtColor(mat, cv2.COLOR_BGR2GRAY) # 使用高斯模糊減少噪聲 blurred = cv2.GaussianBlur(gray, (9, 9), 2) # 使用 HoughCircles 檢測圓形 circles = cv2.HoughCircles(blurred, cv2.HOUGH_GRADIENT, dp=1, minDist=50, param1=50, param2=30, minRadius=120, maxRadius=250) # print(circles) if circles is not None: # 在圖像上繪制檢測到的圓 for i in circles[0]: center = (int(i[0]), int(i[1])) radius = int(i[2]) cv2.putText(mat, "circle", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) # 繪制圓心 cv2.circle(mat, center, 1, (0, 100, 100), 3) # 繪制圓 cv2.circle(mat, center, radius, (0, 255, 0), 3) edit.print(mat) total_time_ms += end_time - start_time read_index += 1 print(f"FPS is {1.0 / (total_time_ms/read_index)}")

檢測效果圖 :

42825686-b9b8-11ef-8084-92fbcf53809c.png


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

    關(guān)注

    29

    文章

    1342

    瀏覽量

    59566
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    39820

    瀏覽量

    301499
  • OpenCV
    +關(guān)注

    關(guān)注

    33

    文章

    652

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    模型到產(chǎn)品:Qwen2.5-VL在BM1684X邊緣計算部署全攻略

    前言:部署意義與應(yīng)用場景1.1Qwen-2-5-VL與BM1684X的組合行業(yè)意義:?邊緣AI革命:大模型從云端下沉到邊緣
    的頭像 發(fā)表于 01-13 14:17 ?4664次閱讀
    從<b class='flag-5'>模型</b>到產(chǎn)品:Qwen2.5-VL在BM1684X<b class='flag-5'>邊緣</b>計算<b class='flag-5'>部署</b>全攻略

    工業(yè)視覺網(wǎng)關(guān):RK3576賦能多路檢測與邊緣AI

    ~150ms6TOPS NPU 邊緣AI推理易對接 MES / 追溯系統(tǒng) 一、產(chǎn)線痛點:從“人看”到“機判”的轉(zhuǎn)變· 多工位/多角度同步:單機位覆蓋不足,典型項目需 8~12 路并發(fā),且畫面時序一致性要求高
    發(fā)表于 10-16 17:56

    何在基于Arm架構(gòu)的邊緣AI設(shè)備部署飛槳模型

    當(dāng) Arm 與領(lǐng)先的開源深度學(xué)習(xí)平臺強強聯(lián)合,會帶來什么?那就是推動創(chuàng)新的“火箭燃料”。Arm 攜手百度,利用雙方在高能效計算平臺與 AI 模型的技術(shù)積累,助力廣大開發(fā)者加快邊緣 AI
    的頭像 發(fā)表于 09-06 14:07 ?1110次閱讀

    部署邊緣計算設(shè)備時需要考慮哪些問題?

    部署邊緣計算設(shè)備時,需結(jié)合邊緣計算 “ 靠近數(shù)據(jù)源頭、低延遲、分布式、資源受限 ” 的核心特性,從硬件適配、軟件架構(gòu)、數(shù)據(jù)管理、網(wǎng)絡(luò)穩(wěn)定、可靠性保障等多維度綜合考量,確保
    的頭像 發(fā)表于 09-05 15:38 ?1204次閱讀
    <b class='flag-5'>部署</b><b class='flag-5'>邊緣</b>計算<b class='flag-5'>設(shè)備</b>時需要考慮哪些問題?

    ALINX VD100低功耗側(cè)大模型部署方案,運行3B模型功耗僅5W?!

    模型能運行≠用戶體驗好。 IDC 預(yù)測,到 2026 年,全球超過 50% 的企業(yè) AI 工作負(fù)載將部署邊緣設(shè)備上。在
    的頭像 發(fā)表于 09-03 14:58 ?741次閱讀
    ALINX VD100低功耗<b class='flag-5'>端</b>側(cè)大<b class='flag-5'>模型</b><b class='flag-5'>部署</b>方案,運行3B<b class='flag-5'>模型</b>功耗僅5W?!

    邊緣智能網(wǎng)關(guān)在水務(wù)行業(yè)中的應(yīng)用—龍興物聯(lián)

    、水庫等關(guān)鍵設(shè)施進行視頻監(jiān)控(結(jié)合邊緣AI)、門禁控制、環(huán)境監(jiān)測(溫濕度、有害氣體)。 優(yōu)勢:? 本地智能分析:? 視頻AI邊緣完成入侵
    發(fā)表于 08-02 18:28

    為何邊緣設(shè)備正成為AI的新重心

    人工智能 (AI) 正在以驚人的速度發(fā)展。企業(yè)不再僅僅是探索 AI,而是積極推動 AI 的規(guī)?;涞兀瑥膶嶒炐詰?yīng)用轉(zhuǎn)向?qū)嶋H部署。隨著生成式模型
    的頭像 發(fā)表于 07-30 09:12 ?879次閱讀

    Arm方案 基于Arm架構(gòu)的邊緣側(cè)設(shè)備(樹莓派或 NVIDIA Jetson Nano)上部署PyTorch模型

    本文將為你展示如何在樹莓派或 NVIDIA Jetson Nano 等基于 Arm 架構(gòu)的邊緣側(cè)設(shè)備部署 PyTorch 模型。
    的頭像 發(fā)表于 07-28 11:50 ?2879次閱讀

    邊緣AI實現(xiàn)的核心環(huán)節(jié):硬件選擇和模型部署

    邊緣AI的實現(xiàn)原理是將人工智能算法和模型部署到靠近數(shù)據(jù)源的邊緣設(shè)備上,使這些
    的頭像 發(fā)表于 06-19 12:19 ?1398次閱讀
    <b class='flag-5'>邊緣</b><b class='flag-5'>AI</b>實現(xiàn)的核心環(huán)節(jié):硬件選擇和<b class='flag-5'>模型</b><b class='flag-5'>部署</b>

    STM32F769是否可以部署邊緣AI?

    STM32F769是否可以部署邊緣AI
    發(fā)表于 06-17 06:44

    邊緣AI實現(xiàn)的核心環(huán)節(jié):硬件選擇和模型部署

    電子發(fā)燒友網(wǎng)綜合報道 邊緣AI的實現(xiàn)原理是將人工智能算法和模型部署到靠近數(shù)據(jù)源的邊緣設(shè)備上,使這
    發(fā)表于 05-26 07:09 ?1478次閱讀

    Deepseek海思SD3403邊緣計算AI產(chǎn)品系統(tǒng)

    海思SD3403邊緣計算AI框架,提供了一套開放式AI訓(xùn)練產(chǎn)品工具包,解決客戶低成本AI系統(tǒng),針對差異化AI 應(yīng)用場景,自己采集樣本數(shù)據(jù),進
    發(fā)表于 04-28 11:05

    AI模型部署邊緣設(shè)備奇妙之旅:視覺巡線

    1、項目簡介在本次項目中,我們將采用LockAI視覺攝像頭與OpenCV-C++技術(shù)相結(jié)合的方式來實現(xiàn)特定場地內(nèi)的視覺巡線任務(wù)。控制方面,我們選用了小凌派-RK2206開發(fā)板,該開發(fā)板運行
    的頭像 發(fā)表于 03-31 09:56 ?1126次閱讀
    <b class='flag-5'>AI</b><b class='flag-5'>模型</b><b class='flag-5'>部署</b><b class='flag-5'>邊緣</b><b class='flag-5'>設(shè)備</b>的<b class='flag-5'>奇妙</b><b class='flag-5'>之旅</b>:視覺巡線

    何在RAKsmart服務(wù)器上實現(xiàn)企業(yè)AI模型部署

    AI模型的訓(xùn)練與部署需要強大的算力支持、穩(wěn)定的網(wǎng)絡(luò)環(huán)境和專業(yè)的技術(shù)管理。RAKsmart作為全球領(lǐng)先的服務(wù)器托管與云計算服務(wù)提供商,已成為企業(yè)部署A
    的頭像 發(fā)表于 03-27 09:46 ?944次閱讀

    【幸狐Omni3576邊緣計算套件試用體驗】DeepSeek 部署及測試

    部署的相關(guān)流程,包括模型介紹、部署方案、RKLLM 庫、編譯和運行、效果演示等。通過板人工智能大模型
    發(fā)表于 03-21 19:31