概述
已有文档:pro/ocr.md 介绍了OCR相关方案。本文补充百度云OCR的具体实现。
方案对比
| 方案 | 精度 | 免费 | 离线 | 难度 |
|---|---|---|---|---|
| 百度云OCR | ⭐⭐⭐⭐⭐ | 有免费额度 | ❌ | ⭐⭐⭐ |
| Google ML Kit | ⭐⭐⭐⭐ | ✅ | ✅ | ⭐⭐⭐ |
| Tesseract扩展 | ⭐⭐⭐ | ✅ | ✅ | ⭐⭐ |
百度云OCR
1. 获取API Key
- 访问 https://cloud.baidu.com/doc/OCR/index.html
- 创建应用,获取 API Key 和 Secret Key
- 通用文字识别每月免费1000次
2. 获取Access Token
设 百度API_KEY = "your-api-key"
设 百度SECRET_KEY = "your-secret-key"
当 Screen1.初始化
设 Token_URL = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials" &
"&client_id=" & 百度API_KEY &
"&client_secret=" & 百度SECRET_KEY
调用 Web_Token.执行Get请求(Token_URL)
当 Web_Token.收到文本(网址, 响应码, 响应类型, 响应内容)
设 数据 = 调用 文本.从JSON解析(响应内容)
设 百度Token = 从字典 数据 获取 "access_token"
3. 拍照识别
当 按钮_拍照识别.被点击
调用 Camera1.拍照()
当 Camera1.拍照完成(图片路径)
标签_状态.文本 = "正在识别..."
' 读取图片并转Base64
调用 识别图片(图片路径)
定义 识别图片(图片路径)
' 使用FileTools扩展读取图片为Base64
设 Base64数据 = 调用 FileTools1.文件转Base64(图片路径)
设 URL编码数据 = 调用 Web1.网址编码(Base64数据)
设 OCR_URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" & 百度Token
设 请求体 = "image=" & URL编码数据
设 Web_OCR.请求头 = ["Content-Type: application/x-www-form-urlencoded"]
调用 Web_OCR.执行Post文本请求(OCR_URL, 请求体, "UTF-8")
当 Web_OCR.收到文本(网址, 响应码, 响应类型, 响应内容)
设 数据 = 调用 文本.从JSON解析(响应内容)
设 词列表 = 从字典 数据 获取 "words_result"
设 全部文本 = ""
设 i = 1
当 i ≤ 列表长度(词列表)
设 行 = 从字典 列表第i项(词列表) 获取 "words"
设 全部文本 = 全部文本 & 行 & "\n"
设 i = i + 1
标签_识别结果.文本 = 全部文本
Google ML Kit OCR
使用扩展
ML Kit扩展提供本地(离线)文字识别,无需网络:
当 按钮_识别.被点击
调用 Camera1.拍照()
当 Camera1.拍照完成(图片路径)
调用 MLKitOCR1.识别文字(图片路径, "zh") ' 中文
当 MLKitOCR1.识别完成(文字, 置信度)
标签_结果.文本 = 文字
标签_置信度.文本 = "置信度:" & 数学.保留小数(置信度 * 100, 1) & "%"
实战案例:名片识别
当 Camera1.拍照完成(图片路径)
设 Base64 = 调用 FileTools1.文件转Base64(图片路径)
' 调用百度名片识别API
设 URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/business_card?access_token=" & 百度Token
调用 Web_OCR.执行Post文本请求(URL, "image=" & Base64, "UTF-8")
当 Web_OCR.收到文本(网址, 响应码, 响应类型, 响应内容)
设 数据 = 调用 文本.从JSON解析(响应内容)
设 结果 = 从字典 数据 获取 "words_result"
如果 列表长度(结果) > 0
设 名片 = 列表第1项(结果)
标签_姓名.文本 = 从字典 名片 获取 "NAME" ' 可能为空
标签_公司.文本 = 从字典 名片 获取 "COMPANY"
标签_电话.文本 = 从字典 名片 获取 "MOBILE"
标签_邮箱.文本 = 从字典 名片 获取 "EMAIL"
常见问题
Q1: 百度OCR返回错误码?
| 错误码 | 原因 | 解决 |
|---|---|---|
| 110 | Access Token无效 | 重新获取Token |
| 17 | 每日请求量超限 | 升级套餐或等待次日 |
| 18 | QPS超限 | 降低请求频率 |
| 216201 | 图片为空 | 检查图片路径 |
Q2: 识别结果不准确?
- 确保图片清晰、光线充足
- 文字尽量水平(可先旋转校正)
- 使用高分辨率图片
- 百度云OCR精度比本地识别高
总结
| 方案 | 推荐度 | 适用 |
|---|---|---|
| 百度云OCR | ⭐⭐⭐⭐⭐ | 高精度需求 |
| ML Kit本地 | ⭐⭐⭐⭐ | 离线场景 |
| Tesseract | ⭐⭐⭐ | 简单场景 |
版权声明:MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权,本文档由 ai2claw 🐝 整理。
扫码添加客服咨询