一. 问题的定义
热门微博的评论中出现了一批假冒名人头像的用户,在头像右下角仿造了一个V字图形。如图,
热门微博的产品希望通过图片识别这些用户。
二. 基于相似图片的方法
2.1. 算法
第一版模型,是基于相似图片搜索。步骤如下,
- 首先选出来一些V字图片作为模板,提取图片的指纹特征。
- 对于给定的一张要判定的图片,按像素和不同放大比例来扫描,如果发现和模板中的指纹相似性较高,则认为含有V字形在图片里面。
图片指纹的计算,参考的是图片搜索引擎这篇文章。简单来说,对于一张给定的方块图,我们把它按照下图所示分成5个区块,

每个区块计算HSV(Hue, Saturation, Value)三维颜色空间的直方图分布,例如,

将这个分布的形状作为图片的指纹特征。通过比较每个区块中的颜色分布与模板的颜色分布是否相似(计算距离),来判定是否含有大V图标。
2.2. 效果
我们手工收集了15张含有V字的图片,将V字部分抠出来,计算指纹作为模板保存起来。
通过上面的算法,成功识别了大V图形的部分。如下图所示,

算法的计算时间比较长,因为要考虑不同位置和不同缩放比例。平均完成一整张图的扫描的时间为1s。
当我们把这个算法应用到100万个测试用的头像集的时候,更严重的问题出现了:误判。很多正常的图片(比如一些纯色图、漫画)都被错误地识别成大V了。我们试图通过调整直方图的划分方式来过滤误伤,但是,新的误伤类型又会产生,此消彼长。一些误判的例子如下,

最终,从100万张测试图像中扫出300张图,竟然没有一张是大V图片,100%都是误判。我们意识到,大V图片的在总比例是相当低的,需要更为精确的算法才能避免误伤。
