Skip to main content

PPOCR-ONNX使用说明

tip
  • 本OCR产品是免费的
  • 本产品基于PaddleOCR开发,支持PPOCR-v4和PPOCR-v5模型,目前可以在Windows上运行
  • 本产品目的是对外提供ocr接口,可以给EC 安卓,iOS USB,iOS 脱机版,鸿蒙Next进行接口调用,并返回OCR结果

下载软件

  • 进入软件下载区的任何一个网盘进行下载,点击软件下载区
  • 下载路径在网盘的 Ocr资源文件夹中ppocr-windows-x64开头的zip文件,下载完成解压即可,解压路径不要有中文和特殊字符

软件使用

  • 双击 ppocr-monitor.exe 开始,这个程序是用来守护ocr程序的,如果ocr退出,会被主动拉起
  • 软件打开后,底部会提示端口和服务器启动状态
  • 系统采用OCR实例池的模式,提高效率和并发量
    • paddleOcrOnnxV5实例最小数量 代表最小实例化的v5模型数量
    • paddleOcrOnnxV5实例最大数量 代表实例化v5上限
    • v4实例数量含义也是类似
    • 每秒限流请请求,代表能够承接的请求数量,因为OCR需要时间,根据实际情况自己设定
    • 每个OCR实例占用CPU数量,越大代表OCR速度越快,CPU占用越高,建议 CPU数量*最大实例 不要超过你的电脑CPU,否则会变成100%CPU占用
    • 设置后,进行保存然后重启软件
  • 重建OCR池: 代表释放之前的OCR实例,重新生成,这个操作会释放之前的内存占用
  • 启动时隐藏界面,代表启动的时候在后台运行,隐藏到托盘

接口调用

  • 系统自带了http调用接口,默认端口是 9022

ocrOnnxFile 请求例子

  • 这里以EC 安卓为例子,iOS和鸿蒙Next是一样的方式请求


function test_http_ppocr() {
if (!startEnv()) {
loge("自动化启动失败,结束脚本")
exit()
}
if (!image.requestScreenCapture(10000, 0)) {
loge("申请截图权限失败,检查是否开启后台弹出,悬浮框等权限")
exit()
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)

for (let i = 0; i < 1; i++) {
let img = image.captureFullScreenEx()
if (!img) {
loge("截图失败")
sleep(1000)
continue
}
// 使用的识别模型 paddleOcrOnnxV5 代表PPOCR-V5 , paddleOcrOnnxV4 代表 PPOCR-V4
let ocrType = "paddleOcrOnnxV5";
// padding 图像外接白框,用于提升识别率,文字框没有正确框住所有文字时,增加此值。默认 10。
let padding = 50;
// maxSideLen 如果输入图像的最大边大于max_side_len,则会按宽高比,将最大边缩放到max_side_len。默认为 0
let maxSideLen = 0;
try {

let url = `http://192.168.2.19:9022/devapi/ocrOnnxFile?ocrType=${ocrType}&padding=${padding}&maxSideLen=${maxSideLen}`
console.log(`request url ${url}`)
// 保存文件到 /sdcard/tb.png
image.saveTo(img, "/sdcard/tb.png")
let file = {"file": "/sdcard/tb.png"}
console.time(1)
let result = http.httpPost(url, {}, file, 20 * 1000, {})
logd("请求耗时: {} ms", console.timeEnd(1))
if (!result) {
logw("未识别到结果")
sleep(1000)
continue
}
logd("ocr结果-> " + result)
result = JSON.parse(result).data;
for (let i = 0; i < result.length; i++) {
let value = result[i]
logd("文字 : " + value.label+ " confidence: "+value.confidence + " x: " + value.x + " y: " + value.y + " width: " + value.width + " height: " + value.height)
}
sleep(1000)
} catch (e) {
logd(e)
} finally {
image.recycle(img)
}
}
}

test_http_ppocr()

ocrOnnxBase64 请求例子


function test_http_ppocr_base() {

if (!startEnv()) {
loge("自动化启动失败,结束脚本")
exit()
}
if (!image.requestScreenCapture(10000, 0)) {
loge("申请截图权限失败,检查是否开启后台弹出,悬浮框等权限")
exit()
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)

for (let i = 0; i < 1; i++) {
let img = image.captureFullScreenEx()
if (!img) {
loge("截图失败")
sleep(1000)
continue
}
// 使用的识别模型 paddleOcrOnnxV5 代表PPOCR-V5 , paddleOcrOnnxV4 代表 PPOCR-V4
let ocrType = "paddleOcrOnnxV5";
// padding 图像外接白框,用于提升识别率,文字框没有正确框住所有文字时,增加此值。默认 10。
let padding = 50;
// maxSideLen 如果输入图像的最大边大于max_side_len,则会按宽高比,将最大边缩放到max_side_len。默认为 0
let maxSideLen = 0;
try {

let url = `http://192.168.2.19:9022/devapi/ocrOnnxBase64`
console.log(`request url ${url}`)
let base = image.toBase64(img)
let data = {
"ocrType":ocrType,
"padding":padding,
"maxSideLen":maxSideLen,
"data":base,
}
console.time(1)
let result = http.postJSON(url, data, 20 * 1000, {})
logd("请求耗时: {} ms", console.timeEnd(1))
if (!result) {
logw("未识别到结果")
sleep(1000)
continue
}
logd("ocr结果-> " + result)
result = JSON.parse(result).data;
for (let i = 0; i < result.length; i++) {
let value = result[i]
logd("文字 : " + value.label+ " confidence: "+value.confidence + " x: " + value.x + " y: " + value.y + " width: " + value.width + " height: " + value.height)
}
sleep(1000)
} catch (e) {
logd(e)
} finally {
image.recycle(img)
}
}
}
test_http_ppocr_base();

常见问题

  • ppocr打开闪退
    • 到网盘下载vc类库安装,然后重启电脑
  • 识别速度慢
    • 将每个OCR占用CPU实例放大,缩小实例数量,获得最快的 识别速度
  • 内存占用高
    • 减少OCR实例数量,或者 加内存 ,加CPU