• 我不觉得很低哈,如果是内部项目做简单适配我觉得没毛病,作为公开项目要适配全引擎我觉得工作量太大。
    • 当然做游戏的UI自动化当然以操作控件Object为上策哈,这个我不反对,也欢迎你把上面提到的开源方案分享出来学习下。但是业界会流行图像识别另一方面的原因是,我们一度怀疑这种object断言是否真正能够代表了界面的渲染效果。这是airtest一直很火热的原因。另外,这个项目并不只是针对游戏来做的,这里就不再过多地具体讨论游戏细节了。
    • 特征提取方面后面会有改动,但是最近没有时间。
    • 模板匹配方面并没有牺牲正确性啊,为什么会有这个想法
  • 模板匹配做了很多适配用来提高鲁棒性,目前面对不同分辨率的识别效果并不差了。
    你可以看看这个项目的特征匹配就是用的 SIFT/SURF 来做的,实际上效果不一定比优化后的模板匹配来得更好。
    你说的gameObject取件需要引擎商配合或提供方法,而我们不可能要求所有引擎商都配合。

  • 可能部分图片存在一些我没有发现的问题,你发下图片?

  • 因为你的路径写错了...
    pic/2.png ...

  • opencv-contrib-python 是有影响的,因为特征识别的SIFT与SURF算法都是有专利的,在新的版本中已经被移除掉了。
    按默认版本来应该没什么问题啊,如果你不想用的话可以把特征识别关掉。模板匹配也够了:

    fi = FindIt(engine=['template'])
  • 这个是你的图片不存在吧,sample里面有图片的

  • 这个是 opencv-python 本身的安装问题,网上有一些解决方案。

    https://blog.csdn.net/wuzhouqingcy/article/details/77509454

    我还没有遇到过,你可以先按网上的方法试试看哈

  • 在 0.4.6 版本之后,非pro_mode模式下也会返回相似度了:

    {'data': {'wechat_logo': {'FeatureEngine': {'target_point': [524.6688232421875,
    364.54248046875]},
    'TemplateEngine': {'target_point': [505.5, 374.5],
    'target_sim': 0.998754620552063}}},
    'target_name': 'screen',
    'target_path': 'pics/screen.png'}

    或者你也可以开启pro_mode来获取更多信息:

    fi = FindIt(pro_mode=True)

    另外,如果要合入大型的项目其实还是推荐用 findit_client 来解耦:

    https://github.com/williamfzc/findit-client

  • 我用你发的两个图试了下,貌似可以匹配到呢。。
    一般来说默认缩放的1-3倍够用了,一般icon不会小到太离谱。如果场景很特别,可以根据实际自己算一下看看呢

    1. 第一个是这个东西跟matchTemplate的算法直接相关。为了兼容带有蒙版的模板匹配,所以默认的算法是 cv2.TM_CCORR_NORMED。而这个算法的相似度算出来是比较奇怪的,匹配到的话相似度大概会有0.99+,而没有匹配到的相似度也不会很低,就像你看到的可能也会有0.95+。
      解决方案也很简单,可以把默认算法换掉:

      fi = FindIt(
      pro_mode=True,
      engine_template_cv_method_name='cv2.TM_CCOEFF_NORMED',
      )

      这种算法的表现就正常很多,基本符合人的直觉。但是不兼容蒙版匹配,所以比较纠结。

    2. 另一个可能是你的壁纸太过复杂造成了干扰。很多图像识别算法本质上是根据图像纹理来获取特征的,如果你的壁纸特征太过丰富是可能会影响结果的。一般我是会用纯色背景,不过目前来看比较常规的壁纸也是可以的,但是你这个显然太过复杂了。。

    3. 因为模板匹配与分辨率关联性比较强,所以在匹配时会将你的模板图片进行一定比例的缩放以此寻找最佳匹配点,而默认的缩放比例是1倍-3倍(因为一般来说icon都会比较小,而截图分辨率是比较高的)。如果你的模板图片分辨率很高而你的目标图片分辨率低的话,这个scale就不是很适用了。我是比较建议用小一点的icon搭配大一点的目标图片来检测。如果你一定想要这样检测的话可以这样修改scale的值:

      fi = FindIt(
      pro_mode=True,

      # 默认是1-3倍,该范围内10等分
      # engine_template_scale=(1, 3, 10),

      # 这样是0.5-3倍,该范围内10等分,可以根据需要自己调节
      # 当然,范围更大,颗粒度更细,就会更慢
      engine_template_scale=(0.5, 3, 10),
      )

    如果还存在问题,欢迎继续留言。

Designer, with code.