如何选择适合你的图像识别算法

本文涉及的产品
图像搜索,7款服务类型 1个月
简介: 如何选择适合你的图像识别算法

1个图像识别的例子



我们先从1个最简单的touch(Template())的语句来看看,Airtest在进行图片识别的过程中,会用到什么识别算法:



上图我们截取了执行touch语句的部分日志(截图不存在于当前设备画面中),可以看到,在识别图像的过程中,Airtest尝试用了SURFMatchingTemplateMatchingBRISKMatching这几个算法去查找,并且还分别告诉了我们这几个算法的执行结果是什么。


值得注意的是,在TemplateMatching算法的执行结果里面,有一个'confidence': 0.4422764182090759,这个其实就是算法的可信度。 之前在“截图识别成功率太低,究竟搞如何补救”这篇推文中,我们介绍过如何合理调整阙值来提高图片识别成功率 ,那个阈值实际上是算法执行成功之后的可信度阈值(默认为0.7),如果算法识别的可信度(也就是confidence)超过了我们设置的阈值,就会认为识别成功,否则认为失败。


Airtest图像识别算法介绍



在airtest框架中集成了不同种类的图像识别算法。 其中包括模板匹配(也就是上文的TemplateMatching)、以及基于特征点的图像识别方法(包含了上文的SURFMatchingBRISKMatching)。这两种识别方法的特点和区别如下:


模板匹配


  • 无法跨分辨率识别
  • 一定有相对最佳的匹配结果
  • 方法名:"tpl"


特征点匹配


  • 跨分辨率识别
  • 不一定有匹配结果
  • 方法名列表:["kaze", "brisk", "akaze", "orb", "sift", "surf", "brief"]


在这里我们还需要解释一下:


1.无法跨分辨率识别,意思是一旦换一台不同分辨率的设备就可能识别失败;

2.一定有相对最佳的匹配结果,即是不管怎么说也会给你找一个结果出来,虽然可能差别很大。比如上文例子中,我们使用了当前设备不存在的截图让程序去查找,屏幕上根本没有结果,TemplateMatching算法也找出了一个可信度为0.4的结果。


算法小结


  • 模板匹配算法的优点是速度很快,如果分辨率不会改变的话,不妨选择它作为首选算法
  • 在分辨率可能会发生改变的情况下,我们会用特征点匹配的办法来找图,这样跨平台的适应能力会更高,脚本容易适配不同型号的手机


特征点匹配各算法的性能对比



针对单张图片,不同方法的性能对比


method_list = ["kaze", "brisk", "akaze", "orb", "sift", "surf", "brief"]
# 针对一张图片,绘制该张图片的CPU和内存使用情况.截屏[2907, 1403] 截图[1079, 804]
search_file, screen_file = "sample\\high_dpi\\tpl1551940579340.png", "sample\\high_dpi\\tpl1551944272194.png"
dir_path, file_name = "result", "high_dpi.json"
test_and_profile_and_plot(search_file, screen_file, dir_path, file_name, method_list)
复制代码


注:测试代码详见 airtest源码目录下的 airtest/benchmark/benchmark.py



  • 性能解析:
  • 内存:
  • 最上方图为内存曲线
  • 内存占用:kaze > sift > akaze > surf > brief > brisk > orb
  • CPU:
  • 中间图为CPU曲线
  • CPU占用:kaze > surf > akaze > brisk > sift > brief > orb
  • 时间:
  • 横轴为时间轴,且程序运行日志中有run tume输出
  • 运行时长:kaze > sift > akaze > surf > brisk > brief > orb
  • 特征点对数量:
  • 最下方图为特征点数量图
  • kp_sch为小图的特征点数量
  • kp_src为大图的特征点数量
  • good为匹配成功的特征点对数量
  • 点对数量:kaze > akaze > surf > brisk > sift > brief > orb


针对多张图片的不同方法的性能对比


method_list = ["kaze", "brisk", "akaze", "orb", "sift", "surf", "brief"]
# 测试多张图片,写入性能测试数据
test_and_profile_all_images(method_list)
# 对比绘制多张图片的结果
plot_profiled_all_images_table(method_list)
复制代码



  • 性能解析:
  • 最大内存:
  • 最上方图为内存曲线,横轴为不同的图片名
  • 最大内存:kaze > sift > akaze > surf > brief > brisk > orb
  • 最大CPU:
  • 中间图为CPU曲线
  • 最大CPU:kaze > surf > akaze > brisk > sift > brief > orb
  • 识别效果:
  • sift > surf > kaze > akaze > brisk > brief > orb


特征点匹配算法小结


针对单张图片:


kave识别的效果最好,但同时占用内存和CPU也最多;

相对来说surf和brisk的效果不错,且占用内存和CPU也处于中等水平;

orb虽然占用内存和CPU最低,但是它的效果也最差;

所以做单图识别的时候,如果对识别精确度要求很高,且不在乎对内存和CPU的使用率时,可以选择kave;如果对精确度要求没那么高时,选择像surf和brisk这些算法,就不会占用过多的内存和CPU。


针对多张图片:


sift的识别效果最好,它占用的CPU也比较少,但占用内存较多;

surf的识别效果也很好,它占用的内存也比较少,但占用的CPU很高;

akave和brisk的效果还行,且占用内存和CPU也不是很多;

orb依旧是占用CPU和内存最少,但效果最差的那一个;

所以做多图识别,对精确度要求高且不在意内存占用率的,可以选择sift;而对精确度要求高且在意内存占用率的,可以选择surf;对于精确度要求不是很高的,选用akave和brisk不会占用过多的内存和CPU。


拓展


对性能对比感兴趣的同学可以到我们开源项目airtest文件夹里的benchmark目录下,用benchmark.py跑一下自己的例子来看看。


Airtest脚本图像匹配算法的设定方式:



Airtest默认设置的算法是CVSTRATEGY = ["surf", "tpl", "brisk"],每次查找图片的时候,airtest就会按照这个设置好的算法顺序去执行,直到找出一个符合设定阈值的识别结果,或者是一直循环查找,直到超时。


当我们执行了1条touch语句(截图不存在于当前设备画面中),查找图片时执行算法的日志如下:



可以看到,airtest按照默认设置的算法顺序去执行,从surftpl再到brisk,且因为当前设备不存在该截图,它就一直循环查找,直到超时。


而当要找的截图存在于当前设备画面时,日志记录如下:



airtest按照默认的算法顺序,先执行了surf,然后成功匹配了一个符合设定阙值的结果,程序就认为识别成功了。


那么,当我们想要改变这个算法顺序或者自定义我们想要使用的图像识别算法时该如何做呢?举个例子:


如果我们使用的都是同样分辨率的设备,并且想要匹配速度快一些,我们可以将tpl调整到最前面。设置如下:


from airtest.core.settings import Settings as ST     
ST.CVSTRATEGY = ["tpl", "sift","brisk"]
复制代码


相关文章
|
机器学习/深度学习 算法 TensorFlow
树叶识别系统python+Django网页界面+TensorFlow+算法模型+数据集+图像识别分类
树叶识别系统python+Django网页界面+TensorFlow+算法模型+数据集+图像识别分类
215 1
|
6月前
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
205 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
|
4月前
|
机器学习/深度学习 人工智能 算法
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练('白内障', '糖尿病性视网膜病变', '青光眼', '正常'),最终得到一个识别精确度较高的模型。然后使用Django框架开发Web网页端可视化操作界面,实现用户上传一张眼疾图片识别其名称。
97 9
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
|
5月前
|
机器学习/深度学习 人工智能 算法
【服装识别系统】图像识别+Python+人工智能+深度学习+算法模型+TensorFlow
服装识别系统,本系统作为图像识别方面的一个典型应用,使用Python作为主要编程语言,并通过TensorFlow搭建ResNet50卷积神经算法网络模型,通过对18种不同的服装('黑色连衣裙', '黑色衬衫', '黑色鞋子', '黑色短裤', '蓝色连衣裙', '蓝色衬衫', '蓝色鞋子', '蓝色短裤', '棕色鞋子', '棕色短裤', '绿色衬衫', '绿色鞋子', '绿色短裤', '红色连衣裙', '红色鞋子', '白色连衣裙', '白色鞋子', '白色短裤')数据集进行训练,最后得到一个识别精度较高的H5格式模型文件,然后基于Django搭建Web网页端可视化操作界面,实现用户在界面中
142 1
【服装识别系统】图像识别+Python+人工智能+深度学习+算法模型+TensorFlow
|
6月前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
338 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
6月前
|
机器学习/深度学习 人工智能 算法
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
球类识别系统,本系统使用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集 '美式足球', '棒球', '篮球', '台球', '保龄球', '板球', '足球', '高尔夫球', '曲棍球', '冰球', '橄榄球', '羽毛球', '乒乓球', '网球', '排球'等15种常见的球类图像作为数据集,然后进行训练,最终得到一个识别精度较高的模型文件。再使用Django开发Web网页端可视化界面平台,实现用户上传一张球类图片识别其名称。
191 7
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
|
5月前
|
机器学习/深度学习 人工智能 算法
【坚果识别】果实识别+图像识别系统+Python+计算机课设+人工智能课设+卷积算法
坚果识别系统,使用Python语言进行开发,通过TensorFlow搭建卷积神经网络算法模型,对10种坚果果实('杏仁', '巴西坚果', '腰果', '椰子', '榛子', '夏威夷果', '山核桃', '松子', '开心果', '核桃')等图片数据集进行训练,得到一个识别精度较高的模型文件,让后使用Django搭建Web网页端界面操作平台,实现用户上传一张坚果图片 识别其名称。
59 0
|
6月前
|
机器学习/深度学习 算法 TensorFlow
【图像识别】谷物识别系统Python+人工智能深度学习+TensorFlow+卷积算法网络模型+图像识别
谷物识别系统,本系统使用Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经算法网络模型,通过对11种谷物图片数据集('大米', '小米', '燕麦', '玉米渣', '红豆', '绿豆', '花生仁', '荞麦', '黄豆', '黑米', '黑豆')进行训练,得到一个进度较高的H5格式的模型文件。然后使用Django框架搭建了一个Web网页端可视化操作界面。实现用户上传一张图片识别其名称。
130 0
【图像识别】谷物识别系统Python+人工智能深度学习+TensorFlow+卷积算法网络模型+图像识别
|
7月前
|
机器学习/深度学习 人工智能 监控
人工智能在图像识别中的应用:基于深度学习的算法实现
人工智能在图像识别中的应用:基于深度学习的算法实现
527 1
|
存储 文字识别 算法
深入探讨:企业文档管理软件中的图像识别算法应用
图像识别算法在企业文档管理软件里可谓是扮演了一位全能选手,让我们的文档处理变得轻松愉快,就像吃了一块巧克力一样。现在,让我们来看看图像识别算法在企业文档管理软件里的一些酷炫玩法——
117 1