160 lines
4.6 KiB
Markdown
160 lines
4.6 KiB
Markdown
# 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。 |