使用imagehash做图片识别
需求起因
最近因为需要,得识别不同链接的图片是否是同一张图片,所以开始研究起图像识别。
一开始我并没有想到要用工具,而是简单的使用rb
的读取方式,读取图片二进制内容。然后对比两张图片是否相等。这个方法是最简单,也是有效果的,但是是最慢的,也是最耗内存的,因为每次对比一张图片,就得对图片库内的所有图片都遍历读入内存与之做对比,于是我在想是否有办法将图片抽象成一段简单的唯一字符串,以供后面的图片进行配对。
调查图片搜索引擎
然后我想到了之前有见过类似的声纹,图纹的图片搜索引擎的报道。于是我去网上搜索了下,发现真有这种方法,大概就是
- 先将图片压缩成小图片
- 然后将图片二值化,或者灰度值。
- 再将其特征串
(具体怎么获取特征串,并无研究)
保存下来。这就可以解决问题了~
具体实行
我在搜索过程中,无意发现,python的代码库里有一个专门处理图片特征码的第三方库,这就好办了,下面我们开始实施
安装imagehash库的过程
pip install imagehash
// 他会安装以下第三方库
// numpy scipy pillow, PyWavelets, imagehash
进行简单的需求测试
from PIL import Image
import imagehash
path = u"C:/pic.jpg"
path2 = u"C:/pic_2.jpg"
hash = imagehash.average_hash(Image.open(path))
hash2 = imagehash.average_hash(Image.open(path2))
print hash, hash2
具体参考这里imagehash - github