pq / app.py
changxin's picture
Update app.py
e84cb12
import gradio as gr
import pulp
import pandas as pd
import openpyxl
import requests
import os
os.system('pip install paddlepaddle')
os.system('pip install paddleocr')
from paddleocr import PaddleOCR, draw_ocr
from PIL import Image
import torch
import re
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
html_code='''
<iframe src="https://web.powerva.microsoft.com/environments/Default-51a58d6c-4fcf-4b75-8608-d00bf7f244d5/bots/new_bot_830e155fc862429e89683426b31c9bd5/webchat" height="500" frameborder="1" style="width:100%"></iframe>
'''
ht_text='''
<iframe width="800" height="800" frameborder="0" scrolling="no" src="https://dyrscomcn-my.sharepoint.com/personal/huangcaiguang_dyrs_com_cn/_layouts/15/Doc.aspx?sourcedoc={6d3da844-5b54-473b-a32a-08659600d015}&action=embedview&AllowTyping=True&ActiveCell='业绩'!A1&wdInConfigurator=True&wdInConfigurator=True&edesNext=false&ejss=false"></iframe>
'''
demo = gr.Blocks(css='''
#chedan {-webkit-transition-duration: 0.4s; transition-duration: 0.4s; border-radius: 40%}
#chedan:hover {background-color: #4CAF50; color: white;}
#chedan:active {background-color: #3e8e41; box-shadow: 0 5px #666; transform: translateY(4px);}
''')
def fx1(x):
return f"欢迎练习Gradio, {x}!"
def fx2(x,y):
m=pulp.LpProblem()
x=list(map(int,x.split(',')))
t=[pulp.LpVariable('t'+str(i),cat=pulp.LpBinary) for i in range(len(x))]
m+=pulp.lpDot(x,t)
m+=(pulp.lpDot(x,t)==y)
m.solve()
resu={'data':[x[i] for i in range(len(t)) if pulp.value(t[i])]}
return resu
def fx3(x):
df=pd.read_excel(x,header=0,engine='openpyxl')
return df
def fx4(x):
url_s="https://tts.baidu.com/text2audio?tex="+x+"&cuid=baike&lan=ZH&ie=utf-8&ctp=1&pdt=301&vol=9&rate=32&per=0"
return "点击音频文件 [voice]("+url_s+")"
def fx5():
return html_code
def fx6(img, lang):
ocr = PaddleOCR(use_angle_cls=True, lang={'中文':'ch','英文':'en','法文':'fr','德文':'german','韩文':'korean','日文':'japan'}[lang],use_gpu=False)
img_path = img.name
result = ocr.ocr(img_path, cls=True)
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores,
font_path='simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')
return 'result.jpg',list(zip(txts))
def fx7(x,y):
res=re.findall(r'{0}'.format(y),x)
return res
def fx8(x,y,z):
res=re.sub(r'{0}'.format(x),y,z)
return res
def plot(v, a):
g = 9.81
theta = a / 180 * 3.14
tmax = ((2 * v) * np.sin(theta)) / g
timemat = tmax * np.linspace(0, 1, 40)[:, None]
x = (v * timemat) * np.cos(theta)
y = ((v * timemat) * np.sin(theta)) - ((0.5 * g) * (timemat**2))
fig = plt.figure()
plt.scatter(x=x, y=y, marker=".")
plt.xlim(0, 100)
plt.ylim(0, 60)
return fig
def fx9(x):
pd.options.plotting.backend='matplotlib'
plt.close('all')
ax = x.plot(x='数据1',y='数据2',kind='bar',title='chinese word error!', color=["red","green","purple"])
ax.table(cellText=df.values,colLabels=df.columns,loc='bottom',colLoc='center')
return ax.get_figure()
with demo:
gr.Markdown(
"""
# <center> WEB APP测试应用!
<div align=center><img src="https://pbihub.cn/uploads/images/201809/23/44/n6xk1x6UnN.gif" width="405" height="405" /></div>
""")
with gr.Tabs():
with gr.TabItem("测试1"):
text_input = gr.Textbox(placeholder='请输入测试字符串,如"畅心"',label="请输入测试内容",show_label=True)
text_output = gr.Textbox(label="输出结果",show_label=True)
tj_button = gr.Button("提交>>",elem_id="chedan")
with gr.TabItem("凑数"):
val_input = [gr.Textbox(placeholder='请输入凑数序列,如"1,3,5,10,16,54,32,48,6,7"',label="请输入待凑数序列",show_label=True),gr.Number(value=80,label="请输入凑数和值",show_label=True)]
json_output = gr.JSON(label="输出运算结果",show_label=True)
cs_button = gr.Button("开始凑数>>")
with gr.TabItem("文件交互"):
file_input = gr.File(file_count="single",label="请选择需要读取的excel文件",show_label=True)
table_output = gr.Dataframe(label="输出读取的表格数据",show_label=True)
dq_button = gr.Button("开始读取>>")
with gr.TabItem("TTS"):
TS_input = gr.Textbox(placeholder='请输入测试字符串,如"欢迎测试字符串转语音功能模块"',label="请输入测试内容",show_label=True)
audio_output = gr.Markdown(label="点击生成音频文件",show_label=True)
tts_button = gr.Button("开始转换>>")
with gr.TabItem("Power Virtual Agents"):
pva_button = gr.Button("调用机器人对话>>")
pva_output=gr.HTML(label="机器人聊天窗口",show_label=True)
with gr.TabItem("Excel365测试"):
gr.HTML(value=ht_text,label="在线版演示",show_label=True)
with gr.TabItem("OCR识别"):
ocr_input=[gr.Image(type='file', label='请提供你需要识别的照片'),gr.Dropdown(choices=['中文','英文','法文','德文','韩文','日文'], type="value", default='中文', label='请选择需要识别的语言')]
ocr_output=[gr.Image(type='file', label='识别结果'),gr.Dataframe(label="识别信息",show_label=True)]
ocr_button = gr.Button("开始ocr识别")
with gr.TabItem("正则处理"):
with gr.Row():
with gr.Column():
gr.Markdown('<center> 正则匹配')
zz1_input = [gr.Textbox(placeholder='请输入测试字符串,如"畅心语文100,数学666,英语95.7"',label="请输入测试内容"),gr.Textbox(placeholder='请输入正则表达式,如"\d+"',label="请输入正则表达式")]
zz1_output = gr.Dataframe(label="输出正则匹配数据",show_label=True)
zz1_button = gr.Button("开始正则处理>>")
with gr.Column():
gr.Markdown('<center> 正则替换')
zz2_input = [gr.Textbox(placeholder='输入正则表达式,如"\d+"',label="输入正则表达式"),gr.Textbox(placeholder='正则匹配对象替换为啥',label="输入替换为的字符串"),gr.Textbox(placeholder='待替换对象',label="输入原始字符串")]
zz2_output = gr.Textbox(label="输出",show_label=True)
zz2_button = gr.Button("开始正则替换>>")
with gr.TabItem("图表展示1"):
with gr.Row():
with gr.Group():
speed = gr.Slider(1, 30, 25, label="Speed")
angle = gr.Slider(0, 90, 45, label="Angle")
output = gr.Plot()
tb_button = gr.Button("Run")
with gr.Box():
pd_input=gr.Dataframe(headers=['数据1','数据2'],value=[[42,10],[68,15]],datatype='number',label="可编辑数据框",interactive=True)
pd_output=gr.Plot()
pd_button=gr.Button("编辑测试")
tj_button.click(fx1, inputs=text_input, outputs=text_output)
cs_button.click(fx2, inputs=val_input, outputs=json_output,api_name="ghqj")
dq_button.click(fx3, inputs=file_input, outputs=table_output,api_name="df")
tts_button.click(fx4, inputs=TS_input, outputs=audio_output)
pva_button.click(fx5, inputs=[],outputs=pva_output)
ocr_button.click(fx6,inputs=ocr_input,outputs=ocr_output,api_name="ocr")
zz1_button.click(fx7,inputs=zz1_input,outputs=zz1_output,api_name="zzpp")
zz2_button.click(fx8,inputs=zz2_input,outputs=zz2_output,api_name="zzth")
tb_button.click(plot, [speed, angle], output)
pd_button.click(fx9,pd_input,pd_output)
demo.launch(enable_queue=True)