更新日志

v0.8.1 (2026-10-15)

改进

  • register_model() 相关测试改为以 model_type 注册检测模型,与运行时后处理链接行为对齐

文档

  • 新增中英双语「学习路径」页:按首跑、看活的、拿来用、交付、查阅五阶段组织入门路径,逐阶段指向 quickstart、教学 demo、examples 阶梯与应用镜像指南

  • README 补齐 Overlay / StreamPipeline / Audio / DSP 四节 API 速览与教学 demo 章节,与 0.8.0 门面逐符号对账

  • 学习路径阶段 3 与 apps 仓 examples/ 的编号阶梯(01–07)互链;阶梯 05 即教学 demo 站 1 的独立 app 版

  • 新增「设备开通」页(中英双语):从购买 NE503 到首次登录——首连静态地址 10.0.0.1/24、出厂凭据、SSH 与网页终端、组播发现;作为学习路径的阶段 0 反向互链

v0.8.0 (2026-09-16)

新增功能

  • 客户端推理管线:新增 Preprocessor / PreprocessMeta、YoloV5Postprocessor / YoloV8Postprocessor、InferencePipeline 与 PipelineRunner,支持从模型规格派生预处理、结果坐标映射、可替换后处理、异步执行,以及带最新帧优先背压和统计信息的长驻运行器

  • 平台调度管线:新增 StreamPipeline / StreamPipelineStatus,组合 InferenceClient.subscribe() 与 OverlayClient,在像素不进入应用进程的情况下完成推理、过滤、硬件叠加和应用侧结果消费,并提供丢帧、延迟、时序偏差和错误观测

  • 帧注入输出路径:新增 FramePublisher 及 CameraClient.push_frame() / injection_status() / stop_injection(),支持 replace / overlay、NV12 / RGB 发布、EOS 恢复与会话标记;写租约感知的缓冲池只复用 daemon 已释放的槽位,兼容旧版 daemon 的深度轮转模式

  • 叠加层帧同步与观测:OverlayClient 支持严格对帧模式,以及 frame_sequence / stream_epoch / session_id 绑定;StreamStatus 新增编码发布、叠加烘焙、严格锁帧、迟到命令和代数拒绝计数

  • 部署诊断:新增永不抛错的 diagnostics() 快照、可按应用要求验收并抛出汇总错误的 diagnostics.check(),以及应用级 set_route_policy() 加速策略入口

  • 推理模型信息:register_model() 支持 batch_size,ModelInfo 透传服务端批大小;InferenceResult 新增服务端计算的 skew_us

  • 端到端设备驻留数据链:DSP 路由器复用进程级客户端;resize_hw / convert_hw 支持 out="ref" 返回 DspBufferRef,推理可直接消费设备侧引用,NV12 预处理可直通,BLEND 可直接写入 FramePublisher 池槽,避免中间读回与重复导入

  • 区域化叠加渲染:新增 render_overlay_fragments(),把描边拆成受 DSP batch 上限约束的偶数尺寸条带,减少全幅 ARGB 覆盖层的带宽和内存开销

改进

  • Frame 的裁剪 / 缩放链保留组合几何变换元数据;keep-fd 帧在预处理、推理、混合和发布路径中保持设备侧数据,媒体与编码客户端补充丢帧和连接观测

  • 新增完整的设备接口与性能测试套件,以及 perf_demo 的 subscribe / keep-fd 对照链、部署脚本和运行期指标采集工具

修复

  • 修复设备实测发现的三个接口问题:DSP import id 按有符号 64 位解析导致高位 id 失效;get_device_status() 读取不存在的 ir_led_on 字段;AppClient.list_apps() 构造了错误的 Empty 消息类型

  • 修复注入退出未发送 EOS、回调内停止引发线程自连接,以及部分叠加发布路径遗漏 ttl_ms 校验

  • 修复 DSP 客户端关闭后池与引用仍可误用、路由器更换进程级客户端时过早关闭在用资源,以及 passthrough 推理完成后输入引用未释放的问题

  • 收紧区域化叠加条带的偶数尺寸和 batch 上限处理,修复边缘平移前高度取整不足导致的无效几何

弃用

  • 插件系统 API (PluginDiscovery / PluginServer / PluginEndpoint) 已弃用。当前平台未部署 /run/aipc/plugins 插件发现机制;v0.8.0 仍保留导入兼容并发出 DeprecationWarning,文档页已下线。如有使用需求请提前反馈。

文档

  • 修正文档与 README 中的视频流示例:移除对从未存在过的 MediaClient 的引用,统一改用 FdMediaClient;流 ID 由 cam0_main / cam0_sub 修正为设备实际暴露的 main / sub;移除不存在的 get_stream_info() / get_raw_stream() 用法;修正 get_encoded_stream() 返回值语义与 frame.data 展平数组误用;补全 EncodedStreamClient / EncodedFrame API 文档

  • 修复应用示例中的缺失导入与误导性导入:多模型融合示例补 import time;英文推理页 GenAI 示例补 import json;错误处理示例移除 from grpc import RpcError (SDK 实际抛出 RuntimeError);清理未使用的 numpy / sys 导入

  • 补译中文推理页缺失章节:自 v0.3.0 起仅存在于英文文档的分割 / OCR / CLIP 图像嵌入 / CLIP 文本编码 / 深度估计 / 运行时更新后处理配置 / GenAI 七个使用小节,以及 SegmentationMask / OcrLine / Embedding / DepthMap 四个数据类型条目,中英文档现已同步

  • 新增管线、帧注入、叠加层与性能说明,补充本地推理应用和 perf_demo 示例

v0.7.4 (2026-09-08)

新增功能

  • 便捷层硬件路由 (sdk-hardware-routing P5): color.rgb_to_nv12 / color.nv12_to_rgb 与 draw.draw_detections``(NV12 数组)默认经 accel 路由器走 DSP 腿,不可用时自动回落软件实现并记账;``Frame.to_jpeg_bytes 对 keep-fd 帧硬件优先(camera-daemon EncodeImage 零拷贝导入),内存帧保持 CPU 编码直达,推流热路径不付额外拷贝与 RPC;软件腿只绑定私有实现,路由公函数不可重入

  • Frame.resize 的 DSP 快路径尊重路由策略: SOFTWARE_ONLY 跳过尝试,``HARDWARE_ONLY`` 失败即抛错(拒绝静默 CPU 回落),``PREFER_HARDWARE`` 经新增的 AccelRouter.note_degradation() 记账(同时新增 policy 属性;外部上报的未注册 op 在 health() 可见,``on_degradation`` 照常触发)

修复

  • _encode_jpeg_hw 硬编码 fmt="rgb24",NV12 keep-fd 帧的提交必被 _resolve_source 以格式不匹配拒绝;帧类源现在随句柄自带格式

  • dsp_format 软件腿经路由公函数重入路由器(跨 op 耦合);改为直接绑定 color 私有实现

  • 色彩转换两腿的 ValueError 契约统一(ndim / 声明尺寸 / 偶数校验先于任何 daemon 提交,调用方错误不再计入降级计数)

v0.7.3 (2026-09-07)

新增功能

  • 硬件优先加速路由器 (accel 模块): AccelRouter / RoutePolicy / health() 降级记账 + on_degradation 钩子 / get_default_router();默认路由注册 resize_nv12 / rgb_to_nv12 / nv12_to_rgb / encode_jpeg / draw_detections 的 DSP 腿与 nms 软件腿

  • DSP 标注合成 (dsp-offload P1): DspClient.blend_hw 把 ARGB32 覆盖层在 DSP 上原位合成回 NV12;``draw.render_overlay_rgba`` 将框+文字渲染为最小 straight-alpha 画布,复现软件光栅输出

  • 异步 DSP 作业 (dsp-offload P2): 全部 *_hw 操作支持 wait=False,``PendingDspJob`` 提供 wait() / done() / release();``blend_hw`` 零拷贝 keep-fd 链(默认拒用——当前固件上为状态依赖的致命路径);``encode_jpeg_hw`` 支持 src_buffer_id 免像素读回;keep-fd 帧源在 resize/convert 腿免 ascontiguousarray 预拷贝;多边形与轨迹形状

  • overlay 标注: annotate() / annotate_result() 经事件总线直推 camera-daemon 渲染器

  • 色彩转换与 NMS: BT.601 limited-range RGB↔NV12(cv2 缺失时的 numpy 路径);跨类感知 postprocess.nms

修复

  • 推理 codec 重构收尾: _tensor_to_numpy / _parse_post_result 遗留 self 致相应解析必失败;删除被薄委托遮蔽的四份完整方法死实现;新增 AST 结构元测试防止同类漂移

v0.7.2 (2026-09-03)

修复

  • _parse_infer_response codec 签名遗留 self: 0.7.0 重构后所有 infer() / infer_batch() 调用抛 TypeError;补充驱动真实 InferResponse 的回归测试

v0.7.1 (2026-09-03)

  • 版本号与 setup.py 对齐,无 API 变化

v0.7.0 (2026-09-02)

新增功能

  • 应用开发工具箱 (原 0.6.0 开发版内容,未单独发布,随 0.7.0 一并发布):

    • Frame.crop() / Frame.resize() / Frame.to_jpeg_bytes() — 帧裁剪、三模式缩放(stretch/letterbox/crop)、JPEG 编码;cv2 缺失时自动降级到 numpy/PIL

    • draw 模块 — 检测结果可视化(draw_boxes / draw_text / draw_detections)

    • recording 模块 — 纯 Python TS 复用打包、HLS 切片、事件预录缓冲(TsWriter / HlsWriter / PrerollBuffer),无需 ffmpeg

    • web 模块 — MJPEG 推流(MjpegServer / MjpegStream / mjpeg_wsgi_app)

    • DeviceClient 原生对焦组 6 个方法(start_oneshot_af / start_zoom_follow / get_autofocus_status / cancel_autofocus / set_af_windows / get_af_measurement)

    • CameraClient 成像/红外/隐私遮挡/OSD/配置组 12 个方法(含红外预设管理、get_osd 与 set_osd 读写对称)

  • 修复 InferenceClient.subscribe() 静默丢弃失败帧的问题

重构

  • 内部架构分层:抽取 _transport 共享传输原语; media 拆分为 frame/encoded/fd_client; dsp 拆分为 dsp_wire/dsp_format; inference 拆分为 types/codec/genai。门面保持全部历史导入路径, 零公共 API 移除

  • DSP CPU 回退从静默日志改为 UserWarning

  • 2D 数组按灰度推理输入触发 DeprecationWarning (请显式传 fmt=)

  • EncodedStreamClient() 默认套接字路径改为 /run/aipc/encoded/{stream}.sock (ENCODED_SOCK_DIR 环境变量可覆盖,显式路径仍优先)

修复

  • 修复 Python 3.8/3.9 下的导入崩溃(全量补齐 from __future__ import annotations)

其他

  • 打包增加 py.typed 类型标记;测试扩充至 270 项全绿

v0.5.0 (2026-08-20)

重构

  • 品牌重构:hailo_ipc_sdk → neoruntime_ipc_sdk (破坏性变更,无兼容层;hailort/ne503/aipc 等功能性名称保留)

修复

  • 修复 audio_capture 流视频布局头的双布局解码

其他

  • CI 建立 TestPyPI/PyPI Trusted Publishing 双发布流程

v0.4.0 (2026-07-14)

新增功能

  • DeviceClient 新增 7 个方法: - set_lens_limits(zoom_limit, focus_limit) — 设置镜头轴限位 - oneshot_autofocus(timeout) — 单次自动对焦(复合操作:开启→等待收敛→关闭) - set_wiegand_out(channel, enable) — 韦根输出控制 - get_wiegand_out(channel) — 韦根输出状态查询 - rs485_init(baudrate, config) — RS-485 串口初始化 - rs485_deinit() — RS-485 串口反初始化 - rs485_tx(data) — RS-485 数据发送

  • AppClient 新增 1 个方法: - restart_app(app_id, timeout_seconds) — 应用重启(停止+启动)

改进

  • 更新 API 文档,补充 DeviceClient 镜头限位、韦根、RS-485 示例

  • 更新 API 文档,补充 AppClient 完整使用示例

  • 同步中英文文档

v0.2.0 (2026-03-02)

新增功能

  • 添加插件系统支持 (PluginDiscovery, PluginServer)

  • 支持插件能力发现和 gRPC 服务调用

  • 新增视频流访问能力(现由 FdMediaClient / EncodedStreamClient 提供)

  • 支持原始视频流和编码视频流获取

改进

  • 优化 InferenceClient 性能

  • 改进事件总线通配符匹配

  • 增强错误处理和日志记录

  • 更新 protobuf 到 4.21.0

修复

  • 修复 EventClient 订阅时的内存泄漏

  • 修复 DeviceClient GPIO 控制问题

  • 修复多线程环境下的连接池问题

v0.1.0 (2025-12-15)

初始版本

  • InferenceClient: AI 推理客户端

  • EventClient: 事件总线客户端

  • DeviceClient: 设备控制客户端

  • Config: 配置管理

  • 支持 Python 3.8+

  • 基于 gRPC 通信