Heim > Backend-Entwicklung > PHP-Tutorial > 10万张图片,怎么找出相似的两张图片?

10万张图片,怎么找出相似的两张图片?

WBOY
Freigeben: 2016-06-13 12:21:34
Original
1449 Leute haben es durchsucht

10万张图片,如何找出相似的两张图片???急急急

公司有一个项目,需要保护客户的设计信息,客户的信息都是图片,如何从10w张中找出类似的两张图片,这两张图片不来自同一台摄像机拍摄,就是长得比较像,就像是人脸识别技术一样,如何才能实现找出相似的呢,比一定是相似的两张,可以是相似的多张图片,后期我们会进行人工对比的?
Nach dem Login kopieren

------解决思路----------------------
/**<br /> * 生成指纹<br /> * $filename 图片文件名,可以是URL。只能是GD支持的图片类型<br /> * $k 采样点阵数<br /> * $retmode 返回格式:0 二进制表示 1 数组 2 十六进制表示<br /> **/<br />function produceFingerPrint($filename, $k=8, $retmode=0) {<br />  $sim = imagecreatefromstring( file_get_contents($filename) );<br />  $dim = imagecreate($k, $k);<br />  imagecopyresized($dim, $sim, 0, 0, 0, 0, $k, $k, imagesx($sim), imagesy($sim));<br />  imagetruecolortopalette($sim, true, 64);<br />  //imagefilter($sim, IMG_FILTER_GRAYSCALE);<br /><br />  for($x=0; $x<$k; $x++) for($y=0; $y<$k; $y++) {<br />    $c = imagecolorat($dim, $x, $y);<br />    $p[] = array_sum( imagecolorsforindex($dim, $c))/3;<br />  }<br />  $avl = array_sum($p)/count($p);<br />  $r = '';<br />  foreach($p as $v) $r .= $v>=$avl ? 1 : 0;<br /><br />  if($retmode == 0) return $r;<br />  $p = array_map('bindec', str_split($r, 8));<br />  if($retmode == 1) return $p;<br />  if($retmode == 2) {<br />    array_unshift($p, '%02x%02x%02x%02x%02x%02x%02x%02x');<br />    return call_user_func_array('sprintf', $p);<br />  }<br />  return false;<br />}<br />
Nach dem Login kopieren

用此函数对每个图片生成指纹,保存到数据库备用

检查时,指纹相同的就视为图片相同,这不必说
相似度计算
$p1 = produceFingerPrint($f1, $k);<br />$p2 = produceFingerPrint($f2, $k);<br />$n = count(array_diff_assoc(str_split($p1), str_split($p2)));<br />echo 1 - $n / strlen($p1);<br />
Nach dem Login kopieren

------解决思路----------------------
相似度(一个小于等于1的值),阀值由你自己决定
一般认为
0.95 很相似
0.9 相似
0.85 相似
再小就不算相似了
------解决思路----------------------
相似度我测试过,相片的拍摄角度,明暗度对相似度影响很大!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage