Part 01● 图片预处理 ●
完整的一张游戏运行截图中除了我们所需要的时延值外,还会有上下行数据、位置坐标、生存人数等数据(不同游戏的数据存在差异),考虑到OCR识别会把图片上的所有值都解析出来,我们需要进一步对多个数据进行分析筛选,在一定程度上加大获取时延值的难度,因此先把图片进行预处理,只截取有用的时延部分。同一款游戏的时延值在画面上的位置一定,针对不同游戏只要改变截取位置。
Part 02● OCR识别分析 ●
拿到截取的游戏图片后,接下来就要对其进行识别,获取其中的时延数据,这里将运用到OCR识别技术。它是利用光学技术和计算机技术把纸上或图片中的文字读取出来,转换成计算机能够接受的格式,加工处理识别出其中有用的信息。OCR的识别过程一般包括图像处理(二值化、降噪、校正等)、特征提取、对比检测、内容识别。而近年来随着人工智能的不断发展,基于深度学习的OCR表现相较于传统方法在识别率和效率上更加出色。目前百度、腾讯、华为等公司都提供了OCR服务,不需要了解具体的识别技术细节,通过调用API接口即可完成图片文字的识别。我们选择使用百度的OCR文字识别接口服务,根据官方提供的API文档完成方法的调用。具体使用方法如下:
1.安装aip识别包,引入相应的lib
- pip install baidu aip
- from aip import AipOcr
2.初始化OCR
- def initOcr(ocrAuth):
- client = AipOcr(ocrAuth['appid'],
- ocrAuth['appkey'], ocrAuth['secretkey'])
- return client
这里需要使用百度账号申请appkid、appkey和secretkey信息。
3.调用具体识别方法
- result = client.webImage(image)
接口服务返回数据:
- [{‘words’: ’ping: 77ms’}]
通过查看不同游戏我们发现,部分游戏的时延值前面带有“Ping”,有些是直接一个数值,还有的则是中文的“延迟”,因此需要对返回的识别结果做进一步的处理,用于区分不同游戏。最后通过正则表达获取到其中的时延值。
- re_obj = re.compile(r"\d+\.?\d*")
- res_list = re_obj.findall(words)
Part 03● 工具实现 ●
完成了图片的处理和识别,接下来就是把结果友好地进行展示,我们实现一个简单的可执行界面工具,将识别流程串联起来。整体的流程:
工具内容主要包括游戏选择、图片路径选择、游戏截图。为了减少识别调用次数,提高识别效率,可以将图片合并处理。
最终的工具界面长这样:
Part 04● 游戏图片识别 ●
接下来就是具体的使用了,首先需要选择具体的游戏,获取游戏图片的保存路径用于读取,然后针对游戏图片进行截图获取坐标。将图片经过OCR识别显示结果,并根据识别的结果和图片时间画出曲线图。我们使用一款游戏图片进行测试:
识别结果如下,5个数据为1组,55张图片一共耗时9.28s。曲线图直观地展示了游戏时延值随时间的变化情况。
通过人工查看图片与识别结果进行对比,两者的时延值一致。针对不同游戏,只要改变图片的读取路径以及截取坐标位置即可。
Part 05● 结语 ●
结合OCR技术,可以对不同类型的图片信息进行快速有效地识别,减少人工的工作量,满足项目测试及数据比对的需求。随着信息技术的不断发展,各式各样的OCR技术也将会更多地应用在日常生活中,给人们带来高效和便利。
作者:冯旭超,单位:中国移动智慧家庭运营中心
【本文为51CTO专栏作者“移动Labs”原创稿件,转载请联系原作者】