识别模块
分类:本地图像识别
函数:ocr.tess.ocr() 本地图像识别
原函数名 : localOcrText
函数说明 : 将指定区域的图像识别成文字。
函数方法 : ocr.tess.ocr(路径 tess, 语言 lang?, 左上角坐标x?, 左上角坐标y?, 右下角坐标x?, 右下角坐标y?, 白名单 whitelist?);
返回值 : 文字 text 坐标数组 table
说明:使用该函数需要ocr语言包。
下载地址:https://share.weiyun.com/5wZtDSS
下载后, 将解压后的tessdata目录复制到设备中
参数 | 类型 | 说明 | 必填 |
---|---|---|---|
tess | string | 语言包tessdata目录的路径 | 必填 |
lang | string | 语言类型 'eng' : 英文语言类型 'chi_sim' : 中文语言类型 | 非必填,默认 eng |
ltx | number | 待识别区域的左上角X坐标 | 非必填,默认全屏识别 |
lty | number | 待识别区域的左上角Y坐标 | 非必填,默认全屏识别 |
rbx | number | 待识别区域的右下角X坐标 | 非必填,默认全屏识别 |
rby | number | 待识别区域的右下角Y坐标 | 非必填,默认全屏识别 |
whitelist | 文本型 | 设置白名单, 只有白名单中的字符才会被识别 | 非必填 |
返回值 | 类型 | 说明 |
---|---|---|
text | string | 图片识别后得到的答案, 失败的话返回空字符串 |
table | table | 返回的坐标等信息 |
返回的table坐标:
{
{
c = 90, -- c 代表相似度
char = "触", -- char 代表识别的内容
h = 30, -- h 代表识别字体的高度
w = 30, -- w 代表识别字体的宽度
x = 10, -- x 代表相对识别范围的左上角 x 坐标
y = 20 -- y 代表相对识别范围的左上角 y 坐标
},
...
}
示例:识别中文
code,info = ocr.tess.ocr("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"chi_sim", -- 语言类型为中文
100, -- 图片左上角X坐标为100
100, -- 图片左上角Y坐标为100
200, -- 图片右下角X坐标为200
200); -- 图片右下角Y坐标为200
if code == "" then
sys.dialog("识别失败");
else
sys.dialog(string.format("识别成功: %s", code));
sys.log(info)
end
示例:识别英文和数字
code,info = ocr.tess.ocr("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"eng", -- 语言类型为英文
100, -- 图片左上角X坐标为100
100, -- 图片左上角Y坐标为100
200, -- 图片右下角X坐标为200
200); -- 图片右下角Y坐标为200
if code == "" then
sys.dialog("识别失败");
else
sys.dialog(string.format("识别成功: %s", code));
sys.log(info)
end
示例:只识别数字
code,info = ocr.tess.ocr("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"eng", -- 语言类型为中文
100, -- 图片左上角X坐标为100
100, -- 图片左上角Y坐标为100
200, -- 图片右下角X坐标为200
200, -- 图片右下角Y坐标为200
"0123456789"); -- 设置白名单字符串, 只识别数字
if code == "" then
sys.dialog("识别失败");
else
sys.dialog(string.format("识别成功: %s", code));
sys.log(info)
end
注意事项:
1,该函数对非正规字体识别欠佳,建议识别一些背景无杂色的英文和数字。
2,需要下载ocr语言包。
函数:ocr.tess.ocrEx() 本地图像识别扩展
原函数名 : localOcrTextEx
函数说明 : 将本地图片识别成文字。支持合并图片识别
函数方法 : ocr.tess.ocrEx(路径 tess,语言 lang,白名单 whilelist,图像路径 picpath1,图像路径 picpath2,...,图像路径 picpathn);
返回值 : 文本型 text 数组 table
说明:使用该函数需要ocr语言包。
下载地址:见ocr.tess.ocr函数
下载后, 将解压后的tessdata目录复制到设备中
参数 | 类型 | 说明 |
---|---|---|
tess | string | 语言包tessdata目录的路径 |
lang | string | 语言类型 'eng' : 英文语言类型 'chi_sim' : 中文语言类型 |
whilelist | string | 设置白名单, 只有白名单中的字符才会被识别 |
picpath1 | string | 待合并的第一个图片的路径 |
picpath2 | string | 待合并的第二个图片的路径 |
picpathn | string | 待合并的第n个图片的路径 |
返回值 | 类型 | 说明 |
---|---|---|
text | 文本型 | 图片识别后得到的答案, 失败的话返回空字符串 |
table | 数组 | 返回的坐标等信息 |
返回的table坐标:
{
{
c = 90, -- c 代表相似度
char = "触", -- char 代表识别的内容
h = 30, -- h 代表识别字体的高度
w = 30, -- w 代表识别字体的宽度
x = 10, -- x 代表相对识别范围的左上角 x 坐标
y = 20 -- y 代表相对识别范围的左上角 y 坐标
},
...
}
识别一张图片并且白名单为空
screen.snapshot("/var/touchelf/x.png",100,100,200,200);
code, info = ocr.tess.ocrEx("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"eng", -- 语言类型为英文
"", -- 白名单为空
"/var/touchelf/x.png"); -- 图片地址
if code == "" then
sys.dialog("识别失败");
else
sys.dialog(string.format("识别成功: %s", code));
sys.log(info)
end
合并多张图片识别且只识别数字
screen.snapshot("/var/touchelf/1.png",100,100,200,200);
screen.snapshot("/var/touchelf/2.png",100,100,200,200);
screen.snapshot("/var/touchelf/3.png",100,100,200,200);
code, info = ocr.tess.ocrEx("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"eng", -- 语言类型为英文
"0123456789", -- 白名单为数字
"/var/touchelf/1.png", --待合并的第一个图片
"/var/touchelf/2.png", -- 待合并的第二个图片
"/var/touchelf/3.png"); -- 待合并的第三个图片
if code == "" then
sys.dialog("识别失败");
else
sys.dialog(string.format("识别成功: %s", code));
sys.log(info)
end
当需要识别的内容非常小识别不准确时(如下图的等级)可尝试下面方法
function main()
f = "/var/touchelf/1.jpg" --截图路径
screen.snapshot(f, 245,520, 269,538,400) --截等级显示的范围,最后一个参数400为图片放大4倍
image.filter(f,{0xF8D268}, 80) -- 取字体的颜色将图片二值化
code = ocr.tess.ocrEx("/var/touchelf/tessdata", "eng", "", f) --识别图片内容
sys.log(code)
end
放大并二值化后的图片.更有利准确识别
分类:远程图像识别
函数:ocr.cloud.ocr() 远程图像识别
原函数名 : cloudOcrText
函数说明 : 连接答题平台进行图片识别。
函数方法 : ocr.cloud.ocr(密码串 sign,题目类型 type,左上角坐标x,左上角坐标y, 右下角坐标x, 右下角坐标y, 超时 timeout);
返回值 : 文本型 code
参数 | 类型 | 说明 |
---|---|---|
sign | string | 密码串 |
type | string | 题目类型, 请前往选择的代答平台的官网查询 |
ltx | number | 待识别区域的左上角X坐标 |
lty | number | 待识别区域的左上角Y坐标 |
rbx | number | 待识别区域的右下角X坐标 |
rby | number | 待识别区域的右下角Y坐标 |
timeout | number | 超时时间, 范围为20-600秒 |
速安答题key : 密码串(http://st.suanst.com注册并登陆后, 在会员中心获取), 如username|9CF16235AD9EFBD3F233265DF9400E6A
返回值 | 类型 | 说明 |
---|---|---|
code | 文本型 | 图片识别后得到的答案, 失败的话返回空字符串 |
示例
code = ocr.cloud.ocr("username|PASSWORDAD9EFBD3F233265DF9400E6A", -- 答题参数1为密码串(http://st.suanst.com注册并登陆后, 在会员中心获取)
"1004", -- 题目类型为"1004"(4位数字字母)
100, -- 图片左上角X坐标为100
100, -- 图片左上角Y坐标为100
200, -- 图片右下角X坐标为200
200, -- 图片右下角Y坐标为200
600); -- 超时时间为600秒
if code == "" then
sys.dialog("识别失败");
else
sys.dialog(string.format("识别成功: %s", code));
end
函数:ocr.cloud.ocrEx() 远程图像识别扩展
原函数名 : cloudOcrTextEx
函数说明 : 将参数中指定的任意个数的图片合并成一个图片后, 连接远程答题平台进行图片识别。
函数方法 : ocr.cloud.ocrEx(密码串 sign,题目类型 type, 超时 timeout,图像路径 picpath1,图像路径 picpath2,...,图像路径 picpathn,);
返回值 : 文本型 code
参数 | 类型 | 说明 |
---|---|---|
sign | 文本型 | 密码串 |
type | 文本型 | 题目类型, 请前往代答平台的官网查询 |
timeout | 整数型 | 超时时间, 范围为20-600秒 |
picpath1 | 文本型 | 待合并的第一个图片的路径 |
picpath2 | 文本型 | 待合并的第二个图片的路径 |
picpath... | 文本型 | 待合并的第...个图片的路径 |
picpathn | 文本型 | 待合并的第n个图片的路径 |
答题key : 密码串(http://st.suanst.com注册并登陆后, 在会员中心获取), 如username|9CF16235AD9EFBD3F233265DF9400E6A
返回值 | 类型 | 说明 |
---|---|---|
code | 文本型 | 图片识别后得到的答案, 失败的话返回空字符串 |
示例:合并三张图片进行远程识别
screen.snapshot("/var/touchelf/1.png"); -- 将屏幕截图为/var/touchelf/1.png图片
screen.snapshot("/var/touchelf/2.png"); -- 将屏幕截图为/var/touchelf/2.png图片
screen.snapshot("/var/touchelf/3.png"); -- 将屏幕截图为/var/touchelf/3.png图片
-------------------------------------------
-- 下面的代码将1.png、2.png和3.png合并成一个图片后
-- 发送到远程代答平台进行图片识别
-------------------------------------------
code = ocr.cloud.ocrEx("username|PASSWORDAD9EFBD3F233265DF9400E6A", -- -- 答题参数1为密码串(http://st.suanst.com注册并登陆后, 在会员中心获取"
"1004", -- 题目类型为"1004"(4位数字字母)
600, -- 超时时间为600秒
"/var/touchelf/1.png", -- 待合并的第一个图片
"/var/touchelf/2.png", -- 待合并的第二个图片
"/var/touchelf/3.png"); -- 待合并的第三个图片
if code == "" then
sys.dialog("识别失败");
else
sys.dialog(string.format("识别成功: %s", code));
end
分类:制作字库识别
教程:制作字库
1.打开vscode的触摸精灵插件
2.右键点击设备列表,选择触摸抓抓
3.在打开的抓抓页面中点击字库生成
4.取字的颜色填写到二值化下面的框中,调整二值化的精度(范围0-100),将图片二值化
如果字体有多种颜色,颜色之间用 , 分割 例如: 0xFFFFFF,0xAAAAAA,0x333333
5.点击添加,输入字键,点击字值框,然后框选数据,添加完成后点击生成字库
函数:ocr.font.init() 字库初始化
原函数名 : fontInit
函数说明 : 初始化字库/加载字库。
函数方法 : ocr.font.init(字库 lib);
返回值 : 无
参数 | 类型 | 说明 |
---|---|---|
lib | table | 字库数组 |
示例
function main()
local fontLib = {
{'触', {0xFFFFFF}, 90, 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAcCAYAAACK7SRjAAAAsUlEQVR4AbXBAYrCMAAAwd2Q/395z4IFEbWtXmbshkUGCw0WGryg8g2VR4OLVM4afEHljMFFFRUqRyZ3Ko9UdhXPKlQq3pncVexUKo5UfDJYaHCBispZgwsqNipnDC6q2KgcGbyhoqLyrGKj8snkicqu4p2KI5MblV2FSsWvJjcVv1LZqGwqJl9QeadiNzlJZVfxisqjyUkVVw0WGiw0WGhyp7Kr+A92wyKDhQYLDRb6A6nTR1D8mGLiAAAAAElFTkSuQmCC'},
{'摸', {0xFFFFFF}, 90, 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAZCAYAAADe1WXtAAAAi0lEQVR4AbXBQWrDMAAAwV2h/3956x4KxogkrqMZO/Blgw0GH1L51GCDyUHlEyrvVEwOFWcqFe+oVFwNFipUXlGpWBlsMNhAIF6ouFL5VbFiB75ssMFgg8mJyn9V/JksVNyhcjbYYLDBZEHliclCxR0qZ4OLiqcGFypPTRZUnpgsVNyhcmYHvmywwQ8PTzQ4ee0K3AAAAABJRU5ErkJggg=='}
}
ocr.font.init(fontLib)
end
注意事项:
只有初始化字库后才能找字 识字
函数:ocr.font.find() 字库找字
原函数名 : fontFindText,fontFindTextEx
函数说明 : 通过触摸精灵字库返回文字坐标。
函数方法 : ocr.font.find(字 str,左上角坐标x?,左上角坐标y?, 右下角坐标x?, 右下角坐标y?,精度 fuzzy?,所有坐标all?);
返回值 : 坐标x,y 或坐标数组(all为true时)
参数 | 类型 | 说明 | 必填 |
---|---|---|---|
str | string | 要查找的字 | 必填 |
ltx | number | 欲寻找的区域左上角的X坐标 | 非必填,默认全屏 |
lty | number | 欲寻找的区域左上角的Y坐标 | 非必填,默认全屏 |
rbx | number | 欲寻找的区域右下角的X坐标 | 非必填,默认全屏 |
rby | number | 欲寻找的区域右下角的Y坐标 | 非必填,默认全屏 |
fuzzy | number | 精度,范围:1 ~ 100,数值越大精度越高,100为完全匹配 | 非必填,默认100 |
all | boolean | 是否返回所有符合条件的坐标 | 非必填,默认为false |
返回值 | 类型 | 说明 |
---|---|---|
x | number | 找到的坐标X值,未找到返回 -1 |
y | number | 找到的坐标Y值,未找到返回 -1 |
all为true的返回值 | 类型 | 说明 |
---|---|---|
table | table | 范围内找到的坐标table,未找到返回 {} 空数组 |
区域范围找字示例
function main()
local fontLib = {
{'触', {0xFFFFFF}, 90, 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAcCAYAAACK7SRjAAAAsUlEQVR4AbXBAYrCMAAAwd2Q/395z4IFEbWtXmbshkUGCw0WGryg8g2VR4OLVM4afEHljMFFFRUqRyZ3Ko9UdhXPKlQq3pncVexUKo5UfDJYaHCBispZgwsqNipnDC6q2KgcGbyhoqLyrGKj8snkicqu4p2KI5MblV2FSsWvJjcVv1LZqGwqJl9QeadiNzlJZVfxisqjyUkVVw0WGiw0WGhyp7Kr+A92wyKDhQYLDRb6A6nTR1D8mGLiAAAAAElFTkSuQmCC'},
{'摸', {0xFFFFFF}, 90, 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAZCAYAAADe1WXtAAAAi0lEQVR4AbXBQWrDMAAAwV2h/3956x4KxogkrqMZO/Blgw0GH1L51GCDyUHlEyrvVEwOFWcqFe+oVFwNFipUXlGpWBlsMNhAIF6ouFL5VbFiB75ssMFgg8mJyn9V/JksVNyhcjbYYLDBZEHliclCxR0qZ4OLiqcGFypPTRZUnpgsVNyhcmYHvmywwQ8PTzQ4ee0K3AAAAABJRU5ErkJggg=='}
}
ocr.font.init(fontLib)
x, y = ocr.font.find("触", 100, 100, 200, 200)
sys.log(string.format("找到的坐标:%s,%s",x,y))
end
区域范围找字,精度90,返回所有符合的坐标示例
function main()
local fontLib = {
{'触', {0xFFFFFF}, 90, 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAcCAYAAACK7SRjAAAAsUlEQVR4AbXBAYrCMAAAwd2Q/395z4IFEbWtXmbshkUGCw0WGryg8g2VR4OLVM4afEHljMFFFRUqRyZ3Ko9UdhXPKlQq3pncVexUKo5UfDJYaHCBispZgwsqNipnDC6q2KgcGbyhoqLyrGKj8snkicqu4p2KI5MblV2FSsWvJjcVv1LZqGwqJl9QeadiNzlJZVfxisqjyUkVVw0WGiw0WGhyp7Kr+A92wyKDhQYLDRb6A6nTR1D8mGLiAAAAAElFTkSuQmCC'},
{'摸', {0xFFFFFF}, 90, 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAZCAYAAADe1WXtAAAAi0lEQVR4AbXBQWrDMAAAwV2h/3956x4KxogkrqMZO/Blgw0GH1L51GCDyUHlEyrvVEwOFWcqFe+oVFwNFipUXlGpWBlsMNhAIF6ouFL5VbFiB75ssMFgg8mJyn9V/JksVNyhcjbYYLDBZEHliclCxR0qZ4OLiqcGFypPTRZUnpgsVNyhcmYHvmywwQ8PTzQ4ee0K3AAAAABJRU5ErkJggg=='}
}
ocr.font.init(fontLib)
points = ocr.font.find("触", 100, 100, 200, 200, 90, true)
sys.log(points)
end
返回的table坐标:
{
{
x = 10,
y = 20
},
{
x = 100,
y = 200
}
...
}
注意事项:
1.初始化字库运行一次即可,不用每次找字都初始化字库.
2.范围填写 0,0,-1,-1 可全屏查找
函数:ocr.font.ocr() 字库识字
原函数名 : fontOcrText
函数说明 : 将指定区域的图像识别成文字。
函数方法 : ocr.font.ocr(左上角坐标x?,左上角坐标y?, 右下角坐标x?, 右下角坐标y?,精度 fuzzy?);
返回值 : 文字 text, 坐标数组 table
参数 | 类型 | 说明 | 必填 |
---|---|---|---|
ltx | number | 欲识别的区域左上角的X坐标 | 非必填,默认全屏 |
lty | number | 欲识别的区域左上角的Y坐标 | 非必填,默认全屏 |
rbx | number | 欲识别的区域右下角的X坐标 | 非必填,默认全屏 |
rby | number | 欲识别的区域右下角的Y坐标 | 非必填,默认全屏 |
fuzzy | number | 精度,范围:1 ~ 100,数值越大精度越高,100为完全匹配 | 非必填,默认为100 |
返回值 | 类型 | 说明 |
---|---|---|
text | string | 识别后得到的答案, 失败的话返回空字符串 |
table | table | 返回的坐标等信息 |
返回的table坐标:
{
{
char = "触", -- char 代表识别的内容
x = 10, -- x 坐标
y = 20 -- y 坐标
},
{
char = "摸",
x = 100,
y = 200
}
...
}
示例:
function main()
local fontLib = {
{'触', {0xFFFFFF}, 90, 'iVBORw0KGgoAAAANSUhEUgAAABcAAAAcCAYAAACK7SRjAAAAsUlEQVR4AbXBAYrCMAAAwd2Q/395z4IFEbWtXmbshkUGCw0WGryg8g2VR4OLVM4afEHljMFFFRUqRyZ3Ko9UdhXPKlQq3pncVexUKo5UfDJYaHCBispZgwsqNipnDC6q2KgcGbyhoqLyrGKj8snkicqu4p2KI5MblV2FSsWvJjcVv1LZqGwqJl9QeadiNzlJZVfxisqjyUkVVw0WGiw0WGhyp7Kr+A92wyKDhQYLDRb6A6nTR1D8mGLiAAAAAElFTkSuQmCC'},
{'摸', {0xFFFFFF}, 90, 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAZCAYAAADe1WXtAAAAi0lEQVR4AbXBQWrDMAAAwV2h/3956x4KxogkrqMZO/Blgw0GH1L51GCDyUHlEyrvVEwOFWcqFe+oVFwNFipUXlGpWBlsMNhAIF6ouFL5VbFiB75ssMFgg8mJyn9V/JksVNyhcjbYYLDBZEHliclCxR0qZ4OLiqcGFypPTRZUnpgsVNyhcmYHvmywwQ8PTzQ4ee0K3AAAAABJRU5ErkJggg=='}
}
ocr.font.init(fontLib)
text, info = ocr.font.ocr(0, 0, -1, -1)
sys.log(text)
sys.log(info)
end
注意:识字的时候返回是按照y从小到大,y相同的时候按照x从小到大的顺序来返回的.
如果同一行字体大小不一样的话返回的顺序可能会跟实际不符,可使用下面的代码重新排序
返回:i查ph找one
function main()
fontLib = {
{
"查",
{0xFFFFFF},
90,
"iVBORw0KGgoAAAANSUhEUgAAABEAAAASCAYAAAC9+TVUAAAAe0lEQVR4Aa3BAYrCMAAAwd2Q/395rwELIuHU2hk78IbKqeKVQPxoVuyo/KfiNNhQWSoqThUnldPghcpSsVNRsagsk4PKs4p3KlRUBOKh4orJoWJRuWJU/GqyUfEJlWVwg8mGyjcGN5hsVHxCZRncYLKh8o3Jk4orBjf4A9t+OSNeKN/qAAAAAElFTkSuQmCC"
},
{
"找",
{0xFFFFFF},
90,
"iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAgUlEQVR4AZXBwQ2DMADAQDvK/iu7zQMJRZTCnX3xpbJUXFFZKnZT5UxlqXhqVqgcKu6o7CZfFSo7lX8qJi9V7CY3Kg4qvwwuqOwqrqgMNipPqSxDReWs4heV3WBT8YTKUjEqKt5QORu8UHFWsUweUjmrOEz+UPlncEPlrKJiUTl8AMfNQC63TMJ6AAAAAElFTkSuQmCC"
},
{
"i",
{0xFFFFFF},
90,
"iVBORw0KGgoAAAANSUhEUgAAAAcAAAAUCAYAAABBECfmAAAASklEQVR4AX3BwQnAMBADwZVI/y0rMfjgPtGM8uGHWSSxmUsShySGuZJwJGGYJQmbKUxhFklIYpjCFKYwhSlMYQpTmMIUpnhYkrC95TsQKek67QkAAAAASUVORK5CYII="
},
{
"p",
{0xFFFFFF},
90,
"iVBORw0KGgoAAAANSUhEUgAAAAoAAAARCAYAAADkIz3lAAAASElEQVR4AY3BQQ6AMBDDQG/U/3/ZqBLcgGZmAPmg8hhACoubypuZYQsHKlsohVIohVI4mBm2AaSwOFDZFjeVP6EUSqEUSqF0AZ1REhppas3gAAAAAElFTkSuQmCC"
},
{
"h",
{0xFFFFFF},
90,
"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAQCAYAAAArij59AAAASElEQVR4AYXBQQrAIAADwU3o/7+cKih4qM2MgAzcmMIUpjAfJLE9HCSxSWISEJYkbJKYzJKEUxImMyThxvxIgilMYQpTmMIULywAFBksRhEnAAAAAElFTkSuQmCC"
},
{
"o",
{0xFFFFFF},
90,
"iVBORw0KGgoAAAANSUhEUgAAAAoAAAAPCAYAAADd/14OAAAAVUlEQVR4AY3BAQqAMBAEsZmj///y2kKFIiqXmImGoqloKj6onAYHlZPKbbCpLEk4qSzFpLIk4SkJS9GQhKKp2JLwp9hU/hRNRYNKMSVhUfkyeFB5cwGBFxYsDaQ/uQAAAABJRU5ErkJggg=="
},
{
"n",
{0xFFFFFF},
90,
"iVBORw0KGgoAAAANSUhEUgAAAAsAAAAMCAYAAAC0qUeeAAAASUlEQVR4AZXByQ0DQQwEseqG80+5PPMQsB8fIuPBB0lQGS+OJFwqVxJGEi6VeCRhqDwlYZQfVEZ5UPmmLJQ/qFxloSyUhbJQFt6DoB0Oyd3cJAAAAABJRU5ErkJggg=="
},
{
"e",
{0xFFFFFF},
90,
"iVBORw0KGgoAAAANSUhEUgAAAA4AAAAMCAYAAABSgIzaAAAAXklEQVR4AZ3BAQqDMADAwKT0/1/OVlCQ4sB5Z1/8oFJxZ7JRuVI5VZwmFypLxU5FpWIZvDQ4qCwVdyoWlWXw0mSj8sRkU/HE4KXBoeIfg43KHRWV0+CiYlFRWVRUdh9RZx8xNL+2lgAAAABJRU5ErkJggg=="
}
}
ocr.font.init(fontLib)
text, info = ocr.font.ocr(390, 360, 550, 400)
sys.log(text)
sys.log(sortByLine(info))
end
function sortByLine(info)
table.sort(
info,
function(a, b)
return a.x < b.x
end
)
local text = ""
for k, v in pairs(info) do
text = text .. v.char
end
return text
end
重新排序后顺序和实际相符.
注意事项:
1.初始化字库运行一次即可,不用每次找字都初始化字库.
2.范围填写 0,0,-1,-1 可全屏查找.
3.只能识别初始化字库中的字.