OpenCV-最受欢迎的计算机视觉和机器学习库

3 篇文章 1 订阅
2 篇文章 0 订阅

一、介绍

opencv是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在LinuxWindowsAndroidMac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、RubyMATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

opencv是一个非常好用的图像处理和分析库,它包括了平面特征提取,3D校准,对象侦查,图像处理,影像分析等功能,几乎可以满足在机器学习中所需要的,对图像的一切功能。

今天我们将介绍如何在Linux环境下安装opencv,并将其与php项目结合到一起使用。

二、安装准备

我们此次采用编译安装的模式进行部署,不同的php版本需要配合不同版本的opencv使用,这些模块的编译都需要cmake支持,所以我们需要提前了解一下各个模块的版本组合,避免多走弯路。

各模块版本映射表如下:

phpphp-opencvopencvcmakec++
5.6/5.7/5.8暂无2.0+2.0.0+>=8
7.0/7.17.23.0+3.0.0+>=10
7.27.2/7.34.0+3.5.1+>=11
7.37.34.2+3.10.0+>=11
7.4/8.0/8.1/8.28.1+4.5.5+3.20.0+>=11

标红那一行是我们今天使用的版本组合。详细版本如下:

  • php7.2.34
  • php-opencv-php7.2
  • opencv4.0.1
  • cmake3.15.0
  • c++11

三、安装cmake

3.1:下载安装包并解压
wget https://gitlab.kitware.com/cmake/cmake/-/archive/v3.15.0/cmake-v3.15.0.zip
unzip cmake-v3.15.0.zip
cd cmake-v3.15.0
3.2:编译安装
./bootstrap --system-curl  //参数很重要,否则会报错
make
make install
3.3:添加命令,测试

cmake默认安装目录在/usr/local下

ln -s /usr/local/bin/cmake /usr/bin/cmake

四、安装opencv

4.1:下载安装包并解压
wget https://codeload.github.com/opencv/opencv/zip/refs/tags/4.0.1 > opencv-4.0.1.zip
unzip opencv-4.0.1.zip
cd opencv-4.0.1
4.2:安装依赖
yum install gcc gcc-c++ gtk2-devel pkgconfig 
            python python-devel python-numpy 
            libdc1394-devel libv4l-devel gstreamer-plugins-base-devel 
            libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel 
            libtiff-devel libwebp-devel tbb-devel eigen3-devel
4.3:编译安装
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install
4.4:测试
/usr/local/bin/opencv_version 

版本号输出成功

4.5:配置pk-config

在下一步中我们编译php扩展默认需要依赖pk-config,为了避免麻烦,这里我们直接做一下配置。

touch /usr/lib64/pkgconfig/opencv4.pc  //在依赖目录下创建pc文件

vim /usr/lib64/pkgconfig/opencv4.pc    //编辑创建的pc文件
...
prefix=/usr/local            //opencv4安装目录
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: opencv
Description: The opencv library
Version:4.0.1
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_stitching -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann  -lopencv_core   //注意这里,不能乱加不存在的依赖,在后续使用的时候,编译器会校验依赖,如果发现不存在的依赖,会报错

默认情况下 pkg-config 的查找路径为 /usr/lib/pkgconfig 和 /usr/share/pkgconfig,也可以通过环境变量 PKG_CONFIG_PATH 在额外指定 pkg-config 的查找路径

配置成功后我们可以测试一下:

五、安装php-opencv扩展

5.1:下载扩展源码
git clone -b php7.2 https://github.com/php-opencv/php-opencv.git
cd php-opencv
5.2:编译扩展
phpize
./configure --with-php-config=/usr/bin/php-config --enable-debug
make CXXFLAGS='-std=c++11'   //这里很重要,千万不要搞错,opencv4版本的话必须要c++11版本以上编译,这也是为啥前面步骤中要求安装c++11的原因
make install
5.3:配置php扩展
vim php.ini
...
extension=opencv.so

六、php项目测试

测试代码:

<?php
use CV\{Mat,Scalar, Point, Size};
use function CV\{ellipse, imwrite, waitKey};
use const CV\{CV_8UC3};

$windowWidth = 600;
$thickness = 2;
$lineType = 8;
$matScalar = new Scalar(0,0,0);
$mat = new Mat($windowWidth, $windowWidth, CV_8UC3, $matScalar);
$point=new Point($windowWidth/2, $windowWidth/2);
$size=new Size($windowWidth/4, $windowWidth/16);
$scalar=new Scalar(255, 129, 0);
for($i = 0; $i <= 360; $i += 45){
   ellipse($mat,$point,$size,$i,0,360,$scalar,$thickness,$lineType);
}
imwrite('/tmp/ellipse.png',$mat);
?>

运行代码我们会得到一个漂亮的图像:

opencv有很多实用的函数,这里不再一一举例,想要发掘opencv更多功能的同学可以看我后面的文章,我将继续带大家发掘更多opencv用法

七、遇到的问题

问题1:cmake编译失败,在执行make阶段,如下图:

解决方案:这个原因其实是依赖错误导致的,libcmcurl链接库版本不对,解决办法就是指定curl依赖,可以在编译配置阶段加上如下配置:

./bootstrap

改为

./bootstrap --system-curl
问题2:配置完php扩展后,测试的时候,发现opencv动态链接库找不到,报错如下:

解决方案:这个问题的原因是动态库依赖目录设置不正确,默认的LD_LIBRARY_PATH指向没有包含我们安装的opencv库,所以我们需要做以下处理:

export LD_LIBRARY_PATH="/usr/local/lib"  //把opencv安装目录加到依赖查找

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泪痕哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值