图像识别
背景
常规识别很好理解,一句话讲就是,要获取到目标元素在屏幕中的位置。
原理实现
在测试过程中需要获取的坐标是相对于整个屏幕的坐标,我们可以截取到整个屏幕的图片(screen);
在元素识别的过程中,我们需要截取某个元素的小图进行识别,比如截取播放按钮:
那么实际上,元素定位的问题就转换为,将截图的小图(play_btn
)拿到整个屏幕的大图(screen
)中去做匹配,如果匹配成功,返回小图在大图中的坐标( x, y )即可。
使用说明
Client 代码:
python
import pylinuxauto
from pylinuxauto.config import config
# 配置IMAGE服务端IP
config.IMAGE_SERVER_IP = "192.168.0.1"
# 获取元素对象
pylinuxauto.find_element_by_image("~/Desktop/template.png")
对目标图像进行操作:
python
# 本地路径
pylinuxauto.find_element_by_image("~/Desktop/template.png").click()
pylinuxauto.find_element_by_image("~/Desktop/template.png").right_click()
pylinuxauto.find_element_by_image("~/Desktop/template.png").double_click()
pylinuxauto.find_element_by_image("~/Desktop/template.png").center()
pylinuxauto.find_element_by_image("~/Desktop/template.png").result
图片资源为远程 URL
:
python
from pylinuxauto.config import config
config.IMAGE_BASE_URL = "http://10.8.12.24/image_res/deepin-music/"
# 简写形式,@ 符号代表 IMAGE_BASE_URL
pylinuxauto.find_element_by_image("@1.png").result
# 全 URL
pylinuxauto.find_element_by_image("http://10.8.12.24/image_res/deepin-music/1.png").result
服务端部署
在远程服务器上部署 OpenCV 的环境,并将其部署为 RPC 服务,测试机上不用安装 OpenCV 依赖,而是通过请求 RPC 服务的方式进行图像识别;
测试机截取当前屏幕图片以及模板图片,发送给 RPC 服务端,服务端拿到两张图片进行图像识别,最后将识别结果返回给测试机;
安装 PyLinuxAuto:
bash
pip install pylinuxauto
创建一个目录:
bash
mkdir image
cd image/
创建服务端代码文件:
bash
vim server.py
写入以下内容:
python
from pylinuxauto.image.server import server
server()
启动服务:
bash
python3 server.py
负载均衡
只需配置多个服务器 IP 即可:
python
import pylinuxauto
from pylinuxauto.config import config
# 配置图像识别服务端IP
config.IMAGE_SERVER_IP = "192.168.0.1/192.168.0.2/192.168.0.3"
# 获取元素对象
pylinuxauto.find_element_by_image("~/Desktop/template.png").click()