php 以图搜图

感知哈希算法count < =5 匹配最相似count > 10 两张不同的图片var_dump(ImageHash::run(‘1.jpg’, ‘2.jpg’));

<?php
class ImageHash {

    const FILE_NOT_FOUND = ‘-1‘;
    const FILE_EXTNAME_ILLEGAL = ‘-2‘;

    private function __construct() {}

    public static function run($src1, $src2) {

        static $self;
        if(!$self) $self = new static;

        if(!is_file($src1) || !is_file($src2)) exit(self::FILE_NOT_FOUND);

        $hash1 = $self->getHashValue($src1);
        $hash2 = $self->getHashValue($src2);

        if(strlen($hash1) !== strlen($hash2)) return false;

        $count = 0;
        $len = strlen($hash1);
        for($i = 0; $i < $len; $i++) if($hash1[$i] !== $hash2[$i]) $count++;
        return $count <= 10 ? true : false;

    }

    public function getImage($file) {

        $extname = pathinfo($file, PATHINFO_EXTENSION);
        if(!in_array($extname, [‘jpg‘,‘jpeg‘,‘png‘,‘gif‘])) exit(self::FILE_EXTNAME_ILLEGAL);
        $img = call_user_func(‘imagecreatefrom‘. ( $extname == ‘jpg‘ ? ‘jpeg‘ : $extname ) , $file);
        return $img;

    }

    public function getHashValue($file) {

        $w = 8;
        $h = 8;
        $img = imagecreatetruecolor($w, $h);
        list($src_w, $src_h) = getimagesize($file);
        $src = $this->getImage($file);
        imagecopyresampled($img, $src, 0, 0, 0, 0, $w, $h, $src_w, $src_h);
        imagedestroy($src);

        $total = 0;
        $array = array();
        for( $y = 0; $y < $h; $y++) {
            for ($x = 0; $x < $w; $x++) {
                $gray = (imagecolorat($img, $x, $y) >> 8) & 0xFF;
                if(!isset($array[$y])) $array[$y] = array();
                $array[$y][$x] = $gray;
                $total += $gray;
            }
        }

        imagedestroy($img);

        $average = intval($total / ($w * $h * 2));
        $hash = ‘‘;
        for($y = 0; $y < $h; $y++) {
            for($x = 0; $x < $w; $x++) {
                $hash .= ($array[$y][$x] >= $average) ? ‘1‘ : ‘0‘;
            }
        }

        var_dump($hash);
        return $hash;

    }

}

//调用方法 对比 返回结果bool值
var_dump(ImageHash::run(‘1.jpg‘, ‘2.jpg‘));
				
时间: 2024-10-23 02:33:14

php 以图搜图的相关文章

iOS开发- 以图搜图功能实现 (源码+解析)

以图搜图这个功能相当实用, 之前在实现这个功能的时候, 有一些笔记, 今天就整合成博文, 分享给大家. 这个demo主要实现的功能包括: 自定义拍照界面 图像识别 以图搜图 信息获取(通过识别出的图像, 获取对应信息) 下面是一个简单的演示,  如下:       那么如何实现这样的功能呢? 如果自己去完成图像识别, 显然不现实. 最早我研究的是谷歌API, 不过谷歌在天朝, 大家都懂得... 然后是百度了,尝试了下,  效果还不错. 另外, 百度也有自己"以图搜图"对应的App.不过

以图搜图(一):Python实现dHash算法(转)

近期研究了一下以图搜图这个炫酷的东西.百度和谷歌都有提供以图搜图的功能,有兴趣可以找一下.当然,不是很深入.深入的话,得运用到深度学习这货.Python深度学习当然不在话下. 这个功能最核心的东西就是怎么让电脑识别图片. 这个问题也是困扰了我,在偶然的机会,看到哈希感知算法.这个分两种,一种是基本的均值哈希感知算法(dHash),一种是余弦变换哈希感知算法(pHash).dHash是我自己命名的,为了和pHash区分.这里两种方法,我都用Python实现了^_^ 哈希感知算法基本原理如下: 1.

Google 以图搜图 - 相似图片搜索原理 - Java实现

前阵子在阮一峰的博客上看到了这篇<相似图片搜索原理>博客,就有一种冲动要将这些原理实现出来了. Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相似的图片. 打开Google图片搜索页面: 点击使用上传一张angelababy原图: 点击搜索后,Google将会找出与之相似的图片,图片相似度越高就越排在前面.如: 这种技术的原理是什么?计算机怎么知道两张图片相似呢? 根据Neal Krawetz博士的解释,实现相似图片搜素的关键技术叫做"感知

以图搜图之模型篇: 基于 InceptionV3 的模型 finetune

在以图搜图的过程中,需要以来模型提取特征,通过特征之间的欧式距离来找到相似的图形. 本次我们主要讲诉以图搜图模型创建的方法. 本文主要参考了这位大神的文章, 传送门在此: InceptionV3进行fine-tuning 训练模型代码如下: # 基本流程 # import os import sys import glob import argparse import matplotlib.pyplot as plt from keras.applications.inception_v3 im

spring + lire以图搜图配置

1.配置java环境: apt-get install updateapt-get install default-jreapt-get install default-jdk 配置 JAVA_HOME 环境变量 查看java安装路径:update-alternatives --config java vi /etc/environment 在文件最后添加上: JAVA_HOME="/usr/lib/jvm/java-7-oracle" 2.配置文件修改 配置文件目录:src/main

[blog]基于卷积神经网络的以图搜图算法实现

基于卷积神经网络的以图搜图算法实现        如果用这个名称去搜索论文,一定有不少.为什么了,因为从原理上来看,卷积神经网络就非常适合找图片的相似的地方.想想看,许多大牛.小牛.微牛的文章都是说如何从mnist中.从CIFA10中.从CIFA100中去找到相似的图片.那么,反过来想一想,如果那么复杂的数据卷积神经网络都能够去处理,那么对于这种相对来说,比较简单的"以图搜图"的需求,应该更容易来解决.这里的神经网络解决这个问题,还是尝试得到一种较为通用的问题解决方法. 零.数据集的创

视频扫图之一致性图像检索

视频扫图之一致性图像检索 [email protected] http://blog.csdn.net/zouxy09 这里分享下最近的一个小作品:一致性图像检索.和以图搜图不同,以图搜图是从数据库中检索和查询图像一致或者相似的图像.而我们是只检索一致的图像(灰度化过后也属于一致的).和拍照搜索也不同,拍照搜索是用户拍摄一张照片,然后在数据库中检索和这张照片一致的图像,它的检索触发是由用户提供的.而我们是通过摄像头扫描现实场景中的图像的,没有用户的触发交互.实际上就和我们扫描二维码类似,这里我们

看起来像它——图像搜索其实也不难 (图像相似,图像指纹,phash hash,图像搜索) 使用时候记得看这文章的评论

链接: http://pan.baidu.com/s/1o7ScyVo 密码: h8eb    这个文章的代码 另一个类似的代码  链接: http://pan.baidu.com/s/1hsFDCNy 密码: jxus http://blog.csdn.net/luoweifu/article/details/8220992                 使用时候记得看这文章的评论 看起来像它——图像搜索其实也不难 标签: pHash图像搜索图像识别图片搜索算法 2012-11-24 23:

我的收集:关于找图片

大致是这么几种方式: 1.通过相关的一些图片的站点 2.通过识图引擎,搜索引擎,谷歌,百度,其它等 3.通过找图的客户端软件 1:网站如下: http://www.socwall.com/ http://wallbase.cc/toplist http://www.behance.net/ 嘀咕图片墙 http://www.digu.com/ 优美图   http://www.topit.me/wall(超赞的3d看图) (堆糖网)  http://www.duitang.com/categor