痞子衡嵌入式:恩智浦机器视觉模块OpenMV-RT那些事(1)- 初体验
大家好,我是痞子衡,是正经搞技术的痞子。本系列痞子衡给大家介绍的是机器视觉模块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 IDE下载地址: https://openmv.io/pages/download
三、运行模块
关于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)- 初体验的更多相关文章
- 痞子衡嵌入式:如果i.MX RT是一匹悍马,征服它时别忘了用马镫MCUBootUtility
-- 跨界之风吹满地,先锋当属NXP; 微控制器谁独骚?当仁不让看RT! 恩智浦半导体2017年10月正式发布了业内首款跨界处理器-i.MX RT系列,这是MCU界的汗血宝马,更是一匹桀骜不驯的悍马. ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(8)- 从Raw NAND启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Raw NAND启动. 前面铺垫了七篇启动系列文章,终于该讲具体Boot Device了,我们知道i. ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(9)- 从Parallel NOR启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Parallel NOR启动. 上一篇讲i.MXRT从Raw NAND启动的文章 从Raw NAND启 ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(13)- 从Serial(1-bit SPI) EEPROM/NOR恢复启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial EEPROM/NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启 ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 FlexSPI NOR启动时间. 痞子衡刚刚拿到i.MXRT1170 B0版本的芯片,迫不及待地在上面跑了 ...
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU特性那些事(1)- 概览
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的基本特性. 恩智浦半导体于2017年开始推出的i.MX RT系列重新定义了MCU,其第一款芯片i. ...
- 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具NXP-MCUBootUtility用户指南
NXP MCU Boot Utility English | 中文 1 软件概览 1.1 介绍 NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP M ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(3)- Serial Downloader模式(sdphost/MfgTool)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial Downloader模式. 在上一篇文章 Boot配置(BOOT Pin, eFUSE) ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(5)- 再聊eFUSE及其烧写方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的eFUSE. 在i.MXRT启动系列第二篇文章 Boot配置(BOOT Pin, eFUSE) 里痞子 ...
随机推荐
- SpringBoot整合MybatisPlus3.X之Sequence(二)
数据库脚本 DELETE FROM user; INSERT INTO user (id, name, age, email) VALUES (, , 'test1@baomidou.com'), ...
- weex不支持类的动态追加
做一个weex项目时遇到需要根据状态动态改变样式的功能,本来想通过判断属性追加类的方式实现,如下: :class="['long-news',{'bold-txt':noRead}]&quo ...
- Android原生PDF功能实现:PDF阅读、PDF页面跳转、PDF手势伸缩、PDF目录树、PDF预览缩略图
1.背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效.实用. 经过两天的调研.编码,实现了一个简单Demo,如上图所示. 关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开发的 ...
- java常用类 比较器/system/math/big
Java 比较器 自然排序:java.lang.Comparable 定制排序:java.util.Comparator 自然排序:java.lang.Comparable Comparable接口 ...
- 第二十五章 system v消息队列(一)
IPC对象的持续性 随进程持续 :一直存在直到打开的最后一个进程结束.(如pipe和FIFO) 随内核持续 :一直存在直到内核自举(内核自举就是把主引导记录加载到内存,并跳转执行这段内存)或显示删除( ...
- 【XSY2484】mex
Description 给你一个无限长的数组,初始的时候都为0,有3种操作: 操作1是把给定区间[l,r] 设为1, 操作2是把给定区间[l,r] 设为0, 操作3把给定区间[l,r] 0,1反转. ...
- 重邮二进制群-pwn1
给学弟们练手的题目,做的过程中接触一些基本概念 #include <stdio.h> #include <unistd.h> int main() { ]; welcome() ...
- [考试反思]0901NOIP模拟测试34:游离
又是放假回来的收心考.幸而熬了夜回来也不至于很困(虽说第二天早上困成狗...) 说分数吧: skyhAK300,后面有220,220,220,190,190,180 我170,排第8.凑合,其实不太满 ...
- CSPS模拟 83
紧张起来,集训已过半! 稍微有点惆怅.. T1 什么玩意,神仙树形dp? 没思路,先去T2. (遇到难题就绕过去是真的爽啊) T2 $n^2$暴力很好打 组合数是不是有规律? 找一下规律,发现十分眼熟 ...
- CSPS模拟 52
我貌似曾经说过我是个只会做水题的巨型辣鸡.. 这次证明我水题都不会做.. T1 平均数 区间数$n^2$ 枚举是不可能了 可是好像没有无用的计算量.. 刚想到这里,此时开考15min 看见天皇比手势说 ...