python第二发来啦。结合最近看的东西还有项目需求,准备用python尝鲜做点小东西checkDupImage。简而言之,就是想从大量的图片中找出重复的图片。在网上搜了下,感觉比较简单的办法还是使用phash。python有个imagehash库,可以计算出图片hash,然后直接将所有图片根据hash值排序,phash相同的就基本没跑了,phash差距在500以内的也是十拿九稳,更可靠的阈值目前正在测试中 :D 下面是对两个脚本的简单介绍
##checkDumpImg.py 这是一个使用python的imagehash库来进行图片phash值计算,并找出相同、相似图片的一个简单脚本。默认会使用爬虫去爬取图片URL列表中的所有图片,抓取下来之后进行计算并输出结果。输出结果中会包含三个文件:
- result. 里面保存了所有图片的phash值
- output. 输出了所有可能重复的图片url组,每行纪录为一组。图片重复来自于用户的设置,比如phash值差距在100或者500以内的图片我认为就是重复的,可以通过设置脚本中的阈值实现
- toBeDel. 列出可以删除的URL列表,list数据。会在可能重复的一组数据中筛选出phash值最小的一个保留,将其他数据放入toBeDel。因为从结果来看,phash值小的图片一般画面更简洁,因此可以筛掉那些有水印、logo的图片。
附赠排重功能,比如一开始需要处理的图片列表文件为imageLists,在我设定阈值为100之后筛选出toBeDel文件。然后我希望扩大阈值,看看能不能从更大范围内找出相似图片,可以这样操作mv toBeDel toBeDel.old
。python脚本中会判断,如果result已经存在,则不会重复抓取图片计算phash值,而是采用中间结果。而且脚本一旦发现toBeDel.old文件的存在,会从result中过滤掉已经删除的文件,根据阈值计算新的结果。
##findBackgroudColor.py 灵感来源于pinterest的客户端,它会在每张图片的加载之前,用图样色调的一个色块占位,这样图片的加载过程会比较平滑自然。脚本用来计算出一张图片的主色调,返回一个色值,经过测试还不错,挺好用的 :)