3 Star 0 Fork 3

potter-Zhang/AIticle

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
flask_server.py 6.42 KB
一键复制 编辑 原始数据 按行查看 历史
Eumendies 提交于 2024-07-14 21:06 . 修改插入问题
from time import sleep
import erniebot
from flask import Flask, request, jsonify, stream_with_context, send_file
import cv2
import os
from PIL import Image
from paddleocr import PaddleOCR, draw_ocr
import numpy as np
from gevent import pywsgi
from flask_cors import CORS
import hashlib
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 设置请求体最大允许 16MB
CORS(app)
model = PaddleOCR(use_angle_cls=True, debug=False, ocr_version="PP-OCRv4")
def md5sum(file):
m = hashlib.md5()
m.update(file)
ret = m.hexdigest()
return ret
@app.route('/upload', methods=['get', 'post'])
def upload():
username = request.form.get("username")
img = request.files['file']
picname = img.filename
suffix = picname.split(".")[-1]
file = img.read()
md5 = md5sum(file) # 使用md5作为文件名避免文件重复上传
# 创建用户文件夹
imgfile1_path = "./img/" + username + "/"
if not os.path.exists(imgfile1_path):
os.makedirs(imgfile1_path)
img1_path = os.path.join(imgfile1_path, md5) + "." + str(suffix)
if not os.path.exists(img1_path):
file = cv2.imdecode(np.frombuffer(file, np.uint8), cv2.IMREAD_COLOR) # 解码为ndarray
cv2.imwrite(filename=img1_path, img=file)
tempmap = {"path": img1_path}
return jsonify(tempmap)
@app.route('/img/<username>/<pic_name>', methods=["GET"])
def get_img(username, pic_name):
img_path = os.path.join("./img", username, pic_name)
return send_file(img_path)
@app.route('/img/<pic_name>', methods=['GET'])
def get_image(pic_name):
img_path = os.path.join("./img", pic_name)
return send_file(img_path)
@app.route("/ocr", methods=["POST"])
def ocr():
img_path = request.form.get("path")
img_arr = np.array(Image.open(img_path))
results = model.ocr(img_arr)
texts = []
for result in results[0]:
texts.append(result[1][0])
response = {
"texts": texts
}
return response
def set_token(token):
erniebot.api_type = 'aistudio'
erniebot.access_token = token
def generate(response):
for resp in response:
yield resp.get_result()
def get_ernie_response(prompt):
# model_name = 'ernie-3.5'
model_name = 'ernie-4.0'
messages = [{'role': 'user', 'content': prompt}]
response = erniebot.ChatCompletion.create(
model=model_name,
messages=messages,
stream=True,
system="你不需要回答其他信息, 仅返回结果即可"
)
return response
@app.route("/polish", methods=["POST"])
def polish():
prompt = ("你需要根据所给出笔记的场景对笔记进行润色"
"给出的笔记是:{}\n").format(request.form.get("msg"))
response = get_ernie_response(prompt)
return app.response_class(stream_with_context((generate(response))))
@app.route("/abstract", methods=["POST"])
def abstract():
prompt = ("接下来我会给出我的笔记,你需要提炼,缩写我的笔记,尽量精简,要比之前的笔记字数少,"
"你需要将最重要的那些信息使用html标签进行加粗、斜体、加红色等; 最终不需要回答其他信息,返回结果即可."
"给出的笔记是:{}\n").format(request.form.get("msg"))
response = get_ernie_response(prompt)
return app.response_class(stream_with_context(generate(response)))
@app.route("/expand", methods=["POST"])
def expand():
prompt = ("接下来我会给出我的笔记,你需要根据关键信息扩写我的笔记,尽量详细."
"要求: 1.你需要将最重要的那些信息使用html标签进行加粗、斜体、加红色等;"
"2.充分使用多级标题,使用<h1>, <h2>, <h3>等标签;"
"3.最终不需要回答其他信息,返回结果即可.给出的笔记是: {}").format(request.form.get("msg"))
response = get_ernie_response(prompt)
return app.response_class(stream_with_context(generate(response)))
@app.route("/segment", methods=["POST"])
def segment():
prompt = ("接下来我会给出一篇笔记, 请将其根据内容使用各级标题进行合理的分段.\n "
"要求:1. 你需要将最重要的那些信息使用html标签进行加粗、斜体、加红色等;"
"2.充分使用多级标题, 使用<h1>, <h2>, <h3>等标签;"
"3.最终不需要回答其他信息,返回结果即可。给出的笔记是:{}\n").format(request.form.get("msg"))
response = get_ernie_response(prompt)
return app.response_class(stream_with_context(generate(response)))
@app.route("/translate", methods=["POST"])
def translate():
prompt = "对下面这段话进行翻译,如果是中文则翻译为英文,如果是英文则翻译为中文,仅回答结果即可不需要其他信息: {}".format(
request.form.get("msg"))
response = get_ernie_response(prompt)
return app.response_class(stream_with_context(generate(response)))
@app.route("/table", methods=["POST"])
def generateTable():
prompt = ("请根据我的笔记,生成结构清晰的html格式的表格."
"要求:1、保持表格的清晰排列和标签"
"2、根据笔记的内容主旨生成简短扼要的表格标题"
"3、表格内容能够保持和表格列标题一致时,用一个表格概括;否则可以用多个表格概括,但必须都要保持表格的格式"
"4、使用html的语法创建表格"
"5、最终不需要回答其他信息, 也不要返回```html代码块, 仅返回<table>部分的html代码即可" +
"给出的笔记是: {}").format(request.form.get("msg"))
response = get_ernie_response(prompt)
return app.response_class(stream_with_context(generate(response)))
@app.route("/format", methods=["POST"])
def formatText():
prompt = ("根据以下笔记的内容对其使用html标签进行排版,"
"可以使用<b>、<p>、<i>、<u>、<mark>、<span>、<ul>、<li>、<h1>到<h4>等标签,"
"可以使用text-align、color等style,仅回答结果即可,不要给出其他内容,给出的笔记是:{}").format(request.form.get("msg"))
response = get_ernie_response(prompt)
return app.response_class(stream_with_context(generate(response)))
if __name__ == "__main__":
set_token("7587cca675d824db4ec5d7fe22c07bf5dac59a45")
# server = pywsgi.WSGIServer(("127.0.0.1", 5000), app)
server = pywsgi.WSGIServer(("0.0.0.0", 5000), app)
server.serve_forever()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/little__prince/aiticle.git
git@gitee.com:little__prince/aiticle.git
little__prince
aiticle
AIticle
master

搜索帮助