seekImage 在屏幕指定区域内找图

函数功能:

在全屏或指定区域范围内寻找指定图片的坐标,支持相似查找。如找到目标图,则返回找到的图像的中心点坐标。该函数的 JS API 有多种重载方法,对应不同的参数。

对应JS API:
seekImage(imageName)
seekImage(imageName, sim)
seekImage(imageName, sim)
seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName)
seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName, sim)
seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName, sim, beGray)
seekImage(imageName, sim, beGray)
是否支持多设备:

不支持

请求方式:GET
http://IP:8090/TotalControl/v1/devices/:device/screen/images?token=:token&name=:name&rect=:rect&sim=:sim
参数说明:
参数名 类型 必选 描述
IP string Y 访问 Total Control 服务器的 IP 地址
token string Y Total Control TOKEN
device string Y 主控设备对象值 id
name string Y 需要对比图片路径
sim float N 相似度,取值范围为[0.0, 1.0]
rect string N 格式:[topLeftX,topLeftY,bottomRightX,bottomRightY]
指定截屏区域,具体说明如下:
topLeftX: 屏幕上指定范围左上角 X 坐标
topLeftY: 屏幕上指定范围左上角 Y 坐标
bottomRightX: 屏幕上指定范围右下角 X 坐标
bottomRightY: 屏幕上指定范围右下角 Y 坐标
beGray boolean N 当此值为true时(默认为true),表示图片要先进行灰度处理,然后再进行找图。当此值为false时候,表示图片不进行任何处理就进行找图,当然灰度处理后找图速度更快。从 TC 6.8.0 开始可以使用。
响应参数:

Total Control 提供的 REST API 响应格式都是 JSON ,返回值通常由关键字 "status" 和 "value" 组成,
status: 接口执行成功与否
value: 执行接口的返回信息

(一)执行接口成功的返回字段说明

字段 类型 描述
status boolean 执行接口成功,则返回:true
value string 成功找到图片的坐标


返回示例:

{
    "status": true,
    "value":[272,371]
}

(二)执行接口返回 HTTP 状态码为 200,但是结果有误的返回字段说明

字段 类型 描述
status object 执行接口失败,则返回:null 对象
value string 返回失败的具体信息


返回示例:

{
    "status":null,
    "value": "<Error message>"
}
请求示例:
//示列1:
http://localhost:8090/TotalControl/v1/devices/device@1116106541/screen/images?token=270eq7lXQK8bXYsJ&name=C:/Users/S/Desktop/360.bmp

//示列2:
http://localhost:8090/TotalControl/v1/devices/device@1116106541/screen/images?token=270eq7lXQK8bXYsJ&name=C:/Users/S/Desktop/360.bmp&sim=0.1

//示列3:
http://localhost:8090/TotalControl/v1/devices/device@1116106541/screen/images?token=270eq7lXQK8bXYsJ&name=C:/Users/S/Desktop/360.bmp&rect=[0,0,600,600]

//示列4:
http://localhost:8090/TotalControl/v1/devices/device@1116106541/screen/images?token=270eq7lXQK8bXYsJ&name=C:/Users/S/Desktop/360.bmp&rect=[0,0,600,600]&sim=0.5
示例:在屏幕坐标[0,0,600,600]内查找图片"image1080.bmp",先将图片进行灰度处理,再找图,相似度0.8,要找的图片和我们给的图片"image1080.bmp"来自同一个手机

注意:下列示例是通过本机访问 Total Control 服务器,所以 IP 都是用的 "localhost"。

该 API 的很多参数不是必须的,您可以根据需要选择参数,下面是一些请求 URL 示例:

//在屏幕坐标[0,0,600,600]内查找图片"image1080.bmp",相似度0.8
http://localhost:8090/TotalControl/v1/devices/device@230441652/screen/images?token=m195zZEgY91PMcbo&name=E:/File/img/image1080.bmp&sim=0.8&rect=[0,0,600,600]

RingoJS 请求示例:

可以复制下面的代码,在 Total Control 的脚本终端中执行,也可以保存为后缀为 js 的文件, 例如:example.js,在Total Control 执行器中执行。

//导入一些 ringoJS 的包
var {request} = require('ringo/httpclient');
var base64 = require('ringo/base64');
//将用户名密码编码,'sigma:3D391497'是用户名和密码,在Total Control系统设置里面可以看到
var userpass = base64.encode('sigma:3D391497');

//第一步:获取 Total Control 脚本开发所用的开发 token
var gettoken = request({
    method: 'GET',
    url: 'http://localhost:8090/TotalControl/v1/login',
    headers: {'Authorization': userpass}
	});
var ret_token = JSON.parse(gettoken.content).value; 
var token = ret_token.token; 
print("//获取 token 的值为:" + token);

//第二步:获取当前主控设备 ID 值
var getdevice = request({
    method: 'GET',
    url: 'http://localhost:8090/TotalControl/v1/devices/main?token=' + token
	});
var device = JSON.parse(getdevice.content).id;
print("//获取到设备的 ID:"+ device);

//在屏幕指定区域内找图
var ret = request({
    method: 'GET',
    url: 'http://localhost:8090/TotalControl/v1/devices/'+ device + '/screen/images',
    data: {
		'token':token,
		'name':'E:/File/img/image1080.bmp',
		'rect':'[0,0,600,600]',
		'beGray':true,
		'sim':0.8
	}
	});
print(ret.content);
温馨提示:
获取 Total Control 脚本开发所用的开发 token 请看这里
获取主控设备 id 值 请看这里

RingoJS 示例运行结果:

成功,则返回:

//获取 token 的值为:m195zZEgY91PMcbo
//获取到设备的 ID:device@230441652
{
    "status": true,
    "value":[272,371]
}
易语言请求示例:

温馨提示,关于易语言的更多信息,请看:
如何安装易语言
学写第一个易语言程序
如何使用易语言控制一台设备
如何使用易语言控制多台设备


.版本 2

.程序集 窗口程序集_启动窗口

.子程序 __启动窗口_创建完毕
.局部变量 base64, 文本型
.局部变量 token, 文本型
.局部变量 device, 文本型
.局部变量 j_token, 类_json, , , 用来解析获取 token 的 json
.局部变量 j_dev, 类_json, , , 用来解析获取设备ID 值的 json
.局部变量 j_ret, 类_json, , , 用来解析 REST API 接口的json
.局部变量 bool, 逻辑型
.局部变量 bool_dev, 逻辑型
.局部变量 bool_ret, 逻辑型
.局部变量 status, 文本型


base64 = 到文本 (编码_BASE64编码 (到字节集 (“sigma:3D391497”)))
输出调试文本 (“将用户名和密码组装成 sigma:3D391497 进行 base64 编码生成的字符串为: ” + base64)
bool = j_token.解析 (到文本 (网页_访问_对象 (“http://localhost:8090/TotalControl/v1/login”, 0, , , , “Authorization:” + base64, , , , , , , , , )))
.如果 (bool)
    输出调试文本 (“第一步,获取 token,返回值为:” + j_token.取数据文本 ())
    token = j_token.取通用属性 (“['value'].token”)
    输出调试文本 (“获取的 token 值为: ” + token)
    bool_dev = j_dev.解析 (编码_utf8到gb2312 (到文本 (网页_访问_对象 (“http://localhost:8090/TotalControl/v1/devices/main?token=” + token, 0))))
    .如果 (bool_dev)
        输出调试文本 (“第二步,获取设备 ID 值,返回值为:” + j_dev.取数据文本 ())
        device = j_dev.取通用属性 (“['id']”)
        输出调试文本 (“获取的设备 ID 值为: ” + device)
        bool_ret = j_ret.解析 (编码_utf8到gb2312 (到文本 (网页_访问_对象 (“http://localhost:8090/TotalControl/v1/devices/” + device + “/screen/images?name=E:/File/img/image1080.bmp&rect=[0,0,600,600]&sim=0.8&beGray=true&token=” + token, 0))))
        .如果 (bool_ret)
            输出调试文本 (“第三步,在屏幕指定区域内找图,返回值为: ” + j_ret.取数据文本 ())
            status = j_ret.取属性对象 (“status”)
            .如果 (status = “true”)
                输出调试文本 (“恭喜你,成功了!”)
            .否则
                输出调试文本 (“不好意思,失败了!”)
            .如果结束

        .否则
            输出调试文本 (“该 API 执行失败”)
        .如果结束

    .否则
        输出调试文本 (“获取设备 ID 值失败”)
    .如果结束


.否则
    输出调试文本 (“获取 token 失败”)
.如果结束

易语言代码运行结果:

成功,则返回:

* 将用户名和密码组装成 sigma:3D391497 进行 base64 编码生成的字符串为: c2lnbWE6M0QzOTE0OTc=
* 第一步,获取 token,返回值为:{"status":true,"value":{"token":"U56adwI779838M6F"}}
* 获取的 token 值为: U56adwI779838M6F
* 第二步,获取设备 ID 值,返回值为:{"id":"device@230441652"}
* 获取的设备 ID 值为: device@230441652
* 第三步,在屏幕指定区域内找图,返回值为: {"status":true,"value":[447,497]}
* 恭喜你,成功了!