EasyclickOCR模块的正确用法
一、核心函数(官方明确支持)
| 函数 | 版本要求 | 说明 | 参数示例 |
|---|---|---|---|
ocr.newOcr() |
EC 9.17.0+ | 实例化OCR对象 (9.17+版本必须用它初始化,而非全局ocr) |
let o = ocr.newOcr();(文档示例) |
o.initOcr(config) |
EC 9.17.0+ | 初始化OCR引擎(需传入引擎类型及参数) | o.initOcr({"type": "paddleOcrOnnxV4", "modelsDir": "", "numThread": 2}) |
o.ocrImage(img) |
EC 8.2.0+ | 识别Image对象 (输入为image类型,来自截图/裁剪) |
o.ocrImage(targetImg, 20000, {}) |
o.ocrBitmap(bitmap) |
EC 5.17.0+ | 识别Bitmap对象 (输入为bitmap类型,底层Android Bitmap) |
o.ocrBitmap(bitmap, 20000, {"token": "xxx"}) |
o.releaseAll() |
EC 5.17.0+ | 释放OCR实例资源 | o.releaseAll()(文档示例) |
o.getErrorMsg() |
EC 5.17.0+ | 获取错误信息 | loge("错误:" + o.getErrorMsg()) |
二、关键文档细节
- 9.17+版本必须用
ocr.newOcr()初始化
文档原文:"ocr.newOcr 实例一个ocr 初始化一个ocr实例 适配版本 EC安卓 9.17.0+",并给出示例:
javascript
function main() {
let o = ocr.newOcr(); // 实例化OCR对象(9.17+必须)
// 这里做初始化和识别
o.releaseAll() // 释放资源
}
- 支持Image和Bitmap双输入
- Image输入 :用
o.ocrImage(img, timeout, extra),参数为image对象(来自images.captureScreen()、images.read()等)。 - Bitmap输入 :用
o.ocrBitmap(bitmap, timeout, extra),参数为bitmap对象(Android原生Bitmap,可通过images.getBitmap(img)转换)。
文档原文:"识别有两种图像方式 image 和bitmap""ocr.ocrBitmap 识别文字 对Bitmap进行OCR",并返回包含label(文字)、confidence(准确度)、x/y/width/height(坐标)的JSON。
- Image输入 :用
三、正确代码示例
1. 9.17+版本:用ocr.newOcr()初始化+PaddleOCR ONNX V4识别
javascript
// 脚本停止回调(释放资源)
setStopCallback(function () {
logi("释放OCR实例")
if (paddleOcrOnnx) {
paddleOcrOnnx.releaseAll() // 释放实例资源
paddleOcrOnnx = null
}
})
// 初始化环境(申请截图权限)
function initEnv() {
if (!startEnv()) exit()
if (!image.requestScreenCapture(10000, 0)) {
loge("截图权限失败")
exit()
}
sleep(1000) // 等待权限生效
}
// 初始化PaddleOCR ONNX V4(用newOcr实例化)
function initPaddleOcr() {
// 1. 实例化OCR对象(9.17+必须)
let paddleOcrOnnx = ocr.newOcr()
// 2. 配置引擎参数(文档示例)
let paddleOnnxMap = {
"type": "paddleOcrOnnxV4", // 引擎类型(文档支持)
"modelsDir": "", // 模型目录(可选)
"numThread": 2, // 线程数
"padding": 60, // 白边
"maxSideLen": 960 // 最大边长
}
// 3. 初始化引擎
if (!paddleOcrOnnx.initOcr(paddleOnnxMap)) {
loge("OCR初始化失败:" + paddleOcrOnnx.getErrorMsg())
exit()
}
return paddleOcrOnnx
}
// OCR识别(用Image输入)
function ocrWithImage(ocrInstance) {
// 截图(生成Image对象)
let img = image.captureFullScreenEx() // 文档支持的截图函数
if (!img) {
loge("截图失败")
return
}
// 识别Image对象(文档函数:ocrImage)
let result = ocrInstance.ocrImage(img, 20 * 1000, {}) // 超时20秒
if (result) {
logd("OCR结果(Image输入):" + JSON.stringify(result))
// 解析结果(文档格式:label/confidence/x/y/width/height)
for (let i = 0; i < result.length; i++) {
let item = result[i]
logd(`文字:${item.label} 准确度:${item.confidence} 位置:${item.x},${item.y},${item.width},${item.height}`)
}
}
image.recycle(img) // 回收Image资源
}
// OCR识别(用Bitmap输入)
function ocrWithBitmap(ocrInstance) {
// 截图并转换为Bitmap(文档支持)
let img = image.captureFullScreenEx()
let bitmap = images.getBitmap(img) // 转换为Bitmap对象
image.recycle(img) // 回收Image资源
// 识别Bitmap对象(文档函数:ocrBitmap)
let result = ocrInstance.ocrBitmap(bitmap, 20 * 1000, {"token": "xxx"})
if (result) {
logd("OCR结果(Bitmap输入):" + JSON.stringify(result))
}
images.recycleBitmap(bitmap) // 回收Bitmap资源
}
// 主函数
function main() {
initEnv()
// 1. 用newOcr实例化(9.17+必须)
let paddleOcrOnnx = initPaddleOcr()
// 2. 分别用Image和Bitmap输入识别
ocrWithImage(paddleOcrOnnx)
ocrWithBitmap(paddleOcrOnnx)
// 3. 释放资源(setStopCallback也会处理)
paddleOcrOnnx.releaseAll()
}
main()
四、总结
- 9.17+版本 :必须用
ocr.newOcr()实例化OCR对象,再用o.initOcr()初始化引擎。 - 输入支持 :同时支持
image(高层封装)和bitmap(底层Android Bitmap)两种输入,分别对应o.ocrImage()和o.ocrBitmap()。 - 资源管理 :每个实例需用
o.releaseAll()释放,脚本停止时用setStopCallback兜底。