1 MCU如何部署OpenCV-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MCU如何部署OpenCV

恩智浦MCU加油站 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2022-11-03 09:12 次阅读

本文是一个小系列的第一篇,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源码进行配置的具体方法。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17123

    浏览量

    350973
  • 计算机视觉
    +关注

    关注

    8

    文章

    1698

    浏览量

    45970
  • OpenCV
    +关注

    关注

    31

    文章

    634

    浏览量

    41337

原文标题:这个秋天,OpenCV和MCU更配哟

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV

    1 简介 Opencv(Open Source Computer Vision Library)是一个基于开源发行的跨平台计算机视觉库,它实现了图像处理和计算机视觉方面的很多通用算法,已成为计算机
    发表于 12-14 09:31

    AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV

    1简介Opencv(OpenSourceComputerVisionLibrary)是一个基于开源发行的跨平台计算机视觉库,它实现了图像处理和计算机视觉方面的很多通用算法,已成为计算机视觉领域最有
    的头像 发表于 12-14 09:10 175次阅读
    AI模型<b class='flag-5'>部署</b>边缘设备的奇妙之旅:如何在边缘端<b class='flag-5'>部署</b><b class='flag-5'>OpenCV</b>

    RK3568 + OpenCV 会碰撞出什么火花?案例详解:2-1 基于OpenCV的画线实验

    一、实验目的 本节视频的目的是了解OpenCV的作用并通过OpenCV实现画线。 二、实验原理 OpenCV 开放源代码计算机视觉库 OpenCV(Open source Comput
    发表于 12-03 14:09

    【龙芯2K0300蜂鸟板试用】5 搭建opencv开发环境

    在官方提供的buildroot根文件系统中,不支持opencv库,故需要自己增加,另外,在本地编译的时候,需要在本地(ubuntu)上安装对应opencv库,这样才能将编译好的镜像放到板子上跑起来
    发表于 08-27 15:08

    OpenCV图像识别C++代码

    安装OpenCV库 首先,您需要在您的计算机上安装OpenCV库。您可以从OpenCV官网下载预编译的库或从源代码编译。安装完成后,确保将OpenCV的头文件和库文件添加到您的项目中。
    的头像 发表于 07-16 10:42 1967次阅读

    opencv-python和opencv一样吗

    不一样。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。OpenCV
    的头像 发表于 07-16 10:38 1159次阅读

    opencv的主要功能有哪些

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了大量的计算机视觉算法和工具。以下是OpenCV的主要功能: 图像处理
    的头像 发表于 07-16 10:35 1496次阅读

    基于OpenCV的人脸识别系统设计

    基于OpenCV的人脸识别系统是一个复杂但功能强大的系统,广泛应用于安全监控、人机交互、智能家居等多个领域。下面将详细介绍基于OpenCV的人脸识别系统的基本原理、实现步骤,并附上具体的代码示例。
    的头像 发表于 07-11 15:37 1.2w次阅读

    OpenCV携奥比中光3D相机亮相CVPR 2024

    和机器学习软件库,提供丰富的图像处理和计算机视觉算法。奥比中光与OpenCV的深入合作,使得复杂的3D感知项目开发变得简单高效。全球开发者及企业用户可借助奥比中光先进的3D相机技术和OpenCV全面的软件支持,进行快速原型设计、测试和
    的头像 发表于 06-21 09:38 544次阅读

    I.MX6ULL-飞凌 ElfBoard ELF1板卡 - 如何在Ubuntu中编译OpenCV库(X86架构)

    在之前发布的文章中探讨了交叉编译OpenCV部署至嵌入式系统的方法。然而,在调试阶段,我们发现在 Ubuntu 环境下将 OpenCV 编译为 X86 架构可能更加方便和高效。 通过在主机上编译并
    发表于 06-07 09:32

    嵌入式学习-飞凌ElfBoard ELF 1板卡 - 如何在Ubuntu中编译OpenCV

    在之前发布的文章中探讨了交叉编译OpenCV部署至嵌入式系统的方法。然而,在调试阶段,我们发现在 Ubuntu 环境下将 OpenCV 编译为 X86 架构可能更加方便和高效。 通过在主机上编译并
    发表于 06-07 09:21

    ELF 1技术贴|如何在Ubuntu中编译OpenCV

    在之前发布的文章中探讨了交叉编译OpenCV部署至嵌入式系统的方法。然而,在调试阶段,我们发现在Ubuntu环境下将OpenCV编译为X86架构可能更加方便和高效。通过在主机上编译并使用X86架构
    的头像 发表于 05-31 16:41 1162次阅读
    ELF 1技术贴|如何在Ubuntu中编译<b class='flag-5'>OpenCV</b>库

    使用 Renesas RA8M1 MCU 快速地部署强大高效的 AI 和 ML 功能

    新的工作负载会增加功耗,尽管要求设计人员尽量降低功耗并加快产品上市时间。 设计人员需要一个计算选项,既能保持 MCU 的效率,又能增加专为低功耗应用定制的高性能功能。这一选项还应保留与传统 MCU 相关的简单部署模式,同时增加足
    的头像 发表于 05-05 10:14 607次阅读
    使用 Renesas RA8M1 <b class='flag-5'>MCU</b> 快速地<b class='flag-5'>部署</b>强大高效的 AI 和 ML 功能

    基于OpenCV DNN实现YOLOv8的模型部署与推理演示

    基于OpenCV DNN实现YOLOv8推理的好处就是一套代码就可以部署在Windows10系统、乌班图系统、Jetson的Jetpack系统
    的头像 发表于 03-01 15:52 1583次阅读
    基于<b class='flag-5'>OpenCV</b> DNN实现YOLOv8的模型<b class='flag-5'>部署</b>与推理演示

    OpenCV零代码实现线段距离测量

    OpenMV2024版本即将发行,支持多种主流深度学习模型从训练到部署,支持更多传统OpenCV算子流程设计与组合,支持一键导出流程,相比2023版本OpenMV,提供更多辅助开发工具。
    的头像 发表于 01-08 09:15 618次阅读
    <b class='flag-5'>OpenCV</b>零代码实现线段距离测量