v1.2.0¶
v1.2.0 是一个奠基性的超大型版本,构建出了大部分经典的 OpenMV 成像 API:绘制方法、二值化 / 形态学操作、关键点描述符(FAST / FREAK / LBP)、颜色转换和 image.statistics、BMP / PPM / JPEG 文件 I/O、lcd、mjpeg、gif 和 mlx 热成像模块、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()。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 的典型工作如下:
在
sensor.reset()之后显式设置sensor.set_pixformat()/sensor.set_framesize()(reset 变更)。如果你需要容忍传感器超时,将
sensor.snapshot()包裹在try/except RuntimeError中(snapshot 变更)。捕获
sensor.set_pixformat()抛出的异常,而不是检查False(set_pixformat 变更)。
所有其他脚本无需改动即可运行。