0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenMV源碼細(xì)讀

云深之無跡 ? 來源:云深之無跡 ? 作者:云深之無跡 ? 2022-10-08 10:30 ? 次閱讀

最近在看OpenMV的源碼,和往前一樣,經(jīng)常會卡住,還是對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內(nèi)核,還有STM32AI應(yīng)用,以及下面就是一些CMOS的驅(qū)動了,也是最重要的。

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

這個就是緩存器的一些操作函數(shù),無參數(shù)無返回的,那就是過程了

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

這個是控制CMOS的Cambus協(xié)議,要使用IIC,這里是針對STM32的

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

還有模擬的USB設(shè)備,傳輸視頻使用

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

好像是一些高級的東西

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

還有延時的封裝函數(shù)

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

這個是以字符串?dāng)?shù)組寫進(jìn)去的demo

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

這些都是支持的傳感器,在傳感器這個目錄里面,后期擴展的話,可以按照樣式自己適配自己的傳感器。

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

通過寄存器,cambus協(xié)議和傳感器的頭文件連在一起

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

文件在這里,項目里面一些公用的函數(shù)封裝在這里

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

傳感器的一個初始化,看下這個操作的結(jié)構(gòu)體

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

這里是傳感器的ID,在結(jié)構(gòu)體的一開始被定義

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

camsbus就是IIC的協(xié)議,上面第一個就是寫了這個IIC的協(xié)議的地址,下面按照這個結(jié)構(gòu)體里面寫的是硬件的標(biāo)志位,至于是什么意思,這里的注釋就寫進(jìn)去了,有一些我還是看不懂的。

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

行同步信號回調(diào)+幀回調(diào)+看不懂+重啟

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

這個就是回調(diào)的一個定義,就長這樣的

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

私有的話,這里就是高和低我也不懂是哪里的

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

像素格式的功能開端,一個是YUV,可變格式,顏色,動態(tài)范圍,拜爾格式

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

這個是圖像的編碼格式

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

這個是視頻的分辨率列表

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

這個函數(shù)就吊了,具體其實定義就是這樣的

怎么起作用呢?就是通過參數(shù)的不同輸入達(dá)到一種不同的函數(shù)功能。

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

參數(shù)設(shè)計的有Python那一套的感覺了

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

把傳感器的結(jié)構(gòu)體的使用范圍擴展一下,以及使用2維數(shù)組來放分辨率的信息

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

下面還有一些函數(shù),初始化有兩種,一個是狀態(tài),一個是硬件

具體的實現(xiàn),先不看。

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

但是可以看一下這個初始化的函數(shù)使用

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

結(jié)構(gòu)體的值和函數(shù)的參數(shù)混在一起

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

每一個傳感器大概都是通過這樣的被定義

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

完整的傳感器結(jié)構(gòu)體定義,這里就寫的很亂了,文章寫了兩天了都

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

傳感器的各種狀態(tài),需要來輸出

代碼中大量看到Void*,有什么用? void*有什么用呢?實際上我們在很多接口中都會發(fā)現(xiàn)它們的參數(shù)類型都是void*,例如:

ssize_t read(int fd, void *buf, size_t count); 
void *memcpy(void *dest, const void *src, size_t n);
為何要如此設(shè)計?因為對于這種通用型接口,你不知道用戶的數(shù)據(jù)類型是什么,但是你必須能夠處理用戶的各種類型數(shù)據(jù),因而會使用void*。void*能包容地接受各種類型的指針。也就是說,如果你期望接口能夠接受任何類型的參數(shù),你可以使用void*類型。但是在具體使用的時候,你必須轉(zhuǎn)換為具體的指針類型。例如,你傳入接口的是int*,那么你在使用的時候就應(yīng)該按照int*使用。

因為這里有大量的Makefile文件,VSCode推薦這個插件

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

這么貴的x1c連個win11都不能裝,笑死了

文章沒有達(dá)到自己預(yù)期的樣子,寄了,國慶完了。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 緩沖器
    +關(guān)注

    關(guān)注

    6

    文章

    1911

    瀏覽量

    45427
  • PSRAM
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    13304
  • openMV
    +關(guān)注

    關(guān)注

    3

    文章

    39

    瀏覽量

    9785

原文標(biāo)題:OpenMV-源碼細(xì)讀.1

文章出處:【微信號:TT1827652464,微信公眾號:云深之無跡】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    第19.1 章-星瞳科技 OpenMV視覺循跡功能 超詳細(xì)OpenMV與STM32單片機通信

    第19.1 章-[星瞳科技]OpenMV視覺循跡功能 超詳細(xì)OpenMV與STM32單片機通信 (有完整版源碼) 【星曈科技】OpenMv筆記——利用
    的頭像 發(fā)表于 08-20 11:41 ?807次閱讀
    第19.1 章-星瞳科技 <b class='flag-5'>OpenMV</b>視覺循跡功能 超詳細(xì)<b class='flag-5'>OpenMV</b>與STM32單片機通信

    COCOFLY 教程 ——瘋殼無人機·系列快速·快速上手【3】OPENMV腳本燒寫

    ,具體步驟如下:(1)打開openmv die,如下圖所示。(2)打開提供的python源碼,直接把mvCtrl.py拖到openmv die中即可。中途可能會出現(xiàn)要求更新,激活等,無需理會 點“否”。(3
    發(fā)表于 03-26 11:55

    OpenMv和STM32通信問題

    OpenMv和STM32通信OpenMv和STM32通信問題OpenMv和STM32通信前言一、OpenMv配置二、Stm32配置總結(jié)前言最近一段時間都在搗鼓
    發(fā)表于 08-16 07:44

    OpenMV與TC264的相關(guān)資料推薦

    器件:OpenMVMM32單片機一、采用串口通信串口通信想必大家都知道,這里就不多贅述了,如果有不了解的可以看我的往期文章【STM32】HAL庫 CubeMX例程三—串口中斷通信(2)(附工程源碼
    發(fā)表于 02-22 08:01

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

    OpenMV是什么?openmv4的作用有哪些?
    發(fā)表于 02-22 06:40

    【瘋殼·無人機教程4】開源編隊無人機-OPENMV 腳本燒寫

    )打開 openmv die,如下圖所示。圖2 (2)打開提供的 python 源碼,直接把 mvCtrl.py 拖到 openmv die 中即可。圖3圖4 中途可能會出現(xiàn)要求更新,激活等,無需理會
    發(fā)表于 08-22 15:43

    【星曈科技】OpenMv筆記——利用OpenMV與STM32進(jìn)行串口通信

    利用OpenMV與STM32進(jìn)行串口通信OpenMV端的程序# Untitled - By: dell - 周一 7月 19 2021# Blob Detection and uart
    發(fā)表于 12-24 18:51 ?27次下載
    【星曈科技】<b class='flag-5'>OpenMv</b>筆記——利用<b class='flag-5'>OpenMV</b>與STM32進(jìn)行串口通信

    STM32與openmv通信(HAL庫)

    最近需要用到openmv進(jìn)行追蹤物體,所以在此做個小結(jié),其中這些文章給我很大的幫助,建議可以去看超詳細(xì)OpenMV與STM32單片機通信 以及星瞳科技官網(wǎng)實驗?zāi)康模?b class='flag-5'>openmv追蹤物體顏色,將物體
    發(fā)表于 12-24 19:16 ?23次下載
    STM32與<b class='flag-5'>openmv</b>通信(HAL庫)

    OpenMV與單片機串口通信交互

    器件:OpenMVMM32單片機一、采用串口通信串口通信想必大家都知道,這里就不多贅述了,如果有不了解的可以看我的往期文章【STM32】HAL庫 CubeMX例程三—串口中斷通信(2)(附工程源碼
    發(fā)表于 12-27 19:21 ?20次下載
    <b class='flag-5'>OpenMV</b>與單片機串口通信交互

    openmv4系列1----基本認(rèn)知

    openmv4系列1----基本認(rèn)知1.openmv的由來??OpenMV是一個開源,低成本,功能強大的機器視覺模塊。以STM32F427CPU為核心,集成了OV7725攝像頭芯片,在小巧的硬件模塊
    發(fā)表于 12-29 18:51 ?8次下載
    <b class='flag-5'>openmv</b>4系列1----基本認(rèn)知

    OPENMV和STM32的識別追蹤小車(詳細(xì)版)之OPENMV

    OPENMV和STM32的識別追蹤小車(詳細(xì)版)實現(xiàn):通過OPENMV識別Apriltags標(biāo)簽,STM32驅(qū)動小車追蹤標(biāo)簽博主通過一段時間的學(xué)習(xí),做了這個比較簡單的以OPENMV為攝像傳感器
    發(fā)表于 01-13 12:05 ?0次下載
    <b class='flag-5'>OPENMV</b>和STM32的識別追蹤小車(詳細(xì)版)之<b class='flag-5'>OPENMV</b>端

    OpenMV Cam上的RPC模塊

    OpenMV Cam 上的rpc模塊允許您將 OpenMV Cam 連接到另一臺微控制器或計算機,并在 OpenMV Cam 上執(zhí)行遠(yuǎn)程 Python(或過程)調(diào)用。
    的頭像 發(fā)表于 10-08 10:28 ?1391次閱讀

    OpenMV初識

    OpenMV是由美國克里斯團(tuán)隊基于MicroPython發(fā)起的開源機器視覺項目,目的是創(chuàng)建低成本,可擴展,使用python驅(qū)動的機器視覺模塊。OpenMV搭載了MicroPython解釋器,使其可以
    的頭像 發(fā)表于 06-12 11:23 ?3747次閱讀
    <b class='flag-5'>OpenMV</b>初識

    OpenMV-AGAST算法代碼解析

    我以前研究過一段時間的OpenMV源碼,當(dāng)時的功力太淺,看不大懂,現(xiàn)在又重新的翻出來看。
    的頭像 發(fā)表于 08-07 14:19 ?1655次閱讀
    <b class='flag-5'>OpenMV</b>-AGAST算法代碼解析

    基于Vision Board上的openMV垃圾分類

    通過在Vision Board部署openMV實現(xiàn)垃圾分類。
    的頭像 發(fā)表于 06-17 10:49 ?556次閱讀
    基于Vision Board上的<b class='flag-5'>openMV</b>垃圾分類