大家好,我是痞子衡,是正经搞技术的痞子。本系列痞子衡给大家介绍的是机器视觉模块OpenMV-RT初体验。

  近些年机器视觉应用一直是个很火的方向,想象一下机器如果能长上“眼睛”,是不是就可以做一些人类才能做的事情,因此机器视觉是人工智能实现的一个重要基础。痞子衡当年硕士毕业论文课题就是工业相机图像处理相关的,算是机器视觉系统的前端核心。遥想十年以前,想要从事机器视觉系统的开发一直是比较复杂的,需要开发者有相当扎实的嵌入式开发基础,而现在一些机器视觉相关研究小组为了能让开发者把更多重心放在应用本身,推出了简洁易用的机器视觉模块,借助这些模块,即使没有太多嵌入式经验,也可以轻松玩机器视觉。今天痞子衡就带大家一起体验恩智浦推出的一款轻量级的机器视觉模块OpenMV-RT:

一、模块简介

  今天痞子衡要讲的模块全称是OpenMV-RT,这是一款基于恩智浦最近主打的i.MXRT超高性能系列MCU的视觉模块。如下是模块简图,从简图里可以看出,这款板子设计得非常简洁,基本除了MCU最小系统之外,仅包含四大部件:640x480数字摄像头传感器、九轴姿态传感器、串行SPI Flash(存放代码)、SD卡槽(文件系统):

  除此以外,模块还提供了标准OpenMV接口,可在OpenMV项目(关于OpenMV项目,痞子衡会在后续文章里细聊)生态里任意扩展其他功能模块:

Note: 更详细的模块介绍可见该模块设计者Rocky Song发表的微信文章 《基于i.MX RT1060的可编程视觉模块》

二、安装模块

2.1 购买模块和SD卡

  首先你需要有一块OpenMV-RT模块,不带SD卡的裸价是399元,镜头焦距有6种可选。此模块为第14届全国大学生智能车竞赛参赛选手提供过50元专享抵扣。

2.2 下载i.MXRT固件

  拿到OpenMV-RT模块后,为了保证模块能够正常运行,最好试着自己下载一次i.MXRT固件程序(防止厂商发货忘记烧录固件),固件程序工程放在github网站上,源代码是开源的。

  如果你不熟悉Git,那就按下图所示直接下载项目压缩包(记得Step1一定要做)。如果你熟悉Git,那就直接clone项目,并且checkout到omv_initial_integrate分支。

  痞子衡在第一节模块简图展示过模块有一个6-Pin的SWD接口,这个接口便是用于连接J-Link仿真器去下载i.MXRT固件程序进外部串行SPI Flash的。可按下图连接模块与J-Link仿真器:

  • J-Link.Pin6 (GND) -> 模块J1.6(GND)
  • J-Link.Pin1 (VCC) -> 模块J1.5(3.3V)
  • J-Link.Pin7 (SWC) -> 模块J1.3(SWC)
  • J-Link.Pin9 (SWD) -> 模块J1.2(SWD)

  使用Keil MDK(需v5.20以上)打开固件工程,选中“debug_flexspi” 然后编译该工程(约4分钟),最后点击下载(约2分钟),固件下载完成后需要给模块重新上电。

  • i.MXRT固件工程:\micropython-rocky\ports\prj_keil_rt1060\mpyrt1060.uvproj

2.3 安装OpenMV IDE

  因为OpenMV-RT模块实现了OpenMV IDE的调试监控协议。为了体验无需存盘一键下载并且监视模块帧缓冲的功能,以及启用虚拟串口功能,模块最好配合OpenMV IDE一起使用。

三、运行模块

  关于OpenMV-RT模块的运行,痞子衡将给大家演示一个基于CIFAR-10数据集的物体识别的应用。

3.1 插上SD卡(含CIFAR-10模型文件)

  OpenMV-RT模块需要配合SD卡一起使用,模块当前仅支持在SD上实现文件系统。痞子衡要演示的物体识别的应用预训练CIFAR-10数据集模型文件需要存放在SD卡里,模型文件包含两个文件:cifar10.network和cifar10_fast.network。

  • 预训练CIFAR-10数据集模型文件路径:\micropython-rocky\examples\rocky_test\multi_demos_extract_to_tfcard\

3.2 使用IDE连接模块

  先打开OpenMV IDE,然后给OpenMV-RT模块上电(如果是第一次连接),系统可能花较长时间(可能超过1分钟)来安装和配置驱动,请耐心等待。当OpenMV IDE左下角状态发生如下变化时,即表明驱动安装成功,并已识别出模块。

3.3 运行物体识别应用

  使用OpenMV IDE打开物体识别应用的Python源程序(是的,OpenMV-RT支持MicroPython语言,关于其原理痞子衡会在后续文章细聊),这个源程序其实包含了2个应用,一个是基于CIFAR-10的物体识别,另一个是基于LENet的数字识别。痞子衡想要演示的是物体识别,因此需要将Python源代码稍作如下修改:

  • 物体识别应用主程序:\micropython-rocky\examples\rocky_test\multi_demos_extract_to_tfcard\main.py
#...省略

while (True):
pyb.LED(1).off()
pyb.LED(2).off()
pyb.LED(3).on()
pyb.LED(4).off() #If you use RT1052, 'isFull' should be False
CIFAR10Test(40000000, isFull = True)
# RT1052 does not have enough RAM to run this
#LENetTest(40000000)

  程序修改完毕后,点击IDE左下角运行按钮,OpenMV-RT模块便开始运行Python程序,你可以在IDE里看到摄像头实时采集窗口。去网上随便找一张CIFAR-10训练的10种物体(飞机、汽车、鸟、猫、鹿、狗、蛙、马、船、卡车)的图片,痞子衡找了一张鹿的图片,并放在摄像头面前,可以看到采集窗口最上面显示了识别结果“deer”。

  至此,OpenMV-RT模块初体验痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页、CSDN主页、微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:恩智浦机器视觉模块OpenMV-RT那些事(1)- 初体验的更多相关文章

  1. 痞子衡嵌入式:如果i.MX RT是一匹悍马,征服它时别忘了用马镫MCUBootUtility

    -- 跨界之风吹满地,先锋当属NXP; 微控制器谁独骚?当仁不让看RT! 恩智浦半导体2017年10月正式发布了业内首款跨界处理器-i.MX RT系列,这是MCU界的汗血宝马,更是一匹桀骜不驯的悍马. ...

  2. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(8)- 从Raw NAND启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Raw NAND启动. 前面铺垫了七篇启动系列文章,终于该讲具体Boot Device了,我们知道i. ...

  3. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(9)- 从Parallel NOR启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Parallel NOR启动. 上一篇讲i.MXRT从Raw NAND启动的文章 从Raw NAND启 ...

  4. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(13)- 从Serial(1-bit SPI) EEPROM/NOR恢复启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial EEPROM/NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启 ...

  5. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 FlexSPI NOR启动时间. 痞子衡刚刚拿到i.MXRT1170 B0版本的芯片,迫不及待地在上面跑了 ...

  6. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU特性那些事(1)- 概览

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的基本特性. 恩智浦半导体于2017年开始推出的i.MX RT系列重新定义了MCU,其第一款芯片i. ...

  7. 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具NXP-MCUBootUtility用户指南

    NXP MCU Boot Utility English | 中文 1 软件概览 1.1 介绍 NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP M ...

  8. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(3)- Serial Downloader模式(sdphost/MfgTool)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial Downloader模式. 在上一篇文章 Boot配置(BOOT Pin, eFUSE) ...

  9. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(5)- 再聊eFUSE及其烧写方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的eFUSE. 在i.MXRT启动系列第二篇文章 Boot配置(BOOT Pin, eFUSE) 里痞子 ...

随机推荐

  1. Leetcode Tags(13)Tree

    1.前序.中序.后序递归方式遍历二叉树 public void preOrderRecur(Node T) { if (T != null) { System.out.print(T.val + &q ...

  2. python小例子(三)

    1.提高Python运行速度的方法 (1)使用生成器,节约大量内存: (2)循环代码优化,避免过多重复代码的执行: (3)核心模块使用cpython,pypy等: (4)多进程,多线程,协程: (5) ...

  3. vue-cli3没有config文件解决方案,在根目录加上vue.config.js文件

    module.exports = { /** 区分打包环境与开发环境 * process.env.NODE_ENV==='production' (打包环境) * process.env.NODE_E ...

  4. SpringCloud之Eureka服务注册与发现(一)

    一 Eureka的基本架构 Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper). Eureka 采用了 C-S 的设计架构 ...

  5. const var let 三者的区别

    1.const定义的变量不可以修改,而且必须初始化. ;//正确 const b;//错误,必须初始化 console.log('函数外const定义b:' + b);//有输出值 b = ; con ...

  6. map 与 set的使用

    1.map的使用 初始化的两种方式 a. const map = new Map([['name','ouycx'],['age', 20]]); b. const map = new Map(); ...

  7. ubuntu19.10桌面版

    一:安装ubuntu卡住,英伟达显卡兼容性问题 解决方法: 将 quite splash --- 改为 quite splash nomodeset 二:从零开始配置ubuntu19.10 sudo ...

  8. find 小案例

    说明:前几天对生产环境的一些重要数据进行备份时用到了find,查找特定符合条件的文件名后拷贝至指定目录,但是只拷贝了部分匹配到的文件 小案例模拟还原: [root@centos- ~]# ll /te ...

  9. 【模板】prufer序列

    如何构造一个prufer序列? 我们给一棵无根树的节点编上号,每次找到一个编号最小的度为1节点,删除它,并输出与它连接的点的编号,直到只剩下两个节点. 这样,我们就构造出来了一个prufer序列. 通 ...

  10. [无用]LNC李纳川的日常NC操作

    NC说他从不CE NC说他想明白了 表示嘲讽. 好吧好吧其实还是有一个美好的结局的. 虽说我在嘲讽他,但我并不会做TAT 大神吹牛没毛病,我个蒟蒻还是老老实实刷水题吧.