首页 / 行业
MCU如何部署OpenCV
2022-11-03 09:12:00
本文是一个小系列的第一篇,MCU部署OpenCV的“先跑篇”,稍后会陆续有“配置篇”、“实战篇”、“进阶篇”、“优化篇”,带您牵手OpenCV,进入OpenCV的广阔世界。
说到OpenCV,想必不用小编再多说什么了吧,可谓是计算机视觉处理届的扛把子选手。
对她仰慕已久
但凡是接触过/亲手把玩过数字图像的朋友们,都或多或少的接受过OpenCV的辅佐吧。小到:图像数据的打开/保存、摄像头数据的读取,大到目标识别,神经网络等,可以说,OpenCV就像是一个无所不能的存在。想做图像开发吗?come on,OpenCV准能大手一挥,委派手下将领来辅佐我们打下江山。
看到这里,相信大家已经从字里行间感受到了,小编这无处安放的、快要溢出纸面的、满满的膜拜和敬仰之情了吧。没错,小编也正是OpenCV的受益者,当你还在为如何打开一张粉丝发过来的彩图而一筹莫展之时,OpenCV就会在远方呼唤:试试imread?图片太小,看不清偶像的签名?试试resize?是的,无所不能的OpenCV就是能随时满足我们的任何开发需求,或者说的稍显专业范一点:知道《数字图像处理-冈萨雷斯》吗?相信我,OpenCV里都有。
写到这儿,小编真想直接一个一键三连。
配得上她吗?
就不再过多的感慨了,让我们开始下一部分,说说今天的主题。
相信大家也有注意到,即便OpenCV在PC端混的风生水起,可是在我们的嵌入式平台上,这里特指MCU平台(同为嵌入式平台,隔壁MPU仗着DDR+强力A核已经成功上船),可以说是障碍重重。
首先第一个遇到的障碍是代码空间,尽管OpenCV的功能强大,其代码量也让人心头一惊。低头翻翻芯片手册,看到那捉襟见肘的存储容量,基本可以直接放弃跑OpenCV的想法了。
第二个大障碍则是算力,与PC机主频上GHz的多核处理器相比,MCU的处理能力确实堪忧。
但是,自从出现了i.MX RT系列的MCU,让人们看到了在嵌入式MCU的应用环境中,借助OpenCV进行图像开发的希望。
i.MX RT具有600MHz以上的主频,让运行OpenCV成为可能。而其对外部存储扩展的支持,正好能够解决代码空间的问题。i.MX RT系列为部署OpenCV提供了一个新的突破口。
还有第三大障碍,在MCU平台上跑OpenCV没有先例可循,想玩但感觉无从下手。
那么,下面小编就来引领大家开始OpenCV的另一种玩儿法,在MCU平台上进行部署,所选用的平台是拥有高达1GHz主频的,我们的i.MX RT1170系列MCU,她拥有最大2MB的内部RAM,和外扩的QSPI Flash用于代码存储,以及外扩的SDRAM用于庞大的数据存储。
好好地端详
开始把玩之前,先来正式介绍一下这次的主角,大名鼎鼎的OpenCV项目。
OpenCV(开源计算机视觉库:http://OpenCV.org)是一个包含数百种计算机视觉算法的开源库。没错, OpenCV是开源的,不收费哟,太良心。
OpenCV具有模块化结构,这意味着其包括多个共享或静态库。例如:核心功能、图像处理、视频分析、相机校准和3D重建(calib3d)、2D功能框架(features2D)、对象检测(objdetect)、高级GUI(highgui)、视频I/O(Video)。可以说,涵盖了几乎所有的数字图像处理领域。
牵手前的准备
认识了我们的主角,下面我们来看看移植上可能会遇到的问题,当然上文所述,算力和代码大小的问题也要考虑到:
编译方式/最终呈现方式:这个主要是涉及到我们最终如何使用OpenCV代码,是源码嵌入还是用静态链接库的形式。
小编这里直接选择编译成静态链接库,这样就不用每次都集成源码到工程中,更加方便。
不过,有一个问题要注意,因为OpenCV代码主体是C++编写的,受编译器版本影响,可能会导致编译出来的静态链接库并不兼容当前工程。
因此,要注意,编译器的版本要保证一致,切记!!
编译工具链:在PC上,一般是选用GCC / visual studio(分别对应linux和windows平台)进行代码编译,到了嵌入式平台,要注意使用对应的嵌入式开发工具链,小编这里推荐arm-none-eabi-gcc以及ARMCland(Keil)。
可能有朋友要问了啊,IAR呢?别问,问就是小编用Keil比较熟悉,手动捂脸。。。。
头文件和数据类型问题:不同的工具链的头文件组织/构成方式不同,换句话说,有些头文件,GCC有而ARMCLang可能没有,需要特殊考虑。
而数据类型问题主要体现在不同编译器,对于使用typedef重定义的整数类型的解释方式。
代码大小和算力:这里小编没有进行特殊的代码级优化,完完全全的放手让编译器帮我们去做了,例如使用GCC的-o3,ARMCLand的-oszie / -ofast等
操作系统支持:因为OpenCV的一些代码是要依赖于OS的,例如多进程 / 进程通信等,而我们的MCU平台尽管也支持OS。
但是一般都是多线程OS,不太能满足OpenCV的要求。当然,除了多进程这一点,我们的MCU平台还是可以胜任的。
针对这一点,就没啥可说的了,简单粗暴一点:直接disable掉这些模块。
配置工具适配:因为我们这里不使用VS进行代码管理,而OpenCV可以基于CMake进行工程管理并借助Make进行代码编译。
那么针对不同的开发端OS,Linux / Windows,需要安装对应版本的CMake + Make工具。
憧憬与遐想
随着人工智能技术的普及,人们期待在MCU平台上能进行更加复杂的图像处理,成熟的OpenCV自然而然地引起了我们的高度关注。
但是由于前面提到的那些障碍以及对操作系统的依赖,在MCU上跑OpenCV能够做到什么程度,还是需要不断地挖掘和探索。
从我们目前工作的情况看,可以说一些基础的图像操作:resize、rotate、边缘提取以及基本的滤波算法等,完全没问题。小编也将在后面的系列中为大家一一揭密。
当然,OpenCV+MCU仍然是一个全新的领地,具体能做到什么,还要大家发挥想象力,让OpenCV能够在MCU平台上开出绚烂的花朵!
限于篇幅,本期小编就和大家聊到这儿,下期将为大家详细介绍如何进行工具链的安装,以及如何对OpenCV源码进行配置的具体方法。
审核编辑:彭静最新内容
手机 |
相关内容
英伟达芯片开发过程引入聊天机器人
英伟达芯片开发过程引入聊天机器人,扩展更多AI应用,聊天机器人,扩展,芯片,英伟达,开发过程,调试,英伟达是一家全球领先的半导体公司,小到一个分子!研究人员开发一种微小
小到一个分子!研究人员开发一种微小的压电电阻器,优化,位置,结构,用于,传感器,压电效应,近年来,随着电子技术的快速发展,对微小尺寸电Efuse是什么?聊聊芯片级的eFuse
Efuse是什么?聊聊芯片级的eFuse,状态,编码器,故障,加密,芯片,配置信息,Efuse是一种可编程的电子熔断器,用于在芯片级别实现非易失性存硅谷:设计师利用生成式 AI 辅助芯片
硅谷:设计师利用生成式 AI 辅助芯片设计,芯片,生成式,硅谷,优化,修改,方法,在硅谷,设计师们正在利用生成式人工智能(AI)来辅助芯片设计应用在智能空调中的数字温度传感芯
应用在智能空调中的数字温度传感芯片,数字,芯片,温度,智能,数据,实时,数字温度传感芯片是一种用于测量环境温度的MAX3243CAI集成电高通骁龙8 Gen4曝光:升级台积电3nm
高通骁龙8 Gen4曝光:升级台积电3nm CPU回归自研架构,升级,台积电,优化,能和,功耗,处理器,高通骁龙8 Gen4是高通公司即将推出的一款NE创建更低延迟和更高效率的 5G 系统
创建更低延迟和更高效率的 5G 系统,延迟,系统,5G,优化,方法,网络架构,随着技术的不断发展,人们对通信系统的需求也在不断增加。5G技数据中心如何更快、更经济地利用AI
数据中心如何更快、更经济地利用AI?,经济,数据中心,用于,机器学习,计算,自动化运维,数据中心中使用人工智能(AI)技术可以带来许多好处,