文档章节

php下的 pHash扩展实现

深圳市唤梦科技
 深圳市唤梦科技
发布于 2016/08/26 13:05
字数 1215
阅读 485
收藏 3

最近应客户要求,需要做一个带有图片识别功能的web应用,OpenCV虽然高大上,用它来解决这个问题就是杀鸡用牛刀了,这个问题和面部识别,车牌识别的原理是不同的,在未知要分析的图片的特征的情况下,无法提取特征,只能采用比较通用的算法,也就是图片相似性比对算法,常见的有pHash和SIFT。windows下面就自己写了个类似的算法,可以凑合着用,为了提高性能,特别是识别精度和速度,就采用了linux下面php加 pHash 扩展来实现,就把自己这次实现过程跟大家分享下,希望以后有需求的朋友,可以节约时间。

运行环境如下  ,硬件,I3处理器2.4G双核,4G内存,软件, win7 ,+vmware worksatation10 ,+ubuntu12.04。    (apache 2.4 ,  php 5.7 )

怎么在虚拟机下安装 ubuntu ,设置让它能上网,安装一些编译程序需要的库, 这部分就忽略了。

php 开发环境搭建, 如果想省事的可以采用lnmp一键安装包,下载地址http://lnmp.org/install.html

安装的时候 ,可以选择lnmpa ,就连apache也给安装上去了, 安装完毕 ,运行下  lnmp  status , 可以看到 nginx ,myslq , php,apache,都在运行状态了 。

documentRoot :/home/wwwroot/default

浏览器 输入网址  localhost/phpinfo.php ,显示正常,说明安装成功。

下面开始安装pHash扩展 ,,0.9.5版本的安装起来应该省事,只支持图片比较,但我想使用最新版本 pHash-0.9.6,下载地址 http://www.phash.org/download/  ,该网址也列出了 0.9.6版本需要依赖的东西,0.96版本功能是非常强大的,支持文本,图像, 音频,视频的感知近似性计算。 这个FFMPEG特别麻烦,整了老半天,依然不能正确生成ffmpeg的 一系列so文件。  如果你只需要image 识别, 不考虑音视频, 那么可以不用FFMPEG的,那就考虑把对FFMPEG的依赖给去除了,这个需要很大的工作量,修改makefile 等文件, 还要修改 phash的 源文件  , 注意,是在下面列出的步骤5和6中实现的,不是在4中实现。这个过程有点复杂, 但解决思路就是那样的,我也那么干的。至于你在编译安装FFMPEG的时候会不会遇到问题, 这个我也不确定,只能看你的运气了,实在怕麻烦,就去下载.0.95 版的吧。

下面我就贴出我的下载地址,编译安装步骤

  1    wget   http://cimg.eu/files/CImg_latest.zip
unzip  CImg_latest.zip
cp CImg-1.7.5/CImg.h /usr/local/include 
2  到  http://download.csdn.net/download/angle502/7632179

或者  https://github.com/erikd/libsndfile/  , 下载  libsndfile.zip 

unzip  libsndfile.zip

cd libsndfile 
$ ./autogen.sh
$ ./configure --enable-werror
$ make
$ make check

3  http://download.csdn.net/download/dragon810913/2412579
下载 安装 libsamplerate0.1.7

解压, 

进入 目录 libsamplerate

./configure

make 

make install

4    wget  http://ffmpeg.org/releases/ffmpeg-3.1.2.tar.bz2

tar  -xjvf  ffmpeg-3.1.2.tar.bz2

cd  ffmpeg-3.1.2

./configure  --enable-gpl  --enable-shared  --enable-swscale  --disable-yasm
  make 
make  install 

顺便说下,我的电脑不知道什么原因,FFMPEG始终无法正常安装,所以,我花费了很大的力气,

在pHash编译的时候,将它彻底屏蔽了 才得以编译出正确的  pHash.so文件 , 我也只能说,祝你好运。

5  wget  http://www.phash.org/releases/pHash-0.9.6.tar.gz

tar  -xzvf   pHash-0.9.6.tar.gz

$ cd pHash-0.9.6
$ ./configure --enable-video-hash=no  --enable-audio-hash=no   LIBS="-lpthread"  
$ make && make install

 

6  $ cd   pHash-0.9.6/bindings/php
$ phpize
$ ./configure LIBS="-lpthread"   --with-php-config=/usr/local/php/bin/php-config
$ make
$ make test
$ make install

7  手工编辑 php.ini   ,添加pHash扩展

  extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/pHash.so
# restart apache   ,重启web服务器,,,如果是用lnmp安装包安装的话,可以尝试命令,lnmp  restart

8    ldd  /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/pHash.so

检查下 动态库依赖 是否完整,

 php -m  

查看下 php 加载了哪些扩展 , pHash.so有没有扩展成功 

9 写个 测试 phash的php文件 , 用到phash的主要代码  ,

$h2=ph_dct_imagehash($ImagePath1);           
$h1= h_dct_imagehash($ImagePath2);
$distance =ph_image_dist($h1, $h2);

==========下面的截图就是两张图片的比对结果=======

 一米鲜图像比对结果

 

======= End====觉得博主辛苦的就去点个赞吧,哈哈=====

如果你上传几张图片,测试结果 ,发现自己的图片,有时间居然比猪还更像猪,那一点都不奇怪, 算法是死的,人是活的,有写时候工具,关键还要看你怎么去应用它。

While u find the Hamming distance between ur profile and a pig's is zero , what i can say maybe is only u r tooo handsome !  

© 著作权归作者所有

深圳市唤梦科技
粉丝 3
博文 12
码字总数 11091
作品 0
美国
私信 提问
Hash表

#ifndef HASH_TABLE_H #define HASH_TABLE_H #include #define M 200 // 桶的容量。 #define MAX_NUM 32 // 目录的深度。 typedef struct _head{ int g; //全局深度 long number; //节点总数......

RapidBird
2010/03/25
171
0
pHash 0.9.5 发布,感知哈希算法库

pHash 0.9.5 修复了使用废弃的 ffmpeg API 导致的编译错误。 pHash 实现各种感知散列算法。一个感知散列是一个指纹的多媒体文件来源于各种特性从它的内容。与加密散列函数,依靠雪崩效应的小变...

oschina
2012/11/25
3.3K
5
pHash Windows下使用问题

大家好,我在phash.org下载了最新版本的pHash包。解压完是VS2008的工作空间文件夹,我使用VS2012打开后,添加了一个源文件尝试调用pHash,但是编译失败了,错误信息莫名其妙,1>LINK : fata...

AlphaChow
2013/06/27
960
2
将一段C++版的pHash算法翻译为C#版的

pHash算法的C++代码如下: ` //pHash算法 string pHashValue(Mat &src) { Mat img ,dst; string rst(64,'0'); double dIdex[64]; double mean = 0.0; int k = 0; if(src.channels()==3) { cv......

程序员乙
03/15
0
0
pHash在linux上有人安装过吗

pHash在linux上有人安装过吗,有安装成功过的,希望能分享一下,安装了好多次,都没安装成功,是在centos6.2下安装的,报各种错误

鸡爷
2013/11/16
357
0

没有更多内容

加载失败,请刷新页面

加载更多

程序员随想-关于分享

最早的时候,文字是贵族这些上层人士才会学习的,底层人士没有资格和渠道去学习,同样用文字、图像等其他载体承载的知识大部分也只有贵族阶层才能享受的。后来有了造纸术、印刷术,成本降低,...

Lubby
32分钟前
1
0
聊聊hibernate的session-level repeatable reads

序 本文主要研究一下hibernate的session-level repeatable reads 实例 doInTransaction(session -> { Product product = new Product(); product.setId(1L); product.setQuanti......

go4it
44分钟前
0
0
ubuntu或ubuntu kylin优麒麟中安装QQ、wechat微信、百度网盘

从中国国内的地址下载deepin wine,码云上的。这样网速比较快。然后,按照说明向下安装。 https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu...

gugudu
55分钟前
2
0
基于redis分布式锁实现“秒杀”

最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。 业务场景 所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源...

别打我会飞
今天
14
0
Zookeeper的实践指南

本章重点 1.数据存储2.基于Java API初探Zookeeper的使用3.深入分析Watcher机制的实现原理4.Curator客户端的使用,简单高效 数据存储 事务日志快照日志运行时日志 bin/zookeepe...

须臾之余
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部