使用百度飞桨PaddleOCR进行OCR识别

1、代码及文档

代码:https://github.com/PaddlePaddle/PaddleOCR?tab=readme-ov-file

介绍文档:https://paddlepaddle.github.io/PaddleOCR/ppocr/overview.html

2、依赖安装

在使用过程中需要安装库,可以依据代码运行过程中的提示安装。我使用的为python3.7,安装库为:
在这里插入图片描述

3、poppler for PDF OCR

我主要使用图片OCR以及PDF转DOCX文件,后者需要poppler,我使用的系统为windows.在此处进行下载:
https://github.com/oschwartz10612/poppler-windows/releases/tag/v24.07.0-0
解压后需要将poppler的bin路径加到系统环境变量path中

4、图像ocr代码样例:

from paddleocr import PaddleOCR, draw_ocr

# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory
img_path = './doc/imgs_en/254.jpg'
result = ocr.ocr(img_path, cls
<think>我们正在使用AutoX.js进行安卓自动化操作,并希望集成百度飞桨PaddleOCR进行文字识别。主要步骤包括: 1. 使用AutoX.js进行屏幕截图。 2. 将截图转换为Base64编码或保存为文件,以便发送给PaddleOCR API。 3. 调用PaddleOCR的API(通常为HTTP POST请求)进行文字识别。 4. 处理返回的识别结果。 注意:百度飞桨PaddleOCR提供了公开的API,但通常需要申请API Key或者使用自己搭建的服务。这里假设我们使用百度提供的通用OCR接口或者自己搭建的PaddleOCR服务。 ### 步骤1:使用AutoX.js截图 AutoX.js提供了截图函数`captureScreen`,可以截取当前屏幕并保存为图片文件。 ```javascript // 截图并保存到指定路径 let imgPath = "/sdcard/autoxjs/screenshot.png"; captureScreen(imgPath); ``` ### 步骤2:将图片转换为Base64编码 PaddleOCR的API通常要求图片以Base64编码的形式在JSON中传递。因此,我们需要将截图文件转换为Base64字符串。 ```javascript // 读取图片文件并转换为Base64 let imgFile = open(imgPath, "rb"); let imgBytes = imgFile.readBytes(); imgFile.close(); let base64Data = images.toBase64(imgBytes, "png"); ``` ### 步骤3:调用PaddleOCR API 假设我们使用百度飞桨PaddleOCR的通用API(需要申请API Key)或者自己部署的服务。这里以百度通用文字识别(高精度版)的API为例(需要替换API Key和Secret Key)。但请注意,百度通用OCR的免费额度有限,且需要注册百度智能云账号。 然而,根据引用[^1]中提到的微信小程序调用飞桨模型的例子,我们可以参考其发送POST请求的方式。不过,PaddleOCR也有公开的HTTP服务部署方式,我们可以自己部署或者使用第三方服务。 这里我们假设已经有一个PaddleOCR的API接口URL(比如自己部署的),它接受base64编码的图片,并返回识别结果。 ```javascript // 设置API地址和参数 let API_URL = "http://your_paddle_ocr_service/predict/ocr_system"; // 替换为实际的OCR服务地址 // 构造请求数据 let data = { image: base64Data // 可能还有其他参数,如image_type(BASE64)等,根据API文档调整 }; // 发送POST请求 let res = http.post(API_URL, { headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); // 检查响应 if (res.statusCode == 200) { let result = res.body.json(); // 处理识别结果 // 通常返回的是一个包含文本区域和识别文本的列表 console.log("识别结果:", result); } else { console.error("请求失败:", res.statusMessage); } ``` ### 步骤4:处理识别结果 PaddleOCR返回的结果通常是一个包含多个文本区域的列表,每个区域包含文本内容和位置信息。我们可以将识别到的文本合并或按需处理。 ```javascript if (result && result.data) { let texts = result.data.map(item => item.text); let combinedText = texts.join("\n"); // 用换行符连接所有文本 console.log("识别到的文本:\n" + combinedText); // 可以将结果保存或做其他处理 } ``` ### 完整代码示例 以下是一个完整的AutoX.js脚本示例,实现了截图、转换Base64、调用OCR API并输出识别结果的功能。 ```javascript // 截图 let imgPath = "/sdcard/autoxjs/screenshot.png"; captureScreen(imgPath); // 读取图片并转换为Base64 let imgFile = open(imgPath, "rb"); let imgBytes = imgFile.readBytes(); imgFile.close(); let base64Data = images.toBase64(imgBytes, "png"); // 设置OCR API地址(这里需要替换成实际的API地址) let API_URL = "http://your_paddle_ocr_service/predict/ocr_system"; // 构造请求数据 let data = { image: base64Data }; // 发送请求 let res = http.post(API_URL, { headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); // 处理响应 if (res.statusCode == 200) { let result = res.body.json(); if (result && result.data) { let texts = result.data.map(item => item.text); let combinedText = texts.join("\n"); toastLog("识别结果:\n" + combinedText); } else { toastLog("未识别到文字"); } } else { toastLog("请求失败: " + res.statusCode); } ``` ### 注意事项 1. **API地址**:上述代码中的`API_URL`需要替换为实际的PaddleOCR服务地址。如果使用百度智能云的OCR服务,则需要按照其API文档构造请求(通常需要access token)。 2. **Base64编码**:注意去掉Base64编码中的头部(如`data:image/png;base64,`),具体取决于API的要求。 3. **权限**:AutoX.js需要获取屏幕截图权限和网络权限。 4. **错误处理**:实际使用中应增加更完善的错误处理。 ### 参考引用 [^1]: 使用微信小程序调用飞桨PaddleX平台自行训练的模型——微信小程序用训练的牡丹花模型Demo测试。sendToPaddle函数:向指定的API_URL发送POST请求,携带图片的base64编码和其他必要的信息。请求成功后,处理返回的结果,将类别名称进行处理,移除数字和空格,并将结果存储到本地存储中。 §§相关问题§§ 1. 如何申请百度OCR的API Key? 2. 如何自己搭建PaddleOCR服务? 3. AutoX.js中如何处理截图权限问题? 4. 如何优化OCR识别的准确率?</think>### AutoX.js截图与PaddleOCR文字识别集成方案 #### 一、实现原理 1. **截图处理**:使用AutoX.js的`captureScreen()`获取屏幕截图 2. **图像编码**:将截图转换为Base64格式(PaddleOCR API要求的输入格式) 3. **API调用**:通过HTTP POST请求发送到PaddleOCR服务 4. **结果解析**:提取并处理返回的OCR识别结果 #### 二、完整实现代码 ```javascript // 1. 截图并保存 let imgPath = "/sdcard/ocr_temp.png"; captureScreen(imgPath); // 2. 转换为Base64 let imgFile = open(imgPath, "rb"); let imgBytes = imgFile.readBytes(); imgFile.close(); let base64Data = images.toBase64(imgBytes, "png"); // 3. 调用PaddleOCR API (示例URL,需替换实际地址) const API_URL = "https://your-paddleocr-domain.com/predict/ocr_system"; // 构造请求数据 let data = { images: [base64Data], det_model_dir: "", // 根据实际API参数调整 rec_model_dir: "" }; // 4. 发送OCR请求 let res = http.post(API_URL, { headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); // 5. 处理结果 if (res.statusCode == 200) { let result = res.body.json(); if (result.results) { let textResults = result.results[0].map(item => item.text); console.log("识别结果:", textResults.join("\n")); // 示例:在屏幕上显示识别结果 toastLog("识别成功!共发现 " + textResults.length + " 个文本"); textResults.forEach((text, i) => { console.log(i + 1 + ": " + text); }); } else { toastLog("未识别到文字"); } } else { toastLog("OCR请求失败: " + res.statusMessage); } ``` #### 三、关键步骤说明 1. **截图配置**: ```javascript // 设置截图区域(可选) setScreenMetrics(1080, 2340); // 根据设备分辨率设置 captureScreen("/sdcard/custom_area.png", [100, 200, 800, 1000]); // [x1,y1,x2,y2] ``` 2. **Base64处理**: - 使用`images.toBase64()`转换时需要指定格式(PNG/JPEG) - 若API需要URL编码: ```javascript let encodedData = encodeURIComponent(base64Data); ``` 3. **PaddleOCR API参数**: | 参数 | 说明 | 示例值 | |------|------|--------| | `visualization` | 是否返回可视化结果 | false | | `box_thresh` | 文本框阈值 | 0.6 | | `text_thresh` | 文本识别阈值 | 0.5 | 4. **结果解析**: ```javascript // 典型返回结构 { "results": [ [ {"text": "Hello", "confidence": 0.98}, {"text": "World", "confidence": 0.95} ] ] } ``` #### 四、优化建议 1. **图像预处理**(提升识别率): ```javascript // 转换为灰度图 let grayImg = images.grayscale(images.read(imgPath)); // 二值化处理 let binaryImg = images.threshold(grayImg, 100, 255, "BINARY"); binaryImg.saveTo("/sdcard/processed.png"); ``` 2. **多区域识别**: ```javascript // 只识别特定区域 let roiImg = images.clip(images.read(imgPath), 50, 100, 300, 200); ``` 3. **错误处理增强**: ```javascript try { // OCR请求代码 } catch (e) { console.error("OCR异常: " + e); // 重试机制 if(retryCount < 3) { retryCount++; sleep(2000); // 重新执行 } } ``` #### 五、部署注意事项 1. **PaddleOCR服务选择**: - 官方Demo服务:`https://www.paddlepaddle.org.cn/hub/scene/ocr` - 自建服务:使用Docker部署 ```bash docker pull paddlepaddle/paddle:latest-gpu docker run -p 8866:8866 paddlepaddle/paddleocr ``` 2. **AutoX.js权限配置**: ```javascript // 在脚本开头申请权限 auto.waitFor(); requestScreenCapture(false); // 无弹窗申请截图权限 ``` 3. **性能优化**: - 降低截图分辨率:`setScreenMetrics(720, 1280)` - 使用JPEG格式:`images.toBase64(imgBytes, "jpg", 70)` // 70%质量 > 参考实现:类似微信小程序调用飞桨模型时,通过Base64编码传输图像数据并处理返回结果[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wavehaha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值