系统要求
- 图色检索 Android 系统必须 >= 5.0 才支持
# 多点找色
多点找色,可以按照 图色助手 生成的规则,找出屏幕上符合特征点的坐标
# findColor() 返回单坐标
(opens new window)通过 图色助手 生成的特征点 找到 屏幕上 符合条件的 1个特征点
参数
-- 案例:
color = {64,275,110,322,"87,295,#FCF19B|74,296,#D98421|100,296,#D5912C|101,297,#CF8B29|86,311,#E9C135",95};
p = findColor(color);
if p then
print('点击了')
click(p.x,p.y); -- 坐标点击方法 需 Android 7.0 以上系统支持 (包含7.0)
end
2
3
4
5
6
7
# findColors() 返回返多个坐标
(opens new window)通过 图色助手 生成的特征点 找到 屏幕上 符合条件的 多个特征点
参数
-- 案例:
color = {64,275,110,322,"87,295,#FCF19B|74,296,#D98421|100,296,#D5912C|101,297,#CF8B29|86,311,#E9C135",95};
points = findColors(color);
if points then
print("共找到:"..#points)
for k,v in pairs(points) do
print("X:"..v.x..",Y"..v.y);
end
else
print('没有找到颜色')
end
2
3
4
5
6
7
8
9
10
11
# 找色方向
findColors 或 findColor 的第7位参数
- 第7位 :找色方向 1 - 8 【非必填】 默认 2
orient = 1,左上角到右下角,纵向开始找色,先找到 a 顶点。
orient = 2,左上角到右下角,横向开始找色,先找到 b 顶点。
orient = 3,右上角到左下角,横向开始找色,先找到 c 顶点。
以此类推。
# 颜色函数
# getColor() 获取RGB颜色
可通过坐标获取 屏幕 某点的RGB颜色值
c = getColor(1064,1195);
if c then
print(c.hex) -- 16进制RGB色值
print(c.r) -- red 色值
print(c.g) -- green 色值
print(c.b) -- blue 色值
end
2
3
4
5
6
7
# compareColor() 坐标与颜色比较
比对 屏幕上的坐标RGB,是否与预期的RGB 颜色相同
参数
--案例:
cReult = compareColor( 650, 1171, "#20C4FF", 95 );
if cReult then
print( '颜色匹配' )
else
print( '颜色不匹配' )
end
2
3
4
5
6
7
# compareColor() RGB颜色比较
比对 两个RGB颜色 是否相同
参数
cReult = compareColor("#21C4FF", "#20C4FF", 95 );
if cReult then
print( '颜色匹配' )
else
print( '颜色不匹配' )
end
2
3
4
5
6
# 文字识别
# ocrp() 卷积神经网络文字识别
(opens new window)该识别精度非常高 推荐使用该识别方式,实现全分辨率脚本编写
参数
- 参数1 选填 | table类型 : 文字识别的约束
- match 选填 | string类型: --要匹配的数据,支持正则过滤
- sim 选填 | number类型;--最低准确度(0-1) 不要写1,给予神经网络的识别不会有1
- rect 选填 | table类型; 识别范围(不写选择范围,有利于全分辨率适配)
- line 选填 | boolean类型; 线上/本地识别(默认为线上识别,如果您手机性能不错,建议改为false)
- host 选填 | string类型; 默认为官方服务器地址,我们提供了linux镜像可搭建自己的ocr服务器-文档下载
- ak 当host存在时必填 | string类型; 节点开发者后台用户的token,我们提供了linux镜像可搭建自己的ocr服务器-文档下载
-- 案例:
r = {
-- match = ""; --要匹配的数据,支持正则过滤
-- sim = 0.9;--最低准确度(0-1) 不要写1,给予神经网络的识别不会有1哦
-- rect = {194,852,650,1092}; --屏幕上的范围(一般建议不要选择范围,有利于全分辨率适配)
}
local res = ocrp(r);
-- res 是一个table 识别到的每一个词都会分成一段
for k,v in pairs(res) do
print(v.text) -- 识别到的文本
print(v.confidence) -- 文本的精确度,该精度是深度学习后返回的数值(无限接近于1)
print(v.text_box_position) -- 识别区域的顶点坐标(非全是矩形区域,旋转的文字也可识别)
v:click(); -- 可以通过click 方法直接进行点击
end
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# ocr() 本地文字识别
该文字识别,识别速度快。但精度低
-- ocr 的参数 为 屏幕中的范围 可用图色助手扩选
a,b = ocr(360,656,541,941);
if(a) then
print(a);
print(JsonEncode(b))
end
-- a 为识别到的文字
-- b 为识别的具体属性(table类型),里面包含每个字的坐标。
2
3
4
5
6
7
8
9
# 深度学习
# 目标检测
通过目标检测,我们可以加载不同模型,快速检测出各种场景中目标所在的位置
# 模型加载
我们在代码中可以加载不同的模型
-- ocr 的参数 为 屏幕中的范围 可用图色助手扩选
cnnLoad('第一个模型:v1.7');
2
# 目标检测
我们可以通过该方法,识别出屏幕中的目标来
-- ocr 的参数 为 屏幕中的范围 可用图色助手扩选
cnnLoad("第一个模型:v1.7")
while true do
local params = {
draw=true, --把识别结果绘制在屏幕上
size=640,--引擎中识别图片的大小,默认640,尺寸过大会影响识别速度
};
local res = cnnFind(params);
for k,v in pairs(res) do
print(v.x) -- 目标的左上角x坐标
print(v.y) -- 目标的左上角y坐标
print(v.w) -- 目标的宽度
print(v.h) -- 目标的高度
print(v.prob) -- 目标的识别度
print(v.label) -- 目标标签
end
end
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 模型训练
- 打标签集
我们只需打开节点开发工具,在工具栏中,点开“深度学习目标检测” 将对应的目标框选后给予一个标签即可
- 导出标签集
在标签工具右上角,有导出模型 ,我们导出cnp文件即可
- 上传标签开始训练模型
拿到cnp文件后,我们需要将文件上传至开发者后台,进行训练,一般为30分钟-60分钟,即可训练完毕。
训练完毕后,就可以在小程序中 使用 cnnLoad('您的模型名称:版本') 加载使用了!
# 图像识别
# imgAna 图像处理
可对图像进行二值化,灰度,取色二值,替色,膨胀,腐蚀,开闭运算,边缘等计算处理
该函数整体参数较为复杂,因此请使用工具来生成相应代码
该函数需要配合图像处理工具来使用,需节点版本大与3318以上
# 灰度图
"[{'type':'灰度'}]"
将图片处理为0-255亮度的 单通道灰白图片
0为黑色, 255为白色
0-255 之间为不同亮度的灰色
# 二值化
"[{'type':'二值','fz':150}]"
将图片根据阈值处理为黑白图片
什么是阈值?灰度图 可将图片转换为0-255的单通道图片,黑色为0,白色为255,灰度在(0-255)之间,我们假如给定了一个阈值120,那么灰度小于120都将重置为0(黑色),灰度大于120的将置为白色,由此可以得到一张二值图片。
# 取色
将选中的颜色保留 为白色,其余颜色重置为黑色 得到一张二值化图片
# 替色
将选中的颜色 替换为 目标颜色
#
# findShape() 图形识别
(opens new window) 通过图形识别算法(该特征点支持全分辨率) 通过该方法,无论设备的 屏幕像素(px) 或者屏幕密度(dpi) 怎么变,我们都可以轻松得到图形在屏幕中的位置
-- 图形识别 生成的特征
local r = {'#00A0EA-95','[{"a":-0.746,"d":1.006,"id":"1","r":5119.0,"s":"91|2gLO?bJZT68&3NkfGX77sAm$&t45Ku4UXb9LO&1CgmtGi?2JFi8&5~{bEc`Oaqt9!&b?Qn2p<mkQYla&LQRe9pXb4T9Ly&1hrssiPEm9wjAI&2ySUUBp2Ii}D4$&4(vzy~O5aBP0e)&4(vzy~H4n~1tx*&9Y!*(I^2E1Smn6&jHL@Xafy6<I956&jHL@EjLOOKSqly&D9hN2DhnmN)Tok&10izi~SMb0aQqo0&10izgW6`h[AFQ)U&20A*oNVo@8u3bJi&20A*6>[7D?oBd^q&20A(NF5O?FdNqos&20A)UTFJSHleF~c&40<Xzxt}HkW6pfo&40<T}efd8JVDcrs&40<y2R3x!}I*{0G&40<y2Wydz@jb?$2&40<y3c!LtPs4so!&40>o(DdsxkJUjSK&81)9^mUl7yq*E<N&81[N@g~tXQ`G{]N&81[N]OdRJ$jmMX5&81@Pz5wL8ce9wdN&81@PH?]gWWUi?c`&81@PZMWy3<Z!)W]&81VS~Bi5HAXHKOP&81VTv)`xo)9gpP{&81JZVJ(!$8Hc3hR&81J!Ovs9tziyxs]&81J!Ove`}k`8vZZ&81J!Ou[QUgg`Fcb&81J!Oue6E0YHBjV&81J}A1l[(F{jzk]&81l^9xhf0*{}tJ(&81l^9v)0KP]k]3p&81l^9v)0KP]k]3p&81l^9v)0KP]k]3p&81l^9v)0KP]k]3p&81l^9v)0KP]k]3p&81l^9v)0KP]k]3p&81l^9v)0KP]k]3p&81l^9xhf0*{}tJ(&81J}A1l[(Btd<On&81J}A1l[(Hpoh<d&81J!Ou[QUgh1<Ez&81J!Ove`}w]xvwr&81J!Ove`}w]xvwr&81JZVJ@ifKsVcab&81VTv)`xo)9pcuz&81VS~Bhz8DmXIJN&81VS~Bil6nPCRmn&81@PH?]gWWUjy*X&81@Pz5wL8ce9AgT&81[N]OdRJ$jmMX5&81[N@g~tXQ`G{]N&81)9^mUl7yq*E<N&40>o(DdsxkJUjSK&40<4^7gho>K*}uG&40<y2Wydz@jb?$2&40<MHZisCc)Tqhw&40<MHP!5KvGTj$2&40<T}dEI*iu}FeS&40<Xzx6@@pBFmd*&20A)UTEXUW*mdb!&20A(NF5O?FdRX0>&20A*6>[7D?oBd^q&10izco]PvHfSLeo&10izgW6`h[Byu5W&D9hMBro5DaYwo0&jHL@EjLOOKSqly&jHL@Ux}LJCwDoQ&9Y!*(iR>ntm}ve&4(vzyLE>uCEbpm&4(vzy~O5aBP0e)&2ySUUBp2Ii}D4$&1hrssiPEm9wjAI&n{qK4P)IFrHH2&b?Qn2p<mkQYla&2$wIX6B}5dcGs&1CgmtGi?2JFi8&t45Ku4UXb9LO&3NkfGX77sAm$&2gLO?bJZT68"}]',0.85}
-- 调用findShape方法
local 结果 = findShape(r)
for k,v in pairs(结果) do
print(v.id); -- 图形id
print(v.sim); -- 图形相似度
print(v.scale); -- 图形的缩放倍数
print(v.x); -- 图形重心 x坐标
print(v.y); -- 图形重心 y坐标
end
2
3
4
5
6
7
8
9
10
11
# ocrx() 点阵识别
- (opens new window)点阵识别,可对图像进行点阵采集(不支持多分辨率)
参数
- 参数1 必填 | string类型 : 点阵字库文件
- 1.创建好字库文件(名称后缀任意)
- 2.利用点阵助手 生成点阵信息
- 3.复制进入字库文件,一个特征一行。*多个特征记得断行
- 参数2-5 必填 | number类型 :识别范围
- 参数6 必填 | number类型 :相似度 100为100%匹配
参数过于复杂必须用工具生成,详情看视频教程
-- ocrx 的参数:
-- 参数1:点阵字库文件
-- 参数2-5:屏幕的范围
-- 参数6 :相似度 100为100%匹配
text,msgs = ocrx("font.t",778,282,1016,464,95)
if text then
print(text); -- 识别到的文字,会自动换行
for k,v in pairs(msgs) do
print(v.text); --文字
print(v.x); --x坐标 (相对于屏幕)
print(v.y); --y坐标 (相对于屏幕)
print(v.sim); -- 相似度(0-1) 1=100%匹配
print(v.width); -- 宽度 (字符的宽度)
print(v.height); -- 高度(字符的高度)
end
end
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# qrDecode() 解析二维码
可以通过该方法, 解析一张二维码图片的内容
如果解析失败会返回nil
qrDecode(图片路径);
local str = getDirSD().."Download/123456.png"
local 识别结果 = qrDecode(str);
print(识别结果)
2
3
# 代答验证
# 速安
该部分用 插件集成
# 联众
该部分用 插件集成
# 截图
可对设备进行图色操作
# capture() 全屏截图
快速将手机屏幕截图
参数
-- 案例:
--1.将当前屏幕截图并保存 并命名为1.png
capture("/sdcard/DCIM/1.png")
--2.将当前屏幕截图并保存 并命名为1.png ,清晰度为原图的30%
capture("/sdcard/DCIM/1.png",30)
--3.将当前屏幕截图并保存 并命名为1.png ,清晰度为原图的30%,并且图片最长边为500像素,短边按比例自动缩放
capture("/sdcard/DCIM/1.png",30,500)
2
3
4
5
6
7
8
9
10
# capture() 区域截图
语法 capture("path",left,top,right,bottom,q)
将设备屏幕 区域截图 后保存
参数
--案例:
--1.将当前屏幕[0,0,300,400]区域 截图并保存 并命名为1.png
capture("/sdcard/DCIM/1.png",0,0,300,400)
--2.将当前屏幕[0,0,300,400]区域 截图并保存 并命名为1.png ,清晰度为原图的80%
capture("/sdcard/DCIM/1.png",0,0,300,400,80)
--3.将当前屏幕[0,0,300,400]区域 截图并保存 并命名为1.png ,清晰度为原图的80%,并且图片最长边为500像素,短边按比例自动缩放
capture("/sdcard/DCIM/1.png",0,0,300,400,80,500)
2
3
4
5
6
7
8
9
# capture2Gallery()截图至系统相册
可以通过该方法截图,并保存在系统相册(该方法会通知系统更新相册,其他应用可从相册中选择保存的图片)
cons(false); --关闭悬浮窗,防止悬浮窗被截图
sleep(500);--系统 等待500毫秒,等待悬浮窗关闭
local path = capture2Gallery(); --保存图片 至系统相册
print(path) -- path 为图片路径,如果有需要,可以通过路径删除该图片,以保证内存不满,删除方法可在插件里找对应方法
cons(true);-- 重新打开悬浮窗
2
3
4
5
6
7
# 图色缓存
# keepScreen() 缓存屏幕
(opens new window) 函数可以缓存屏幕,开启此方法后,屏幕在内存中将不再刷新,部分场景下可通过此方法来增加找色,比色等效率
-- 开启 屏幕 缓存,并进行1000此找色 (这种场景下建议开启缓存),使用完成后请即时释放屏幕,否则后续图色可能失效
keepScreen(true);
for i=1,1000 do
c = getColor(300,300);
print(i..':'..c.hex);
end
keepScreen(false);
2
3
4
5
6
7