RedHat6.5上Opencv的编译和部署

来源:互联网 发布:怎么投诉软件 编辑:程序博客网 时间:2024/06/08 18:34

Opencv 简介

  • OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
  • OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。
  • 所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。
  • 应用领域
    1. 人机互动
    2. 物体识别
    3. 图像分割
    4. 人脸识别
    5. 动作识别
    6. 运动跟踪
    7. 机器人
    8. 运动分析
    9. 机器视觉
    10. 结构分析
    11. 汽车安全驾驶
  • 目前项目中face++厂商底层使用的即是opencv的技术,我们只用到了图像分割这一最小的功能。由face++识别身份证照片后给出身份证头像坐标(4个角的相对坐标),我们利用opencv将坐标内的图片切出来并进行保存,同时会将图片的base64返给APP作为头像使用。由于项目是使用Java开发的,并且在RedHat的Linux环境上运行,而Opencv官方只提供源码,我们需要在对应的环境下编译出项目使用的Jar包及其依赖的so库,并在RedHat上进行部署(Weblogic环境)。

Opencv编译

综述

  • opencv的官网http://opencv.org/,opencv在2.4版本开始支持java API,我们项目使用2.4.13(2.4的最新版)这一版本进行编译。官网帮助文档见:http://docs.opencv.org/2.4.13/doc/tutorials/introduction/desktop_java/java_dev_intro.html
  • opencv的源码是使用C++编写的,所以我们在编译时候需要GCC和CMake来进行编译;另外为了管理一些依赖库和对应的头文件需要用到pkg-config;为了从github上下载opencv的源码我们还需要安装git,同时opencv有python的支持,我们最好也安装python;而Java的编译需要ant工具,加上一些其它的如ffmpeg等各种依赖;为了减少这些依赖的安装和配置的难度(因为linux下很多库还有其依赖库),我们会使用一个基于RPM包管理工具Yum(redhat系列下Linux用Yum管理,Debian系列下Linux使用Apt-get,关于Linux体系参加下图)
    Linux分支体系
  • 由于RedHat的yum源(类似于Maven库)是需要收费的,所以我们需要将Redhat上的yum删除后重新安装并使用国内免费的163或阿里的yum源(CentOS系统,它们属于同一系列Linux)

Yum源替换

大致步骤参加CSDN博文
http://blog.csdn.net/qq_20278449/article/details/49512273

安装编译工具和依赖库

参见官网的文档
http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html,因其为Ubuntu的例子(Debian系列Linux),我们要将apt-get替换为yum命令。
Ant安装,Apache Ant的安装和配置网上可以找到很多例子,这里不重复说明了。

源码下载

这部分过程在上面综述中提到的官网文档上有步骤,或者直接从官网下载压缩包进行解压即可。

编译

按官网文档步骤操作即可。
如在cmake后出现的module内未发现java模块,请查看cmake时上面输出检查JDK、ANT等环境。
make -j8的参数为编译的线程数,如果加参数出现无法编译等bug,请尝试直接make编译。
编译完成后会在build目录下生成bin目录和lib目录。bin目录下有我们开发要使用到的jar包文件,lib目录下有jar包运行时要调用的so库等文件。

Java开发

由于Java在同一个虚拟机环境下只能加载一次so文件,多次加载会报错;而Web环境下一般由Web容器加载多个项目,均运行在一个虚拟机环境,所以我们要将opencv的操作单独新建项目开发公共库,统一在Web容器启动时加载,各项目运行时再引用公共库进行调用。所以本次项目我们新建了一个OpencvLoader项目,将切图方法写在里面。

Weblogic环境部署

为了在运行时opencv的JavaAPI能找到各库文件,以及为方便起见我们将所有编译后lib目录下的库文件复制一份放在系统/usr/local/opencv/lib目录下,并在开发时将这一路径加入到java.library.path路径中。
同时将以上路径保存到/etc/ld.so.conf.d/opencv.conf配置文件下。