Skip to content
📔 阅读量:

图像识别

背景

常规识别很好理解,一句话讲就是,要获取到目标元素在屏幕中的位置。

原理实现

在测试过程中需要获取的坐标是相对于整个屏幕的坐标,我们可以截取到整个屏幕的图片(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()