使用 Perceptual hashing 去除微信头像内容干扰
本文是「微信用户授权头像内容带随机干扰的问题」的延续。本文对效果进行量化,并找到一个phash库,达到了更好的效果。
实验框架
相关脚本点此。
实验数据
10 组微信头像,每组 10万个头像。
准备 10万 微信头像链接,重复下载10次:
./download.sh
实验期望
期望目标:
- 1 个头像链接对应 1 个特征:期望特征抽取算法能够剥离微信对头像内容加入的干扰。不然使用密码学哈希算法,1 个头像链接下载 10 次可能就对应 10 个特征了。
- 1 个特征对应 1 个头像链接。跟哈希算法一样,希望哈希冲突尽可能小。
实验
图像降维方法
延续上文中在有限数据下得出的规则,图像降维到:32级灰度,10x10 尺寸。
python extract_feature_p2.py
echo "file,feature" > header.csv
cat header.csv download_1.csv download_2.csv download_3.csv download_4.csv download_5.csv download_6.csv download_7.csv download_8.csv download_9.csv download_10.csv > data.csv
两个指标分析如下:
csvsql --query "select avg(cnt) as expect1 from (select file, count(distinct feature) as cnt from 'data' group by file)" data.csv
expect1
2.186088754189832
csvsql --query "select avg(cnt) as expect1 from (select feature, count(distinct file) as cnt from 'data' group by feature)" data.csv
expect1
1.0051170602511927
每个头像链接,重复下载 10 次的情况下,平均有生成 2.18 个特征。