wxocr/README.MD
golangboy 3909467809 doc
2025-03-25 19:22:46 +08:00

160 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WeChat OCR API Docker
基于微信OCR引擎的Docker化REST API服务。
[English](README_EN.MD) | 中文
## 概述
本项目将优秀的[wechat-ocr](https://github.com/swigger/wechat-ocr)项目中的微信OCR功能包装成一个简单的REST API服务可以使用Docker轻松部署。它允许您利用微信强大的OCR功能对图像进行文字识别。
## ⚠️ 警告
**这是一个仅用于学习和交流目的的开源项目。请勿将其用于商业活动。用户对因不当使用本项目而导致的任何后果负有全部责任。**
**版权声明:** 本项目仅是对现有开源项目的容器化。如果您认为本仓库侵犯了您的版权或知识产权,请立即联系仓库所有者,仓库将会被迅速删除。我们尊重知识产权,无意侵犯任何权利。
## 致谢
本项目的实现离不开[swigger](https://github.com/swigger)及其[wechat-ocr](https://github.com/swigger/wechat-ocr)项目的工作。他们在逆向工程和创建微信OCR功能可用接口方面的努力构成了本服务的基础。
## 快速开始
### 使用Docker
```bash
# 拉取镜像
docker pull golangboyme/wxocr
# 运行容器
docker run -d -p 5000:5000 --name wechat-ocr-api golangboyme/wxocr
```
### API使用
`/ocr`发送POST请求JSON负载中包含您的base64编码图像
```bash
curl -X POST http://localhost:5000/ocr \
-H "Content-Type: application/json" \
-d '{"image": "BASE64编码的图像数据"}'
```
#### 示例响应
```json
{
"errcode": 0,
"height": 72,
"width": 410,
"imgpath": "temp/5726fe7b-25d6-43a6-a50d-35b5f668fbb6.png",
"ocr_response": [
{
"text": "aacss",
"left": 80.63632202148438,
"top": 29.634929656982422,
"right": 236.47093200683594,
"bottom": 55.28932189941406,
"rate": 0.9997046589851379
},
{
"text": "xxzsa",
"left": 312.625,
"top": 30.75,
"right": 395.265625,
"bottom": 55.09375,
"rate": 0.997739315032959
}
]
}
```
### Python客户端示例
这是一个简单的Python客户端用于使用OCR API
```python
import requests
import base64
import os
def ocr_recognize(image_path=None, image_url=None, api_url="http://localhost:5000/ocr"):
"""
将图像发送到OCR API服务并获取识别结果。
使用image_path或image_url需要提供其中一个
"""
# 获取图像数据
if image_path:
if not os.path.exists(image_path):
print(f"错误:未找到本地图像:{image_path}")
return
with open(image_path, "rb") as image_file:
img_data = image_file.read()
elif image_url:
try:
response = requests.get(image_url)
response.raise_for_status()
img_data = response.content
except Exception as e:
print(f"下载图像失败:{str(e)}")
return
else:
print("请提供image_path或image_url")
return
# 将图像转换为base64
base64_image = base64.b64encode(img_data).decode('utf-8')
# 发送请求到API
try:
response = requests.post(api_url, json={"image": base64_image})
response.raise_for_status()
return response.json()
except Exception as e:
print(f"API请求失败{str(e)}")
return None
# 使用示例
if __name__ == "__main__":
# 本地图像示例
result = ocr_recognize(image_path="ocrtest.png")
if result:
print(result)
# URL图像示例取消注释以使用
# result = ocr_recognize(image_url="https://example.com/image.png")
```
## 项目结构
- `main.py`处理OCR请求的Flask API服务
- `opt/wechat/wxocr`微信OCR二进制文件
- `opt/wechat/`:微信运行时依赖
## 技术细节
该服务使用Flask应用程序为微信OCR功能提供REST API接口。当提交图像时
1. 解码base64编码的图像
2. 创建临时文件
3. 通过wcocr Python绑定由微信OCR引擎处理图像
4. 以JSON格式返回结果
5. 清理临时文件
## 限制
- 目前仅支持PNG图像如需要可以扩展
- 依赖于可能被微信更新的微信OCR二进制文件
## 许可证
本项目根据MIT许可证提供并附加以下条款
1. 仓库所有者对本软件的任何使用不承担任何责任。
2. 通过使用、复制、修改或分发本软件,您承认使用本软件的任何行为完全由您自行负责。
3. 对本仓库及其内容的任何使用均由用户自行承担风险和责任。
4. 仓库所有者对使用本软件产生的任何后果(法律上的或其他方面的)不承担责任。
## 贡献
欢迎贡献请随时提交Pull Request。