(13flask继续研究)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署

简介: 解决3个问题:1、自己实现一例flask项目;2、在flask中,如何调用json传值;3、进一步读懂现有代码。Flask 在整个系统中是作为一个后台框架,对外提供 api 服务,因此对它的理解学习要保持足够严谨,因为将来必然会遇到性能问题。
解决3个问题:
1、自己实现一例flask项目;
2、在flask中,如何调用json传值;
3、进一步读懂现有代码。

Flask 在整个系统中是作为一个后台框架,对外提供 api 服务,因此对它的理解学习要保持足够严谨,因为将来必然会遇到性能问题。
Flask标志
1、第一行代码
img_eff6cf2100f9335c2e92fa782f0d697a.png
回显
img_1f99e2cd507a3329c3b1cfef358e853f.png
img_7ca6aa1acb8f946453ef8ebf2cb3aa90.png
代码里面,显而易见是使用了路由,这样可以进一步看清楚
img_e3f7355bc661e87d81bf262f6134dd09.png
img_a9836c4cf156475e6399b8a4f186e245.png
路由也可以更复杂一些,但是现在应该不会用到
img_5c60c205fefdf9af83d451672edb4b7d.png
如果需要处理具体的HTTP方法,在Flask中也很容易,使用 route装饰器的 methods参数设置即可(当然是你首先要实现这个方法)
img_800b2d651d7604d95bb70368f55fdf5b.png
注意这里的表述,是在路由之上,新添加出来的一块。

为了达到统一、高质量的界面,我们需要使用模板,比如默认的这个

Flask会自动配置Jinja 模板,所以我们不需要其他配置了。默认情况下,模板文件需要放在 templates文件夹下。(这里的模板文件应该在之前的模板上面增加的)
想要好看的模板,最终需要的还是js和css
img_5469ddf9c02ddae5ab8ef0fd2e1d315a.png
我们可以得到这样的结果:
img_0450479b715530dbe6eb8c74883e0a43.png
直接一行代码调用过去。
img_def3a01a3ec71baf4a8736a57d5d5de8.png
代码块需要包含在 {% %}块中
双大括号中的内容不会被转义,所有内容都会原样输出,它常常和其他辅助函数一起使用。下面是一个例子
<a class= "navbar-brand" href={{ url_for( 'index') }}>Flask小例子</a>
外引文件,使用 {% extends 'layout.html' %}方法
{% extends 'layout.html' %}
{% %}中也可以写Python代码
<div class=metanav>
{% if not session.logged_in %}
<a href= " {{ url_for('login') }} ">log in</a>
{% else %}
<a href= " {{ url_for('logout') }} ">log out</a>
{% endif %}
</div>
循环
<tbody>
{% for key,value in data.items() %}
<tr>
<td>{{ key }}</td>
<td>{{ value }}</td>
</tr>
{% endfor %}
<tr>
<td>文件</td>
<td></td>
</tr>
</tbody>

注意,字体产生了变化
img_1953b71fc5c3576ec687ba5b4aa7a53c.png
Request 对象是一个全局对象,利用它的属性和方法,我们可以方便的获取从页面传递过来的参数
img_316f8697b4353e1732da5e0e32a29ee7.png
可以用来判明数据来源。

文件上传是肯定需要解决的问题, 利用Flask也可以方便的获取表单中上传的文件,只需要利用 request 的 files 属性即可。 利用 werkzeug 提供的 secure_filename 方法来获取安全的文件名。
@app.route( '/upload', methods=[ 'GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files[ 'the_file']
f.save( '/var/www/uploads/' + secure_filename(f.filename))
不仅仅是这样,肯定还需要更多的要素。

二、解决关键问题
传统方法(当然传统的也是非常好的)只有三个步骤:
1、创建一个上传表单:
<form method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload"></form>
2、当按下提交键后,通过request对象上的files获取文件。和以前用request获取表单值一样,使用input字段的name值获取:
file = request.files['file']
3、使用save()方法保存文件,指定保存的地址及文件名:
file.save(path + filename)
這里有一个完整的实现,并且是可用的
# -*- coding: utf-8 -*-
import os
from flask import Flask, request, url_for, send_from_directory
from werkzeug import secure_filename

ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = os.getcwd()
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024


html = '''
<!DOCTYPE html>
<title>Upload File</title>
<h1>图片上传</h1>
<form method=post enctype=multipart/form-data>
<input type=file name=file>
<input type=submit value=上传>
</form>
'''


def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS


@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'],
filename)


@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
file_url = url_for('uploaded_file', filename=filename)
return html + '<br><img src=' + file_url + '>'
return html


if __name__ == '__main__':
app.run()

我看可以这样来理解使用:
1、不管python语言有多少,
html = '''
<!DOCTYPE html>
<title>Upload File</title>
<h1>图片上传</h1>
<form method=post enctype=multipart/form-data>
<input type=file name=file>
<input type=submit value=上传>
</form>
'''
都是html主体,这样写应该是不需要套模板的;
2、显而易见,submit动作,触发
@app.route ( '/' , methods = [ 'GET' , 'POST' ])
而这个时候,能够验证数据是否已经上传上去。注意最后
return html + '<br><img src=' + file_url + '>'
这样直接返回结果,当然你可以进行大小控制,也可以使用css
3、 file_url = url_for( 'uploaded_file' , filename = filename)
用来构建url,对应的就是 uploaded_file ( filename ):
4、 在 Flask 0.5以上的版本我们可以使用一个函数来实现此功能:
from flask import send_from_directory
@app.route ( '/uploads/<filename>' ) def uploaded_file ( filename ):
return send_from_directory ( app . config [ 'UPLOAD_FOLDER' ], filename )
用以提供对以及那个上传数据的访问。

3、进一步读懂现有代码,现有代码中的结果是如何传递的?
数据上传这块,现有代码调用了模板
return render_template( 'index.html')
同时使用了css和js,但是没有脱离本质,还是先上传到内存中,然后去读取。和model的交互,在predict这里:
使用了js进行调用,还有fadein的效果,高大上
img_0018e4d50d5a4fafa3e228a255450d13.png
对应
img_275bd204f8ef3088b585c37d3c7b7c7f.png
首先是获得文件,然后是将其进行保存,然后是调用已经建立好的模型进行predict,返回的是一个argmax,类似于onehot的值。
在这个过程中,生成的是string数据,然后就是想办法显示出来。并没有所谓json在里面,当然一个原因也是不需要。
在原始代码中,使用了
img_11af13cca4793d4e12f22d7c25cf2433.png
也就是imagenet自己的一个将onehot进行解码的程序。我这里为了CBIR进行了修改。
img_d0912ae29c80a3e0cf79d464249bd14d.png
能够直接显示结果,后面还需要进一步优化,但是已经能够说明问题。
总的来说,还是onehot,或者数组,之类的东西。
这个地方和prsima还不一样。prisma肯定是生成图片的,可能是放在服务器上供下载的,而这里string类型的结果,确实可以直接显示、处理并调用的。
感谢阅读至此,希望有所帮助。





附件列表

 

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
3月前
|
Kubernetes Devops 持续交付
DevOps实践:使用Docker和Kubernetes实现持续集成和部署网络安全的守护盾:加密技术与安全意识的重要性
【8月更文挑战第27天】本文将引导读者理解并应用DevOps的核心理念,通过Docker和Kubernetes的实战案例,深入探讨如何在现代软件开发中实现自动化的持续集成和部署。文章不仅提供理论知识,还结合真实示例,旨在帮助开发者提升效率,优化工作流程。
|
1月前
|
安全 定位技术 数据安全/隐私保护
|
1月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
56 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
3月前
|
机器学习/深度学习 人工智能 编解码
【神经网络】基于对抗神经网络的图像生成是如何实现的?
对抗神经网络,尤其是生成对抗网络(GAN),在图像生成领域扮演着重要角色。它们通过一个有趣的概念——对抗训练——来实现图像的生成。以下将深入探讨GAN是如何实现基于对抗神经网络的图像生成的
37 3
|
3月前
|
机器学习/深度学习 算法 文件存储
【博士每天一篇文献-算法】 PNN网络启发的神经网络结构搜索算法Progressive neural architecture search
本文提出了一种名为渐进式神经架构搜索(Progressive Neural Architecture Search, PNAS)的方法,它使用顺序模型优化策略和替代模型来逐步搜索并优化卷积神经网络结构,从而提高了搜索效率并减少了训练成本。
57 9
|
3月前
|
机器学习/深度学习 API 算法框架/工具
【Tensorflow+keras】Keras API三种搭建神经网络的方式及以mnist举例实现
使用Keras API构建神经网络的三种方法:使用Sequential模型、使用函数式API以及通过继承Model类来自定义模型,并提供了基于MNIST数据集的示例代码。
57 12
|
3月前
|
存储 Ubuntu Linux
NFS服务部署全攻略:从零到一,轻松驾驭网络文件系统,让你的文件共享像飞一样畅快无阻!
【8月更文挑战第5天】NFS(网络文件系统)能让网络中的电脑无缝共享文件与目录。基于客户端-服务器模式,用户可像访问本地文件般透明操作远程文件。部署前需准备至少两台Linux机器:一台服务器,其余作客户端;确保已装NFS相关软件包且网络通畅。服务器端安装NFS服务与rpcbind,客户端安装nfs-utils。
104 4
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
【Macos系统】安装VOSviewer及使用VOSviewer教程!!以ESN网络的研究进行案例分析
本文介绍了如何在MacOS系统上安装VOSviewer软件,并以ESN(Echo State Network)网络的研究为例,通过VOSviewer对相关科学文献进行可视化分析,以深入了解ESN在学术研究中的应用和发展情况。
285 0
【Macos系统】安装VOSviewer及使用VOSviewer教程!!以ESN网络的研究进行案例分析
|
3月前
|
机器学习/深度学习 网络安全 TensorFlow
探索操作系统的心脏:内核与用户空间的奥秘云计算与网络安全:技术挑战与未来趋势深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【8月更文挑战第29天】在数字世界的每一次点击与滑动背后,都隐藏着一个不为人知的故事。这个故事关于操作系统——计算机的灵魂,它如何协调硬件与软件,管理资源,并确保一切运行得井井有条。本文将带你走进操作系统的核心,揭示内核与用户空间的秘密,展现它们如何共同编织出我们日常数字生活的底层结构。通过深入浅出的讲解和代码示例,我们将一同解锁操作系统的神秘面纱,理解其对现代计算的重要性。 【8月更文挑战第29天】本文将深入探讨卷积神经网络(CNN)的基本原理和结构,以及它们如何被广泛应用于图像识别任务中。我们将通过代码示例来展示如何使用Python和TensorFlow库构建一个简单的CNN模型,并训练

热门文章

最新文章

下一篇
无影云桌面