《架构师》2018年12月
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

开源跨平台计算机视觉库OpenCV 4.0正式发布

作者 蔡芳芳

近OpenCV是英特尔开源的跨平台计算机视觉库,它是一套包含从图像预处理到预训练模型调用等大量视觉API的库,并可以处理图像识别、目标检测、图像分割和行人再识别等主流视觉任务。OpenCV提供了覆盖整个流程的工具,因此开发者不需要了解各个模型的原理就能基于各个API构建视觉任务。

OpenCV使用BSD许可证,因此对研究和商业用途均免费。它具备C++、Python和Java接口,支持Windows、Linux、Mac OS、iOS和Android系统。OpenCV旨在提高计算效率,专注于实时应用。它使用优化的C/C++ 写成,能够有效利用多核处理。此外,在OpenCL的加持下,OpenCV可以利用底层异构计算平台的硬件加速。OpenCV应用广泛,目前在全世界约有4.7万用户,下载量约为1400万。

可以说OpenCV是CV领域开发者与研究者的必备工具包,Mask-RCNN等很多开源项目都依赖于这个工具包。现在距离3.0版本的发布已经过去三年多,OpenCV 4.0 final版本终于于近日发布,这也是4.x版本线的第一个稳定版本,它进一步完善了核心接口,并添加了二维码检测器、ONNX转换格式等新特点。

重要更新如下:

· OpenCV 4.0现在是基于C++ 11的库,因此编译器需要与C++ 11兼容。所使用的CMake需要是3.5.1以上版本。

· OpenCV 1.x中大量C的API已经被移除,受影响的模块包括objdetect、photo、video、videoio、imgcodecs、calib3d。

· core模块中的Persistence(用于存储和加载XML、YAML或JSON格式的结构化数据)已经完全基于C++ 重新实现,因此这里的C API也被移除了。目前,base64支持尚未完成(仅支持加载base64编码的XML和YAML)。此外,存储在FileNode中的序列的随机访问是慢速O(N) 操作;使用`cv :: FileNodeIterator`可以做更快速的顺序访问。从积极的方面来说,加载`FileStorage`比原来的实现方法节省了3-6倍的内存。

针对DNN的改进

· 增加对Mask-RCNN的支持,官方提供了操作指南Python样例

· 集成ONNX解析器。当前版本的OpenCV支持许多流行的分类网络,部分支持YOLO对象检测网络(ONNX版本的YOLO缺少一些提供矩形列表的最终图层)。

· 进一步提升使用英特尔DLDT构建的DNN模块的性能。DLDT最近已经正式开源。请参阅指南了解如何构建和使用支持DLDT的OpenCV。

· 添加实验性的Vulkan后端。

· 修复了AMD和NVIDIA GPU上的OpenCL加速问题。现在,用户可以直接为模型启用DNN_TARGET_OPENCL,无需额外的环境变量。不过需要注意的是,DNN_TARGET_OPENCL_FP16仅在英特尔GPU上做了测试,因此仍需要额外的标志。

· 为OpenCV支持的最流行的深度学习网络添加了快捷方式。开发者可以指定模型的别名,从而跳过预处理参数甚至模型路径的设置!下面是一个操作示例,原来的做法是:

          python object_detection.py --model
          opencv_face_detector.caffemodel --config
          opencv_face_detector.prototxt --mean 104177 123--width 300
          --height 300

现在只需要:

          python object_detection.py opencv_fd

· 添加了新模块G-API,它可作为基于图的高效图像处理流程的引擎。详细信息可以参见Graph API(G-API)页面

· 实现了流行的Kinect Fusion算法并集成到opencv_contrib/rgbd模块,同时针对CPU和GPU (OpenCL) 做了优化。为了使实时样本正常工作,我们在opencv/videoio模块中添加了对Kinect 2的支持。在4.0 beta版本的代码中已经对iGPU做了加速,从而使得高分辨率的情况下(512 x 512 x 512集成量)性能提升了3倍。

· objdetect模块中添加了二维码检测器和解码器,可以参考这里的代码示例

· 将高效、高质量的DIS dense optical flow算法从opencv_contrib迁移到video模块。

此外,OpenCV 4.0性能也有所提升,图像处理操作可实现15%-30% 的速度提升。

以下是目前OpenCV支持的一些框架:

· Cafe

· TensorFlow

· Torch

· Darknet

· ONNX交换格式的模型

最后附上OpenCV 4.0发布地址:https://opencv.org/opencv-4-0-0.html