PaddLeOCR
# 项目
gitHub-PaddleOCR (opens new window) 官方文档 (opens new window)
# 调用
把插件放到插件文件夹,打包的时候会一起打
// 作者 教主
//加载插件
rhino.loadDex('PaddLeOCR.apk')
var PaddLeOCR=com.LR.JZ.PaddLeOCR.Main;
//初始化OCR插件
var Err = PaddLeOCR.IniTiaLModeL()
if(Err!=true){
printl("加载PaddLeOCR失败");
}
//文本检测模型 文件名带有Db的文件 数组下标1为param文件 下标2为bin文件
var DbModeL = [
project.getPluginsPath()+"PaddLeOCR_Db.param",
project.getPluginsPath()+"PaddLeOCR_Db.bin"
];
// 文本识别模型 文件名带有Rec的文件 数组下标1为param文件 下标2为bin文件
var RecModeL = [
project.getPluginsPath()+"PaddLeOCR_Rec.param",
project.getPluginsPath()+"PaddLeOCR_Rec.bin"
];
// 生成数据时创建的txt文件 又名: 标签文件 字典文件
var LaBeL = project.getPluginsPath()+"Label.txt"
// 加载模型
var Err = PaddLeOCR.LoadModeL(LaBeL,DbModeL[0],DbModeL[1], RecModeL[0],RecModeL[1], 640, 2, false, "", "")
if (Err != null){
printl("加载模型错误 原因: "+ Err)
}
var bitmap = screen.screenShot(640, 960, 100).getBitmap();
var value=PaddLeOCR.Detect(bitmap,0.45, 0.55);
printl(value);
//这个方法是另外添加的,它可以把图片二值化后再识别,有需要的可以试一试。
// 加载 OCR 插件
rhino.loadDex('PaddLeOCR.apk');
var PaddLeOCR = com.LR.JZ.PaddLeOCR.Main;
// 初始化 OCR 插件
var Err = PaddLeOCR.IniTiaLModeL();
if (Err != true) {
printl("加载PaddLeOCR失败");
}
// 文本检测模型
var DbModeL = [
project.getPluginsPath() + "PaddLeOCR_Db.param",
project.getPluginsPath() + "PaddLeOCR_Db.bin"
];
// 文本识别模型
var RecModeL = [
project.getPluginsPath() + "PaddLeOCR_Rec.param",
project.getPluginsPath() + "PaddLeOCR_Rec.bin"
];
// 标签文件
var LaBeL = project.getPluginsPath() + "Label.txt";
// 加载模型
Err = PaddLeOCR.LoadModeL(LaBeL, DbModeL[0], DbModeL[1], RecModeL[0], RecModeL[1], 640, 2, false, "", "");
if (Err != null) {
printl("加载模型错误 原因: " + Err);
}
// 进行屏幕截图
var bitmap = screen.screenShot(640, 960, 100).getBitmap();
// 引入 Android 和 OpenCV 的类
importPackage(org.opencv.core);
importPackage(org.opencv.imgproc);
importPackage(org.opencv.android);
importClass(android.graphics.Bitmap);
// 将 Bitmap 转换为 OpenCV 的 Mat
var mat = new Mat();
Utils.bitmapToMat(bitmap, mat);
// 进行二值化处理
var binaryMat = new Mat();
Imgproc.threshold(mat, binaryMat, 50, 150, Imgproc.THRESH_BINARY);
// 将二值化后的 Mat 转换回 Bitmap
var binaryBitmap = Bitmap.createBitmap(binaryMat.cols(), binaryMat.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(binaryMat, binaryBitmap);
// 将二值化后的 Bitmap 传递给 OCR 进行文本检测
var value = PaddLeOCR.Detect(binaryBitmap, 0.45, 0.55);
printl(value);
# 封装成模块调用
新建一个“PaddLeOCR.js”文件
/**
* @author 飞云
* @wechat imfeiyun
* @wiki http://aiwork.wiki
* @link http://www.feiyunjs.com
*/
let PaddLeOCR = {
ocr: null,
init: function () {
printl(android.os.Build.SUPPORTED_ABIS);
//加载插件
rhino.loadDex('PaddLeOCR.apk')
this.ocr = com.LR.JZ.PaddLeOCR.Main;
//初始化OCR插件
var Err = this.ocr.IniTiaLModeL()
if (Err != true) {
console.err("加载PaddLeOCR失败");
return false;
}
//文本检测模型 文件名带有Db的文件 数组下标1为param文件 下标2为bin文件
var DbModeL = [
project.getPluginsPath() + "PaddLeOCR_Db.param",
project.getPluginsPath() + "PaddLeOCR_Db.bin"
];
// 文本识别模型 文件名带有Rec的文件 数组下标1为param文件 下标2为bin文件
var RecModeL = [
project.getPluginsPath() + "PaddLeOCR_Rec.param",
project.getPluginsPath() + "PaddLeOCR_Rec.bin"
];
// 生成数据时创建的txt文件 又名: 标签文件 字典文件
var LaBeL = project.getPluginsPath() + "Label.txt"
// 加载模型
var Err = this.ocr.LoadModeL(LaBeL, DbModeL[0], DbModeL[1], RecModeL[0], RecModeL[1], 640, 2, false, "", "")
if (Err != null) {
printl("加载模型错误 原因: " + Err)
return false;
}
return true;
},
tell: function (img) {
if (!this.ocr) return null;
img = img || screen.screenShot(432, 768, 100)
if (!img.isNull()) {
var bitmap = img.getBitmap();
var res = this.ocr.Detect(bitmap, 0.45, 0.55);
let ocrResult = JSON.parse(res)
printl(ocrResult.length);
// for (let item in ocrResult) {
// console.log(ocrResult[item]);
// }
// console.log(ocrResult.getJson())
// 使用普通的 for 循环遍历识别结果
for (let i = 0; i < ocrResult.length; i++) {
let item = ocrResult[i];
// 提取矩形区域坐标 (rect)
let rect = [
{ x: item.X0, y: item.Y0 },
{ x: item.X1, y: item.Y1 },
{ x: item.X2, y: item.Y2 },
{ x: item.X3, y: item.Y3 }
];
// 提取文本标签 (LaBeL)
let label = item.LaBeL;
// 打印结果
console.log("Rect:", rect);
console.log("LaBeL:", label);
}
}
img.recycle();
},
}
调用方式:
// 引用模块
Import("PaddLeOCR.js");
// 初始化
PaddLeOCR.init()
// 识别
PaddLeOCR.tell()
上次更新: 2024/11/03, 18:44:54