图色函数
说明
设置
image.useOpencvMat 初始化参数
- 切换图片存储模式为opencv的mat格式
- 适合EC iOS 7.11.0+
- 切换后抓图、读取图片、找图、找色等都会切换到mat格式,速度更快内存更少
- 实测内存减少50%-80%,CPU减少20%-30%,速度提升100%-200%
- 如果让图片格式切换请参考 imageToMatFormat和matToImageFormat两个函数
- @param use 1 是 0 否
- @return
{boolean|*}true 成功 false 失败
function main() {
let r = image.useOpencvMat(1);
logd(r)
//剩下的代码和之前一样 找色 找图等操作
}
main();
image.setInitParam 初始化参数
- 设置图色模块初始化参数,设置找图超时时间
- @param params 超时时间,单位是毫秒
function main() {
//action_timeout 找图找色动作的最大时间,超时后会自动返回避免阻塞
image.setInitParam({"action_timeout": 1000});
image.setInitParam(
{
"action_timeout": 1000,
"auto_click_request_dialog": false
}
);
}
main();
image.setFindColorImageMode 设置找色的算法模式
- 设置找色找图的算法模式
- 适合EC iOS 6.11.0+
- @param type 1 代表老的查找算法,2代表新的查找算法
- @return boolean
function main() {
image.setFindColorImageMode(1);
}
main();
流式截图
image.startPreCapScreen 预截图的函数
- 预截图的函数,后台会开启线程循环截图
- 可以提高截图效率
- 适合EC iOS USB版本 6.18.0+
- 这个配合蓝牙BLE时间,可以实现不安装代理IPA实现自动化操作,types设置为10
- @param types:
- 10 代表PNG格式,没有任何压缩,不开自动化也能截图
- 1 代表截图 jpg格式的方式1
- 2 代表截图 jpg格式方式2
- 3 代表png格式,png不支持质量参数 ,根据自己机器情况调用
- @param quality: 图片质量,type=1的时候,支持 1, 50, 100,三种不同的质量标准
- 当type =2 的时候,支持1-100图片质量
- @param delay 循环预先截图的间隔时间,单位是毫秒
- @return boolean true代表成功 false代表失败
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
let start = image.startPreCapScreen("1", 50, 20);
logd("startPreCapScreen {}", start)
for (let i = 0; i < 10; i++) {
sleep(1000);
console.time("1")
let img = image.captureScreenStream()
logd("img {} time: {}", img, console.timeEnd("1"))
if (img) {
image.saveTo(img, "a.png");
}
image.recycle(img)
}
image.stopScreenStream()
}
main();
image.startScreenStream 开启流式截图
- 初始化一个图像流的截屏模式,这个速度比其他的方式要快
- @return 布尔型 true 代表成功 false代表失败
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
let cap = image.startScreenStream()
logd("截图: " + cap)
}
main();
image.stopScreenStream 停止流式截图
- 停止图像流
- @return 布尔型 true 代表成功 false代表失败
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
let cap = image.stopScreenStream()
logd("截图: " + cap)
}
main();
image.isScreenStreamOk 流式截图是否正常
- 流式截图是否正常
- @return 布尔型 true 代表成功 false代表失败
function testScreen() {
let start = image.startScreenStream();
logd("start {}", start)
setAgentSetting({"screenStreamQuality": 100})
thread.execAsync(function () {
while (true) {
sleep(2000)
// 服务不在的情况下
let serviceOk = isServiceOk();
if (!serviceOk) {
serviceOk = startEnv();
}
if (!serviceOk) {
// 适当加上重置USB链接
resetUsbConn();
continue
}
if (image.isScreenStreamOk()) {
continue
}
// 判断截屏是否成
logd("重启流式截图状态")
let start = image.startScreenStream()
logd("startScreenStream :{}", start)
}
})
while (true) {
sleep(1000);
console.time("1")
let img = image.captureScreenStream()
logd("img {} time: {}", img, console.timeEnd("1"))
if (img) {
image.saveTo(img, "a.png");
}
image.recycle(img)
}
}
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
// 带守护的 流式截图,可以设置投屏质量
testScreen()
}
main();
image.captureScreenStream 图像流
- 从图像流中获取一张图片
- @return AutoImage对象或者null
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
for (let i = 0; i < 10; i++) {
let cap = image.captureScreenStream()
logd("截图数据: " + cap)
sleep(1000)
//图片要回收
image.recycle(cap)
}
}
main();
普通截图 jpg
image.captureFullScreenEx 截取全屏Image对象
- 抓取全屏,格式是JPG
- 适配EC iOS 3.1.0+
- @param ext 扩展参数,可以调整截图的方式和质量,可以分别是
- type: 1 代表截图 jpg格式的方式1 2 代表截图 jpg格式方式2 3代表png格式,png不支持质量参数 ,根据自己机器情况调用
- quality: 图片质量,type=1的时候,支持 1, 50, 100,三种不同的质量标准
- 当type =2 的时候,支持1-100图片质量
- @return AutoImage对象或者null
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
for (let i = 0; i < 10; i++) {
console.time(1)
let cap = image.captureFullScreenEx({"type": "1", "quality": 50})
logd("截图数据: " + cap + " 耗时: " + console.timeEnd(1))
image.saveTo(cap, "b.jpg");
sleep(1000)
//图片要回收
image.recycle(cap)
}
}
image.captureFullScreen 截取全屏Image对象
- 截取当前屏幕并返回一个Image对象, 这个格式是jpg。
- @return AutoImage对象或者null
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
for (let i = 0; i < 10; i++) {
let cap = image.captureFullScreen()
logd("截图数据: " + cap)
sleep(1000)
//图片要回收
image.recycle(cap)
}
}
main();
普通截图 png
image.captureFullScreenPng 截取全屏Image对象
- 截取当前屏幕并返回一个Image对象,这个格式是PNG。
- @return AutoImage对象或者null
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
for (let i = 0; i < 10; i++) {
let cap = image.captureFullScreenPng()
logd("截图数据: " + cap)
sleep(1000)
//图片要回 收
image.recycle(cap)
}
}
main();
image.resetCaptureScreenNoAutoEnv 重置无权限截图环境
- 重置无权限截图的环境
- 因为在iOS17+系统需要提前启动隧道,就需要调用这个函数
- 这个会关闭之前的通信隧道,开启新的,对于低于17版本的,该函数无效,调用也不报错
- 适配EC iOS USB版本 9.21.0+
- @returns
{boolean}true 代表成功 false代表失败
// 参考 image.captureFullScreenNoAuto 例子
image.captureFullScreenNoAuto 无需自动化截图
- 无需自动化截图
- 这个稍微慢点,如果需要速度快,请看[startPreCapScreen]函数
- 这个配合蓝牙BLE事件模块,可以实现不安装代理IPA即可完成自动化操作
- 适配EC iOS USB版本 6.25.0+
- @return AutoImage对象或者null
let tocr = null;
function ocrimage(img) {
if (tocr == null) {
let paddleOcrOn = {
"type": "paddleOcrNcnnV5",
"numThread": 1,
"single": 0,
"matMode": 1
}
// 先进行释放 防止之前未释放的资源占用
ocr.releaseAll()
tocr = ocr.newOcr()
let inited = tocr.initOcr(paddleOcrOn)
logd("初始化结果 -" + inited);
if (!inited) {
loge("error : " + tocr.getErrorMsg());
return;
}
}
let result = tocr.ocrImage(img, 30 * 1000, {"padding": 32, "numThread": 1});
logd("ocr result: " + JSON.stringify(result))
}
function testCap() {
image.useOpencvMat(1)
let tt = 0;
let timex = 0;
logd("start resetCaptureScreenNoAutoEnv")
image.resetCaptureScreenNoAutoEnv();
logd("end resetCaptureScreenNoAutoEnv")
while (!isScriptExit()) {
let sp = utils.getRangeInt(200, 500)
timex = timex + sp
sleep(sp)
tt++;
logd("call captureFullScreenNoAuto " )
console.time(1)
let img = image.captureFullScreenNoAuto();
logd("img {}", img +" 耗时: "+console.timeEnd(1))
if (img != null) {
let cl2 = image.clip(img, 10, 10, 600, 600)
logd("cl2 " + cl2)
ocrimage(cl2)
logd("截图成功,次数: " + tt + " 运行总时间 :" + timex + " ms")
image.recycle(cl2)
image.recycle(img)
} else {
logd("截图失败,成功总次数: " + tt + " 运行总时间 :" + timex + " ms")
logd("调用resetCaptureScreenNoAutoEnv 并等待恢复")
// 等待恢复
image.resetCaptureScreenNoAutoEnv();
sleep(10000)
}
}
}
testCap();
比色
image.cmpColor 多点比色
- 单点或者多点比色,找到所有符合标准的点,如果都符合返回true,否则是false
- @param image1 图片
- @param points 字符串类似这样 6|1|0x969696-0x000010,1|12|0x969696,-4|0|0x969696
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param x 区域的X起始坐标,默认填写0全屏查找
- @param y 区域的Y起始坐标,默认填写0全屏查找
- @param ex 终点X坐标,默认填写0全屏查找
- @param ey 终点Y坐标,默认填写0全屏查找
- @return 布尔型,true代表找到了 false代表未找到
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points3 = "205|1130|0xff944b-0x101010,211|1158|0xff8e42,191|1175|0xfcfbf7";
let points = image.cmpColor(aimage, points3, 0.9, 0, 0, 0, 0);
logd("points " + points);
//图片要回收
image.recycle(aimage)
}
}
main();