0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

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

3天内不再提示

OpenMV源码细读

云深之无迹 来源:云深之无迹 作者:云深之无迹 2022-10-08 10:30 次阅读

最近在看OpenMV的源码,和往前一样,经常会卡住,还是对C不够了解,一知半解的,这些文章不以读源码为主,但是会写一下我日常不见的东西。

OpenMV初体验

2a41c2f2-461d-11ed-96c9-dac502259ad0.png

OpenMV最大的卖点就是相对廉价的嵌入式机器视觉了,但是瓶颈其实在IO和运算速度上面。前者就是使用PSRAM这样的缓冲器,后面就是使用主频高的MCU。但是一切都有尽头,无妨,几十块钱

2a6e8d1e-461d-11ed-96c9-dac502259ad0.png

目前官方支持得板子是这些得,别的芯片需要移植

2aa2b72e-461d-11ed-96c9-dac502259ad0.png

下载的库里面有很多的Bin文件,这里就是说明文件的作用

2acbe392-461d-11ed-96c9-dac502259ad0.png

这个是makefile文件里面定义要用的编译器

2b549c00-461d-11ed-96c9-dac502259ad0.png

这个定义的一些目录

OMV是这个项目最重要的东西,一切魔法的起源,UVC是USB Video devices,CM4是ARM内核,还有STM32AI应用,以及下面就是一些CMOS的驱动了,也是最重要的。

2b7bb1dc-461d-11ed-96c9-dac502259ad0.png

这个就是缓存器的一些操作函数,无参数无返回的,那就是过程了

2ba9df76-461d-11ed-96c9-dac502259ad0.png

这个是控制CMOS的Cambus协议,要使用IIC,这里是针对STM32的

2bec4b18-461d-11ed-96c9-dac502259ad0.png

还有模拟的USB设备,传输视频使用

2c12284c-461d-11ed-96c9-dac502259ad0.png

好像是一些高级的东西

2c9f8002-461d-11ed-96c9-dac502259ad0.png

还有延时的封装函数

2cde0930-461d-11ed-96c9-dac502259ad0.png

STM32的片子最少都是F4的片子了

2d1edc76-461d-11ed-96c9-dac502259ad0.png

UVC在OpenMV里面是一个占比很大的部分,我为此写了一篇没有写完的文章。

2d446b3a-461d-11ed-96c9-dac502259ad0.png

这个就是我们树莓派Pico的配置文件了

2d626c98-461d-11ed-96c9-dac502259ad0.png

OMV这个文件夹就是我们OpenMV这个项目的精华所在了

2d8a7580-461d-11ed-96c9-dac502259ad0.png

这个是以字符串数组写进去的demo

2e31fe4a-461d-11ed-96c9-dac502259ad0.png

这些都是支持的传感器,在传感器这个目录里面,后期扩展的话,可以按照样式自己适配自己的传感器。

2e8dfcd6-461d-11ed-96c9-dac502259ad0.png

通过寄存器,cambus协议和传感器的头文件连在一起

2eb03350-461d-11ed-96c9-dac502259ad0.png

文件在这里,项目里面一些公用的函数封装在这里

2ed3261c-461d-11ed-96c9-dac502259ad0.png

本土狗就见过这个传感器

2ef76b8a-461d-11ed-96c9-dac502259ad0.png

ov2640的一个时钟的频率,和对传感器的一个初始化

2f342a5c-461d-11ed-96c9-dac502259ad0.png

这个是OV2640寄存器的定义

2f588348-461d-11ed-96c9-dac502259ad0.png

基本上都是宏定义了

2fd15188-461d-11ed-96c9-dac502259ad0.png

传感器的一个初始化,看下这个操作的结构体

302967ba-461d-11ed-96c9-dac502259ad0.png

这里是传感器的ID,在结构体的一开始被定义

304b681a-461d-11ed-96c9-dac502259ad0.png

camsbus就是IIC的协议,上面第一个就是写了这个IIC的协议的地址,下面按照这个结构体里面写的是硬件的标志位,至于是什么意思,这里的注释就写进去了,有一些我还是看不懂的。

30d2e880-461d-11ed-96c9-dac502259ad0.png

行同步信号回调+帧回调+看不懂+重启

313d586e-461d-11ed-96c9-dac502259ad0.png

这个就是回调的一个定义,就长这样的

316b4d32-461d-11ed-96c9-dac502259ad0.png

私有的话,这里就是高和低我也不懂是哪里的

318a446c-461d-11ed-96c9-dac502259ad0.png

像素格式的功能开端,一个是YUV,可变格式,颜色,动态范围,拜尔格式

31ce8140-461d-11ed-96c9-dac502259ad0.png

这个是图像的编码格式

32216fe0-461d-11ed-96c9-dac502259ad0.png

这个是视频的分辨率列表

325da082-461d-11ed-96c9-dac502259ad0.png

这个函数就吊了,具体其实定义就是这样的

怎么起作用呢?就是通过参数的不同输入达到一种不同的函数功能。

328c284e-461d-11ed-96c9-dac502259ad0.png

参数设计的有Python那一套的感觉了

32b0d374-461d-11ed-96c9-dac502259ad0.png

把传感器的结构体的使用范围扩展一下,以及使用2维数组来放分辨率的信息

32d131f0-461d-11ed-96c9-dac502259ad0.png

下面还有一些函数,初始化有两种,一个是状态,一个是硬件

具体的实现,先不看。

339cfd94-461d-11ed-96c9-dac502259ad0.png

但是可以看一下这个初始化的函数使用

341d5d2c-461d-11ed-96c9-dac502259ad0.png

结构体的值和函数的参数混在一起

344c28e6-461d-11ed-96c9-dac502259ad0.png

每一个传感器大概都是通过这样的被定义

348a696c-461d-11ed-96c9-dac502259ad0.png

完整的传感器结构体定义,这里就写的很乱了,文章写了两天了都

34ac17b0-461d-11ed-96c9-dac502259ad0.png

传感器的各种状态,需要来输出

代码中大量看到Void*,有什么用? void*有什么用呢?实际上我们在很多接口中都会发现它们的参数类型都是void*,例如:

ssize_t read(int fd, void *buf, size_t count); 
void *memcpy(void *dest, const void *src, size_t n);
为何要如此设计?因为对于这种通用型接口,你不知道用户的数据类型是什么,但是你必须能够处理用户的各种类型数据,因而会使用void*。void*能包容地接受各种类型的指针。也就是说,如果你期望接口能够接受任何类型的参数,你可以使用void*类型。但是在具体使用的时候,你必须转换为具体的指针类型。例如,你传入接口的是int*,那么你在使用的时候就应该按照int*使用。

因为这里有大量的Makefile文件,VSCode推荐这个插件

351ce206-461d-11ed-96c9-dac502259ad0.png

这么贵的x1c连个win11都不能装,笑死了

文章没有达到自己预期的样子,寄了,国庆完了。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 缓冲器
    +关注

    关注

    6

    文章

    1569

    浏览量

    44885
  • PSRAM
    +关注

    关注

    0

    文章

    32

    浏览量

    13159
  • openMV
    +关注

    关注

    3

    文章

    29

    浏览量

    9688

原文标题:OpenMV-源码细读.1

文章出处:【微信号:TT1827652464,微信公众号:云深之无迹】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    COCOFLY 教程 ——疯壳无人机·系列快速·快速上手【3】OPENMV脚本烧写

    ,具体步骤如下:(1)打开openmv die,如下图所示。(2)打开提供的python源码,直接把mvCtrl.py拖到openmv die中即可。中途可能会出现要求更新,激活等,无需理会 点“否”。(3
    发表于 03-26 11:55

    OpenMv和STM32通信问题

    OpenMv和STM32通信OpenMv和STM32通信问题OpenMv和STM32通信前言一、OpenMv配置二、Stm32配置总结前言最近一段时间都在捣鼓
    发表于 08-16 07:44

    OpenMV与TC264的相关资料推荐

    器件:OpenMVMM32单片机一、采用串口通信串口通信想必大家都知道,这里就不多赘述了,如果有不了解的可以看我的往期文章【STM32】HAL库 CubeMX例程三—串口中断通信(2)(附工程源码
    发表于 02-22 08:01

    OpenMV是什么?openmv4的作用有哪些

    OpenMV是什么?openmv4的作用有哪些?
    发表于 02-22 06:40

    【疯壳·无人机教程4】开源编队无人机-OPENMV 脚本烧写

    )打开 openmv die,如下图所示。图2 (2)打开提供的 python 源码,直接把 mvCtrl.py 拖到 openmv die 中即可。图3图4 中途可能会出现要求更新,激活等,无需理会
    发表于 08-22 15:43

    OpenMv也是一个单片机

    还是对openmv的基础运用作以介绍。
    发表于 11-14 09:51 7次下载
    <b class='flag-5'>OpenMv</b>也是一个单片机

    【星曈科技】OpenMv笔记——利用OpenMV与STM32进行串口通信

    利用OpenMV与STM32进行串口通信OpenMV端的程序# Untitled - By: dell - 周一 7月 19 2021# Blob Detection and uart
    发表于 12-24 18:51 27次下载
    【星曈科技】<b class='flag-5'>OpenMv</b>笔记——利用<b class='flag-5'>OpenMV</b>与STM32进行串口通信

    STM32与openmv通信(HAL库)

    最近需要用到openmv进行追踪物体,所以在此做个小结,其中这些文章给我很大的帮助,建议可以去看超详细OpenMV与STM32单片机通信 以及星瞳科技官网实验目的:openmv追踪物体颜色,将物体
    发表于 12-24 19:16 22次下载
    STM32与<b class='flag-5'>openmv</b>通信(HAL库)

    OpenMV与单片机串口通信交互

    器件:OpenMVMM32单片机一、采用串口通信串口通信想必大家都知道,这里就不多赘述了,如果有不了解的可以看我的往期文章【STM32】HAL库 CubeMX例程三—串口中断通信(2)(附工程源码
    发表于 12-27 19:21 20次下载
    <b class='flag-5'>OpenMV</b>与单片机串口通信交互

    openmv4系列1----基本认知

    openmv4系列1----基本认知1.openmv的由来  OpenMV是一个开源,低成本,功能强大的机器视觉模块。以STM32F427CPU为核心,集成了OV7725摄像头芯片,在小巧的硬件模块
    发表于 12-29 18:51 8次下载
    <b class='flag-5'>openmv</b>4系列1----基本认知

    OPENMV和STM32的识别追踪小车(详细版)之OPENMV

    OPENMV和STM32的识别追踪小车(详细版)实现:通过OPENMV识别Apriltags标签,STM32驱动小车追踪标签博主通过一段时间的学习,做了这个比较简单的以OPENMV为摄像传感器
    发表于 01-13 12:05 0次下载
    <b class='flag-5'>OPENMV</b>和STM32的识别追踪小车(详细版)之<b class='flag-5'>OPENMV</b>端

    【DIY】基于OpenMV的STM32追球小车

    [DIY]基于openMV的追球小车总体设计1.基础硬件DIY设计1).整体原理图2).PCB电路3).3D_PCB2.openMV简单识别程序设计 与 STM32控制程序设计1)openMV
    发表于 01-14 13:01 33次下载
    【DIY】基于<b class='flag-5'>OpenMV</b>的STM32追球小车

    OpenMV Cam上的RPC模块

    OpenMV Cam 上的rpc模块允许您将 OpenMV Cam 连接到另一台微控制器或计算机,并在 OpenMV Cam 上执行远程 Python(或过程)调用。
    的头像 发表于 10-08 10:28 1093次阅读

    OpenMV初识

    OpenMV是由美国克里斯团队基于MicroPython发起的开源机器视觉项目,目的是创建低成本,可扩展,使用python驱动的机器视觉模块。OpenMV搭载了MicroPython解释器,使其可以
    的头像 发表于 06-12 11:23 1677次阅读
    <b class='flag-5'>OpenMV</b>初识

    OpenMV-AGAST算法代码解析

    我以前研究过一段时间的OpenMV源码,当时的功力太浅,看不大懂,现在又重新的翻出来看。
    的头像 发表于 08-07 14:19 892次阅读
    <b class='flag-5'>OpenMV</b>-AGAST算法代码解析