设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 公司 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP tclip扩展调用opencv从内存中读取及解析图片数据的问题

发布时间:2022-02-23 14:38 所属栏目:121 来源:互联网
导读:前两天蛮说有一个PHP扩展,tclip图片裁剪程序,Tclip致力于人脸识别和图片显著性区域的识别,它与其他图片裁剪程序最大的不同之处在于,在裁剪后的图片中保留人脸和其他图片显著性区域,不过还是图片裁剪. tclip这个扩展依赖开源的opencv库,百科:OpenCV的全称是:
  前两天蛮说有一个PHP扩展,tclip图片裁剪程序,Tclip致力于人脸识别和图片显著性区域的识别,它与其他图片裁剪程序最大的不同之处在于,在裁剪后的图片中保留人脸和其他图片显著性区域,不过还是图片裁剪.
 
  tclip这个扩展依赖开源的opencv库,百科:OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上,它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
 
  回到正题,tclip这个小程序,只用到了opencv中一小部分功能,就是图片显著性区域的识别.
 
  具体的裁剪算法,不做多的研究.
 
  现在的问题是,想实现从内存中通过PHP读取图片的二进制数据(这部分数据是先准备好的)传递给opencv,通过查看opencv的API文档,看到了imdecode方法,可以从内存中载入图片,那么可以解决这个问题了.
 
  关于安装tclip扩展的介绍:https://github.com/exinnet/tclip
 
  但是要注意的是,opencv-2.4.9应该有bug,编译不成功,另外ubuntu-14.0.4的编译安装之后调用tclip函数报错,我测试的版本是:
 
  centos-6.4,PHP-5.4.31,opencv-2.4.4
 
  安装步骤:
 
  下载opencv源码:http://www.bo56.com/download/opencv2.tar.bz2
 
  下载Tclip源码:
 
  http://code.taobao.org/p/tclip/src/
 
  https://github.com/exinnet/tclip
 
  安装opencv2:
 
  此扩展依赖于opencv2.0 之上版本,因此安装前先安装opencv。opencv的安装步骤如下.
 
  1.安装如下依赖包:gtk+ gtk+-devel pkgconfig libpng zlib libjpeg libtiff cmake
 
  如果是centos可以执行如下命令进行安装依赖包:
 
  yum install gtk+ gtk+-devel pkgconfig libpng zlib libjpeg libtiff cmake
 
  2.安装opencv2,步骤如下.
 
  解压安装包
 
  cd 进入安装包文件夹内。
 
  cmake CMakeLists.txt
  
  make && make install
  
  vim /etc/profile
  注意:在编译opencv时,要使用gcc的4.4版本或者之上,否则会报错.
 
  3.设相关环境变量
 
  在 unset i 前增加
 
  export PKG_CONFIG_PATH=/usr/lib/pkgconfig/:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
 
  保持退出后,执行如下命令:
 
  source /etc/profile
  echo “/usr/local/lib/” > /etc/ld.so.conf.d/opencv.conf
  ldconfig
  安装php图片裁剪tclip扩展
 
  cd 到源代码目录中的php_ext文件夹
 
  phpize
  ./configure
  make //开源软件:Cuoxin.com
  cp modules/tclip.so 到 extension 目录
 
  修改php.ini,加入 extension=tclip.so
 
  重启fpm
 
  安装命令行
 
  如果想使用命令行方式,可以进行如下安装
 
  cd 进入安装包soft文件夹内
 
  chmod +x ./tclip.sh
 
  ./tclip.sh
 
  使用方法说明
 
  第一种:在php中图片裁剪使用格式:
 
  tclip(文件原路径,裁剪后的图片保存路径,裁剪后的图片宽度,裁剪后的图片高度)
 
  示例:
 
  $source_file = “/tmp/a.jpg”;
  $dest_file = “/www/a_dest.jpg”;
  $width = 400;
  $height = 200;
  $ret =tclip($source_file, $dest_file, $width, $height);
  执行成功$ret 为true,否则为false
 
  第二种:命令行
 
  参数说明:
 
  -s 原图路径
 
  -d 裁剪后的图片保存路径
 
  -w 裁剪后的图片宽度
 
  -h 裁剪后的图片高度
 
  ./tclip -s a.jpg -d a_dest.jpg -w 400 -h 200
 
  最后,虽然PHP中已经直接可以传递图片的二进制数据了,但是发现opencv源码中,也会先将二进制数据保存到一个临时文件,再读取的,并且在opencv-2.4.2版本中临时文件不会被删除,这就有点坑了,但是还是可以减少PHP的逻辑,所以支持二进制的图片数据还是有必要的.

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读