本地图片识别函数
函数:localOcrText() 本地图像识别
函数说明 : 将指定区域的图像识别成文字。
函数方法 : localOcrText(文本型 ocrpath,文本型 language,整数型 x1,整数型y1, 整数型 x2, 整数型 y2, 文本型 list);
返回值 : 文本型 text 数组 table
说明:使用该函数需要ocr语言包。
下载地址:https://share.weiyun.com/5wZtDSS
下载后, 将解压后的tessdata目录复制到设备中
参数 | 类型 | 说明 |
---|---|---|
ocrpath | 文本型 | 语言包tessdata目录的路径 |
language | 文本型 | 语言类型 'eng' : 英文语言类型 'chi_sim' : 中文语言类型 |
x1 | 整数型 | 待识别图片区域的左上角X坐标 |
y1 | 整数型 | 待识别图片区域的左上角Y坐标 |
x2 | 整数型 | 待识别图片区域的右下角X坐标 |
y2 | 整数型 | 待识别图片区域的右下角Y坐标 |
list | 文本型 | 设置白名单, 只有白名单中的字符才会被识别(可选) |
返回值 | 类型 | 说明 |
---|---|---|
text | 文本型 | 图片识别后得到的答案, 失败的话返回空字符串 |
table | 数组 | 返回的坐标等信息 |
返回的table坐标:
{
{
c = 90, -- c 代表相似度
char = "触", -- char 代表识别的内容
h = 30, -- h 代表识别字体的高度
w = 30, -- w 代表识别字体的宽度
x = 10, -- x 代表相对识别范围的左上角 x 坐标
y = 20 -- y 代表相对识别范围的左上角 y 坐标
},
...
}
示例:识别中文
local inspect = require('inspect')
code,info = localOcrText("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"chi_sim", -- 语言类型为中文
100, -- 图片左上角X坐标为100
100, -- 图片左上角Y坐标为100
200, -- 图片右下角X坐标为200
200); -- 图片右下角Y坐标为200
if code == "" then
notifyMessage("识别失败");
else
notifyMessage(string.format("识别成功: %s", code));
logDebug(inspect(info))
end
示例:识别英文和数字
code = localOcrText("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"eng", -- 语言类型为英文
100, -- 图片左上角X坐标为100
100, -- 图片左上角Y坐标为100
200, -- 图片右下角X坐标为200
200); -- 图片右下角Y坐标为200
if code == "" then
notifyMessage("识别失败");
else
notifyMessage(string.format("识别成功: %s", code));
end
示例:只识别数字
code = localOcrText("/mnt/sdcard/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"eng", -- 语言类型为中文
100, -- 图片左上角X坐标为100
100, -- 图片左上角Y坐标为100
200, -- 图片右下角X坐标为200
200, -- 图片右下角Y坐标为200
"0123456789"); -- 设置白名单字符串, 只识别数字
if code == "" then
notifyMessage("识别失败");
else
notifyMessage(string.format("识别成功: %s", code));
end
注意事项:
1,该函数对非正规字体识别欠佳,建议识别一些背景无杂色的英文和数字。
2,需要下载ocr语言包。
函数:localOcrTextEx() 本地图片识别
函数说明 : 将本地图片识别成文字。支持合并图片识别
函数方法 : localOcrTextEx(文本型 ocrpath,文本型 language,文本型 whilelist,文本型 picpath1,文本型 picpath2,...,文本型 picpathn);
返回值 : 文本型 text 数组 table
支持版本: 4.1.1以上
说明:使用该函数需要ocr语言包。
下载地址:见localOcrText函数
下载后, 将解压后的tessdata目录复制到设备中
参数 | 类型 | 说明 |
---|---|---|
ocrpath | 文本型 | 语言包tessdata目录的路径 |
language | 文本型 | 语言类型 'eng' : 英文语言类型 'chi_sim' : 中文语言类型 |
whilelist | 文本型 | 设置白名单, 只有白名单中的字符才会被识别 |
picpath1 | 文本型 | 待合并的第一个图片的路径 |
picpath2 | 文本型 | 待合并的第二个图片的路径 |
picpath... | 文本型 | 待合并的第...个图片的路径 |
picpathn | 文本型 | 待合并的第n个图片的路径 |
返回值 | 类型 | 说明 |
---|---|---|
text | 文本型 | 图片识别后得到的答案, 失败的话返回空字符串 |
table | 数组 | 返回的坐标等信息 |
返回的table坐标:
{
{
c = 90, -- c 代表相似度
char = "触", -- char 代表识别的内容
h = 30, -- h 代表识别字体的高度
w = 30, -- w 代表识别字体的宽度
x = 10, -- x 代表相对识别范围的左上角 x 坐标
y = 20 -- y 代表相对识别范围的左上角 y 坐标
},
...
}
识别一张图片并且白名单为空
local inspect = require('inspect')
snapshotRegion("/var/touchelf/x.bmp",100,100,200,200);
code, info = localOcrTextEx("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"eng", -- 语言类型为英文
"", -- 白名单为空
"/var/touchelf/x.bmp"); -- 图片地址
if code == "" then
notifyMessage("识别失败");
else
notifyMessage(string.format("识别成功: %s", code));
logDebug(inspect(info))
end
合并多张图片识别且只识别数字
snapshotRegion("/var/touchelf/1.bmp",100,100,200,200);
snapshotRegion("/var/touchelf/2.bmp",100,100,200,200);
snapshotRegion("/var/touchelf/3.bmp",100,100,200,200);
code = localOcrTextEx("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"eng", -- 语言类型为英文
"0123456789", -- 白名单为空
"/var/touchelf/1.bmp", --待合并的第一个图片
"/var/touchelf/2.bmp", -- 待合并的第二个图片
"/var/touchelf/3.bmp"); -- 待合并的第三个图片
if code == "" then
notifyMessage("识别失败");
else
notifyMessage(string.format("识别成功: %s", code));
end
当需要识别的内容非常小识别不准确时(如下图的等级)可尝试下面方法
function main()
f = "/var/touchelf/1.jpg" --截图路径
snapshotRegion(f, 245,520, 269,538,400) --截等级显示的范围,最后一个参数400为图片放大4倍
imageFilter(f,{0xF8D268}, 80) -- 取字体的颜色将图片二值化
code = localOcrTextEx("/var/touchelf/tessdata", "eng", "", f) --识别图片内容
logDebug(code)
end
放大并二值化后的图片.更有利准确识别