v1.2.0

v1.2.0 是一个奠基性的超大型版本,构建出了大部分经典的 OpenMV 成像 API:绘制方法、二值化 / 形态学操作、关键点描述符(FAST / FREAK / LBP)、颜色转换image.statisticsBMP / PPM / JPEG 文件 I/O、lcdmjpeggifmlx 热成像模块、OV7725 摄像头,以及众多 sensor 控制项。部分核心 sensor 行为发生了变化——请阅读下方的重大变更。

亮点

  • 绘制 API —— draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints()

  • 二值化 / 形态学 —— binary()invert()and/or/xor/...erode() / dilate() / morph()negate() / difference()

  • 关键点 —— FAST / FREAK / LBP 描述符,配合 match_descriptor() / save_descriptor() / load_descriptor()

  • 新增模块 —— lcdmjpeggif(彩色)和 mlx 热成像。

  • OV7725 摄像头支持;image.statistics;BMP/PPM/JPEG 文件 I/O。

  • 重大变更: sensor.reset()sensor.snapshot()sensor.set_pixformat() 的行为已变化——参见重大变更。

新功能

  • 绘制 —— 新增 image.draw_line() / draw_rectangle() / draw_circle() / draw_string() / draw_cross() / draw_keypoints(),支持关键字参数(color、thickness……)。

  • 二值化 / 形态学 —— 新增 image.binary()invert()and() / nand() / or() / nor() / xor() / xnor()erode() / dilate() / morph()negate() / difference()pixels()centroid()orientation_radians() / orientation_degrees() 以及 width() / height() / format()

  • 关键点 / 描述符 —— 通过 find_keypoints() 进行 FAST 关键点提取,为 FREAK / LBP 提供统一的 match_descriptor()save_descriptor() / load_descriptor(),外加一个侧脸 Haar/LBP 级联分类器。

  • 颜色 / 统计 —— image.statistics 和颜色转换函数(rgb_to_lab / lab_to_rgb / rgb_to_grayscale / grayscale_to_rgb)。

  • 文件 I/O —— BMP / PPM(P2/P3/P5/P6)/ JPEG 的加载与保存(包括灰度 JPEG 和 4:2:0 / 4:2:2 色度二次采样)。

  • 模块 —— 新增 lcd(LCD 扩展板)、mjpeg(视频录制)、彩色 gif(带 Gif.loop())以及 mlx 热成像摄像头模块,每个模块都配有示例脚本。

  • 传感器 —— 新增 sensor.get_id()(外加 OV9650/OV2640/OV7725 PID 常量)、sensor.set_special_effect()(SDE_* 常量)、sensor.set_image_filter()(FILTER_BW / FILTER_SKIN)、HQVGA 帧大小,以及 image.set_pixel(x, y, …)

  • WiFi —— 新增 ATWINC1500 WiFi 驱动和 OpenMV 1/2 BSP 基础框架,外加一个 BLE 示例。

其他变更与改进

  • 帧缓冲区现在会先经 JPEG 压缩再流式传输到 OpenMV IDE(降低带宽);JPEG 压缩为原地进行;OV7725 的水平/垂直缩放支持任意比例缩放;改进(更快)的 Haar 人脸检测可在 QVGA 下运行。

Bug 修复

成像:

  • 修复了积分图计算、median() 滤波器损坏、质心计算、RGB 输入上的 RGB 肤色 / 黑白滤波器,并加快了灰度 BMP/PPM 的读写。

传感器与系统:

  • 修复了 pyb.Servo 定时器(Servo 现在可用)、HQVGA 分辨率、SD 卡初始化可靠性、软复位后存储重新初始化,以及在无脚本时重新运行 REPL。

硬件与板卡支持

  • OV7725 摄像头传感器。

  • LCD 扩展板lcd 模块)、mlx 热成像摄像头,以及 ATWINC1500 WiFi 基础框架。

重大 API 变更

v1.1.0 与 v1.2.0 之间面向用户的 API 变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。

全部三项重大变更都是对核心 sensor 函数的行为变更(API 相同,行为不同)——请重新检查受影响的脚本。每个提交哈希都链接到其在 GitHub 上的 diff。(本版本绝大部分内容是在 v1.1→v1.2 区间内构建的新 API,因此是增量式的,并非破坏性的。)

sensor.reset() 不再应用默认配置 (行为)

sensor.reset() 不再应用内置的默认配置(pixformat / framesize / framerate / gain / contrast / brightness / saturation)。原本依赖 reset() 留下可用默认值的脚本,现在必须在 reset() 之后显式调用 sensor.set_pixformat()sensor.set_framesize()(以及其他任何设置)。

提交: d1e782df3

sensor.snapshot() 在超时时抛出异常 (行为)

sensor.snapshot() 现在会在传感器超时时抛出 RuntimeError("Sensor Timeout!!"),而不是无限期挂起。如果你需要容忍超时,请将 snapshot() 包裹在 try / except RuntimeError 中。

提交: e3f41d674

sensor.set_pixformat() 在不支持的格式时抛出异常 (行为)

sensor.set_pixformat() 现在在传入不支持的像素格式时会抛出异常,而不是返回 False。原本检查 False 返回值的代码必须改为捕获异常。

提交: e0c5822c2

迁移清单

干净移植到 v1.2.0 的典型工作如下:

  1. sensor.reset() 之后显式设置 sensor.set_pixformat() / sensor.set_framesize()reset 变更)。

  2. 如果你需要容忍传感器超时,将 sensor.snapshot() 包裹在 try / except RuntimeError 中(snapshot 变更)。

  3. 捕获 sensor.set_pixformat() 抛出的异常,而不是检查 Falseset_pixformat 变更)。

所有其他脚本无需改动即可运行。