OpenCV图像处理高频接口新增昇腾支持&上线昇腾CI服务器

LOGO

在当今数字化时代,图像处理不再是一个陌生的领域,而是推动科学、技术和创新的引擎。OpenCV(开源计算机视觉库)凭借其丰富、强大的功能和灵活性在图像处理领域占据引领者地位。为了进一步加速OpenCV图像处理,即将推出的OpenCV 4.9.0版本提供了图像处理相关的高频使用接口的昇腾(Ascend)支持。这意味着在计算机视觉领域的数据预处理和后处理流程中,可以充分发挥昇腾软硬件的强大算力和计算效率,加速图像处理操作。

除此之外,2023年10月17日,OpenCV社区正式接纳昇腾+openEuler作为持续集成(Continuous Integration,CI)系统的操作系统之一,这意味着未来OpenCV的代码修改均会在昇腾+openEuler环境中进行自动化构建及测试,保障了OpenCV在openEuler上支持的稳定性。

图像处理昇腾接口使用

本次提供的以昇腾为后端的图像处理接口封装在OpenCV扩展包(contrib)的cannops模块中,包括图像矩阵的算术运算,通道拆分合并,图片裁剪,翻转,调整大小,转置等图像处理的Python和C++接口,处理精度与CPU后端的计算结果相同。

那么如何调用昇腾后端实现图像处理呢?除了对昇腾必要的初始化、去初始化之外,用户无需学习CANN API,仅需要将原来的接口添加cann包名(C++接口为使用cann命名空间),即可使用昇腾算力:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import cv2

# cann初始化
cv2.cann.initAcl()
# 选择执行运算的设备编号
cv2.cann.setDevice(0)

# 图像处理(以图像旋转为例)
img = cv2.imread('/path/to/image')
# 添加cann包名调用昇腾接口
ret = cv2.cann.rotate(img, 0)
cv2.imwrite('/path/to/result', ret)

# cann去初始化
cv2.cann.finalizeAcl()
昇腾接口使用方法

详细示例代码接口列表请参考OpenCV官方文档

OpenCV官方支持昇腾CI

OpenCV社区正式接纳昇腾+openEuler作为持续集成(Continuous Integration,CI)系统的操作系统之一,对昇腾和openEuler提供上游原生支持,给广大OpenCV及昇腾用户提供了稳定性保障。让我们跟随下面两个问题,了解昇腾CI是如何维护稳定性的。

持续集成做了什么

CI提供了一个高效、自动化的开发环境,在开发者提交代码后,会触发一系列自动构建及测试,以确保软件系统的稳定性和质量。持续集成系统不仅缩短了开发周期,也为开发者提供了更快速、可靠的反馈机制,从而推动了软件开发的创新和进步。

OpenCV支持昇腾CI意味着什么?

未来OpenCV社区的代码提交将会在昇腾CI环境下自动化构建和测试,有助于确保OpenCV在昇腾上的稳定性和性能。同时为后续OpenCV的昇腾相关贡献代码的提交提供了稳定可靠的测试平台,有助于推动OpenCV+昇腾的蓬勃发展。感谢OpenCV和华为计算团队的共同努力。

OpenCV社区CI的昇腾支持
OpenCV社区CI的昇腾支持

OpenCV简介

OpenCV是一个开源的跨平台计算机视觉库,提供了图像处理,机器学习,视频分析等功能,支持多种开发语言,多平台和多类型后端。 其中图像处理模块提供了矩阵的算术和逻辑运算,图像处理,视频编解码等,被广泛运用于计算机视觉领域的数据预处理和后处理。

除了图像处理模块,OpenCV DNN模块已经在2022年12月支持了昇腾作为推理后端,支持读取包括ONNX,TensorFLow,Caffeine,Darknet在内的多种主流格式的深度网络模型,并支持在多平台,多设备中运行,目前已经达到了主流神经网络推理框架的性能。在昇腾算力的加持下,推理性能进一步提升,3毫秒即可完成ResNet50推理

OpenCV架构示意图
OpenCV架构示意图

CANN简介

CANN是华为推出的异构计算架构,是上层应用调用底层昇腾处理器的桥梁,在本次OpenCV昇腾支持中是至关重要的一层。同时,昇腾+CANN支持昇思MindSpore,OpenCV DNN、PyTorch、TensorFlow、飞桨、ONNX等多种深度学习框架,以极致性能、极简开发、开放生态为目标,助力昇腾构建全场景人工智能平台。

CANN AI异构计算框架
CANN AI异构计算框架

结语

未来OpenCV会进一步完善能使用昇腾后端的接口,并持续优化接口性能,进一步发挥昇腾算力性能,提升用户体验。

目前,用户需要自行编译OpenCV最新代码才能体验到接口的昇腾支持,编译方法可以参考OpenCV wiki中提供的详细指导,由于cannops模块在OpenCV扩展包中,编译还需要下载扩展包源码以及配置扩展包的保存路径:

1
2
3
4
$ git clone https://github.com/opencv/opencv_contrib.git
$ cd <opencv_build_directory>
$ cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>
$ make -j5

如果大家在使用上遇到任何问题,欢迎反馈到OpenCV扩展包GitHub仓库的Issues页面,我们会及时为大家解决问题。