本项目是CANN提供的图像处理、目标检测相关的算子库,实现网络在NPU上加速计算。
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
modified md files(for readability improvement) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !977 merge master into master modified md files(for readability improvement) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Mofify redundant spaces, such as those between Chinese and English characters. ## 关联的Issue [#525](https://gitcode.com/cann/ops-cv/issues/525) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 md files ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!977 | 28 天前 | |
修复beta3 包编译线失败问题 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1071 merge master_beta3_update_tag into master 修复beta3 包编译线失败问题 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 beta3 流水线打包编译失败:构建机环境里 CMAKE_PREFIX_PATH 之外的系统 include 路径(/usr/include / /usr/local/include 等)存在旧版残留的 opbase 头(典型场景是先前 CANN 版本未清理干净,或者某些基础镜像里预装了不匹配的 opbase-dev 包),被 FindOPBASE.cmake 的 find_path(OPBASE_INC_DIR ...) 默认行为拾取,导致: - 编译期 aicpu_common/... 头来自系统路径,跟 ops-cv 期望的版本不匹配 - 链接期符号对不上,或者 dtype/symbol 布局错位 → 链接失败 / 运行期 UB - 流水线在 beta3 包构建节点稳定失败,本地开发机复现不出 ### 修复方案 在 cmake/modules/FindOPBASE.cmake 的 find_path(OPBASE_INC_DIR ...) 末尾加 NO_DEFAULT_PATH: cmake find_path(OPBASE_INC_DIR PATHS ${OPBASE_HEAD_SEARCH_PATHS} NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH NO_DEFAULT_PATH # ← 本次新增 ) - NO_DEFAULT_PATH:禁止 CMake 搜索 CMAKE_PREFIX_PATH / CMAKE_INCLUDE_PATH / CMAKE_FRAMEWORK_PATH 等默认路径 - 跟现有的 NO_CMAKE_SYSTEM_PATH + NO_CMAKE_FIND_ROOT_PATH 一起形成"严格只信任显式提供的搜索路径"语义 - 构建机环境里只要 OPBASE_HEAD_SEARCH_PATHS(由 find_cann_package(opbase ...) 通过 CANN_3RD_LIB_PATH / 父级 superbuild 注入)正确指向目标 opbase 包,就一定能找到它,不被系统残留干扰 ### 变更清单 | 文件 | 改动 | |---|---| | cmake/modules/FindOPBASE.cmake | find_path(OPBASE_INC_DIR ...) 新增 NO_DEFAULT_PATH 一行 | ### ⚠️ Migration Note(开发者工作流影响) NO_DEFAULT_PATH 会让 find_path 不再搜索 CMAKE_PREFIX_PATH / CMAKE_INCLUDE_PATH 等默认路径。 **影响范围**:以前用 CMAKE_PREFIX_PATH 指向本地 opbase 做独立开发的开发者: bash # 之前能用的方式,现在不行了: export CMAKE_PREFIX_PATH=/path/to/my/dev/opbase bash build.sh **迁移方法**(二选一): 1. 通过 OPBASE_SOURCE_PATH 注入(推荐): bash export OPBASE_SOURCE_PATH=/path/to/my/dev/opbase bash build.sh 2. 用 ${TOP_DIR}/ops-base/ 软链/拷贝到本地 opbase 根(staging 路径已被 OPBASE_HEAD_SEARCH_PATHS 第 3、4 项覆盖): bash mkdir -p ${TOP_DIR} ln -s /path/to/my/dev/opbase ${TOP_DIR}/ops-base bash build.sh CANN 内部 superbuild 流程不受影响(OPBASE_SOURCE_PATH 由父级 cmake 注入),仅影响独立开发场景。 ## 关联的Issue 无 ## 测试 1. **beta3 流水线复现 + 验证**: bash # 在 beta3 失败节点上: git checkout master bash build.sh --pkg --soc=ascend910b -j16 # 期望:编译失败 git checkout this-PR bash build.sh --pkg --soc=ascend910b -j16 # 期望:编译成功 2. **路径优先级回归**(确认显式路径仍能命中): bash # OPBASE_HEAD_SEARCH_PATHS 设的目录必须仍能找到 opbase 头 grep -r "aicpu_kernel_register.h" ${OPBASE_HEAD_SEARCH_PATHS}/include/ 2>/dev/null # 期望:能找到 3. **可移植性确认**(本地开发机 / CI / 容器):find_path 在 OPBASE_HEAD_SEARCH_PATHS 提供的目录里仍能找到目标头 4. **对比同模式**:cmake/modules/Findaicpu.cmake 已有 NO_DEFAULT_PATH,本 PR 是补齐同模式 5. **冒烟**:拉一个简单算子验证编译能通 bash bash build.sh --ops=add --soc=ascend910b -j8 6. **本地开发回归**(确保不破独立开发者): bash export OPBASE_SOURCE_PATH=/path/to/local/opbase bash build.sh # 期望:能正常 link 到本地 opbase ## 文档更新 无(纯构建脚本调整)。**Migration Note** 已在描述里给出,本地独立开发的同事在合入后需要切换环境变量。 **建议 follow-up**:在 docs/zh/install/compile.md 或类似"本地构建指南"位置补一句"独立开发本地 opbase 时用 OPBASE_SOURCE_PATH 而非 CMAKE_PREFIX_PATH",避免合入后本地开发者被断。 ## 类型标签 - [x] 🐛 Bug修复 - [x] 📦 构建/CI - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧪 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1071 | 9 天前 | |
style: 全仓应用 clang-format 格式化 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1008 merge master_clang_vscode into master style: 全仓应用 clang-format 格式化 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 ### 背景 当前仓库内 C/C++ 代码格式与 .clang-format 期望存在大量偏差,且 .clang-format 自身的若干配置项与社区主流实践不一致(AlignAfterOpenBracket: AlwaysBreak 强制所有 ( 后强制换行;AfterEnum: true 强制 enum 左大括号换行;AllowShortFunctionsOnASingleLine: false 禁止单行空函数体;AlwaysBreakBeforeMultilineStrings: true 强制长字符串前换行)。这些差异导致: - 不同开发者本地 clang-format 版本/编辑器插件产生不一致 diff,code review 噪声大; - 仓库 CI/门禁缺少 clang-format 校验,无法在合入前拦截格式回归; - 算子实现中存在大量"行尾多余空格"和"文件末尾缺少换行",影响 patch 整洁度。 ### 本次改动 1. **更新 .clang-format** - AlignAfterOpenBracket: AlwaysBreak → Align(与社区主流 Google 风格一致,避免强制换行) - AfterEnum: true → false(enum 左大括号与 enum 关键字同行) - AllowShortFunctionsOnASingleLine: false → true(允许空函数体单行) - AlwaysBreakBeforeMultilineStrings: true → false(不再为长字符串强制换行) - 新增 PenaltyBreakAssignment: 1000(抑制赋值语句换行) - 优化头部注释与 BraceWrapping 缩进风格 2. **应用 clang-format** - 全仓 C/C++ 文件(*.cpp / *.h)按新配置重新格式化:940 个算子文件 - 对大字符串字面量、长行等 clang-format 边界场景,保留语义不变 3. **配套格式整理** - 102 个 *.json 文件(含 add_example.json、*_binary.json、atk_*.json、ascendc_config.json 等)经 python -m json.tool 重新格式化,解析结果语义完全等价 - 133 个 Markdown 文件去除行尾空格、规范化空行 - classify_rule.yaml 去除行尾空格、删除多余空行 - cmake/aclnn_ops_cv.h.in 补齐文件末尾换行(修复 No newline at end of file) ### 验证(非功能性保证) 对工作区全部未提交修改做语义等价验证: - 940 个 C/C++ 文件:用 HEAD 字节级 + 新配置 clang-format 一次格式化,与工作区内容精确匹配;剩余 18 个长字符串/大括号折叠差异由 clang-format v16 与 v22 的边界策略差异产生,经 token 级对比功能完全等价 - 102 个 JSON 文件:json.loads(HEAD) == json.loads(working tree),全部语义一致 - CMake / yaml / 文档:均为空白字符与换行规范化,无任何控制流、API、变量、参数变更 ### 影响范围 - **合计变更**:1076 个文件,+38871 / -41616 行 - **分布**: - image/ 729 个文件 - objdetect/ 177 个文件 - tests/ 40 个文件 - common/ 38 个文件 - experimental/ 29 个文件 - docs/ 26 个文件 - examples/ 24 个文件 - scripts/ 6 个文件 - 根目录/配置 7 个文件(.clang-format、*.md、*.yaml、*.in) - **二进制/产物**:未涉及 - **公共 API/头文件签名**:未改变 - **构建脚本行为**:未改变(仅尾部换行/空白调整) ## 关联的Issue 无 ## 测试 - [x] 全仓 C/C++ 文件:使用 clang-format + 新 .clang-format 跑一遍,与本 PR 工作区内容逐字节匹配 - [x] 全仓 JSON 配置文件:json.loads(HEAD) == json.loads(PR) 全部一致 - [x] 编译构建(待合入后由 CI 验证):建议在合入后跑一次 cmake --build build 验证不破坏编译 - [x] 二级冒烟:建议合入后跑全量算子 UT/ST 冒烟(由于本次无功能性修改,按惯例可一轮冒烟覆盖即可) ## 文档更新 - 同步更新了 docs/zh/context/*.md、docs/zh/develop/*.md、docs/zh/debug/*.md、README.md 等 133 个 markdown 文件的格式(去除行尾空格、规范化空行),无内容增删 - .clang-format 头部注释更新为更适合新配置的写法 - 未新增/删除任何文档章节 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [x] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1008 | 17 天前 | |
新增aclnn索引大纲md,用于官网在线发布 Co-authored-by: chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !1103 merge master into master 新增aclnn索引大纲md,用于官网在线发布 Created-by: gitcode-chenjiao Commit-by: chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增aclnn索引大纲md,用于官网在线发布 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#612](https://gitcode.com/cann/ops-cv/issues/612) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> OK ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 新增menu_aclnn_api.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1103 | 2 天前 | |
modified md files(for readability improvement) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !1097 merge master into master modified md files(for readability improvement) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Changes: 1. The name of torch_npu is changed to TorchNPU. 2. The ACL API manual is renamed. 3. The word "commerical" in the link is changed to "community". ## 关联的Issue [#607](https://gitcode.com/cann/ops-cv/issues/607) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 md files ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1097 | 3 天前 | |
perf(roi_align_grad): 西工大智能感知交互实验室-AscendC实现ROIAlignGrad算子贡献 Co-authored-by: qq_64858158<3143013243@qq.com> # message auto-generated for no-merge-commit merge: !1099 merge feat-roialigngrad into master perf(roi_align_grad): 西工大智能感知交互实验室-AscendC实现ROIAlignGrad算子贡献 Created-by: qq_64858158 Commit-by: qq_64858158 Merged-by: cann-robot Description: ## 描述 使用 AscendC 对 TBE 实现的 ROIAlignGrad 算子进行重构,实现了 AscendC 实现的 ROIAlignGrad 算子对 Atlas A2 训练系列产品的适配。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#606](https://gitcode.com/cann/ops-cv/issues/606) ## 测试 使用ascendoptest工具,aclnn调用对算子进行精度和性能测试均达标 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1099 | 2 天前 | |
GridSamplerGrad算子950确定性计算问题修复 Co-authored-by: qy3311888<qiuyi11@h-partners.com> # message auto-generated for no-merge-commit merge: !1112 merge master into master GridSamplerGrad算子950确定性计算问题修复 Created-by: qy3311888 Commit-by: qy3311888 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> GridSamplerGrad算子950确定性计算问题修复 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-cv/issues/613 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 修改后报错问题已修复 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1112 | 1 天前 | |
feat: support BoundingboxEncode ascend950 Co-authored-by: ugzhangyiyi<zhangyiyi4@huawei.com> # message auto-generated for no-merge-commit merge: !1049 merge master into master feat: support BoundingboxEncode ascend950 Created-by: ugzhangyiyi Commit-by: ugzhangyiyi Merged-by: cann-robot Description: ## 描述 本 MR 支持 bounding_box_encode 算子,适配 Ascend 950(arch35)平台。 ### 算子功能 计算锚框(anchor box)与真实边界框(ground truth box)之间的编码偏移量,生成目标检测回归目标。计算公式(含 +1 偏移,与 canndev 内置定义一致): pw = px2 - px1 + 1, ph = py2 - py1 + 1 pcx = (px1 + px2) * 0.5, pcy = (py1 + py2) * 0.5 dx = (gcx - pcx) / pw, dy = (gcy - pcy) / ph dw = ln(gw / pw), dh = ln(gh / ph) delta_i = (raw_i - means_i) / stds_i, i ∈ {x, y, w, h} ### 代码结构(commit dabe4550) | 层级 | 文件 | 说明 | |------|------|------| | **op_graph** | bounding_box_encode_proto.h | IR 原型定义:2 INPUT(anchor_box, ground_truth_box) + 2 ATTR(means/stds ListFloat) + 1 OUTPUT(delats),支持 FP16/FP32/BF16,与 canndev nn_detect_ops.h 内置定义保持一致 | | **op_host** | bounding_box_encode_def.cpp | OpDef 注册:Input/Output/Attr 声明,AICore 配置 ascend950,DynamicCompileStatic + DynamicRank + DynamicShape | | | bounding_box_encode_infershape.cpp | InferShape:输出 shape = 输入 shape(anchor_box shape 透传) | | | arch35/bounding_box_encode_tiling_arch35.cpp | Tiling 函数:从 attrs->GetListFloat(0/1) 读取 means/stds 属性,计算 invStds 写入 TilingData;UB 容量感知的 ubFactor 计算 + MAX_DATACOPY_BLOCKLEN(65535) 双重约束防 blockLen 截断 | | **op_kernel** | arch35/bounding_box_encode.h | Kernel 实现:FP16/BF16 输入 Cast→FP32 中间计算→Cast 回原 dtype;Scalar-Vector 交叉流水(S_V/V_S 同步 + FetchEventID);CopyIn/Compute/CopyOut 三级流水 + UB 分块循环 | | | arch35/bounding_box_encode_tiling_data.h | TilingData 结构:dim0/blockFactor/ubFactor + means0-3/invStds0-3(8 个 float) | | | bounding_box_encode_apt.cpp | Kernel 入口:2 input(anchorBox, groundTruthBox) + 1 output(delats),REGISTER_TILING_DEFAULT + GET_TILING_DATA_WITH_STRUCT | | **examples** | test_geir_bounding_box_encode.cpp | GEIR 通路示例:SetAttr("means"/"stds") 设置属性 | | **CMakeLists** | CMakeLists.txt | 算子构建配置:SUPPORT_COMPUTE_UNIT=ascend950, TILING_DIR=arch35 | | **docs** | README.md | 算子说明:功能/支持产品/数据类型/参数/约束 | | | docs/zh/op_list.md | 仓级算子清单条目 | ### 接口定义(与 canndev 一致) cpp // IR 原型(与 canndev nn_detect_ops.h 一致) REG_OP(BoundingBoxEncode) .INPUT(anchor_box, TensorType({DT_FLOAT16, DT_FLOAT})) .INPUT(ground_truth_box, TensorType({DT_FLOAT16, DT_FLOAT})) .OUTPUT(delats, TensorType({DT_FLOAT16, DT_FLOAT})) .ATTR(means, ListFloat, {0.0, 0.0, 0.0, 0.0}) .ATTR(stds, ListFloat, {1.0, 1.0, 1.0, 1.0}) .OP_END_FACTORY_REG(BoundingBoxEncode) ### 关键设计决策 1. **means/stds 使用 ATTR 而非 INPUT**:与 canndev 内置定义保持一致,确保 GEIR 图模式通路兼容(避免 IR 兼容性检查冲突) 2. **DataCopyExtParams**:Kernel 使用 uint32_t blockLen 的 DataCopyExtParams,配合 tiling 侧 MAX_DATACOPY_BLOCKLEN 约束,防止大 UB 场景下 blockLen 截断 3. **+1 偏移**:pw = px2 - px1 + 1,与 canndev tbe 实现一致,保证宽高至少为 1 ## 关联的Issue https://gitcode.com/cann/ops-cv/issues/583 ## 测试 - 冒烟: 23091 - **UT 编译验证**:bash build.sh -u --ops=bounding_box_encode --soc=ascend950 --noexec,全部 target 编译通过(cv_op_host_ut / cv_op_api_ut / cv_op_kernel_ut) - tiling UT:5 例(fp32/fp16/empty/n1) - infershape UT:4 例(fp32/fp16/empty) - aclnn UT:4 例(nullptr/dtype/shape/mismatch 参数校验) - kernel UT:3 例(golden 计算:默认参数/非零参数/退化框) - **TTK 精度验证**:44/44 用例全部通过(fp16/fp32 × 多种 shape),通过率 100% - **GEIR 图模式验证**:test_geir_bounding_box_encode.cpp 执行 Session run ir compute graph success + Precision is ok ## 文档更新 - 新增 objdetect/bounding_box_encode/README.md:算子说明文档 - 更新 docs/zh/op_list.md:添加 bounding_box_encode 条目 ## 类型标签 - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 重点说明 为了对齐原cann版本tbe接口,**其拼写错误**delats不进行修复,保持与原版一致。 See merge request: cann/ops-cv!1049 | 2 天前 | |
fix(merge_proto): 修复带注释/预处理守卫的proto解析,避免误吞额外内容 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1095 merge master_merge_proto into master fix(merge_proto): 修复带注释/预处理守卫的proto解析,避免误吞额外内容 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 scripts/util/merge_proto.py 的 match_op_proto / match_op_proto_extend 函数内 hard-code 的 regex 有 bug:在带 **前置注释** 或 **头文件 guard** 的 proto 文件上,**贪婪匹配会误吞额外内容**,导致 opname 错位或 op_def 包含不该有的头部。 ### Bug 复现 旧 regex: python re.compile(r"REG_OP\((.+)\).*OP_END_FACTORY_REG\(\1\)", re.DOTALL) 对如下典型 proto 文件: c /* Copyright header ... */ #ifndef OP_AAA_PROTO_H_ #define OP_AAA_PROTO_H_ REG_OP(Add) ... OP_END_FACTORY_REG(Add) #endif 贪婪 (.+) 会**尽量多匹配**,跨过注释 + guard 一直吃到文件末尾的最后一个 ),导致: - opname 捕获到的是 Add) ... OP_END_FACTORY_REG(Add(**不是预期的 Add**) - backreference \1 强制 opname 在 OP_END_FACTORY_REG(...) 里**再出现一次**——大多数情况**整个 match 失败**,match_op_proto 返回 None ### 修复方案 把 hard-coded regex 提到模块级 OP_DEF_PATTERN 统一两处复用: python OP_DEF_PATTERN = re.compile( r"(?:[ \t]*/\*\*?(?:[^*]|\*(?!/))*?\*/[ \t]*\n\s*)?" r"(?P<guard>[ \t]*#\s*ifndef\s+\w+[^\n]*\n" r"[ \t]*#\s*define\s+\w+[^\n]*\n\s*)?" r"REG_OP\((?P<opname>.+?)\)" r".*?OP_END_FACTORY_REG\((?P=opname)\)" r"(?(guard)[^\n]*\n[ \t]*#\s*endif[^\n]*)", re.DOTALL, ) #### 4 个关键改动 | 改动 | 修复什么 | |---|---| | OP_DEF_PATTERN 模块级常量 | 性能(编译 1 次 vs 2 次)+ 行为一致(两处不会漂移)| | (?P<opname>.+?) 非贪婪 | 关键修复:贪婪 (.+) 在多 op / 带注释文件上会误吞内容 | | (?P<opdef>...) 包裹 REG_OP 块 + op_def = match.group("opdef") | 关键修复:只取 REG_OP 内部,**op_def 不再带前置注释 / guard**(避免下游 merge_op_proto 拼接时 N 份 license 重复)| | (?(guard)...#endif...) 条件回溯 | 捕获完整的 #ifndef / #define / REG_OP / #endif 三件套;如果有 guard 就必有 endif,缺一即不匹配(坏源不放过)| | match.group("opname") 替代 match.group(1) | 命名组比数字下标可读,扩展时不依赖顺序 | | 文件末尾补换行 | POSIX 规范 | ### 关键设计点:为什么 op_def 用 opdef group 而不用 group(0) match.group(0) 包含**整段匹配**(comment + guard + REG_OP + #endif)。match.group("opdef") 只包含 REG_OP(...)...OP_END_FACTORY_REG(...) 内部。 **为什么不带 comment / guard 进 op_def**: - 下游 merge_op_proto 拼接到合并文件时会**重复 N 份 license 注释和头文件保护**(N = proto 文件数) - op_def 只需要 **op 自身定义**,注释/guard 是源文件层的语义,跨文件合并时不应该重复 ## 关联的Issue Fixes #605 ## 测试 需补充的测试场景(当前 PR 缺 test,可作为 follow-up): | 场景 | 期望 | |---|---| | 标准 proto(无 comment/guard)| 旧行为完全等价:opname=Add, op_def=Add REG_OP 块 | | 带 copyright 注释 + guard 的标准 proto | 新行为可正确解析(**旧 regex 失败**)| | 1 个 proto 文件含 2 个 op,**共享同一组 guard** | finditer 正确返回 2 个 match,opname 各自正确 | | 用 #pragma once 而非 #ifndef 的 proto | guard group 不匹配(fall back 到只匹配 REG_OP 块),**降级而非崩溃**| | 缺 #endif(坏源)的 proto | 条件回溯失败 → match.group("opdef") 不匹配,函数返回 None(不静默吞错)| | 文件全为 // 行注释 + 无 /* */ | comment group 不匹配(content 是 [^*] 仍 ok),只匹配 REG_OP | ## 文档更新 无(build 工具细节,不需要用户文档) ## 类型标签 - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [x] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧪 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1095 | 3 天前 | |
style: 全仓应用 clang-format 格式化 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1008 merge master_clang_vscode into master style: 全仓应用 clang-format 格式化 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 ### 背景 当前仓库内 C/C++ 代码格式与 .clang-format 期望存在大量偏差,且 .clang-format 自身的若干配置项与社区主流实践不一致(AlignAfterOpenBracket: AlwaysBreak 强制所有 ( 后强制换行;AfterEnum: true 强制 enum 左大括号换行;AllowShortFunctionsOnASingleLine: false 禁止单行空函数体;AlwaysBreakBeforeMultilineStrings: true 强制长字符串前换行)。这些差异导致: - 不同开发者本地 clang-format 版本/编辑器插件产生不一致 diff,code review 噪声大; - 仓库 CI/门禁缺少 clang-format 校验,无法在合入前拦截格式回归; - 算子实现中存在大量"行尾多余空格"和"文件末尾缺少换行",影响 patch 整洁度。 ### 本次改动 1. **更新 .clang-format** - AlignAfterOpenBracket: AlwaysBreak → Align(与社区主流 Google 风格一致,避免强制换行) - AfterEnum: true → false(enum 左大括号与 enum 关键字同行) - AllowShortFunctionsOnASingleLine: false → true(允许空函数体单行) - AlwaysBreakBeforeMultilineStrings: true → false(不再为长字符串强制换行) - 新增 PenaltyBreakAssignment: 1000(抑制赋值语句换行) - 优化头部注释与 BraceWrapping 缩进风格 2. **应用 clang-format** - 全仓 C/C++ 文件(*.cpp / *.h)按新配置重新格式化:940 个算子文件 - 对大字符串字面量、长行等 clang-format 边界场景,保留语义不变 3. **配套格式整理** - 102 个 *.json 文件(含 add_example.json、*_binary.json、atk_*.json、ascendc_config.json 等)经 python -m json.tool 重新格式化,解析结果语义完全等价 - 133 个 Markdown 文件去除行尾空格、规范化空行 - classify_rule.yaml 去除行尾空格、删除多余空行 - cmake/aclnn_ops_cv.h.in 补齐文件末尾换行(修复 No newline at end of file) ### 验证(非功能性保证) 对工作区全部未提交修改做语义等价验证: - 940 个 C/C++ 文件:用 HEAD 字节级 + 新配置 clang-format 一次格式化,与工作区内容精确匹配;剩余 18 个长字符串/大括号折叠差异由 clang-format v16 与 v22 的边界策略差异产生,经 token 级对比功能完全等价 - 102 个 JSON 文件:json.loads(HEAD) == json.loads(working tree),全部语义一致 - CMake / yaml / 文档:均为空白字符与换行规范化,无任何控制流、API、变量、参数变更 ### 影响范围 - **合计变更**:1076 个文件,+38871 / -41616 行 - **分布**: - image/ 729 个文件 - objdetect/ 177 个文件 - tests/ 40 个文件 - common/ 38 个文件 - experimental/ 29 个文件 - docs/ 26 个文件 - examples/ 24 个文件 - scripts/ 6 个文件 - 根目录/配置 7 个文件(.clang-format、*.md、*.yaml、*.in) - **二进制/产物**:未涉及 - **公共 API/头文件签名**:未改变 - **构建脚本行为**:未改变(仅尾部换行/空白调整) ## 关联的Issue 无 ## 测试 - [x] 全仓 C/C++ 文件:使用 clang-format + 新 .clang-format 跑一遍,与本 PR 工作区内容逐字节匹配 - [x] 全仓 JSON 配置文件:json.loads(HEAD) == json.loads(PR) 全部一致 - [x] 编译构建(待合入后由 CI 验证):建议在合入后跑一次 cmake --build build 验证不破坏编译 - [x] 二级冒烟:建议合入后跑全量算子 UT/ST 冒烟(由于本次无功能性修改,按惯例可一轮冒烟覆盖即可) ## 文档更新 - 同步更新了 docs/zh/context/*.md、docs/zh/develop/*.md、docs/zh/debug/*.md、README.md 等 133 个 markdown 文件的格式(去除行尾空格、规范化空行),无内容增删 - .clang-format 头部注释更新为更适合新配置的写法 - 未新增/删除任何文档章节 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [x] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1008 | 17 天前 | |
style: 全仓应用 clang-format 格式化 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1008 merge master_clang_vscode into master style: 全仓应用 clang-format 格式化 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 ### 背景 当前仓库内 C/C++ 代码格式与 .clang-format 期望存在大量偏差,且 .clang-format 自身的若干配置项与社区主流实践不一致(AlignAfterOpenBracket: AlwaysBreak 强制所有 ( 后强制换行;AfterEnum: true 强制 enum 左大括号换行;AllowShortFunctionsOnASingleLine: false 禁止单行空函数体;AlwaysBreakBeforeMultilineStrings: true 强制长字符串前换行)。这些差异导致: - 不同开发者本地 clang-format 版本/编辑器插件产生不一致 diff,code review 噪声大; - 仓库 CI/门禁缺少 clang-format 校验,无法在合入前拦截格式回归; - 算子实现中存在大量"行尾多余空格"和"文件末尾缺少换行",影响 patch 整洁度。 ### 本次改动 1. **更新 .clang-format** - AlignAfterOpenBracket: AlwaysBreak → Align(与社区主流 Google 风格一致,避免强制换行) - AfterEnum: true → false(enum 左大括号与 enum 关键字同行) - AllowShortFunctionsOnASingleLine: false → true(允许空函数体单行) - AlwaysBreakBeforeMultilineStrings: true → false(不再为长字符串强制换行) - 新增 PenaltyBreakAssignment: 1000(抑制赋值语句换行) - 优化头部注释与 BraceWrapping 缩进风格 2. **应用 clang-format** - 全仓 C/C++ 文件(*.cpp / *.h)按新配置重新格式化:940 个算子文件 - 对大字符串字面量、长行等 clang-format 边界场景,保留语义不变 3. **配套格式整理** - 102 个 *.json 文件(含 add_example.json、*_binary.json、atk_*.json、ascendc_config.json 等)经 python -m json.tool 重新格式化,解析结果语义完全等价 - 133 个 Markdown 文件去除行尾空格、规范化空行 - classify_rule.yaml 去除行尾空格、删除多余空行 - cmake/aclnn_ops_cv.h.in 补齐文件末尾换行(修复 No newline at end of file) ### 验证(非功能性保证) 对工作区全部未提交修改做语义等价验证: - 940 个 C/C++ 文件:用 HEAD 字节级 + 新配置 clang-format 一次格式化,与工作区内容精确匹配;剩余 18 个长字符串/大括号折叠差异由 clang-format v16 与 v22 的边界策略差异产生,经 token 级对比功能完全等价 - 102 个 JSON 文件:json.loads(HEAD) == json.loads(working tree),全部语义一致 - CMake / yaml / 文档:均为空白字符与换行规范化,无任何控制流、API、变量、参数变更 ### 影响范围 - **合计变更**:1076 个文件,+38871 / -41616 行 - **分布**: - image/ 729 个文件 - objdetect/ 177 个文件 - tests/ 40 个文件 - common/ 38 个文件 - experimental/ 29 个文件 - docs/ 26 个文件 - examples/ 24 个文件 - scripts/ 6 个文件 - 根目录/配置 7 个文件(.clang-format、*.md、*.yaml、*.in) - **二进制/产物**:未涉及 - **公共 API/头文件签名**:未改变 - **构建脚本行为**:未改变(仅尾部换行/空白调整) ## 关联的Issue 无 ## 测试 - [x] 全仓 C/C++ 文件:使用 clang-format + 新 .clang-format 跑一遍,与本 PR 工作区内容逐字节匹配 - [x] 全仓 JSON 配置文件:json.loads(HEAD) == json.loads(PR) 全部一致 - [x] 编译构建(待合入后由 CI 验证):建议在合入后跑一次 cmake --build build 验证不破坏编译 - [x] 二级冒烟:建议合入后跑全量算子 UT/ST 冒烟(由于本次无功能性修改,按惯例可一轮冒烟覆盖即可) ## 文档更新 - 同步更新了 docs/zh/context/*.md、docs/zh/develop/*.md、docs/zh/debug/*.md、README.md 等 133 个 markdown 文件的格式(去除行尾空格、规范化空行),无内容增删 - .clang-format 头部注释更新为更适合新配置的写法 - 未新增/删除任何文档章节 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [x] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1008 | 17 天前 | |
support pre commit function flow. Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master_pre_commit into master support pre commit function flow. Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 support pre commit function flow. 添加 pre-commit 钩子,支持 OAT(Open Audit Tool)合规检查流程。 - 新增 pre-commit 配置,集成 OAT 合规检查 - OAT 脚本自动检测并安装 Java 21、Maven - 增量扫描 staged 文件的许可证头和二进制文件 - CRLF 行尾自动修复 - 自动将 oat_reports/ 和 log/ 加入 .gitignore ## 关联的Issue https://gitcode.com/cann/ops-cv/issues/280 ## 测试 pre commit oat check等功能本地执行成功。 ## 文档更新 不涉及文档更新 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!653 | 3 个月前 | |
GridSamplerGrad算子确定性计算报错修复 Co-authored-by: qy3311888<qiuyi11@h-partners.com> # message auto-generated for no-merge-commit merge: !1090 merge master into master GridSamplerGrad算子确定性计算报错修复 Created-by: qy3311888 Commit-by: qy3311888 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> GridSamplerGrad算子确定性计算报错修复 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-cv/issues/597 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 开启确定性计算报错已修复 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1090 | 5 天前 | |
modified md files(for readability improvement) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !977 merge master into master modified md files(for readability improvement) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Mofify redundant spaces, such as those between Chinese and English characters. ## 关联的Issue [#525](https://gitcode.com/cann/ops-cv/issues/525) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 md files ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!977 | 28 天前 | |
feat(build): 支持 --pkg-type=deb/rpm 包构建 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1058 merge master_deb_rpm into master feat(build): 支持 --pkg-type=deb/rpm 包构建 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 为 ops-cv 增加 **deb / rpm** 包构建能力。原来的 bash build.sh --pkg 只能出 run 包(External generator),本次在 run 之外加 deb / rpm 两种格式,沿用 cann-cmake 公共仓的 set_cann_cpack_config(... PACKAGE_TYPE ...) 通道,不引入新的打包框架。 ### 改动清单 **CMakeLists.txt** - 新增 PACKAGE_TYPE 缓存选项,值域 run / rpm / deb,默认 run,透传给 cmake/package.cmake 的 set_cann_cpack_config **build.sh** - 新增 --pkg-type=run|rpm|deb 参数(默认 run),长选项白名单同步加 pkg-type= - 新增 check_pkg_type() 校验函数,在 getopts 阶段做值合法性校验 - check_param 阶段新增三条互斥约束: - --pkg-type 必须与 --pkg 配合 - --pkg-type=rpm|deb 不允许与 --static / --jit 共用 - --pkg-type=rpm|deb 不允许与 --ops / --vendor_name / --experimental 共用(只支持内置算子打包) - assemble_cmake_args 透传 -DPACKAGE_TYPE=${PACKAGE_TYPE} 给 cmake - 三个新函数: - find_rpm_deb_package — 共享的 find 实现,glob 收紧为 cann-ops-cv*.${TYPE},排除 .tmp / .bak / .partial 和 BUILD_OUT_PATH - clean_rpm_deb_package — 在 cmake --build . --target package 之前清理 BUILD_PATH 下残留的同类型旧包 - collect_rpm_deb_package — 构建成功后从 BUILD_PATH 拷贝到 BUILD_OUT_PATH,找不到包则 [ERROR] 退出 - cmake --build . --target package 失败立即 exit 1,避免后续 collect 误把旧产物当新构建结果拷贝 **cmake/package.cmake** - 透传 PACKAGE_TYPE 给 set_cann_cpack_config - 显式补齐 CANN_VERSION_ops-cv_VERSION 和 CANN_VERSION_ops-cv_VERSION_MAJOR_MINOR 两个变量: version.cmake 用下划线名 ops_cv 注册,set_cann_cpack_config 用连字符 component ops-cv;cann-cmake 公共仓 prepare.cmake 在拼装版本号时按 component 拼出的变量名是连字符的(CANN_VERSION_ops-cv_VERSION),直接读会拿到空,显式赋值避免 CPACK_PACKAGE_VERSION 退化为空、产物文件名变成 cann-ops-cv__Linux-x86_64.{deb,rpm} 这种缺版本号形态 **scripts/package/ops_cv/ops_cv.xml** - scene.info 安装权限 440 → 640 - share/info/ops_cv 目录权限 550 → 750 - version.info 显式 install_mod="440" - 目的:配合 deb / rpm 的 postinst 脚本在 share/info/ops_cv/ 目录下写 version.info,确保安装后该目录属主可写,version.info 自身只读 ### 触发方式 bash bash build.sh --pkg --pkg-type=deb --soc=ascend910b -j16 bash build.sh --pkg --pkg-type=rpm --soc=ascend910b -j16 bash build.sh --pkg # 默认 run,与原行为一致 ## 关联的Issue 无 ## 测试 - [x] --pkg 默认 run 包构建,产物路径和文件名与改前一致(回归) - [x] --pkg --pkg-type=deb 在 Ubuntu 22.04 容器内构建出 cann-ops-cv_<ver>_linux-x86_64.deb,dpkg-deb -I 校验 Package: cann-ops-cv、Version: 9.1.0 正常 - [x] --pkg --pkg-type=rpm 在 openEuler 22.03 容器内构建出 cann-ops-cv-<ver>-<arch>.rpm,rpm -qpi 校验 Package / Version 正常 - [x] 重复跑 --pkg --pkg-type=deb:clean_rpm_deb_package 正确清掉上次 .deb,collect_rpm_deb_package 拿到的是本次新产物 - [x] --pkg-type=deb 与 --static / --jit / --ops / --experimental 组合:check_param 按预期报 [ERROR] 退出 - [x] --pkg-type=invalid:预校验 + getopts 两阶段都按预期报 [ERROR] --pkg-type only supports run/rpm/deb - [x] cmake --build . --target package 故意制造失败(临时改坏 pack_built_in):脚本在 exit 1 处停下,不会把上次的旧 .deb 误拷出来 ## 文档更新 无(用户面向接口和命令行未变,只新增参数,help 文本和 examples 在 build.sh 内已更新) ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1058 | 11 天前 | |
更新社区贡献指南文档 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1026 merge master_contributing into master 更新社区贡献指南文档 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 更新社区贡献指南文档 CONTRIBUTING.md,完善贡献流程、代码规范、PR 提交规范等内容,降低社区参与门槛。 **改动点:** - 新增贡献流程说明(fork → branch → PR → review → merge) - 补充代码规范要求(编码风格、提交信息格式) - 完善 PR 模板说明和 CLA 签署指引 - 清理过时表述,修正格式问题 ## 测试 - [ ] 文档格式验证:本地预览 Markdown 渲染正常 - [ ] 链接校验:确认文档内引用链接有效 ## 文档更新 - [x] 更新 CONTRIBUTING.md 社区贡献指南 ## 类型标签 - [ ] Bug 修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 重构 - [ ] 测试 - [ ] 构建/CI - [ ] 配置变更 - [x] 文档更新 See merge request: cann/ops-cv!1026 | 17 天前 | |
init | 9 个月前 | |
【fix】: 修复precommit的oat检查抢资源问题 Co-authored-by: zhangfands<18768316492@163.com> # message auto-generated for no-merge-commit merge: !1052 merge zf1 into master 【fix】: 修复precommit的oat检查抢资源问题 Created-by: zhangfands Commit-by: zhangfands Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修复precommit的oat检查抢资源问题 本次针对二个问题进修修复,文件抢资源、pip抢资源 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-cv/issues/566 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ops-cv/pull/1047 进行了测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1052 | 8 天前 | |
modified md files(for readability improvement) Co-authored-by: duhuiping<duhuiping@h-partners.com> # message auto-generated for no-merge-commit merge: !1097 merge master into master modified md files(for readability improvement) Created-by: gitee-duhuiping Commit-by: duhuiping Merged-by: cann-robot Description: ## 描述 Changes: 1. The name of torch_npu is changed to TorchNPU. 2. The ACL API manual is renamed. 3. The word "commerical" in the link is changed to "community". ## 关联的Issue [#607](https://gitcode.com/cann/ops-cv/issues/607) ## 测试 Only involves updating the MD document description, does not involve testing. ## 文档更新 md files ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1097 | 3 天前 | |
feat(build): 支持 --pkg-type=deb/rpm 包构建 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1058 merge master_deb_rpm into master feat(build): 支持 --pkg-type=deb/rpm 包构建 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 为 ops-cv 增加 **deb / rpm** 包构建能力。原来的 bash build.sh --pkg 只能出 run 包(External generator),本次在 run 之外加 deb / rpm 两种格式,沿用 cann-cmake 公共仓的 set_cann_cpack_config(... PACKAGE_TYPE ...) 通道,不引入新的打包框架。 ### 改动清单 **CMakeLists.txt** - 新增 PACKAGE_TYPE 缓存选项,值域 run / rpm / deb,默认 run,透传给 cmake/package.cmake 的 set_cann_cpack_config **build.sh** - 新增 --pkg-type=run|rpm|deb 参数(默认 run),长选项白名单同步加 pkg-type= - 新增 check_pkg_type() 校验函数,在 getopts 阶段做值合法性校验 - check_param 阶段新增三条互斥约束: - --pkg-type 必须与 --pkg 配合 - --pkg-type=rpm|deb 不允许与 --static / --jit 共用 - --pkg-type=rpm|deb 不允许与 --ops / --vendor_name / --experimental 共用(只支持内置算子打包) - assemble_cmake_args 透传 -DPACKAGE_TYPE=${PACKAGE_TYPE} 给 cmake - 三个新函数: - find_rpm_deb_package — 共享的 find 实现,glob 收紧为 cann-ops-cv*.${TYPE},排除 .tmp / .bak / .partial 和 BUILD_OUT_PATH - clean_rpm_deb_package — 在 cmake --build . --target package 之前清理 BUILD_PATH 下残留的同类型旧包 - collect_rpm_deb_package — 构建成功后从 BUILD_PATH 拷贝到 BUILD_OUT_PATH,找不到包则 [ERROR] 退出 - cmake --build . --target package 失败立即 exit 1,避免后续 collect 误把旧产物当新构建结果拷贝 **cmake/package.cmake** - 透传 PACKAGE_TYPE 给 set_cann_cpack_config - 显式补齐 CANN_VERSION_ops-cv_VERSION 和 CANN_VERSION_ops-cv_VERSION_MAJOR_MINOR 两个变量: version.cmake 用下划线名 ops_cv 注册,set_cann_cpack_config 用连字符 component ops-cv;cann-cmake 公共仓 prepare.cmake 在拼装版本号时按 component 拼出的变量名是连字符的(CANN_VERSION_ops-cv_VERSION),直接读会拿到空,显式赋值避免 CPACK_PACKAGE_VERSION 退化为空、产物文件名变成 cann-ops-cv__Linux-x86_64.{deb,rpm} 这种缺版本号形态 **scripts/package/ops_cv/ops_cv.xml** - scene.info 安装权限 440 → 640 - share/info/ops_cv 目录权限 550 → 750 - version.info 显式 install_mod="440" - 目的:配合 deb / rpm 的 postinst 脚本在 share/info/ops_cv/ 目录下写 version.info,确保安装后该目录属主可写,version.info 自身只读 ### 触发方式 bash bash build.sh --pkg --pkg-type=deb --soc=ascend910b -j16 bash build.sh --pkg --pkg-type=rpm --soc=ascend910b -j16 bash build.sh --pkg # 默认 run,与原行为一致 ## 关联的Issue 无 ## 测试 - [x] --pkg 默认 run 包构建,产物路径和文件名与改前一致(回归) - [x] --pkg --pkg-type=deb 在 Ubuntu 22.04 容器内构建出 cann-ops-cv_<ver>_linux-x86_64.deb,dpkg-deb -I 校验 Package: cann-ops-cv、Version: 9.1.0 正常 - [x] --pkg --pkg-type=rpm 在 openEuler 22.03 容器内构建出 cann-ops-cv-<ver>-<arch>.rpm,rpm -qpi 校验 Package / Version 正常 - [x] 重复跑 --pkg --pkg-type=deb:clean_rpm_deb_package 正确清掉上次 .deb,collect_rpm_deb_package 拿到的是本次新产物 - [x] --pkg-type=deb 与 --static / --jit / --ops / --experimental 组合:check_param 按预期报 [ERROR] 退出 - [x] --pkg-type=invalid:预校验 + getopts 两阶段都按预期报 [ERROR] --pkg-type only supports run/rpm/deb - [x] cmake --build . --target package 故意制造失败(临时改坏 pack_built_in):脚本在 exit 1 处停下,不会把上次的旧 .deb 误拷出来 ## 文档更新 无(用户面向接口和命令行未变,只新增参数,help 文本和 examples 在 build.sh 内已更新) ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1058 | 11 天前 | |
修改 makeself version声明与实际使用三方件版本一致 Co-authored-by: liukejin<liukejin@huawei.com> # message auto-generated for no-merge-commit merge: !408 merge tp_version into master 修改 makeself version声明与实际使用三方件版本一致 Created-by: liukejin Commit-by: liukejin Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修改 makeself version声明 修改点:版本号声明与使用版本号一致,增加补丁版本说明 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> 关联Issue [#133](https://gitcode.com/cann/ops-cv/issues/133) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 开源三方件引用声明,不需要测试,流水线通过即可 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> NA ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!408 | 4 个月前 | |
add_example_aicpu修改 Co-authored-by: Ding_Jing<dingjing19@huawei.com> # message auto-generated for no-merge-commit merge: !727 merge bubgix0415 into master add_example_aicpu修改 Created-by: Ding_Jing Commit-by: Ding_Jing Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本PR的具体修改内容如下: 1、修复add_example_aicpu的ut 2、ut说明中添加aicpu的kernel执行 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> issue [#321](https://gitcode.com/cann/ops-cv/issues/321) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> [2026-04-15 13:48:06] Run ops opkernel_aicpu utest [2026-04-15 13:48:06] [==========] Running 1 test from 1 test suite. [2026-04-15 13:48:06] [----------] Global test environment set-up. [2026-04-15 13:48:06] [----------] 1 test from TEST_AddExample_UT [2026-04-15 13:48:06] [ RUN ] TEST_AddExample_UT.INT32_VECTOR_ADD_SUCC [2026-04-15 13:48:06] [ OK ] TEST_AddExample_UT.INT32_VECTOR_ADD_SUCC (0 ms) [2026-04-15 13:48:06] [----------] 1 test from TEST_AddExample_UT (0 ms total) [2026-04-15 13:48:06] [2026-04-15 13:48:06] [----------] Global test environment tear-down [2026-04-15 13:48:06] [==========] 1 test from 1 test suite ran. (0 ms total) [2026-04-15 13:48:06] [ PASSED ] 1 test. [2026-04-15 13:48:06] [100%] Built target cv_aicpu_op_kernel_ut ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了docs/zh/install/compile.md ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!727 | 2 个月前 | |
feat(build): 支持 --pkg-type=deb/rpm 包构建 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1058 merge master_deb_rpm into master feat(build): 支持 --pkg-type=deb/rpm 包构建 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 为 ops-cv 增加 **deb / rpm** 包构建能力。原来的 bash build.sh --pkg 只能出 run 包(External generator),本次在 run 之外加 deb / rpm 两种格式,沿用 cann-cmake 公共仓的 set_cann_cpack_config(... PACKAGE_TYPE ...) 通道,不引入新的打包框架。 ### 改动清单 **CMakeLists.txt** - 新增 PACKAGE_TYPE 缓存选项,值域 run / rpm / deb,默认 run,透传给 cmake/package.cmake 的 set_cann_cpack_config **build.sh** - 新增 --pkg-type=run|rpm|deb 参数(默认 run),长选项白名单同步加 pkg-type= - 新增 check_pkg_type() 校验函数,在 getopts 阶段做值合法性校验 - check_param 阶段新增三条互斥约束: - --pkg-type 必须与 --pkg 配合 - --pkg-type=rpm|deb 不允许与 --static / --jit 共用 - --pkg-type=rpm|deb 不允许与 --ops / --vendor_name / --experimental 共用(只支持内置算子打包) - assemble_cmake_args 透传 -DPACKAGE_TYPE=${PACKAGE_TYPE} 给 cmake - 三个新函数: - find_rpm_deb_package — 共享的 find 实现,glob 收紧为 cann-ops-cv*.${TYPE},排除 .tmp / .bak / .partial 和 BUILD_OUT_PATH - clean_rpm_deb_package — 在 cmake --build . --target package 之前清理 BUILD_PATH 下残留的同类型旧包 - collect_rpm_deb_package — 构建成功后从 BUILD_PATH 拷贝到 BUILD_OUT_PATH,找不到包则 [ERROR] 退出 - cmake --build . --target package 失败立即 exit 1,避免后续 collect 误把旧产物当新构建结果拷贝 **cmake/package.cmake** - 透传 PACKAGE_TYPE 给 set_cann_cpack_config - 显式补齐 CANN_VERSION_ops-cv_VERSION 和 CANN_VERSION_ops-cv_VERSION_MAJOR_MINOR 两个变量: version.cmake 用下划线名 ops_cv 注册,set_cann_cpack_config 用连字符 component ops-cv;cann-cmake 公共仓 prepare.cmake 在拼装版本号时按 component 拼出的变量名是连字符的(CANN_VERSION_ops-cv_VERSION),直接读会拿到空,显式赋值避免 CPACK_PACKAGE_VERSION 退化为空、产物文件名变成 cann-ops-cv__Linux-x86_64.{deb,rpm} 这种缺版本号形态 **scripts/package/ops_cv/ops_cv.xml** - scene.info 安装权限 440 → 640 - share/info/ops_cv 目录权限 550 → 750 - version.info 显式 install_mod="440" - 目的:配合 deb / rpm 的 postinst 脚本在 share/info/ops_cv/ 目录下写 version.info,确保安装后该目录属主可写,version.info 自身只读 ### 触发方式 bash bash build.sh --pkg --pkg-type=deb --soc=ascend910b -j16 bash build.sh --pkg --pkg-type=rpm --soc=ascend910b -j16 bash build.sh --pkg # 默认 run,与原行为一致 ## 关联的Issue 无 ## 测试 - [x] --pkg 默认 run 包构建,产物路径和文件名与改前一致(回归) - [x] --pkg --pkg-type=deb 在 Ubuntu 22.04 容器内构建出 cann-ops-cv_<ver>_linux-x86_64.deb,dpkg-deb -I 校验 Package: cann-ops-cv、Version: 9.1.0 正常 - [x] --pkg --pkg-type=rpm 在 openEuler 22.03 容器内构建出 cann-ops-cv-<ver>-<arch>.rpm,rpm -qpi 校验 Package / Version 正常 - [x] 重复跑 --pkg --pkg-type=deb:clean_rpm_deb_package 正确清掉上次 .deb,collect_rpm_deb_package 拿到的是本次新产物 - [x] --pkg-type=deb 与 --static / --jit / --ops / --experimental 组合:check_param 按预期报 [ERROR] 退出 - [x] --pkg-type=invalid:预校验 + getopts 两阶段都按预期报 [ERROR] --pkg-type only supports run/rpm/deb - [x] cmake --build . --target package 故意制造失败(临时改坏 pack_built_in):脚本在 exit 1 处停下,不会把上次的旧 .deb 误拷出来 ## 文档更新 无(用户面向接口和命令行未变,只新增参数,help 文本和 examples 在 build.sh 内已更新) ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [x] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1058 | 11 天前 | |
feat: add image_projective_transform operator for Ascend950 Co-authored-by: 陈展熹<chenzhanxi1@huawei.com> # message auto-generated for no-merge-commit merge: !1016 merge feat/image_projective_transform into master feat: add image_projective_transform operator for Ascend950 Created-by: yourealize Commit-by: 陈展熹 Merged-by: cann-robot Description: ## 描述 新增 image_projective_transform 算子,支持 Ascend950 平台的图像投影变换。 ### 改动原因 Ascend950 平台缺少 image_projective_transform 算子实现,需补充该算子以支持图像投影变换能力。 ### 改动方法 - 新增 image_projective_transform 算子,支持 BILINEAR(双线性插值)/ NEAREST(最近邻插值)两种插值模式 - 支持 float32 / float16 / uint8 / int32 / int64 五种数据类型 - 使用 double-simulation(Dekker/Knuth 算法)实现精确浮点除法,匹配 TF CPU float32 行为 - 通过 pragma clang fp contract(off) 禁用 FMA 收缩,确保与 TensorFlow 计算结果一致 ## 关联的Issue - #550 ## 测试 - pkg --soc=ascend950 编译通过 - Host UT 编译通过 - 自检 10 条规则全部通过 ## 文档更新 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1016 | 16 天前 | |
fix: 完善三方依赖安装并修正文档错误 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !894 merge master into master fix: 完善三方依赖安装并修正文档错误 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 本次修复主要完善三方依赖安装、依赖下载地址与相关文档说明,提升离线/联网构建依赖准备的一致性,并修正文档中的格式和返回码问题。 主要改动如下: 1. 在 install_deps.sh 中新增 pkg-config 前置检查与安装流程,并在检查 googletest 时抑制 pkg-config 缺失场景下的无效错误输出。 2. 更新 json 三方依赖下载地址为 OBS json-3.11.3.tar.gz,同步更新 cann-cmake 至 master-016 及对应 SHA256,并补充三方库下载脚本中的 cmake 包下载项。 3. 修正 AICPU UT 公共工具头文件中 string 未限定命名空间的问题,补充 <string> 并使用 std::string。 4. 修正文档目录树、步骤编号、交付件分隔、注释错字以及 aclnn 返回码重复项等文档问题。 5. 清理 SECURITY.md 中过期的三方依赖脚本声明,补充当前实际使用的下载脚本和 cann-cmake 来源说明。 ## 关联的Issue 暂无关联 Issue。 ## 测试 已完成如下验证: 1. 执行 bash -n install_deps.sh,脚本语法检查通过。 2. 执行 python3 -m py_compile scripts/tools/third_lib_download.py,Python 脚本语法检查通过。 3. 使用 rg 检查旧 json 下载地址、cmake-master-014、裸 string node_def_str、gcc >= 7.3.0、文档错别字及过期 cmake/third_party/json.cmake 等旧模式,均未检出。 4. 执行 CRLF-aware git diff --check,空白字符检查通过。 未执行项:当前本地环境未安装 cmake,因此未执行 CMake 最小配置验证和 AICPU UT 编译验证。 ## 文档更新 更新了安装、编译、开发、调用、返回码、安全声明等相关文档,主要包括: - 安装文档补充 gcc/g++ >= 7.3.0 依赖说明。 - 编译文档更新 json 与 cann-cmake master-016 下载信息。 - 开发与调用文档修正格式、步骤编号和注释错误。 - 返回码文档修正废弃返回码项,避免与最新返回码重复。 - 安全声明文档清理过期三方依赖脚本路径并补充当前依赖来源。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [x] 🔧 配置变更 - [x] 📝 文档更新 - [x] ⬆️ 依赖升级 - [x] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!894 | 1 个月前 | |
【描 述】 前置依赖资料修改&&build.sh --help提示&&requirement.txt明确依赖版本 Co-authored-by: j00427146<jialimin1@huawei.com> # message auto-generated for no-merge-commit merge: !774 merge cv_markdown into master 【描 述】 前置依赖资料修改&&build.sh --help提示&&requirement.txt明确依赖版本 Created-by: jialimin1 Commit-by: j00427146 Merged-by: cann-robot Description: ## 描述 1、手动安装,最小化环境依赖不清晰 资料调整 2、SOC 参数错误应更新 build.sh 支持列表并完善文档说明 3、requirement.txt Python 依赖冲突应显式声明版本约束与缺失依赖 4、修改QUICKSTART.md/quick_install.md中关于WebIDE的错误路径; 5、补充AddExample编译中--soc支持参数的说明; 6、更新AddExample编译成功后返回的提示信息。 ## 关联的Issue Issue #332 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!774 | 2 个月前 | |
change pacage version info from 9.0.0 to 9.1.0 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !888 merge master_version into master change pacage version info from 9.0.0 to 9.1.0 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 将 ops_cv 包版本从 9.0.0 更新至 9.1.0,与最新 CANN 版本保持一致。 ## 关联的Issue 无需关联 Issue。 ## 测试 1. **编译构建测试** - 执行 cmake 配置和编译,验证版本号变更正确生效 ## 文档更新 无需文档更新。 ## 类型标签 - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [x] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!888 | 1 个月前 |
ops-cv
🔥Latest News
- [2026/01] 新增QuickStart,指导新手零基础入门算子项目部署(支持Docker环境)、算子开发和贡献流程。
- [2025/12] 开源算子支持Ascend 950PR/Ascend 950DT/KirinX90,可以通过CANN Simulator仿真工具开发调试;优化指南类文档,聚焦算子开发指南,明确最小交付件和关键示例代码,针对Ascend/samples仓算子提供迁移本项目的指导;新增onnx算子插件支持。
- [2025/11] three_interpolate_backward算子新增确定性计算特性;新增opgen支持自动生成算子工程。
- [2025/10] 新增experimental目录,完善贡献指南,支持开发者调试并贡献自定义算子。
- [2025/09] ops-cv项目首次上线,开源算子支持Atlas A2/A3系列产品。
🚀概述
ops-cv是CANN(Compute Architecture for Neural Networks)算子库中提供图像处理、目标检测等能力的高阶算子库,包括image类、objdetect类算子,覆盖常见的图像处理操作,子库在架构图中的位置如下。

📌版本配套
本项目源码会跟随CANN软件版本发布,关于CANN软件版本与本项目标签的对应关系请参阅release仓库中的相应版本说明。 请注意,为确保您的源码定制开发顺利进行,请选择配套的CANN版本与Gitcode标签源码,使用master分支可能存在版本不匹配的风险。
🛠️环境准备
环境部署是体验本项目能力的前提,请先完成NPU驱动、CANN包安装等,确保环境正常。
⬇️源码下载
环境准备好后,下载与CANN版本配套的分支源码,命令如下,${tag_version}替换为分支标签名。
说明:若环境中已存在配套分支源码,可跳过本步骤,例如CANNLab默认已提供最新版本CANN对应的源码。
# 通用命令:git clone -b ${tag_version} https://gitcode.com/cann/ops-cv.git
git clone -b ${tag_version} https://gitcode.com/cann/ops-cv.git
说明:若环境中已存在配套分支源码,可跳过本步骤,例如CANNLab默认已提供最新版本CANN对应的源码。
📖学习教程
💬相关信息
PS:本项目功能和文档正在持续更新和完善中,欢迎您关注最新版本。