123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- #!/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()
|