# Race_G **Repository Path**: missper/race_g ## Basic Information - **Project Name**: Race_G - **Description**: 2020电子设计竞赛G题 非接触物体尺寸形态测量 郑铁无线电协会2021720~2021724模拟电赛第二题 - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2021-07-28 - **Last Updated**: 2026-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # About OpenMV > 参考这个打开串口: [Python背景知识 · OpenMV中文入门教程](https://book.openmv.cc/python-background.html) ## 产品型号 在串口终端中输入: `import sys;print(sys.version)` 得到产品型号: > MicroPython v1.12-omv-2-g1e4e3ec80 OpenMV v3.6.9-4-gc90f9cc7-dirty 2020-11-07; > > OPENMV4P-STM32H743 > > 镜头: ov5460-MOD R3 # 使用串口(UART) 在串口终端中输入: `help()`: ```bash Welcome to MicroPython! For online help please visit http://micropython.org/help/. Quick overview of commands for the board: pyb.info() -- print some general information pyb.delay(n) -- wait for n milliseconds pyb.millis() -- 获取自硬复位以来的毫秒数 pyb.Switch() -- create a switch object Switch methods: (), callback(f) pyb.LED(n) -- create an LED object for LED n (n=1,2,3,4) LED methods: on(), off(), toggle(), intensity() pyb.Pin(pin) -- get a pin, eg pyb.Pin('X1') pyb.Pin(pin, m, [p]) -- get a pin and configure it for IO mode m, pull mode p Pin methods: init(..), value([v]), high(), low() pyb.ExtInt(pin, m, p, callback) -- create an external interrupt object pyb.ADC(pin) -- make an analog object from a pin ADC methods: read(), read_timed(buf, freq) pyb.DAC(port) -- make a DAC object DAC methods: triangle(freq), write(n), write_timed(buf, freq) pyb.RTC() -- make an RTC object; methods: datetime([val]) pyb.rng() -- get a 30-bit hardware random number pyb.Servo(n) -- create Servo object for servo n (n=1,2,3,4) Servo methods: calibration(..), angle([x, [t]]), speed([x, [t]]) pyb.Accel() -- create an Accelerometer object Accelerometer methods: x(), y(), z(), tilt(), filtered_xyz() Pins are numbered X1-X12, X17-X22, Y1-Y12, or by their MCU name Pin IO modes are: pyb.Pin.IN, pyb.Pin.OUT_PP, pyb.Pin.OUT_OD Pin pull modes are: pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN Additional serial bus objects: pyb.I2C(n), pyb.SPI(n), pyb.UART(n) Control commands: CTRL-A -- on a blank line, enter raw REPL mode CTRL-B -- on a blank line, enter normal REPL mode CTRL-C -- interrupt a running program CTRL-D -- on a blank line, do a soft reset of the board CTRL-E -- on a blank line, enter paste mode For further help on a specific object, type help(obj) For a list of available modules, type help('modules') ``` # 控制电机(Servo) 查看当前电机配置 `Servo.calibration([pulse_min, pulse_max, pulse_centre, pulse_angle_90, pulse_speed_100])` * 若未给定参数,这个函数返回当前的5元组校准数据。 * 若给定参数,该函数设定计时校准: > - `pulse_min` 是允许的最小脉宽。 > - `pulse_max` 是允许的最大脉冲。 > - `pulse_centre` 是中心/零位置对应的脉宽。 > - `pulse_angle_90` 是90度对应的脉宽。 > - `pulse_speed_100` 是速度100对应的脉宽。 ```python # hobby - By: 22598 - 周三 7月 21 2021 # https://docs.singtown.com/micropython/zh/latest/openmvcam/library/pyb.Servo.html#servo-hobby import pyb s1 = pyb.Servo(1) # 对应P7口输出PWM # while True: s1.angle(0) # 转到指定角度 print(s1.calibration()) # (640, 2420, 1500, 2470, 2200) ``` # [`sensor`](https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.sensor.html#module-sensor) — 感光元件 # Image对象 [ OpenMV 图片对象(目标识别基础)_handsomeswp的专栏-CSDN博客_openmv图像识别](https://blog.csdn.net/handsomeswp/article/details/108901689) ```python # Image - By: 22598 - 周三 7月 21 2021 import sensor, image, time, pyb sensor.reset() sensor.set_pixformat(sensor.RGB565) # RGB565 GRAYSCALE sensor.set_framesize(sensor.VGA) #FHD QVGA sensor.skip_frames(time = 0) # 2000 sensor.set_auto_whitebal(False) # 关闭白平衡 # sensor.set_vflip(True) 垂直翻转 clock = time.clock() # grenn_threshold = (38,98,-79,-23,0,50) # 绿色乒乓球 # yellow_threshold = (21,65,-36,38,20,50) # 乒乓球 yellow_threshold = (25,48,18,42,22,38) # 协会后面的排球 def find_max(blobs): max_size=0 for blob in blobs: if blob[2]*blob[3] > max_size: max_blob=blob max_size=blob[2]*blob[3] return max_blob while(True): img = sensor.snapshot() img.draw_cross(160, 120, 10, 10) # 以像素坐标 (x, y) 为中心画个十字。 # img.draw_rectangle(150, 110, 20, 20) # 矩形 x,y,x_length,y_length # img.draw_circle(160, 120, 10) # 以像素坐标 (x, y) 为圆心, diameter 为直径画一个圆。 print(clock.fps()) blobs = img.find_blobs([yellow_threshold]) if len(blobs)>0: tar_blob=find_max(blobs) diameter=tar_blob.corners()[1][0] - tar_blob.corners()[0][0] img.draw_circle(tar_blob.cx(),tar_blob.cy(),diameter) img.draw_cross(tar_blob.cx(),tar_blob.cy()) print(tar_blob.rect()) ``` # 图像二值化滤波 滤波之后可精确框选出目标物体, * 神经网络模型 * 模板匹配 [template_matching 模板匹配 · OpenMV中文入门教程](https://book.openmv.cc/example/09-Feature-Detection/template-matching.html) * keypoints特征点检测 [keypoints 特征点检测 · OpenMV中文入门教程](https://book.openmv.cc/example/09-Feature-Detection/keypoints.html) * AprilTag识别 * 颜色追踪 * LBP特征 [目标检测的图像特征提取之(二)LBP特征 - 莫小 - 博客园 (cnblogs.com)](https://www.cnblogs.com/nsnow/p/4461998.html) * HOG梯度特征-多用于行人检测 [HOG特征(Histogram of Gradient)学习总结 - wyu123 - 博客园 (cnblogs.com)](https://www.cnblogs.com/wyuzl/p/6792216.html) 滤波 图像处理 特征点提取 阈值确定二维物体, ​ 特征点匹配,模板匹配确定三维物体