STM32单片机RT Thread + Micropython + OpenMV + USB摄像头移植整合过程

按照之前设定的计划,利用业余时间做了这么一个项目。目标是基于RT Thread实时操作系统,将Micropython、OpenMV、USB摄像头+模拟摄像头+STM32本身自带的DVP摄像头,在OpenMV框架下,全部引入进来。这样的话,该软件平台同时具备了RTOS、Python脚本、USB OpenMV串口驱动、存储设备如SPI flash驱动,SD卡驱动、U盘驱动(和OpenMV串口组成一个USB Composite驱动,用来连电脑),其中U盘驱动可以用SD卡或者SPI flash作为介质。并实现了一个简单的FAT32文件系统,可以在SD卡或者SPI flash上使用。

USB摄像头和模拟摄像头的引入,使得带OpenMV算法的STM32H7等单片机硬件能够应用的范围大大拓展了。这种允许长连接线连接的摄像头,可以将摄像头模组和电路板分开,能够应用在网络摄像头,行车记录仪等场合。

RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过近 12 个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。相较于 Linux 操作系统,RT-Thread 体积小,成本低,功耗低、启动快速,除此以外 RT-Thread 还具有实时性高、占用资源小等特点,非常适用于各种资源受限(如成本、功耗限制等)的场合。在 RT-Thread 系统中,任务通过线程实现的,RT-Thread 中的线程调度器也就是以上提到的任务调度器。具体参考RT-Thread官网介绍

MicroPython运行的完整的Python编译器和运行时。 您将获得交互式提示(REPL),以便立即执行命令,以及从内置文件系统运行和导入脚本的功能。 REPL具有历史记录,选项卡完成,自动缩进和粘贴模式,以获得良好的用户体验。MicroPython致力于与普通Python(称为CPython)尽可能兼容,以便如果您会使用Python,就可以玩转MicroPython。除了实现一系列核心Python库之外,MicroPython还包括访问硬件的“machine”等模块。具体参考Micropython官网

OpenMV可以用来做:

  1. DIY相关的项目制作,比如追踪小球的车,云台,或者解魔方的机器人。
  2. 对成本要求很高的嵌入式工业方案,比如流水线物品的分拣。

OpenMV实现了画图, 寻找色块, AprilTag标记跟踪, 模板匹配, 多模板匹配, 特征点检测, 测距, 扫码识别, 颜色形状同时识别, 颜色模板匹配同时识别, 分辨不同人脸等算法,甚至还带了简单的TensorflowLite库。详情访问OpenMV国内官网:OpenMV | 星瞳科技

下图是使用USB摄像头运行的效果:

USB摄像头驱动是基于我之前的STM32单片机实现连接USB摄像头,OpenMV及其模拟摄像头实现方法参考OpenMV增加支持模拟摄像头。另外移植解决了如下问题:

1、新版本OpenMV-3.5.1移植到RT thread,RTT官方目前没有成功移植的OpenMV版本供下载使用。这上面主要解决了RTT Micropython需要的8bit QSTR函数映射。当然参考的是OpenMV源码的映射方式,但是官方源码是16bit,需要小做修改。

2、我自己做的USB摄像头驱动优化了一下,目前优化后占用CPU可以做到更少。

3、OpenMV源码中JPEG压缩的实现采用查询的方式,改成了中断的方式实现,这种实现方式占用CPU更少一点。后期可以尝试采用DMA的方式,进一步减少对CPU资源的占用。

4、参考OpenMV串口功能,在RT Thread USB device驱动框架架构下实现了一个OpenMV串口,用来和OpenMV IDE实时算法调试时使用。

5、测试了一些简单的OpenMV算法如canny/Sobel边缘增强、颜色识别/追踪、人脸识别等,都没有问题。理论上其它算法正常跑起来,不会有任何问题。

结尾附上USB摄像头的测试python代码:

# Untitled - By: chummyhe - 周一 五月 11 2020

import sensor, image, time

sensor.reset()

sensor.set_pixformat(sensor.YUV422)

sensor.set_framesize(sensor.QVGA)

sensor.skip_frames(time = 2000)

clock = time.clock()

while(True):

    clock.tick()

    img = sensor.snapshot()

    print(clock.fps())

  • 14
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
RT-Thread 作品秀】基于RT-Thread的网络照相机作者:吴顶顶 概述随着科技的进步和互联网的发展,基于物联网的可拍照设备也越来越多的融入到人们的生活中来,例如在超市中,管理者利用拍照设备定时抓取货架照片,分析货物状态,并补充、优化货物摆放;在酒吧里,管理者会利用拍照设备定时抓拍酒架照片,传送到网络平台供大众浏览,以招揽更多顾客。本网络照相机基于STM32H7+RTThread平台,采集摄像头数据,并通过无线网络传送到服务器,提供SD卡配网、手动拍摄、定时拍摄、照片推送等功能,并提供windows上位机提供控制和照片显示功能。 主要功能有: 格式化sd卡:格式化sd卡,但是会保留网络配置文件,其他文件全部删除 设备重启:重启设备 实时拍照:发送指令给照相机,照相机拍照,并把照片回传 定时拍照:照相机依据下发的拍照时间,在时间到达时拍摄一张照片,并传给服务器 按键拍照:点击板上用户按钮,拍摄一张照片,并传给服务器 定时任务:可以新建/删除/查询定时拍照任务,任务存储在sd卡中,重启有效 开发环境硬件:ART-PI(STM32H750主控)+ OV2640模组 RT-Thread版本:4.0.3 SDK 版本:1.0.1 开发工具及版本:RT-Thread Studio 1.1.5, Qt5.14.0 RT-Thread使用情况概述内核部分:调度器,信号量,互斥锁,内存管理 调度器:多任务调度 信号量:用于唤醒对应任务 互斥锁:用于互斥资源独占访问 内存管理:动态内存申请与释放 组件部分:虚拟文件系统,IPC,I2C,RTC,NTP 虚拟文件系统:文件操作,sd卡、照片文件 IPC:mqtt发送数据需要 I2C:配置摄像头模块需要 RTC和NTP:同步时间 软件包部分:paho mqtt,cJSON,netutils pahomqtt:用于和服务器通信 cJSON:解析、封装mqtt消息 netutils:NTP网络对时 其他:base64 用于将图片文件转换成字符串,便于mqtt传输 硬件框架总体的硬件框架如下图所示: 本网络摄像机硬件结果较为简单,即art-pi连接一个摄像头模组,art-pi板上用到了AP6212无线模块,外部内存,led指示灯,和sd卡。其中,摄像头模块用于采集图像信号;AP6212用于和服务器进行通信;因一张图像数据量较大,片内内存不够,故而使用外部内存;led灯用于指示设备工作状态;sd卡用于保存网络、服务器、和定时任务配置。 软件框架说明整体的软件框架如下图所示,网络照相机内部有一个proxy线程,负责和云端进行通信,在接收到云端消息后会解析,并分发到其他的线程执行,然后将执行结果返回到云端;照相机发生了其他的事件,例如用户按键拍照,也会将数据传给proxy线程,proxy线程再将数据发送到云端。用户通过上位机终端软件连接上云服务器,实现与照相机的通信及控制。 整个系统支持接入多个照相机,如下图所示,不同的照相机通过sd卡配置文件中sn进行区分,上位机软件可以显示所有在线的照相机,但同一时间只支持操作一个。 软件模块说明1. 用户线程创建流程如下图所示为用户线程创建流程 用户线程作用描述如下: main:用于创建sd_card 线程,检测按键事件,闪灯; sd_card:用于管理与sd卡相关的工作,包括拍照,网络配置,定时任务; network:负责联网,根据sd卡的配置文件连接到指定的wifi网络; proxy:负责启动mqtt,并管理与云端的通信,其他线程都需要通过proxy线程与云端交互数据; event:定时任务和按键任务,在定时时间到达时,或者用户按键时拍摄照片并通过proxy上传云端。 2. 通信接口及流程2.1 MQTT订阅主题设备向服务器订阅主题: /ter/query/discovery,用于接收设备发现消息 /ter/sn/request,用于接收针对该设备的指令,其中sn为设备的SN号,下同 客户端向服务器订阅主题: /dev/response/discovery,用于接收设备发现回复 /dev/response/will,用于接收设备遗嘱消息 /dev/sn/response,用于接收设备操作指令回复 /dev/sn/event,用于接收设备的通知 2.2 设备发现所有的设备均订阅/ter/query/discovery主题,客户端向该主题发布发现消息,所有收到消息的设备向/dev/response/discovery回复一条消息,而客户端又订阅了/dev/response/discovery主题,故而便可以知道哪些设备在线了。 设备连上服务器的时候,会定义一个遗嘱消息,主题为/dev/sn/will,客户端订阅了该主题,当设备因为某些原因掉线,则超过一定时间之后,
引用\[2\]:基于RT Thread实时操作系统,将MicropythonOpenMVUSB摄像头+模拟摄像头+STM32本身自带的DVP摄像头,在OpenMV框架下,全部引入进来。这样的话,该软件平台同时具备了RTOS、Python脚本、USB OpenMV串口驱动、存储设备如SPI flash驱动,SD卡驱动、U盘驱动。其中U盘驱动可以用SD卡或者SPI flash作为介质。并实现了一个简单的FAT32文件系统,可以在SD卡或者SPI flash上使用。\[2\] 问题: stm32+openmv云台是什么? 回答: stm32+openmv云台是一个项目,它基于RT Thread实时操作系统,将MicropythonOpenMVUSB摄像头+模拟摄像头+STM32本身自带的DVP摄像头引入进来。这个项目的目标是实现一个软件平台,同时具备RTOS、Python脚本、USB OpenMV串口驱动、存储设备如SPI flash驱动、SD卡驱动、U盘驱动,并实现了一个简单的FAT32文件系统,可以在SD卡或者SPI flash上使用。\[2\] #### 引用[.reference_title] - *1* *2* [STM32单片机RT Thread + Micropython + OpenMV + USB摄像头移植整合过程](https://blog.csdn.net/chummyhe/article/details/109516924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于stm32+amg8833+openmv实现的人脸跟随测温仪](https://blog.csdn.net/keepfightingbob/article/details/107314942)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值