mirror of
https://github.com/netfun2000/ocr_api_server.git
synced 2026-02-27 09:45:12 +08:00
init
This commit is contained in:
17
Dockerfile
Normal file
17
Dockerfile
Normal file
@@ -0,0 +1,17 @@
|
||||
FROM python:3.8-buster
|
||||
|
||||
RUN mkdir /app
|
||||
|
||||
COPY ./*.txt ./*.py ./*.sh ./*.onnx /app/
|
||||
|
||||
|
||||
RUN cd /app \
|
||||
&& python3 -m pip install --upgrade pip -i https://pypi.douban.com/simple/\
|
||||
&& pip3 install --no-cache-dir -r requirements.txt --extra-index-url https://pypi.douban.com/simple/ \
|
||||
&& rm -rf /tmp/* && rm -rf /root/.cache/* \
|
||||
&& sed -i 's#http://deb.debian.org#http://mirrors.aliyun.com/#g' /etc/apt/sources.list\
|
||||
&& apt-get --allow-releaseinfo-change update && apt install libgl1-mesa-glx -y
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ENTRYPOINT ["sh", "entrypoint.sh"]
|
||||
70
README.md
70
README.md
@@ -1,2 +1,72 @@
|
||||
# ocr_api_server
|
||||
使用ddddocr的最简api搭建项目,支持docker
|
||||
|
||||
**建议python版本3.7-3.9 64位**
|
||||
|
||||
再有不好好看文档的我就不管了啊!!!
|
||||
|
||||
# 运行方式
|
||||
|
||||
## 最简单运行方式
|
||||
|
||||
```shell
|
||||
# 安装依赖
|
||||
pip install -r requirements.txt -i https://pypi.douban.com/simple
|
||||
|
||||
# 运行 可选参数如下
|
||||
# --port 9898 指定端口,默认为9898
|
||||
# --ocr 开启ocr模块 默认开启
|
||||
# --old 只有ocr模块开启的情况下生效 默认不开启
|
||||
# --det 开启目标检测模式
|
||||
|
||||
# 最简单运行方式,只开启ocr模块并以新模型计算
|
||||
python ocr_server.py --port 9898 --ocr
|
||||
|
||||
# 开启ocr模块并使用旧模型计算
|
||||
python ocr_server.py --port 9898 --ocr -old
|
||||
|
||||
# 只开启目标检测模块
|
||||
python ocr_server.py --port 9898 --det
|
||||
|
||||
# 同时开启ocr模块以及目标检测模块
|
||||
python ocr_server.py --port 9898 --ocr --det
|
||||
|
||||
# 同时开启ocr模块并使用旧模型计算以及目标检测模块
|
||||
python ocr_server.py --port 9898 --ocr --old --det
|
||||
|
||||
```
|
||||
|
||||
## docker运行方式(目测只能在Linux下部署)
|
||||
|
||||
```shell
|
||||
git clone https://github.com/sml2h3/ocr_api_server.git
|
||||
# docker怎么安装?百度吧
|
||||
|
||||
cd ocr_api_server
|
||||
|
||||
# 修改entrypoint.sh中的参数,具体参数往上翻,默认9898端口,同时开启ocr模块以及目标检测模块
|
||||
|
||||
# 编译镜像
|
||||
docker build -t ocr_server:v1 .
|
||||
|
||||
# 运行镜像
|
||||
docker run -p 9898:9898 -d ocr_server:v1
|
||||
|
||||
```
|
||||
|
||||
# 接口
|
||||
|
||||
**具体请看test_api.py文件**
|
||||
|
||||
```python
|
||||
# 1、测试是否启动成功,可以通过直接GET访问http://{host}:{port}/ping来测试,如果返回pong则启动成功
|
||||
|
||||
# 2、OCR请求
|
||||
|
||||
# resp = requests.post("http://{host}:{port}/ocr", files={'image': image_bytes})
|
||||
|
||||
# 3、目标检测请求
|
||||
|
||||
# resp = requests.post("http://{host}:{port}/det", files={'image': image_bytes})
|
||||
|
||||
```
|
||||
|
||||
3
entrypoint.sh
Normal file
3
entrypoint.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
python3 ocr_server.py --port 9898 --ocr --det
|
||||
84
ocr_server.py
Normal file
84
ocr_server.py
Normal file
@@ -0,0 +1,84 @@
|
||||
# encoding=utf-8
|
||||
import argparse
|
||||
import json
|
||||
|
||||
import ddddocr
|
||||
from flask import Flask, request
|
||||
|
||||
parser = argparse.ArgumentParser(description="使用ddddocr搭建的最简api服务")
|
||||
parser.add_argument("-p", "--port", type=int, default=9898)
|
||||
parser.add_argument("--ocr", action="store_true", help="开启ocr识别")
|
||||
parser.add_argument("--old", action="store_true", help="OCR是否启动旧模型")
|
||||
parser.add_argument("--det", action="store_true", help="开启目标检测")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
class Server(object):
|
||||
def __init__(self, ocr=True, det=False, old=False):
|
||||
self.ocr_option = ocr
|
||||
self.det_option = det
|
||||
self.old_option = old
|
||||
self.ocr = None
|
||||
self.det = None
|
||||
if self.ocr_option:
|
||||
print("ocr模块开启")
|
||||
if self.old_option:
|
||||
print("使用OCR旧模型启动")
|
||||
self.ocr = ddddocr.DdddOcr(old=True)
|
||||
else:
|
||||
print("使用OCR新模型启动,如需要使用旧模型,请额外添加参数 --old开启")
|
||||
self.ocr = ddddocr.DdddOcr()
|
||||
else:
|
||||
print("ocr模块未开启,如需要使用,请使用参数 --ocr开启")
|
||||
if self.det_option:
|
||||
print("目标检测模块开启")
|
||||
self.det = ddddocr.DdddOcr(det=True)
|
||||
else:
|
||||
print("目标检测模块未开启,如需要使用,请使用参数 --det开启")
|
||||
|
||||
|
||||
def classification(self, img: bytes):
|
||||
if self.ocr_option:
|
||||
return self.ocr.classification(img)
|
||||
else:
|
||||
raise Exception("ocr模块未开启")
|
||||
|
||||
def detection(self, img: bytes):
|
||||
if self.det_option:
|
||||
return self.det.detection(img)
|
||||
else:
|
||||
raise Exception("目标检测模块模块未开启")
|
||||
|
||||
|
||||
server = Server(ocr=args.ocr, det=args.det, old=args.old)
|
||||
|
||||
|
||||
@app.route('/ocr', methods=['POST'])
|
||||
def ocr():
|
||||
try:
|
||||
img = request.files.get('image').read()
|
||||
r = server.classification(img)
|
||||
return json.dumps({"status": "200", "result": str(r), "msg": ""})
|
||||
except Exception as e:
|
||||
return json.dumps({"status": "500", "result": "", "msg": str(e)})
|
||||
|
||||
@app.route('/det', methods=['POST'])
|
||||
def det():
|
||||
try:
|
||||
img = request.files.get('image').read()
|
||||
r = server.detection(img)
|
||||
return json.dumps({"status": "200", "result": r, "msg": ""})
|
||||
except Exception as e:
|
||||
return json.dumps({"status": "500", "result": "", "msg": str(e)})
|
||||
|
||||
|
||||
@app.route('/ping', methods=['GET'])
|
||||
def ping():
|
||||
return "pong"
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host="0.0.0.0", port=args.port)
|
||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
ddddocr>=1.3.1
|
||||
flask
|
||||
40
test_api.py
Normal file
40
test_api.py
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/python3.6
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2021 #
|
||||
# @Time : 2022/1/6 23:28
|
||||
# @Author : sml2h3
|
||||
# @Email : sml2h3@gmail.com
|
||||
# @File : test_api.py
|
||||
# @Software: PyCharm
|
||||
import requests
|
||||
|
||||
# ******************OCR识别部分开始******************
|
||||
# 目标检测就把ocr改成det,其他相同
|
||||
api_url = "http://10.0.20.198:9898/ocr"
|
||||
|
||||
# 方式一
|
||||
# file = open(r'test.jpg', 'rb').read()
|
||||
#
|
||||
# resp = requests.post(api_url, files={'image': file})
|
||||
# print(resp.text)
|
||||
|
||||
# 方式二
|
||||
|
||||
# 获取验证码图片
|
||||
# headers = {
|
||||
# "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||||
# "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4195.1 Safari/537.36"
|
||||
# }
|
||||
# resp = requests.get('https://data.gdcic.net/Dop/CheckCode.aspx?codemark=408.15173910730016', headers=headers, verify=False)
|
||||
# captcha_img = resp.content
|
||||
#
|
||||
# 识别
|
||||
# resp = requests.post(api_url, files={'image': captcha_img})
|
||||
# print('验证码结果', resp.text)
|
||||
#
|
||||
# # 保存验证码图片以供验证
|
||||
# with open('captcha.jpg', 'wb') as f:
|
||||
# f.write(captcha_img)
|
||||
|
||||
# ******************OCR识别部分开始******************
|
||||
Reference in New Issue
Block a user