import base64
import os,sys
import random
import json
import time
import datetime
import string
from flask import render_template, request, redirect, flash, url_for, session
from sqlalchemy import and_
sys.path.insert(0, os.path.abspath('..'))
from daoctor import app
from daoctor.models import *
from daoctor.机器学习.predict import img_predict
from daoctor.机器学习.识农API import 水稻识别
@app.route('/')
def MainPage():
return render_template('main.html', 当前时间=time.time())
@app.route('/backmain',methods=['GET','POST'])
def BackmainPage():
nickname = request.values.get("nickname")
print(nickname)
entry = user.query.filter(user.nickname == nickname).first()
print(entry.nickname)
return render_template('backmain.html',entry=entry)
@app.route('/upload', methods=['GET', 'POST'])
def uploader():
if request.method == 'POST':
用户ID = session["用户ID"]
f = request.files['file']
ori_path = os.path.dirname(os.path.realpath(__file__))
img_path = ori_path + '/static/shiyan.jpg'
f.save(img_path)
print(img_path)
if 用户ID == "lkz":
# 识农API
host = "http://ldttwebserver.chinanorth2.cloudapp.chinacloudapi.cn"
url = host + "/static/shiyan.jpg"
结果 = 水稻识别(url)
print(结果)
ImgIdentResult = 结果["识别结果"]
PredictAccuracy = 结果["准确率"]
else:
# 本机机器学习API
ImgIdentResult, PredictAccuracy = img_predict(img_path)
# 为查询记录增加新数据
当前使用时间 = datetime.datetime.now().strftime('%Y-%m-%d')
本次准确率 = str(PredictAccuracy) + '%'
本次推测病名 = ImgIdentResult
# 生成随机字符串作为查询ID
str_list = [random.choice(string.digits + string.ascii_letters) for i in range(5)]
# 验证是否存在
# 用户ID='隐私信息不记录到历史'#为方便知识共享让所有用户可以看到总的记录,但为了隐私在查询的历史记录保存中则不记录用户ID
# if history.query.filter(history.查询ID == (''.join(str_list))).all() == []:
# 本次查询ID = ''.join(str_list)
# print("本次查询ID", 本次查询ID)
print(f.tell())
f.seek(0) # 回到文件起始位置
# print(f.read())#f.read()和BLOB是不同的
# f.seek(0)
new_img = 'data:image/jpeg;base64,' + str(base64.b64encode(f.read()), 'utf-8')
# 从这里起,存在数据库的文件格式就是这种格式,也就是说,改成text,然后也不必在那边读取的时候进行多余的处理entry.用户上传图像就是直接可读
entry = history(本次推测病名, 当前使用时间, 用户ID, 本次准确率, new_img)
db.session.add(entry)
db.session.commit()
print(entry)
百科条目 = wiki.query.filter(wiki.病名.like('%{0}%'.format(本次推测病名))).first()
if 百科条目:
return json.dumps(
{'code': 0, 'result': ImgIdentResult, 'accuracy': PredictAccuracy, '病名': 百科条目.病名, '图片': 百科条目.图片})
# 改为返回ajax
return json.dumps({'code': 0, 'result': ImgIdentResult, 'accuracy': PredictAccuracy, '百科条目': 百科条目})
#百科的页面Controller逻辑
@app.route('/wiki/', methods=['GET', 'POST'])
@app.route('/wiki/<param>', methods=['GET', 'POST'])
def WikiPage(param=None):
print("百科传入参数:", param)
身份 = session["status"]
if param == None:
return render_template('百科/diseaseWiki.html', wiki=wiki.query.all(), 身份=身份, 当前时间=time.time())
elif param == "search":
if request.method == 'POST':
return render_template('功能页/error.html', error="Wiki Search 不能是POST")
查询病名 = request.values.get("查询病名")
return render_template('百科/diseaseWiki.html', wiki=wiki.query.filter(wiki.病名.like('%{0}%'.format(查询病名))).all(),
身份=身份, 当前时间=time.time())
elif param == "new":
if request.method == 'GET':
return render_template('百科/diseaseDetails.html', 身份=身份, 当前时间=time.time())
# POST
# if not request.form['病名'] or not request.form['危害'] or not request.form['症状']:
# return render_template('功能页/error.html',error="Wiki New 参数不全!")
# 病名, 危害, 症状,防治方式,图片,其他说明,访问次数
entry = wiki(request.form['病名'], request.form['危害'], request.form['症状'],
request.form['防治方式'], request.form['图片'],
request.form['其他说明'], request.form['访问次数'])
db.session.add(entry)
db.session.commit()
return redirect("/wiki")
elif param == "details":
if request.method == 'POST':
病名 = request.form['原病名']
editable = True
else:
病名 = request.values.get("病名")
editable = None
entry = wiki.query.filter(wiki.病名 == 病名).first()
return render_template('百科/diseaseDetails.html', entry=entry, editable=editable, 身份=身份, 当前时间=time.time())
elif param == "delete":
if request.method == 'GET':
return render_template('功能页/error.html', error="Wiki Delete 不能是GET!")
# POST
entry = wiki.query.filter(wiki.病名 == request.form['原病名']).first()
db.session.delete(entry)
db.session.commit()
return redirect("/wiki")
elif param == "update":
if request.method == 'GET':
return render_template('功能页/error.html', error="Wiki Update 不能是GET!")
# POST
oldEntry = wiki.query.filter(wiki.病名 == request.form['原病名']).first()
entry = wiki(request.form['病名'], request.form['危害'], request.form['症状'],
request.form['防治方式'], request.form['图片'],
request.form['其他说明'], request.form['访问次数'])
oldEntry.update(entry)
db.session.commit()
return render_template('百科/diseaseDetails.html', entry=entry, 身份=身份, 当前时间=time.time())
else:
return render_template('功能页/error.html', error="Wiki 没有“{0}”参数!".format(param))
# 登录
@app.route('/login', methods=['GET', 'POST'])
def LoginPage():
if (request.method == 'POST'):
nickname = request.values.get('nickname')
password = request.values.get('password')
print('nickname', nickname, 'password', password)
entry = user.query.filter(user.nickname == nickname).first()
if entry.password == password:
session["status"] = entry.status
session["用户ID"] = entry.nickname
print("LKZ: Session使用示例:", entry.status)
return render_template('index.html', entry=entry, 当前时间=time.time())
else:
return render_template('功能页/error.html', error='用户名或密码错误!')
return render_template('用户/login.html')
# 注册
@app.route('/res', methods=['GET', 'POST'])
def ResPage():
if request.method == 'POST':
nickname=request.form['nickname']
entry = user.query.filter(user.nickname == nickname).first()
if(entry!=None):
return render_template('功能页/error.html',error='该用户名已经被注册过!')
# POST
entry = user(request.form['name'], request.form['nickname'], request.form['sex'],
request.form['tel'], request.form['location'], request.form['password'], '普通用户')
db.session.add(entry)
db.session.commit()
程序员张小妍
- 粉丝: 1w+
- 资源: 3694
最新资源
- kacst-farsi-fonts-2.0-12.el7.x64-86.rpm.tar.gz
- kacst-fonts-common-2.0-12.el7.x64-86.rpm.tar.gz
- 基于蒙特卡洛法的风光场景生成与概率距离快速削减方法仿真研究,MATLAB代码:基于概率距离快速削减法的风光场景生成与削减方法 关键词:风光场景生成 场景削减 概率距离削减法 蒙特卡洛法 仿真平台:MA
- kacst-letter-fonts-2.0-12.el7.x64-86.rpm.tar.gz
- 原始信号经验模态分解后的边际谱计算过程展示:从希尔伯特变换到边际谱的生成,对信号进行hilber变求取边际谱 首先将两个信号叠加得到原始信号,对原始信号进行经验模态分解(emd分解)得到本征模态函数(
- kacst-naskh-fonts-2.0-12.el7.x64-86.rpm.tar.gz
- 永磁同步电机超扭滑模观测器与无差拍电流预测控制参数扰动观测器的Matlab仿真研究,永磁同步电机(PMSM)采用超扭滑模观测器(STSMO)的无差电流预测控制(DPCC)参数扰动观测器方法matlab
- kacst-office-fonts-2.0-12.el7.x64-86.rpm.tar.gz
- kacst-one-fonts-2.0-12.el7.x64-86.rpm.tar.gz
- FX5U-80mt自动组装设备:威纶通MT8103ip上位机控制,配备cpu、扩展模块、锐科激光器与CCD检测焊接系统,FX5U-80mt设计控制的一台自动组装设备,一个cpu和13个扩展模块,配备一
- kacst-pen-fonts-2.0-12.el7.x64-86.rpm.tar.gz
- 基于S7-200 PLC的汽车空调控制梯形图程序详解:组态王界面与接线图集成参考方案,基于S7-200 PLC和组态王汽车空调控制 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面 ,基于S7
- kacst-poster-fonts-2.0-12.el7.x64-86.rpm.tar.gz
- LabVIEW网口通讯全系列西门子PLC:命令帧读写,程序源码编写,超越OPC的通信解决方案,LabVIEW网口通讯西门子PLC,支持200、300、1200、1500、400、SMART全系列PLC
- kacst-qurn-fonts-2.0-12.el7.x64-86.rpm.tar.gz
- 全局搜索策略的鲸鱼优化算法GSWOA对ELM权值和阈值优化及误差对比研究,适用于多样数据的教学示范,一种全局搜索策略的鲸鱼优化算法GSWOA对极限学习机的权值和阈值做优化,提高极限学习机的预测效果,然
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈