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'));
php 以图搜图的更多相关文章
- Google 以图搜图 - 相似图片搜索原理 - Java实现
前阵子在阮一峰的博客上看到了这篇<相似图片搜索原理>博客,就有一种冲动要将这些原理实现出来了. Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相 ...
- 以图搜图(一):Python实现dHash算法(转)
近期研究了一下以图搜图这个炫酷的东西.百度和谷歌都有提供以图搜图的功能,有兴趣可以找一下.当然,不是很深入.深入的话,得运用到深度学习这货.Python深度学习当然不在话下. 这个功能最核心的东西就是 ...
- Google 以图搜图 - 相似图片搜索原理 - Java实现 (转)
前阵子在阮一峰的博客上看到了这篇<相似图片搜索原理>博客,就有一种冲动要将这些原理实现出来了. Google "相似图片搜索":你可以用一张图片,搜索互联网上所有与它相 ...
- 以图搜图之模型篇: 基于 InceptionV3 的模型 finetune
在以图搜图的过程中,需要以来模型提取特征,通过特征之间的欧式距离来找到相似的图形. 本次我们主要讲诉以图搜图模型创建的方法. 图片预处理方法,看这里:https://keras.io/zh/prepr ...
- 使用 selenium 实现谷歌以图搜图爬虫
使用selenium实现谷歌以图搜图 实现思路 原理非常简单,就是利用selenium去操作浏览器,获取到想要的链接,然后进行图片的下载,和一般的爬虫无异. 用到的技术:multiprocessing ...
- [No000007]搜索引擎以图搜图的原理
之前,Google把"相似图片搜索"正式放上了首页. 你可以用一张图片,搜索互联网上所有与它相似的图片.点击搜索框中照相机的图标. 一个对话框会出现. 你输入网片的网址,或者直接上 ...
- 谷歌百度以图搜图 "感知哈希算法" C#简单实现
/// <summary> /// 感知哈希算法 /// </summary> public class ImageComparer { /// <summary> ...
- 【网页浏览】国内伪P站搜图网站
蛮好用的国内p站搜图网站(伪p站) 传送链接
- iOS去广告最简单方案!+以图搜漫
iOS去广告 ️推荐 | 通过下载.安装.启用(一般默认启用)描述文件,即可实现通过私人dns来达到全系统的广告拦截.隐私保护功能 ️注意: 限 iOS 14 及以上版本系统使用 复制链接需在 saf ...
随机推荐
- Hibernate 多对多关联映射, 中间表加查询条件
package com.coracle.yk.xpo.po.base; import java.util.Date; import java.util.HashSet; import java.uti ...
- Response.Redirect()、Server.Execute和Server.Transfer的区别
1.Response.Redirect(): Response.Redirect方法导致浏览器链接到一个指定的URL. 当Response.Redirect()方法被调用时,它会创建一个应答,应答头中 ...
- 数据库Error:The ScriptCollection in ScriptName not find
System.InvalidOperationException: The ScriptCollection in ScriptName not find 在 WMI.SQL.HELPER.CONFI ...
- Binary Tree Vertical Order Traversal
Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...
- 解读Unity中的CG编写Shader系列五(理论知识)
转自 http://www.itnose.net/detail/6098474.html 经过前面的系列文章中的三个例子,尽管代码简单,但是我想应该还有些地方没有100%弄明白,我们现在得回过头来补充 ...
- [转]Android 学习资料分享(2015 版)
转 Android 学习资料分享(2015 版) 原文地址:http://www.jianshu.com/p/874ff12a4c01 目录[-] 我是如何自学Android,资料分享(2015 版) ...
- 类型转换辅助工具类TypeCaseHelper
package org.sakaiproject.util; import java.math.BigDecimal; import java.sql.Date; import java.sql.Ti ...
- 【leetcode】Maximal Rectangle (hard)★
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...
- 【python】入门学习(六)
type() #检查变量或值得数据类型 >>> type(5) <class 'int'> 序列:包括字符串.元组和列表.序列都可以用索引.切片.len()(计算元素个数 ...
- 超链接弹出QQ对话框
<a href="tencent://message/?uin=371820621">java技术交流群57388149</a>