目前项目有 3 种图片存在:
1.原图,2.缩略图 3.放在服务器端的原图。后两个是在手机上呈现的,主要就是拿原图和这两个图对比。
各个图其实都不太一样,有的缩放过,有的裁剪过。(具体怎么缩放或者裁剪的不知道)
有做过图片相似度对比的同学么?有没有什么通用的方法或者类?
从网上搜了一个 “感知哈西算法”,有做过的朋友么?这个靠谱不?
谢谢了!
把所有的图片都搞下来进行对比就行.
跟 robotium 无关. 你可以让研发给你写个对比的工具. 对比清晰度和图片的相似度.
用 OpenCV 自己写一个也也很简单
@seveniruby 谢谢思寒了啊。
图已经用 BITMAP 全搞下来了。昨天试了一下用 BITMAP 转成大小一样的,再用自带的 SAMEAS 方法对比,对比结果不一致,确认中间经过了一些处理,只能比相似度了。看样子是得自己写算法了。网上有 JAVA 的源码,试试看转到 ANDROID 平台~试试看了,可以用得话,再拿出来分享。
我们开发也都是新手,也没这需求,指望不上了。
OPENCV 是第三方软件吧?主要是我要立即取图下来,立即比。比一致了,还要删掉目标图。然后再从新比一遍,感觉必须要在测试框架里面实现了。
#3 楼 @yangchengtest 不用在 android 平台上跑, 把图片传回到 pc 上对比就行了. opencv 是个很强大的工具. 好像用法太多了, 反而不知道如何使用了. @weamylady 能给论坛上的兄弟们科普下吗
#4 楼 @seveniruby 用 Python 写就行,很简单的,网上也有资料。以前我用的时候用 Python 写完用 PyInstaller 打包成.exe 工具,然后用命令行或者 java 等工具调用就可以了。
@seveniruby @weamylady 两位大侠。
我这边应用很大一块就是图片处理,增删,浏览,缩放等。这块怎么做都没有什么经验。
可能前面需求说得不太清楚吧,图片对比只是最开始的一部分功能,对比完了,还需要针对对比结果对图片再进行二次操作。
如果 COPY 到 PC 端的话,这就涉及第三方软件了啊。连贯性不就破坏了啊。
不过目前还没到判断那步。我现在卡在不知道怎么把 ROBOTIUM 下 RES 目录下的图片用 BITMAP 取出来。
ROBOTIUM 没有 ACTIVITY,还在搜索处理方法中。~
#6 楼 @yangchengtest 你估计没用过 appium calabash 吧. 只有 robotium 依赖于 android, 其他的 android 测试框架基本不完全依赖 android 等. 他们在 pc 上运行, 丝毫不影响 android 的测试用例.
#6 楼 @yangchengtest T_T 我是菜鸟……对 Robotium 不是很熟,让@seveniruby @monkey帮你吧。
Java 本身的图像处理库 java.awt.image 貌似就挺强大的,我用 Appium 截取过图形验证码进行识别用的就是它。你不截到电脑本地的话,只能用 Robotium 自带的功能了(有没有你去问大神),因为它是打包成 App 在手机上执行的。说实话不推荐你用 Robotium。
@seveniruby 恩,谢谢大侠,确实才接触这块,JAVA,ANDROID 也就半年前才开始学。APPIUM 只用过最基本的。~CALABASH 没用过。
感觉 ROBOTIUM 可以直接获取 VIEW,取得手机图更方便。
APPIUM 感觉截某个指定控件的图感觉更复杂哈。。。所以就用 ROBOTIUM 做了。
然后就是希望需要上传的图可以放在测试程序上。因为还涉及 APP 上传图片。用 APPIUM 还不知道怎么把 PC 资源搞过去。。。感觉中间的坑可能更多。。。_^
恩,谢谢大神提供思路,我再想想办法哈~
图片对比我也做过。话说我想问 lz 的是,最终想实现的的流程和效果分别是啥样子的呢
@monkey
流程是这样的:1.APP 通过按钮添加本地的一幅图片到服务器上。服务器会生成缩略图和一个大图。
2.APP 测可以通过界面首先访问到缩略图,图会有很多,找出新增图片。
3.点击新增图片,进入大图模式,确认大图与原图一致。
4.比完以后,删掉对应的图。再比一次保证图已被删掉。
目前的测试想法是这样:
1.本地在 RES 下放一个图,然后用 BITMAP 写 SDCARD,然后调 APP 去目的路径添加文件。
2.从界面下所有的 IMAGEVIEW 下面对比图,找到目标缩略图。
3.点击目标缩略图,对比大图。如果一致就删掉。。不一致就报错。
4.全删完以后,再扫一遍所有的图,保证没有重复的。
现在主要是两个难点:
1.ROBOTIUM 的 RES 路径下的图片 BITMAP 好像取不出来。。。getResources 方法针对的是 ACTIVITY。具体怎么弄还在 BAIDU。ROBOTIUM 也是最近才接触。
2.怎么对图片,目前从网上找了个算法,已经改完了放到 ANDROID 上了,好不好用还不知道。还在折腾第一步,不行的话,准备手动上传验证了。。。。如果算法不靠谱的话,就只能用 PYTHON 写 APPIUM 截屏,用第三方工具对比了。
谢谢诸位大神了~
#11 楼 @yangchengtest 我不知道我理解的对不对。。貌似看懂了。。
首先 Android 本身读取图片的话还是专门有路径的,就是 assets 目录。文件,图片等建议还是放在这个目录下。。
然后的话。。我还是很同意上面说的,就是对比这个事情不要去放在 robotium 里面去做。还是通过截图然后都拿出来,解析成 RGBA 的 touple 去对比最靠谱。
就算算法靠谱也不应该放在 robotium 里面,毕竟就是框架是要 focus 的,不要把所有的功能都放进去。
opencv 或者 pillow 模块都可以考虑,算法是关键,不过如果真的是一样的话,可以通过对比 RGBA 来确认,如果仅仅是等比例缩放的话也问题不大。
说起图形对比,记起之前用 robotiumRC+SIKULI 来做测试中的图形对比...SIKULI 应该也是用到 OpenCV 实现的,提供了图片对比相似度设置..我记得当时使用的时候要求的相似度比较高,比如精确到里面某个字符是否和原图一致,高相似度要求下的对比很容易受到一些肉眼无法察觉的因素影响而失败..希望有经验的可以谈谈..
搜我之前发过的 opencv 与 javacv 的帖子,希望对你有帮助
感谢楼上各位大神的回复,事实证明了靠网上 BAIDU 出来的简易算法是不靠谱的。除非是按比例缩放的。。。
正在学习安装 OPENCV FOR ANDROID 中~拜读一下大神关于 OPENCV 和 JAVACV 的帖子。~
先谢谢诸位了!
@vigossjjj OPENCV 的 matchTemplate 只能对等比例缩放进行判断吧?大神没理解错吧?
因为有图片的裁剪,目前看到的只有 OPENCV 的 SIFT 和 SURF 算法可能满足需求。
ANDROID 从原生的 C++ 到 SO,再到 ANDROID 调用,中间路太长了。。。
准备用 PYTHON 先试试这两个算法了。容易的话,再移植到 ROBOTIUM 那。
再不行就只能放弃比裁剪图了。。。。