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
最新资源
- 基于SSA的CSSA算法复现:改进混沌初始化与扰动策略、测试函数分析与对比研究,麻雀搜索算法(SSA)文章复现(改进Tent混沌初始化+改进Tent混沌扰动+高斯扰动)-CSSA 复现内容
- joda-convert-javadoc-1.3-5.el7.x64-86.rpm.tar.gz
- joda-time-2.2-3.tzdata2013c.el7.x64-86.rpm.tar.gz
- 自主开发的两工位独立协同运行自动锁螺丝设备PLC程序,配备三菱伺服转盘与信捷人机界面,自动锁螺丝设备PLC及人机程序,自主开发,有备注 两台打螺丝机两个工位独立协同运行,三菱伺服转盘,手自动模式,可选
- joda-time-javadoc-2.2-3.tzdata2013c.el7.x64-86.rpm.tar.gz
- jose-10-1.el7.x64-86.rpm.tar.gz
- 基于遗传算法优化的VMD信号去噪算法:样本熵与信噪比双重适应度函数提升信噪比信号处理特征提取研究,Matlab 基于遗传算法优化的VMD信号去噪算法 创新点:基于样本熵作为适应度函数 创新点2:基于
- jsch-0.1.50-5.el7.x64-86.rpm.tar.gz
- MATLAB四旋翼仿真中的滑模控制、反步控制与PID控制方法及公式文献参考,MATLAB四旋翼仿真 滑模控制 simulink 三种控制方法 有公式和文献参考 1.滑模SMC 2.反步控制 ba
- jsch-demo-0.1.50-5.el7.x64-86.rpm.tar.gz
- "S32K144 Bootloader:涵盖CAN与串口通信,上下位机开源学习指南,PCAN设备支持,C#上位机环境,专业代码解释与烧录指南",S32K144的bootloader,包括CAN和串口的
- jsch-javadoc-0.1.50-5.el7.x64-86.rpm.tar.gz
- json-c-0.11-4.el7-0.x64-86.rpm.tar.gz
- 基于S7-200 PLC与组态王技术的球类大小分拣系统实现,基于S7-200 PLC和组态王大小球大小分拣 ,基于S7-200 PLC; 组态王; 大小球; 分拣; 大小分选,基于S7-200 PLC
- json-c-devel-0.11-4.el7-0.x64-86.rpm.tar.gz
- 基于Matlab的综合能源系统优化调度策略研究:考虑综合需求响应与阶梯型碳交易机制的影响,matlab复现,考虑综合需求响应和阶梯型碳交易机制的综合能源系统优化调度策略 关键词,综合能源系统,碳交易
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页