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

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

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

MCU如何部署OpenCV

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2022-11-03 09:12 ? 次閱讀

本文是一個(gè)小系列的第一篇,MCU部署OpenCV的“先跑篇”,稍后會(huì)陸續(xù)有“配置篇”、“實(shí)戰(zhàn)篇”、“進(jìn)階篇”、“優(yōu)化篇”,帶您牽手OpenCV,進(jìn)入OpenCV的廣闊世界。

說到OpenCV,想必不用小編再多說什么了吧,可謂是計(jì)算機(jī)視覺處理屆的扛把子選手。

對(duì)她仰慕已久

但凡是接觸過/親手把玩過數(shù)字圖像的朋友們,都或多或少的接受過OpenCV的輔佐吧。小到:圖像數(shù)據(jù)的打開/保存、攝像頭數(shù)據(jù)的讀取,大到目標(biāo)識(shí)別,神經(jīng)網(wǎng)絡(luò)等,可以說,OpenCV就像是一個(gè)無所不能的存在。想做圖像開發(fā)嗎?come on,OpenCV準(zhǔn)能大手一揮,委派手下將領(lǐng)來輔佐我們打下江山。

看到這里,相信大家已經(jīng)從字里行間感受到了,小編這無處安放的、快要溢出紙面的、滿滿的膜拜和敬仰之情了吧。沒錯(cuò),小編也正是OpenCV的受益者,當(dāng)你還在為如何打開一張粉絲發(fā)過來的彩圖而一籌莫展之時(shí),OpenCV就會(huì)在遠(yuǎn)方呼喚:試試imread?圖片太小,看不清偶像的簽名?試試resize?是的,無所不能的OpenCV就是能隨時(shí)滿足我們的任何開發(fā)需求,或者說的稍顯專業(yè)范一點(diǎn):知道《數(shù)字圖像處理-岡薩雷斯》嗎?相信我,OpenCV里都有。

寫到這兒,小編真想直接一個(gè)一鍵三連。

配得上她嗎?

就不再過多的感慨了,讓我們開始下一部分,說說今天的主題。

相信大家也有注意到,即便OpenCV在PC端混的風(fēng)生水起,可是在我們的嵌入式平臺(tái)上,這里特指MCU平臺(tái)(同為嵌入式平臺(tái),隔壁MPU仗著DDR+強(qiáng)力A核已經(jīng)成功上船),可以說是障礙重重。

首先第一個(gè)遇到的障礙是代碼空間,盡管OpenCV的功能強(qiáng)大,其代碼量也讓人心頭一驚。低頭翻翻芯片手冊(cè),看到那捉襟見肘的存儲(chǔ)容量,基本可以直接放棄跑OpenCV的想法了。

第二個(gè)大障礙則是算力,與PC機(jī)主頻上GHz的多核處理器相比,MCU的處理能力確實(shí)堪憂。

但是,自從出現(xiàn)了i.MX RT系列的MCU,讓人們看到了在嵌入式MCU的應(yīng)用環(huán)境中,借助OpenCV進(jìn)行圖像開發(fā)的希望。

i.MX RT具有600MHz以上的主頻,讓運(yùn)行OpenCV成為可能。而其對(duì)外部存儲(chǔ)擴(kuò)展的支持,正好能夠解決代碼空間的問題。i.MX RT系列為部署OpenCV提供了一個(gè)新的突破口。

還有第三大障礙,在MCU平臺(tái)上跑OpenCV沒有先例可循,想玩但感覺無從下手。

那么,下面小編就來引領(lǐng)大家開始OpenCV的另一種玩兒法,在MCU平臺(tái)上進(jìn)行部署,所選用的平臺(tái)是擁有高達(dá)1GHz主頻的,我們的i.MX RT1170系列MCU,她擁有最大2MB的內(nèi)部RAM,和外擴(kuò)的QSPI Flash用于代碼存儲(chǔ),以及外擴(kuò)的SDRAM用于龐大的數(shù)據(jù)存儲(chǔ)。

好好地端詳

開始把玩之前,先來正式介紹一下這次的主角,大名鼎鼎的OpenCV項(xiàng)目。

OpenCV(開源計(jì)算機(jī)視覺庫:http://OpenCV.org)是一個(gè)包含數(shù)百種計(jì)算機(jī)視覺算法的開源庫。沒錯(cuò), OpenCV是開源的,不收費(fèi)喲,太良心。

OpenCV具有模塊化結(jié)構(gòu),這意味著其包括多個(gè)共享或靜態(tài)庫。例如:核心功能、圖像處理、視頻分析、相機(jī)校準(zhǔn)和3D重建(calib3d)、2D功能框架(features2D)、對(duì)象檢測(cè)(objdetect)、高級(jí)GUI(highgui)、視頻I/O(Video)??梢哉f,涵蓋了幾乎所有的數(shù)字圖像處理領(lǐng)域。

牽手前的準(zhǔn)備

認(rèn)識(shí)了我們的主角,下面我們來看看移植上可能會(huì)遇到的問題,當(dāng)然上文所述,算力和代碼大小的問題也要考慮到:

編譯方式/最終呈現(xiàn)方式:這個(gè)主要是涉及到我們最終如何使用OpenCV代碼,是源碼嵌入還是用靜態(tài)鏈接庫的形式。
小編這里直接選擇編譯成靜態(tài)鏈接庫,這樣就不用每次都集成源碼到工程中,更加方便。
不過,有一個(gè)問題要注意,因?yàn)镺penCV代碼主體是C++編寫的,受編譯器版本影響,可能會(huì)導(dǎo)致編譯出來的靜態(tài)鏈接庫并不兼容當(dāng)前工程。
因此,要注意,編譯器的版本要保證一致,切記??!

編譯工具鏈:在PC上,一般是選用GCC / visual studio(分別對(duì)應(yīng)linux和windows平臺(tái))進(jìn)行代碼編譯,到了嵌入式平臺(tái),要注意使用對(duì)應(yīng)的嵌入式開發(fā)工具鏈,小編這里推薦arm-none-eabi-gcc以及ARMCland(Keil)。
可能有朋友要問了啊,IAR呢?別問,問就是小編用Keil比較熟悉,手動(dòng)捂臉。。。。

頭文件和數(shù)據(jù)類型問題:不同的工具鏈的頭文件組織/構(gòu)成方式不同,換句話說,有些頭文件,GCC有而ARMCLang可能沒有,需要特殊考慮。
而數(shù)據(jù)類型問題主要體現(xiàn)在不同編譯器,對(duì)于使用typedef重定義的整數(shù)類型的解釋方式。

代碼大小和算力:這里小編沒有進(jìn)行特殊的代碼級(jí)優(yōu)化,完完全全的放手讓編譯器幫我們?nèi)プ隽?,例如使用GCC的-o3,ARMCLand的-oszie / -ofast等

操作系統(tǒng)支持:因?yàn)镺penCV的一些代碼是要依賴于OS的,例如多進(jìn)程 / 進(jìn)程通信等,而我們的MCU平臺(tái)盡管也支持OS。
但是一般都是多線程OS,不太能滿足OpenCV的要求。當(dāng)然,除了多進(jìn)程這一點(diǎn),我們的MCU平臺(tái)還是可以勝任的。
針對(duì)這一點(diǎn),就沒啥可說的了,簡(jiǎn)單粗暴一點(diǎn):直接disable掉這些模塊。

配置工具適配:因?yàn)槲覀冞@里不使用VS進(jìn)行代碼管理,而OpenCV可以基于CMake進(jìn)行工程管理并借助Make進(jìn)行代碼編譯。
那么針對(duì)不同的開發(fā)端OS,Linux / Windows,需要安裝對(duì)應(yīng)版本的CMake + Make工具。

憧憬與遐想

隨著人工智能技術(shù)的普及,人們期待在MCU平臺(tái)上能進(jìn)行更加復(fù)雜的圖像處理,成熟的OpenCV自然而然地引起了我們的高度關(guān)注。

但是由于前面提到的那些障礙以及對(duì)操作系統(tǒng)的依賴,在MCU上跑OpenCV能夠做到什么程度,還是需要不斷地挖掘和探索。

從我們目前工作的情況看,可以說一些基礎(chǔ)的圖像操作:resize、rotate、邊緣提取以及基本的濾波算法等,完全沒問題。小編也將在后面的系列中為大家一一揭密。

當(dāng)然,OpenCV+MCU仍然是一個(gè)全新的領(lǐng)地,具體能做到什么,還要大家發(fā)揮想象力,讓OpenCV能夠在MCU平臺(tái)上開出絢爛的花朵!

限于篇幅,本期小編就和大家聊到這兒,下期將為大家詳細(xì)介紹如何進(jìn)行工具鏈的安裝,以及如何對(duì)OpenCV源碼進(jìn)行配置的具體方法。

審核編輯:彭靜
聲明:本文內(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)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16809

    瀏覽量

    349409
  • 計(jì)算機(jī)視覺
    +關(guān)注

    關(guān)注

    8

    文章

    1690

    瀏覽量

    45875
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    623

    瀏覽量

    41181

原文標(biāo)題:這個(gè)秋天,OpenCV和MCU更配喲

文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenCV圖像識(shí)別C++代碼

    安裝OpenCV庫 首先,您需要在您的計(jì)算機(jī)上安裝OpenCV庫。您可以從OpenCV官網(wǎng)下載預(yù)編譯的庫或從源代碼編譯。安裝完成后,確保將OpenCV的頭文件和庫文件添加到您的項(xiàng)目中。
    的頭像 發(fā)表于 07-16 10:42 ?1438次閱讀

    opencv-python和opencv一樣嗎

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

    opencv的主要功能有哪些

    OpenCV(Open Source Computer Vision Library)是一個(gè)開源的計(jì)算機(jī)視覺庫,提供了大量的計(jì)算機(jī)視覺算法和工具。以下是OpenCV的主要功能: 圖像處理
    的頭像 發(fā)表于 07-16 10:35 ?1057次閱讀

    OpenCV攜奧比中光3D相機(jī)亮相CVPR 2024

    和機(jī)器學(xué)習(xí)軟件庫,提供豐富的圖像處理和計(jì)算機(jī)視覺算法。奧比中光與OpenCV的深入合作,使得復(fù)雜的3D感知項(xiàng)目開發(fā)變得簡(jiǎn)單高效。全球開發(fā)者及企業(yè)用戶可借助奧比中光先進(jìn)的3D相機(jī)技術(shù)和OpenCV全面的軟件支持,進(jìn)行快速原型設(shè)計(jì)、測(cè)試和
    的頭像 發(fā)表于 06-21 09:38 ?442次閱讀

    I.MX6ULL-飛凌 ElfBoard ELF1板卡 - 如何在Ubuntu中編譯OpenCV庫(X86架構(gòu))

    在之前發(fā)布的文章中探討了交叉編譯OpenCV部署至嵌入式系統(tǒng)的方法。然而,在調(diào)試階段,我們發(fā)現(xiàn)在 Ubuntu 環(huán)境下將 OpenCV 編譯為 X86 架構(gòu)可能更加方便和高效。 通過在主機(jī)上編譯并
    發(fā)表于 06-07 09:32

    嵌入式學(xué)習(xí)-飛凌ElfBoard ELF 1板卡 - 如何在Ubuntu中編譯OpenCV

    在之前發(fā)布的文章中探討了交叉編譯OpenCV部署至嵌入式系統(tǒng)的方法。然而,在調(diào)試階段,我們發(fā)現(xiàn)在 Ubuntu 環(huán)境下將 OpenCV 編譯為 X86 架構(gòu)可能更加方便和高效。 通過在主機(jī)上編譯并
    發(fā)表于 06-07 09:21

    ELF 1技術(shù)貼|如何在Ubuntu中編譯OpenCV

    在之前發(fā)布的文章中探討了交叉編譯OpenCV部署至嵌入式系統(tǒng)的方法。然而,在調(diào)試階段,我們發(fā)現(xiàn)在Ubuntu環(huán)境下將OpenCV編譯為X86架構(gòu)可能更加方便和高效。通過在主機(jī)上編譯并使用X86架構(gòu)
    的頭像 發(fā)表于 05-31 16:41 ?1099次閱讀
    ELF 1技術(shù)貼|如何在Ubuntu中編譯<b class='flag-5'>OpenCV</b>庫

    基于OpenCV DNN實(shí)現(xiàn)YOLOv8的模型部署與推理演示

    基于OpenCV DNN實(shí)現(xiàn)YOLOv8推理的好處就是一套代碼就可以部署在Windows10系統(tǒng)、烏班圖系統(tǒng)、Jetson的Jetpack系統(tǒng)
    的頭像 發(fā)表于 03-01 15:52 ?1226次閱讀
    基于<b class='flag-5'>OpenCV</b> DNN實(shí)現(xiàn)YOLOv8的模型<b class='flag-5'>部署</b>與推理演示

    OpenCV零代碼實(shí)現(xiàn)線段距離測(cè)量

    OpenMV2024版本即將發(fā)行,支持多種主流深度學(xué)習(xí)模型從訓(xùn)練到部署,支持更多傳統(tǒng)OpenCV算子流程設(shè)計(jì)與組合,支持一鍵導(dǎo)出流程,相比2023版本OpenMV,提供更多輔助開發(fā)工具。
    的頭像 發(fā)表于 01-08 09:15 ?484次閱讀
    <b class='flag-5'>OpenCV</b>零代碼實(shí)現(xiàn)線段距離測(cè)量

    【米爾-TIAM62開發(fā)板-接替335x-試用評(píng)測(cè)】OPENCV和NCNN交叉編譯

    目錄 1. 前言 2. OPENCV交叉編譯 3. NCNN交叉編譯 4. OPENCV和NCNN移植 1. 前言 介紹了OpenCV和NCNN庫的交叉編譯過程,并在TIAM62開發(fā)板上部署
    發(fā)表于 12-16 23:16

    OpenCV4.8 CUDA編程代碼教程

    OpenCV4支持通過GPU實(shí)現(xiàn)CUDA加速執(zhí)行,實(shí)現(xiàn)對(duì)OpenCV圖像處理程序的加速運(yùn)行,當(dāng)前支持加速的模塊包括如下。
    的頭像 發(fā)表于 12-05 09:56 ?913次閱讀
    <b class='flag-5'>OpenCV</b>4.8 CUDA編程代碼教程

    OpenCV對(duì)openEuler提供上游原生支持

    2023年11月17日,OpenCV社區(qū)正式接納openEuler作為持續(xù)集成(Continuous Integration,CI)系統(tǒng)的操作系統(tǒng)之一,對(duì)openEuler提供上游原生支持
    的頭像 發(fā)表于 11-20 09:14 ?750次閱讀

    OpenCV實(shí)驗(yàn)大師平臺(tái)安裝指南

    工程與技術(shù)培訓(xùn)得痛點(diǎn)深深教育了我,讓我知道“工欲善其事必先利其器”。通過一年多得努力開發(fā)與不斷打磨,一款能夠提升OpenCV教學(xué)質(zhì)量與OpenCV工程化開發(fā)質(zhì)量與速度的工具軟件成功出現(xiàn)了。它就
    的頭像 發(fā)表于 11-13 11:43 ?781次閱讀
    <b class='flag-5'>OpenCV</b>實(shí)驗(yàn)大師平臺(tái)安裝指南

    OpenCV基礎(chǔ)知識(shí)入門

    OpenCV是計(jì)算機(jī)視覺中最受歡迎的庫,最初由intel使用C和C ++進(jìn)行開發(fā)的,現(xiàn)在也可以在python中使用。該庫是一個(gè)跨平臺(tái)的開源庫,是免費(fèi)使用的。OpenCV庫是一個(gè)高度優(yōu)化的庫,主要關(guān)注實(shí)時(shí)應(yīng)用程序。
    的頭像 發(fā)表于 10-29 11:29 ?703次閱讀
    <b class='flag-5'>OpenCV</b>基礎(chǔ)知識(shí)入門

    Ubuntu系統(tǒng)下編譯OpenCV4.8源碼記錄

    很多人經(jīng)常會(huì)問我是否有在Ubuntu系統(tǒng)化下開發(fā)OpenCV C++應(yīng)用的教程,其實(shí)我一直沒有,然后我有幾塊開發(fā)板都是基于Linux的,有Jetson系列的開發(fā)板,所以我以前寫過一篇文章如何在
    的頭像 發(fā)表于 10-27 16:07 ?1492次閱讀
    Ubuntu系統(tǒng)下編譯<b class='flag-5'>OpenCV</b>4.8源碼記錄