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

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

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

MCU如何部署OpenCV

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

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

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

對她仰慕已久

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

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

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

配得上她嗎?

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

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

首先第一個(gè)遇到的障礙是代碼空間,盡管OpenCV的功能強(qiáng)大,其代碼量也讓人心頭一驚。低頭翻翻芯片手冊,看到那捉襟見肘的存儲容量,基本可以直接放棄跑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成為可能。而其對外部存儲擴(kuò)展的支持,正好能夠解決代碼空間的問題。i.MX RT系列為部署OpenCV提供了一個(gè)新的突破口。

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

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

好好地端詳

開始把玩之前,先來正式介紹一下這次的主角,大名鼎鼎的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)、對象檢測(objdetect)、高級GUI(highgui)、視頻I/O(Video)??梢哉f,涵蓋了幾乎所有的數(shù)字圖像處理領(lǐng)域。

牽手前的準(zhǔn)備

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

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

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

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

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

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

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

憧憬與遐想

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

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

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

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

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

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

    關(guān)注

    146

    文章

    16667

    瀏覽量

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

    關(guān)注

    8

    文章

    1685

    瀏覽量

    45814
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    622

    瀏覽量

    41091

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    opencv-python和opencv一樣嗎

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

    opencv的主要功能有哪些

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

    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 ?1034次閱讀
    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 ?1032次閱讀
    基于<b class='flag-5'>OpenCV</b> DNN實(shí)現(xiàn)YOLOv8的模型<b class='flag-5'>部署</b>與推理演示

    【米爾-TIAM62開發(fā)板-接替335x-試用評測】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)對OpenCV圖像處理程序的加速運(yùn)行,當(dāng)前支持加速的模塊包括如下。
    的頭像 發(fā)表于 12-05 09:56 ?845次閱讀
    <b class='flag-5'>OpenCV</b>4.8 CUDA編程代碼教程

    OpenCV對openEuler提供上游原生支持

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

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

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

    OpenCV基礎(chǔ)知識入門

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

    想在STM32 MCU部署機(jī)器學(xué)習(xí)模型?這份入門教程,讓你一學(xué)就會~

    想在STM32 MCU部署機(jī)器學(xué)習(xí)模型?這份入門教程,讓你一學(xué)就會~
    的頭像 發(fā)表于 10-18 17:45 ?3982次閱讀
    想在STM32 <b class='flag-5'>MCU</b>上<b class='flag-5'>部署</b>機(jī)器學(xué)習(xí)模型?這份入門教程,讓你一學(xué)就會~

    openCV邊緣檢測原理是什么?

    openCV是通過什么原理來實(shí)現(xiàn)邊緣檢測的
    發(fā)表于 10-10 06:21

    OpenCV 如何加載圖片

    之前也寫過一些 OpenCV 的文章,最近正好在考慮 寫一個(gè) OpenCV相關(guān)的工具,目前還是在開發(fā)過程中,邊開發(fā)邊更新。預(yù)計(jì)會持續(xù)一段時(shí)間。目前的想法是把 OpenCV 的 API 在這個(gè)工具上都
    的頭像 發(fā)表于 10-09 15:01 ?605次閱讀

    OpenCV4.8+YOLOv8對象檢測C++推理演示

    自從YOLOv5更新成7.0版本,YOLOv8推出以后,OpenCV4.6以前的版本都無法再加載導(dǎo)出ONNX格式模型了,只有OpenCV4.7以上版本才可以支持最新版本YOLOv5與YOLOv8模型的推理部署。首先看一下最新版本
    的頭像 發(fā)表于 09-27 11:07 ?1227次閱讀
    <b class='flag-5'>OpenCV</b>4.8+YOLOv8對象檢測C++推理演示