dr_py/test/flaskOcrDz.py
2023-04-23 21:04:12 +08:00

148 lines
4.3 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : flaskOcrDz.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2021/11/1
import json
from flask import Flask, jsonify, request,Response
import requests
import ddddocr
ocr = ddddocr.DdddOcr()
app = Flask(__name__)
app.config["JSON_AS_ASCII"] = False # jsonify返回的中文正常显示
@app.route("/",methods=['GET'])
def index():
return '欢迎使用简单验证码文字识别,海阔视界道长专用'
def hexStringTobytes(str):
str = str.replace(" ", "")
print(str)
return bytes.fromhex(str)
def bytesToHexString(bs):
return ''.join(['%02X ' % b for b in bs])
class LocalOcr:
def __init__(self,file=None,url='http://127.0.0.1:10000'):
self.file = file
self.url = url
self.yzm = self.yzm_ocr(0)
def read(self):
return self.yzm
def yzm_ocr(self,count=0):
try:
r = requests.post(self.url, data=self.file,timeout=(0.5,2))
yzm = r.text
return yzm
except:
if count < 3:
count += 1
return self.yzm_ocr(count)
else:
return ""
def ocr2(hex):
if type(hex) == list:
hex = ''.join(hex)
img_bytes = hexStringTobytes(hex)
# print(img_bytes)
# with open('1.png','wb+') as f:
# f.write(img_bytes)
dm_url = 'http://dm.mudery.com:10000'
im_ocr = LocalOcr(img_bytes, dm_url)
yzm = im_ocr.read()
ret = {'msg': 'ok','ret':yzm,'code':0,'detail':'验证码识别成功'}
print(ret)
return jsonify(ret)
def docr(hex):
if type(hex) == list:
hex = ''.join(hex)
img_bytes = hexStringTobytes(hex)
try:
img_str = img_bytes.decode("latin1")
if img_str.find('html') > -1:
ret = {'msg': '拜托,我收到你传过来的数据是个网页而不是图片,麻烦解密后把图片的hex给我', 'ret': img_str[:500], 'code': -1, 'detail': '图片识别失败'}
return jsonify(ret)
else:
res = ocr.classification(img_bytes)
ret = {'msg': 'ok', 'ret': res, 'code': 0, 'detail': '图片识别成功'}
# print(ret)
return jsonify(ret)
except Exception as e:
# print(f'{e}')
ret = {'msg': 'error', 'ret': f'{e}', 'code': -2, 'detail': '发生了意外的错误'}
return ret
@app.route("/api/ocr",methods=['GET', 'POST'])
def ocr_fast():
args = {}
try:
ctp = request.content_type
if request.method == 'POST':
if ctp.find('application/json') > -1:
try:
args = request.json
except Exception as e:
# args = request.get_data(as_text=True)
args = {}
else:
args = request.form
elif request.method == 'GET':
args = request.args
if not args.get('hex'):
return '缺少必传参数:hex!'
except Exception as e:
return jsonify({'msg':'非法调用','code':'-1'})
# print(args.get('hex'))
# return ocr2(args.get('hex'))
return docr(args.get('hex'))
@app.route("/api/hex2img",methods=['GET'])
def ocr_hex2img():
try:
args = request.args
if not args.get('hex'):
return '缺少必传参数:hex!'
except Exception as e:
return jsonify({'msg':'非法调用','code':'-1'})
# print(args.get('hex'))
# return ocr2(args.get('hex'))
hex = args.get('hex')
if type(hex) == list:
hex = ''.join(hex)
img_bytes = hexStringTobytes(hex)
resp = Response(img_bytes, mimetype='image/jpeg')
return resp
@app.route("/api/ocr_img",methods=['POST'])
def ocr_img_fast():
# print(request.values)
# print(request.files)
# print(request.data)
try:
img_bytes = request.data
ret = ocr.classification(img_bytes)
return ret
# return jsonify({'ret':ret,'code':0,'msg':'识别完毕'})
except Exception as e:
return ''
# return jsonify({'msg':'请求出错','code':-1,'detail':f'{e}'})
def test():
pic = 'yzm1.png'
# pic = '2.png'
with open(pic, 'rb') as f:
img_bytes = f.read()
res = ocr.classification(img_bytes)
print(res)
if __name__ == '__main__':
app.run(host="0.0.0.0", port=9000)
# test()