在airtest中使用ocr反向识别文本内容进行断言

airtest是网易开发的一款基于图象识别的ui自动化框架,其对元素操作的流程是先对元素进行截图,再和客户端当前界面截图进行对比,找出位置,执行点击操作。

这样的操作免除了传统的查找控件的繁杂,但是对元素的断言却不够精细,尤其在不仅仅判断元素是否存在,而且还要对文本的内容进行检查时,可以说无能为力了。

想要解决这个问题,可以使用回归传统的元素查找方式(airtest内置了各端通过元素查找方式的api),查找到元素,再判断他的文本属性,得到内容;但这样的方式第一需要在元素的映射方式上增加传统的例如xpath的关系,第二很多时候由于不规范开发等原因,元素的定位属性往往不容易确定,花费时间查找其实已经丢失了图像识别控件的便利性。

在实际的操作中(我的项目是pc端+安卓端双端互动的场景),我发现可以利用airtest本身的api,外加ocr的python库,做到对元素内容的识别,从而解决这个问题。

大概的思路是,先用airtest本身的api,将待识别内容截图扣下来,然后利用ocr的库进行对其内容识别。

理论上,如果你的设备分辨率不会变更,那么其实不需要用到airtest的api,直接用固定的位置,通过opencv等图像处理的库进行抠图保存即可,但由于生产设备的分辨率不能保证,因此,需要一个相对的位置,对这个位置,airtest里有直接可用的方法,这个方法也是其本身对分辨率兼容的办法。

airtest通过你截图时记录的坐标,设备分辨率,来生成一个recordpos,这个pos其实就是一个用来计算当分辨率不同时他的坐标偏移量。

具体怎么通过recordpos进行计算坐标,这里就不赘述了,主要说一下通过recordpos进行元素查找的方法,这个方法是get_predict_area,有四个参数,分别是record_pos(截取控件图片时的偏移量)、image_wh(空间的宽高)、image_resolution(截取图片时记录的设备分辨率)、screen_resolution(查找控件时所在设备的实际分辨率)。

该方法会返回一个四角坐标,我们把这个四角坐标用内置的图片处理方法,在设备及图上进行截图保存,就可以获取到待识别控件的图片啦,然后再用ocr库对这个图片进行识别,就可以得到控件的文本内容了。

示例代码如下(只适用于本人的硬件设备,用作参考):

        dev = device()
        stu_answer_num = r'./valid_pic/stu_answer_num.png'  # 答题区域的截图路径
        interact_pic_path = r'./valid_pic/snap_interact.png'  # 互动界面的截图路径
        interact_image = dev.snapshot(interact_pic_path)  # 把互动界面截图保存

        from PIL import Image
        import pytesseract
        from airtest import aircv
        from airtest.core.cv import Predictor

        screen_resolution = aircv.get_resolution(interact_image)  # 获取互动界面截图的实际分辨率
        # 动态创建类继承自Predictor,修改类参数,偏移值DEVIATION为0,用以获取精准的截图区域
        predictor = type('Pos', (Predictor,), {'DEVIATION': 0})
        xmin, ymin, xmax, ymax = predictor.get_predict_area(record_pos=(0.404, -0.213), image_wh=(265, 45),
                                                            image_resolution=(1919, 1040),
                                                            screen_resolution=screen_resolution)  # 获取答题区域的截图坐标
        predict_area = aircv.crop_image(interact_image, (xmin, ymin, xmax, ymax))
        aircv.imwrite(stu_answer_num, predict_area)  # 将待识别区域进行截图保存
        answer_str = pytesseract.image_to_string(Image.open(stu_answer_num), 'chi_sim')  # 识别出的文字类似’全 班 共 参 与 : 1/1‘
        print(answer_str)
        if answer_str.find('参 与'):
            answer_str = answer_str.split(' ')[-1]  # 取1/1
            answer_num = int(answer_str.split('/')[0])  # 取答题人数
            return answer_num
        return
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容

  • 本教程翻译自PyImageSearch英文原文 上周的博客内容,我们学习了如何安装Tesseract去做OCR识别...
    TimBao阅读 33,613评论 0 14
  • 无目标命令 在[上一章][界面元素]中,我们讲述了界面元素,以及如何选取一个界面元素作为目标,以便使用有目标的命令...
    Creator_蔚蓝阅读 10,143评论 0 3
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,754评论 1 92
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,105评论 1 32
  • hi,大家好我是小咖 第五人格在正式服上线的时候很多老玩家都记得,官方曾经举办了一项征文比赛,就是寻找设计师设计第...
    第五出报员小咖阅读 149评论 0 0