老司机带你检测相似图片
1 背景
相似图片检测的定义是人眼看起来像,比如下面的俩图。
相似图片的检测广泛用于图片去重,仿冒图标检测,图片检索等。本文也是基于图标相似检测的需求去做的,本意是用于打假。然而专家老中医告诉我,打假不如推荐相似app受市场欢迎,并且不同应用场景下我们做事的思路也会不同。不管了,先把相似图片识别出来
2 检测的原理
图片相似检测无非是提取图片某个维度的特征,根据算法两两计算相似度。(基于机器学习,深度学习的方法则会先构建一个模型,然后将新样本特征输入模型即可。)简单流程可以描述为:
检测过程中可能用到的7个基础特征如下:
简单解释下,dhash,ahash,phash是根据基于分块等某种算法得到的基于图片RGB值的某个哈希;RGB向量则是将色彩从256256256映射到较小的区间如444,然后计算图片在每个区间的分布形成一个数组;
SIFT,SURF,GIST则不再是RGB值的某种统计,而是试图构建人能理解的图片意义,如SIFT,SURF关注图片关键点(或者理解为重要的点)的信息,GIST则从自然度,开放度,粗糙度等描述图像。下图是这种专业的图片处理,很高大上有没有。
3 如何搭建一个仿冒图标检测系统
相似图片的检测可以用于去重,图片搜索等。底层技术是基于上文描述的方法,但是在根据目标不同,又有不同的结构。本工程的初衷是检测图标仿冒,系统结构如下:
思路:先把已标位正牌的图标特征(dhash,ahash,phash等)收集起来形成一个特征库,新图标来了则提取其特征去特征库里匹配,如果匹配到了相似度极高的则直接认定其为仿冒图标;如果匹配到了相似度较高的则转入sift,gist高级特征匹配。
4 show me the 效果
下面是一些相似图标示例:
图标大小缩放,添加元素,添加文字,颜色块变化等都是可以识别的。仿冒数量不便展示(/ □ )
5 提升性能和效果的关键点,坑板面的做法和配料
本工程最终在单机完成了数百万官方图标库,每天新进数十万图标的检测。在构建过程中遇到了不少坑,这些坑一部分是计算速度(单一图标匹配从300秒降低到0.2秒,鬼知道我的小心脏经历了什么),还有的是识别效果:
1.官方图标特征需先聚类,数百万的特征存储和匹配都比较麻烦。对官方库聚类后可以形成特征对图标的一对多关系,而不是维持原有的图标对特征的一对一关系;
2.匹配策略分层,如本工程一开始综合dhash及sift等,参数和策略调整非常复杂。分为两层后(哈希策略过滤,sift精确匹配),每一层的准确率和参数,策略调整非常方便;
3.哈希值的海明码距离计算耗时较多,在明确海明码距离范围的情况下可以采用分段匹配而非计算不同的位数。
4.工程经验上:opencv-python不直接提供sift,surf算法了。可以用opencv-contrib-python这个库。gist可以用pyleargist这个库
6 潜在的改进点
海量图片匹配,第一步必须是生成图片的特征哈希,且改hash必须是局部敏感hash。局部敏感hash的特点是:原始数据相似的情况下,生成的hash值也会尽可能的保持相似。从图片dhash,ahash,phash的算法过程可以认为它们就是一种局部敏感哈希。所以可以用来检测相似。
但是在gist特征中,即使图片相似,生成的960维向量的每一个值几乎都不同,不直接具备利用它生成局部敏感哈希lsh的条件。这个时候需要对向量元素归一化,使得相似图片的大部分gist特征相同。这一点在pyleargist的官方页面下方有说明,但并没有讲怎么做。有文章说用simhash,但是对于simhash生成过程中的每个维度的权重一笔带过。个人很怀疑不采用归一化就生成simhash的做法。这里待研究
7 总结
当前图像处理发展多年,已经提出了多种特征,算法。在工程应用中需要结合自己的场景选用适当的特征(怎么适当?不确定的话就多试试(/ □ )),注重底层数据的质量,优化性能以便快速调整匹配策略。
转载于:https://www.cnblogs.com/xxr1/p/7676574.html
老司机带你检测相似图片相关推荐
- 老司机带你玩转SDL(一)
老司机带你玩转SDL --第一站"缘由" 啦啦啦,啦啦啦 我是SDL的老司机 大厂小厂曾呆过 今天的内容真正好 带着大家把SDL玩转了 ---- 伴随着类似聂耳<卖报歌> ...
- Java用map实现沁园春_QQ飞车:沁园春地图车神跑法,实力老司机带你了解这几个技巧...
原标题:QQ飞车:沁园春地图车神跑法,实力老司机带你了解这几个技巧 QQ手游飞车上线以来收获了一大堆的迷妹迷弟,小编当然也是其中之一啦,小编在这里给大家带来最新的游戏资讯,和各种模式以及赛道的解说. ...
- 金士顿固态硬盘不认盘修复_#原创新人#老司机带你玩转PC,故障之SSD篇 篇一:金士顿 V300 240G SATA3 固态硬盘 丢盘掉速解决记录...
#原创新人#老司机带你玩转PC,故障之SSD篇 篇一:金士顿 V300 240G SATA3 固态硬盘 丢盘掉速解决记录 2016-10-25 11:14:08 12点赞 72收藏 23评论 小编注: ...
- 苹果怎么批量删除联系人?老司机带你轻松搞定!
苹果怎么批量删除联系人?很多刚刚换到苹果手机的人都会有这样的疑惑,苹果手机删除联系人的时候不能多选,每次删除多个联系人都要一个个手动删除,非常麻烦,有什么简便方法来批量删除联系人么?答案当然是有的,今 ...
- 老司机带你从源码开始撸Spring生命周期!!!
导读 Spring在Java Web方面有着举足轻重的地位,spring的源码设计更是被很多开发者所惊叹,巧妙的设计,精细的构思,都注定他的地位.今天陈某大言不惭的带你来从源码角度解析Spring的生 ...
- 老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩、击穿、穿透
前文回顾 建议前一篇文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 过期策略 Redis 的过期策略都有哪些? 在聊这个问题之前,一定 ...
- 十年建站老司机带你十分钟搭建网站
十年建站老司机带你十分钟搭建网站 本文概要: 1. 域名 + 域名注册 + 域名备案 + 域名解析绑定 2. 服务器 + 虚拟主机 + windows服务器 + linux服务器 3. CMS建站系统 ...
- 短视频+直播源码,直播老司机带你飞
短视频+直播源码,直播老司机带你飞 脱胎于视频直播的短视频以近乎疯狂的速度攫取着互联网的流量,当抖音.快手的月活已经足够强大,他们又毫不犹豫地切入了直播腹地. 当互联网竞争进入下半场,依靠互联网人口. ...
- 直播平台怎么搭建,老司机带你了解
直播平台怎么搭建,老司机带你了解 1.创建前端工程 直播平台怎么搭建毫无疑问,搭建一个项目的框架,那第一步肯定是得创建一个工程啦.cmd命令,输入vue create mylive ,然后一直回车就好 ...
- 短发美女3D建模,高质量女性角色雕刻,老司机带你涨见识~
短发美女3D建模,高质量女性角色雕刻,老司机带你涨见识~
最新文章
- Cocos2d中从场景切换到UIViewController视图方法总结
- 在leangoo项目里怎么批量导入成员,更改项目成员权限,移除项目成员?
- [python] LDA处理文档主题分布代码入门笔记
- 小程序用户拒绝授权解决方法
- abap 转换成字符串_ABAP--关于字符串String到XString XString to String转换代码
- Oracle 1204 RAC failover 测试 (二)
- 东南亚ERP仓储管理系统怎么样?
- 滚动图片广告_女排赢球可喜看台马桶广告扎眼 网友:去男足赛场!别在这儿蹭热点...
- ajaxfileupload 监听上传进度_一篇文章学会文件上传
- Firefox 网页 光标 闪烁
- text——Android下的默认字体详解
- CSS中文字体如宋体/微软雅黑的英文名称写法
- 操作系统-进程管理(信号量机制)
- 【论文阅读】Deep Learning for Encrypted Traffic Classification: An Overview(深度学习方法进行加密流量分类综述)
- 举头望明月,低头敲代码
- 高通安卓关闭WiFi服务不卸载驱动
- 【Java】子类列表和父类列表能否互相赋值与添加
- 2022社区交友系统源码+支持在线聊天/直播+有搭建教程
- bga bond焊盘 wire_封装模式: FC-BGA VS. WireBond ,谁是封装工艺中的真英雄?(图)
- 智能指纹锁迎来大风口,能否在三年内成为大众消费品?