OpenMV入门介绍

OpenMV 入门 在之前做毕业设计时曾使用到了OpenMV,但找资料时发现很少有人可以把OpenMV讲的简单易懂。故而根据自己的学习心得书写此篇博客,希望可以帮助后续的学习者快速入门上手。准备好上述的软硬件以及编程基础后,我们来对OpenMV进行一个简单的介绍。接触过嵌入式的道友应该清楚,主流的51系列单片机和32系列单片机都是通过C语言来编写实际程序的。有过编程基础的道友也应该清楚Python语言的优越性,如果将Python和嵌入式编程结合起来,我们就得到了MicoPython语言,即使用Python来完成嵌入式编程。 阅读详情
AI摘要

OpenMV是一款可编程摄像头模块,支持图像处理和简单机器视觉应用。OpenARTmini在性能和价格上优于OpenMV,适用于机器视觉和神经网络模型部署。文章介绍了像素、分辨率、帧率等图像处理基础知识,以及OpenMV的感光元件设置、图像处理方法,如颜色识别、画图和测距等功能。此外,还涉及了串口通信、条形码和二维码的检测。

一、OpenMV是什么

  OpenMV是一款具有图像处理功能的可编程摄像头模块,可以实现简单的机器视觉应用,例如人脸检测、Apriltag追踪、圆形检测、矩形检测等。

二、OpenART mini与OpenMV对比

  (这里介绍另一款可编程摄像头模块OpenART mini,在功能上与OpenMV几乎无差别,但性能和价格都优于OpenMV)
  OpenART mini是逐飞科技在恩智浦的OpenART套件的基础上,去除非视觉部分而制作出来的迷你版。虽说只是迷你版,但“麻雀虽小,五脏俱全”。OpenART mini 不仅可以很轻松的完成机器视觉应用,还可以完成神经网络模型的部署。

比较项目OpenMV4 H7 PlusOpenART mini
价格599380
处理器STM32H743IIMIMXRT1064
主频480MHz600MHz
RAM1M1M
FLASH2M4M
编程环境MicropythonMicropython
OpenMV视觉库√√

三、图像处理背景知识

1.像素和分辨率

  • 像素:像素是数字图像中的最小单元。

  • 分辨率:分辨率指单位长度内像素点的数量,常用的度量为ppi(pixels per inch),即每英寸有多少像素点。

  感光元件是由很多个感光点构成的,比如有 640 × 480 640×480 640×480个点,每个点就是一个像素,把每个点的像素收集整理起来,就是一副图片,那么这张图片的分辨率就是 640 × 480 640×480 640×480:

在这里插入图片描述

2. 帧率

  帧率(FPS,Frames Per Second)就是每秒钟处理的图片数量,如果超过20帧,人眼就基本分辨不出卡顿。电影的帧率一般是24FPS,游戏的帧率一般都大于30FPS。

3.RGB三原色

  RGB指的是红绿蓝三种颜色,是光学三原色,所有的颜色都可以由这三种色彩混合而成。(三原色是依据人类视觉定义的,不存在绝对的三原色)

4.LAB颜色空间

  Lab是由一个亮度通道和两个颜色通道组成的。在Lab颜色空间中,每个颜色用L、a、b三个数字表示,各个分量的含义是这样的:

  • L 代表亮度
  • a 代表从绿色到红色的分量
  • b 代表从蓝色到黄色的分量

  Lab是基于人对颜色的感觉来设计的,更具体地说,它是感知均匀(perceptual uniform)的。Perceptual uniform的意思是,如果数字(即前面提到的L、a、b这三个数)变化的幅度一样,那么它给人带来视觉上的变化幅度也差不多。

  Lab相较于RGB与CMYK等颜色空间更符合人类视觉,也更容易调整:想要调节亮度就调节L通道,想要调节色彩平衡就分别调a和b。

四、OpenMV图像处理方法

1.感光元件

  OpenMV中使用sensor模块来设置感光元件的参数,具体使用方法如下:

import sensor#引入感光元件的模块

# 设置摄像头
sensor.reset()#初始化感光元件
sensor.set_pixformat(sensor.RGB565)#设置为彩色
sensor.set_framesize(sensor.QVGA)#设置图像的大小
sensor.skip_frames()#跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。

# 一直拍照
while(True):
    img = sensor.snapshot()#拍摄一张照片,img为一个image对象
自动增益/白平衡/曝光
  • sensor.set_auto_gain()
    自动增益开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动增益。
  • sensor.set_auto_whitebal()
    自动白平衡开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动白平衡。
  • sensor.set_auto_exposure(enable[, exposure_us])
    • enable 打开(True)或关闭(False)自动曝光。默认打开。
    • 如果 enable 为 False,则可以用 exposure_us 设置一个固定的曝光时间(以微秒为单位)。
窗口ROI

  ROI:Region Of Interest,图像处理中的术语“感兴趣区”。就是在要处理的图像中提取出的要处理的区域。

  • sensor.set_windowing(roi)
    roi的格式是(x, y, w, h)
    • x:ROI区域中左上角的x坐标
    • y:ROI区域中左上角的y坐标
    • w:ROI的宽度
    • h:ROI的高度

2.画图

  视觉系统通常需要给使用者提供一些反馈信息。直接在图像中显示出来,很直观。

画线
  • image.draw_line(line_tuple, color=White)
    在图像中画一条直线。
    • line_tuple的格式是(x0, y0, x1, y1),意思是(x0, y0)到(x1, y1)的直线。
    • 颜色可以是灰度值(0-255),或者是彩色值(r, g, b)的tupple。默认是白色
画框
  • image.draw_rectangle(rect_tuple, color=White)
    在图像中画一个矩形框。
    • rect_tuple 的格式是 (x, y, w, h)。
画圆
  • image.draw_circle(x, y, radius, color=White)
    在图像中画一个圆。
    • x,y是圆心坐标
    • radius是圆的半径
画十字
  • image.draw_cross(x, y, size=5, color=White)
    在图像中画一个十字
    • x,y是坐标
    • size是两侧的尺寸
写字
  • image.draw_string(x, y, text, color=White)
    在图像中写字 8x10的像素
    • x,y是坐标。
    • text是要写的字符串。
示例
# Hello World Example
#
# Welcome to the OpenMV IDE! Click on the green run arrow button below to run the script!

import sensor, image, time

sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(10) # 跳过10帧,使新设置生效
while(True):
    img = sensor.snapshot()         # Take a picture and return the image.
    img.draw_line((20, 30, 40, 50))
    img.draw_line((80, 50, 100, 100), color=(255,0,0))
    img.draw_rectangle((20, 30, 41, 51), color=(255,0,0))
    img.draw_circle(50, 50, 30)
    img.draw_cross(90,60,size=10)
    img.draw_string(10,10, "hello world!")

在这里插入图片描述

3. 寻找色块(颜色识别)

  OpenMV通过find_blobs()函数可以找到色块(带颜色的物体),返回色块的位置、高度、像素等信息。

find_blobs()函数
  • image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)
    • thresholds是颜色的阈值,在返回的色块对象blob可以调用code方法,来判断是什么颜色的色块。
    • x_stride(查找的色块的x方向上最小宽度的像素,默认为2)
    • y_stride(查找的色块的y方向上最小宽度的像素,默认为1)
    • invert(反转阈值,把阈值以外的颜色作为阈值进行查找)
    • area_threshold(面积阈值,如果色块被框起来的面积小于这个值,会被过滤掉)
    • pixels_threshold(像素个数阈值,如果色块像素数量小于这个值,会被过滤掉)
    • merge(合并,如果设置为True,那么合并所有重叠的blob为一个)
      注意:这会合并所有的blob,无论是什么颜色的。如果你想混淆多种颜色的blob,只需要分别调用不同颜色阈值的find_blobs。
    • margin(边界,如果设置为1,那么两个blobs如果间距1一个像素点,也会被合并)
find_blobs()返回值
  • for blob in img.find_blobs(thresholds):

    • blob.rect() 返回这个色块的外框——矩形元组(x, y, w, h)
    • blob.x() 返回色块的外框的x坐标(int)
    • blob.y() 返回色块的外框的y坐标(int)
    • blob.w() 返回色块的外框的宽度w(int)
    • blob.h() 返回色块的外框的高度h(int)
    • blob.pixels() 返回色块的像素数量(int)
    • blob.cx() 返回色块的外框的中心x坐标(int)
    • blob.cy() 返回色块的外框的中心y坐标(int)
    • blob.rotation() 返回色块的旋转角度(单位为弧度)(float)
    • blob.code() 返回一个16bit数字,每一个bit会对应每一个阈值
    • blob.count() 如果merge=True,那么就会有多个blob被合并到一个blob,这个函数返回的就是这个的数量
    • blob.area() 返回色块的外框的面积
    • blob.density() 返回色块的密度
示例
# Single Color RGB565 Blob Tracking Example
#
# This example shows off single color RGB565 tracking using the OpenMV Cam.

import sensor, image, time, math

threshold_index = 0 # 0 for red, 1 for green, 2 for blue

# Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max)
# The below thresholds track in general red/green/blue things. You may wish to tune them...
thresholds = [(30, 100, 15, 127, 15, 127), # generic_red_thresholds
              (30, 100, -64, -8, -32, 32), # generic_green_thresholds
              (0, 30, 0, 64, -128, 0)] # generic_blue_thresholds

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False) # must be turned off for color tracking
sensor.set_auto_whitebal(False) # must be turned off for color tracking
clock = time.clock()

# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are
# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the
# camera resolution. "merge=True" merges all overlapping blobs in the image.

while(True):
    clock.tick()
    img = sensor.snapshot()
    for blob in img.find_blobs([thresholds[threshold_index]], pixels_threshold=200, area_threshold=200, merge=True):
        # These values depend on the blob not being circular - otherwise they will be shaky.
        if blob.elongation() > 0.5:
            img.draw_edges(blob.min_corners(), color=(255,0,0))
            img.draw_line(blob.major_axis_line(), color=(0,255,0))
            img.draw_line(blob.minor_axis_line(), color=(0,0,255))
        # These values are stable all the time.
        img.draw_rectangle(blob.rect())
        img.draw_cross(blob.cx(), blob.cy())
        # Note - the blob rotation is unique to 0-180 only.
        img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)
    print(clock.fps())

4. 测距

  OpenMV采用的是单目摄像头,想要实现测距,就需要选参照物,利用参照物的大小比例来计算距离。

# Measure the distance
#
# This example shows off how to measure the distance through the size in imgage
# This example in particular looks for yellow pingpong ball.

import sensor, image, time

# For color tracking to work really well you should ideally be in a very, very,
# very, controlled enviroment where the lighting is constant...
yellow_threshold   = ( 56,   83,    5,   57,   63,   80)
# You may need to tweak the above settings for tracking green things...
# Select an area in the Framebuffer to copy the color settings.

sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.

K=5000#the value should be measured

while(True):
    clock.tick() # Track elapsed milliseconds between snapshots().
    img = sensor.snapshot() # Take a picture and return the image.

    blobs = img.find_blobs([yellow_threshold])
    if len(blobs) == 1:
        # Draw a rect around the blob.
        b = blobs[0]
        img.draw_rectangle(b[0:4]) # rect
        img.draw_cross(b[5], b[6]) # cx, cy
        Lm = (b[2]+b[3])/2
        length = K/Lm
        print(length)

    #print(clock.fps()) # Note: Your OpenMV Cam runs about half as fast while
    # connected to your computer. The FPS should increase once disconnected.

四、串口通道

  在项目中,OpenMV通常只用来处理图像数据,而处理结果要传到MCU中做下一步处理。这个过程中需要用到串口来传送数据。

from machine import UART
uart = UART(1, baudrate=115200)     # 初始化串口 波特率设置为115200 TX是B12 RX是B13
uart.write("uart test\r\n")         # 发送字符串
uart_num = 0                        # 定义一个变量
uart_array = [48,49,50,51,52,53,54,55,56,57]  # 定义一个列表 保存数字
uart.write(bytearray(uart_array))   # 发送列表
uart.write(bytearray([0x41]))       # 发送一个十六进制数据
while(True):

    uart_num = uart.any()       # 获取当前串口数据数量
    if(uart_num):
        uart_str = uart.read(uart_num) # 读取串口数据
        uart.write(uart_str)    # 将读取到的串口数据发回
        # uart.read会自动在数据末尾添加\n的操作,如果想去掉可以用strip()去掉
        # 例如 uart_str = uart.read(uart_num).strip()
        # 这样 uart_str得到的数据就不会被自动添加\n

五、条形码、矩形码、二维码

1.条形码

  • find_barcodes([roi])
    查找 roi 内所有一维条形码并返回一个 image.barcode 对象列表
# 条形码识别例程
#
# 这个例子展示了使用OpenMV Cam M7来检测条形码是多么容易。条形码检测不适用于M4相机。

import sensor, image, time, math

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.VGA) # High Res!
sensor.set_windowing((640, 80)) # V Res of 80 == less work (40 for 2X the speed).
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False)  # 必须关闭此功能,以防止图像冲洗…
sensor.set_auto_whitebal(False)  # 必须关闭此功能,以防止图像冲洗…
clock = time.clock()

# 条形码检测可以在OpenMV Cam的OV7725相机模块的640x480分辨率下运行。
# 条码检测也将在RGB565模式下工作,但分辨率较低。 也就是说,
# 条形码检测需要更高的分辨率才能正常工作,因此应始终以640x480的灰度运行。

def barcode_name(code):
    if(code.type() == image.EAN2):
        return "EAN2"
    if(code.type() == image.EAN5):
        return "EAN5"
    if(code.type() == image.EAN8):
        return "EAN8"
    if(code.type() == image.UPCE):
        return "UPCE"
    if(code.type() == image.ISBN10):
        return "ISBN10"
    if(code.type() == image.UPCA):
        return "UPCA"
    if(code.type() == image.EAN13):
        return "EAN13"
    if(code.type() == image.ISBN13):
        return "ISBN13"
    if(code.type() == image.I25):
        return "I25"
    if(code.type() == image.DATABAR):
        return "DATABAR"
    if(code.type() == image.DATABAR_EXP):
        return "DATABAR_EXP"
    if(code.type() == image.CODABAR):
        return "CODABAR"
    if(code.type() == image.CODE39):
        return "CODE39"
    if(code.type() == image.PDF417):
        return "PDF417"
    if(code.type() == image.CODE93):
        return "CODE93"
    if(code.type() == image.CODE128):
        return "CODE128"

while(True):
    clock.tick()
    img = sensor.snapshot()
    codes = img.find_barcodes()
    for code in codes:
        img.draw_rectangle(code.rect())
        print_args = (barcode_name(code), code.payload(), (180 * code.rotation()) / math.pi, code.quality(), clock.fps())
        print("Barcode %s, Payload \"%s\", rotation %f (degrees), quality %d, FPS %f" % print_args)
    if not codes:
        print("FPS %f" % clock.fps())

2.矩形码

# 矩形码识别例程
#
# 这个例子展示了使用OpenMV Cam M7来检测数据矩阵是多么容易。数据矩阵检测不适用于M4相机。

import sensor, image, time, math

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False)  # 必须关闭此功能,以防止图像冲洗…
sensor.set_auto_whitebal(False)  # 必须关闭此功能,以防止图像冲洗…
clock = time.clock()

while(True):
    clock.tick()
    img = sensor.snapshot()
    img.lens_corr(1.8) # 1.8的强度对于2.8mm的镜头来说是好的。

    matrices = img.find_datamatrices()
    for matrix in matrices:
        img.draw_rectangle(matrix.rect(), color = (255, 0, 0))
        print_args = (matrix.rows(), matrix.columns(), matrix.payload(), (180 * matrix.rotation()) / math.pi, clock.fps())
        print("Matrix [%d:%d], Payload \"%s\", rotation %f (degrees), FPS %f" % print_args)
    if not matrices:
        print("FPS %f" % clock.fps())

3.二维码

# 二维码例程
#
# 这个例子展示了OpenMV Cam使用镜头校正来检测QR码的功能(请参阅qrcodes_with_lens_corr.py脚本以获得更高的性能)。
import sensor, image, time

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False)  # 必须关闭此功能,以防止图像冲洗…
clock = time.clock()

while(True):
    clock.tick()
    img = sensor.snapshot()
    img.lens_corr(1.8) # 1.8的强度参数对于2.8mm镜头来说是不错的。
    for code in img.find_qrcodes():
        img.draw_rectangle(code.rect(), color = (255, 0, 0))
        print(code)
    print(clock.fps())

参考文章
OpenMV嵌入式图像处理

彻底搞懂Lab 颜色空间

OpenMV新手上路1 -- OpenMV简介、参数描述 OpenMV项目创造一款低价,可扩展,支持Python的机器视觉模块,这个模块的目标是成为“机器视觉世界的Arduino “ 简介 1.什么是OpenMV? 简单的说就是一款可编程的摄像头模组,以OpenMV国内代理–星瞳科技的OpenMV产品来说,只需要针对应用场景编写程序逻辑即可实现复杂的视觉处理功能,因为复杂的机器视觉算法已经由厂家解决了 博主手头的OpenMV型号为OpenMV3 Cam M7,30万像素,足以完成一些简单的视觉识别功能 2.OpenMV能做什么? 如上所说,简单的图像识别或更 阅读详情

相关推荐

OpenMV 和 OpenCV的区别与联系

OpenMV 和 OpenCV的区别与联系

1万+

OpenMV入门与使用

1. 什么是OpenMV OpenMV 是一个开源,低成本,功能强大的 机器视觉模块。 OpenMV上的机器视觉算法包括 寻找色块、人脸检测、眼球跟踪、边缘检测、标志跟踪等。 以STM32F427CPU为核心,集成了OV7725摄像头芯片,在小巧的硬件模块上,用C语言高效地实现了核心机器视觉算法,提供Python编程接口。 (这也就意味着,我们可以通过python来对他进行编程,所以我们就需要学习一点基础的python知识) ———————————————— 2. 关于OpenM...

ArtoriaLili的博客 10万+

5.28OpenMV入门

使用的元件先安装好,上述链接上手IDE显示颜色阈值,同时也配有示例文件,如下图打开,,在官方也有每一个的详细解析OpenMV的一些依赖如下,进行import引入以下是我个人学习过程的一些摘录。

Shirleyluck的博客 2035

OpenMV(一)--基础介绍与硬件架构

1. OpenMV介绍 1.1 什么是OpenMV OpenMV是由美国克里斯团队基于MicroPython发起的开源机器视觉项目,目的是创建低成本,可扩展,使用python驱动的机器视觉模块。OpenMV搭载了MicroPython解释器,使其可以在嵌入式端进行python开发,关于MicroPython可以参照我之前的博客专栏:MicroPython。OpenMV基于32位,ARM Cortex-M7内核的OpenMV-H7, 并结合各种摄像头,可以进行多种机器视觉应用的...

ba_wang_mao的专栏 3万+

电源完整性之Cadence Sigrity Power SI_AC阻抗仿真

之前和大家分享过电源完整性之仿真设计原理链接: [link](https://blog.youkuaiyun.com/weixin_41808082/article/details/117065140?spm=1001.2014.3001.5501).今天接着上一篇文章总结一下电源AC阻抗的的仿真操作流程及一些simulation中的设置参数,用到的时候Cadence Sigrity 中的Power SI组件,下面开始享受仿真的快乐吧: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的Power SI

刘小同学的博客 1万+

Unity性能优化 - 动态图集

Unity 动态图集是 Unity 引擎中用于处理游戏纹理优化的一种技术。本文介绍了什么是动态图集,动态图集的优缺点,以及提供了一套完整的代码供大家参考。

qq_33808037的博客 4840

OpenMV图形化编程界面体验:新手入门必看功能介绍

通过OpenMV的图形化编程界面,初学者能快速上手图像识别与处理。结合openmv的易用工具和实时反馈,极大降低学习门槛,提升开发效率。

weixin_31459297的博客 650

Graybox Overview

Graybox功能使能够在sub_module上执行扫描和ATPG操作,然后能够在更高层次的层次上执行扫描和ATPG操作时使用该子模块的简化的Graybox表示,从而简化了分层设计中的扫描插入和ATPG操作过程。由于子模块的graybox表示只包含极少量的互连电路(子模块与top的互连),在大型分层设计中使用graybox可以极大地减少执行扫描插入,优化计时,分析故障和创建测试pattern所需的memory和工具runtime。

weixin_44954910的博客 1082

2.3 openmv硬件介绍和基openmv教程 好家伙openmv与STM32教程 openmv物体识别 openmv巡线代码 openmv串口发送数据 openmv人脸识别 openmv颜色识别等

非常详细的视频和文字教程,讲解常见的openmv教程包括 巡线、物体识别、圆环识别、阈值自动获取等。非常适合学习openmv、K210、K230等项目openmv教程合集 openmv入门到项目开发 openmv和STM32通信 openmv和opencv区别 openmv巡线 openmv数字识别教程LCD想看openmv教程线上文档可以看 这个文档所在合集openmv供电必知USB连接openmv使用场景。

qq_46187594的博客 2242

SCL3400硬件避坑指南:引脚兼容性测试+模式切换异常处理

本文针对村田SCL3400双轴倾角计在实际硬件设计中的常见问题,提供了详细的避坑指南。重点解析了从SCL3300迁移时的引脚兼容性真相,包括SPI时序、电源去耦等关键差异,并深入探讨了模式切换中超量程错误的复现原因与软件容错方案。同时,指导了如何根据应用场景配置低通滤波器,并给出了无自动唤醒功能下的可靠电源与长线SPI通信管理策略。

weixin_29190573的博客 292

从零开始:用ADS 2023手把手教你设计2.4GHz Wi-Fi LNA(基于ATF-54143,附模型文件)

本文详细介绍了如何使用ADS 2023软件设计2.4GHz Wi-Fi频段的低噪声放大器(LNA),基于ATF-54143晶体管。内容涵盖模型导入、直流工作点确定、稳定性优化、噪声匹配等关键步骤,并提供可下载的模型文件包,帮助工程师快速掌握LNA设计技巧。

weixin_42531128的博客 320

OpenMv教程由入门到精通

OpenMv教程由入门到精通 【下载地址】OpenMv教程由入门到精通 《OpenMv教程由入门到精通》是一份全面的OpenMv学习指南,适合初学者和进阶开发者。教程详细介绍了OpenMv的硬件结构、软件开发环境搭建、基础编程及图像处理算法,帮助用户从零基础到熟练掌握。通过丰富的项目实战和高级功能应用,用户能够深入理解并...

gitblog_06787的博客 408

AI挖矿技术全景解析:从智能勘探到自主开采的2025年度技术演进与产业变革

随着全球关键矿产资源需求激增与开采难度加剧,人工智能(AI)技术正在重塑矿业全生命周期。本文系统综述了2025年AI挖矿技术的最新进展,涵盖从地质勘探、资源评估到自主开采、安全监控的完整技术链条。基于Elsevier 2025年发表的最新研究成果及IEEE会议前沿动态,本文深入分析了深度学习、强化学习、计算机视觉等核心技术在矿物识别、品位预测、设备维护等场景的应用机制。研究数据显示,AI技术已使勘探成功率提升45%,设备停机时间减少35%,整体运营效率提高40%以上。

nmdbbzcl的博客 2082

OpenMV基础

使用python语言控制单片机,openmv和k210的区别:Openmv像素更高,更稳定,资料更多,但是算力不高,所以不会用来实现神经网络等功能。

m0_74412103的博客 1159

复旦微实现串口在线升级BOOT.BIN

将该 demo 生成的 app(升级用)和 fsbl、最简化 bit 文件(可选)打包成 BOOT.BIN,作为 golden image 烧写在 qspi flash 偏移 0 地址开始的位置,其中最简化 bit 文件为在线升级功能提供必要的物理通道(如果不需要,可以不打包该文件),golden image 一旦发布基本不需要进行升级,由该 golden image 负责和上位机进行通信交互,完成业务 app、业务 bit 文件、uboot 以及操作系统 image 等文件在线升级,在qspi flash

wangjie36的博客 3174

基于Matlab模拟RANS湍流——详细分析与源代码

在模拟过程中,我们首先定义了模拟所需的参数,包括流体的动力黏度和密度,以及边界条件和网格分辨率。接下来,通过求解平均值方程和湍流涨落方程,我们模拟了湍流的演化过程。在本文中,我们将使用Matlab对RANS湍流进行模拟,并提供相应的源代码。RANS湍流模拟的基本思想是将流场的变量分解为平均值和涨落值,并通过求解平均值方程和湍流涨落方程来描述流场的演化。请注意,以上代码仅为示例,实际的RANS湍流模拟可能需要更复杂的算法和模型。接下来,我们将求解RANS方程,包括平均值方程和湍流涨落方程。

ByteKnight的博客 862

openMV小记(一)迈出第一步

openMV小记(一) (一)基础框架建立 前言 机器的视觉处理方面是第一次接触,今年刚好也学习了这门课程,个人感觉还是挺有意思的。一开始接触openMV还是比较懵的,完全的小白开始入门。现在长时间的积累想着整理点有用的,回头看着方便点。有啥不足之处望可指正! openMV官网介绍 OpenMV摄像头是一款小巧,低功耗,低成本的电路板,它帮助你很轻松的完成机器视觉(machine vision)应用。你可以通过高级语言Python脚本(准确的说是 MicroPython ),而不是C/C++。Python的

qq_50917720的博客 3746

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

4.1 openmv相关资料如何查找 STM32串口通信 openmv+STM32串口通信 openmv串口通信openmv识别物体 openmv神经网络训练 openmv

更详细(一步步教你如何从另完成视觉循迹,包括视觉识别、通信过程、PID计算、调试等): B站好家伙VCC的V3智能车视频教程(此视频入门openMV软件和硬件使用。chatGPT和deepseek。

qq_46187594的博客 649

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

19.3-OpenMV视觉循迹功能 openmv发送五个uchar

V3.3.0-STM32智能小车视频: https://www.bilibili.com/video/BV16x4y1M7EN/?V3:HAL库开发、功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、视觉控制、电磁循迹、RTOS等功能。

weixin_45922644的博客 803

第19.1 章-[星瞳科技]OpenMV视觉循迹功能 超详细OpenMV与STM32单片机通信 (有完整版源码) 【星曈科技】OpenMv笔记——利用OpenMV与STM32进行串口通信

摄像头安装支架清单如下。为了方便看后面丝印 建议把亚力克膜撕掉安装顺序安装如下摄像头按照M3螺丝拧到一起用M2螺丝和螺母连接把另一个法兰盘拆掉 按照如下位置M3固定法兰盘,然后用顶丝固定碳杆OpenMV是一款优秀的开源视觉识别硬件板,旨在成为一个用于计算机视觉项目和应用的“Arduino”。简单易用:编程语言是Python,使用OpenMV IDE进行代码编写与调试。这个集成开发环境提供了丰富的功能例如图像显示、视频录制,以及串口调试等,非常方便。

2501_91769822的博客 923

OpenMv学习

简单来说,OpenMv就是一个可编程的具有摄像头的单片机,通过使用python语言,专门用作嵌入式当中的视觉感光元件。下面将介绍Openmv使用过程中的常用知识。 感光元件 感光元件即sensor模块,与摄像头有关。看如下例子: import sensor#引入感光元件的模块 ​ # 设置摄像头 sensor.reset()#初始化感光元件 sensor.set_pixformat(sensor.RGB565) #设置为彩色,用到其它参数时再上官方文档里找,下同 sensor.set_frames

stm_white的博客 2011

19.3-【星曈科技】openmv Hopenmv发送五个uchar Openmv+STM32F103C8T6视觉巡线小车 STM32循迹小车系列教程 使用OpenMV循迹 openMV寻迹与小车控制

V3.3.0-STM32智能小车视频: https://www.bilibili.com/video/BV16x4y1M7EN/?V3:HAL库开发、功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、视觉控制、电磁循迹、RTOS等功能。

m0_46373735的博客 1157

OpenMv教程由入门到精通:从基础到精通,掌握视觉核心功能

OpenMv教程由入门到精通:从基础到精通,掌握视觉核心功能 【下载地址】OpenMv教程由入门到精通 《OpenMv教程由入门到精通》是一份全面的OpenMv学习指南,适合初学者和进阶开发者。教程详细介绍了OpenMv的硬件结构、软件开发环境搭建、基础编程及图像处理算法,帮助用户从零基础到熟练掌握。通过丰富的项目实战和...

gitblog_06738的博客 483

第4.1章openmv相关资料如何查找 STM32串口通信 openmv+STM32串口通信 openmv串口通信openmv识别物体 openmv神经网络训练 openmv

更详细(一步步教你如何从另完成视觉循迹,包括视觉识别、通信过程、PID计算、调试等): B站好家伙VCC的V3智能车视频教程(此视频入门openMV软件和硬件使用。chatGPT和deepseek。

m0_46373735的博客 449
上一篇: YOLOv5中添加SE模块详解——原理+代码
下一篇: OpenMV使用技巧
晓shuo
晓shuo 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄6年 4万+粉丝 113原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值