flask模型部署教程
搭建python flask服务的步骤
1、安装相关的包
具体参考https://blog.csdn.net/weixin_42126327/article/details/127642279
1、安装conda环境和相关包
# 一、安装conda
# 1、首先,前往Anaconda官网(https://www.anaconda.com/products/individual)下载适合您的Linux版本的Anaconda安装文件。# 2、下载Anaconda安装文件
wget https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh
# 3、安装conda
bash Anaconda3-2023.07-2-Linux-x86_64.sh# 4、conda --version
如果输出了Anaconda的版本号,则安装成功。## 二、创建canda的虚拟开发环境 py36# 1、创建canda的虚拟开发环境 py36
conda create --name py36 python=3.6# 2、进入虚拟开发环境
conda activate py36# 3、退出虚拟环境
conda deactivate## 三、安装flask相关的包
conda install flask
conda install scikit-learn
2、搭建flask服务代码
1、训练模型并保存模型
model.py
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import pickle# 加载iris数据集,并进行最简单的训练过程,可以自行扩展
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
classifier = RandomForestClassifier()
classifier.fit(X_train, y_train)
print(classifier)将模型保存为pkl格式,准备应用层调用
pickle.dump(classifier, open("./model.pkl", "wb"))
2、启动flask服务
app_demo.py
import numpy as np
from flask import Flask, request, jsonify, render_template
from flask_cors import CORS
import pickleapp = Flask(__name__,template_folder='../templates')model = pickle.load(open('model.pkl', 'rb'))
@app.route('/')
def home():return render_template('index.html')@app.route('/results', methods=['POST'])
def results():data = request.get_json(force=True)print(data)prediction = model.predict([np.array(list(data.values()))])# 将预测结果放在字典中output = {'prediction': int(prediction[0])}# 将字典转换为 JSON 格式并返回return jsonify(output)
if __name__ == "__main__":app.run(debug=True)
3、调用flask服务的客户端代码
request_demo.py python客服端代码
import requests
url = 'http://localhost:5000/results'
r = requests.post(url,json={'Sepal_Length':5,'Sepal_Width':2, 'Petal_Length':4, 'Petal_Width':2})
print(r.json())
FlaskClient.scala scala客户端代码
package com.demoimport java.net.URLimport org.apache.http.client.methods.HttpPost
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.HttpClientBuilder
import org.json4s._
import org.json.JSONObject
import org.apache.http.util.EntityUtils
import org.json4s.jackson.JsonMethods.parseobject FlaskClient {implicit val formats = DefaultFormatsdef main(args: Array[String]): Unit = {val url = new URL("http://localhost:5000/results")// 构造JSON对象val data = new JSONObject()data.put("feature1", 1)data.put("feature2", 2)data.put("feature3", 3)data.put("feature4", 4)// 将JSON对象转换为字符串val json = data.toString()val post = new HttpPost(url.toURI)post.setEntity(new StringEntity(json))post.setHeader("Content-type", "application/json")val client = HttpClientBuilder.create.buildval response = client.execute(post)val entity = response.getEntityval result = EntityUtils.toString(entity)val prediction = (parse(result) \ "prediction").extract[Int]println(prediction)}
}
http客户端代码 templates/index.html
<!-- index.html -->
<!DOCTYPE html>
<html >
<head><meta charset="UTF-8"><title>ML API</title>
</head>
<body>
<div class="login"><h1>Flower Class Prediction</h1><form action="{{ url_for('predict')}}"method="post"> <!-- 这一块是用户输入自定义数据 --><input type="text" name="Sepal_Length" placeholder="Sepal_Length" required="required"/><input type="text" name="Sepal_Width" placeholder="Sepal_Width" required="required" /><input type="text" name="Petal_Length" placeholder="Petal_Length" required="required"/><input type="text" name="Petal_Width" placeholder="Petal_Width" required="required" /><button type="submit" class="btn btn-primary btn-block btn-large">Predict</button></form><br>{{ prediction_text }} <!-- 这一块是模型输出结果 -->
</div>
</body>
</html>
3、flask服务的运行
1、调试环境
# 1、启动flask服务
python app_demo.py
# 2、客户端请求flask服务
# 2.1 python客户端
python request_demo.py # 2.2 scala 客户端java -cp target/xx-2.0.0-SNAPSHOT-jar-with-dependencies.jar com.xx.FlaskClient# 2.3 http客户端
http://127.0.0.1:5000/predict
2、生产环境部署
uWSGI:uWSGI是一个高性能的WSGI服务器,支持多种编程语言和应用程序框架,包括Flask。可以使用uWSGI来部署Flask服务
uwsgi安装
conda install uwsgi --no-deps # 使用--no-deps选项:这将跳过依赖项
部署 参考:https://juejin.cn/post/7014036187937505317
配置文件uwsgi.ini 文件
`[uwsgi]http = 127.0.0.1:5000wsgi-file = app_demo.pycallable = app`
准备好配置文件后
# 启动uwsgi服务
uwsgi --ini uwsgi.ini
# 停止uwsgi服务
uwsgi --stop uwsgi.pid
# 重启uwsgi服务
uwsgi --reload uwsgi.pid相关文章:
flask模型部署教程
搭建python flask服务的步骤 1、安装相关的包 具体参考https://blog.csdn.net/weixin_42126327/article/details/127642279 1、安装conda环境和相关包 # 一、安装conda # 1、首先,前往Anaconda官网(https://www.anaconda.com/products/individual&am…...
一文详解4种聚类算法及可视化(Python)
在这篇文章中,基于20家公司的股票价格时间序列数据。根据股票价格之间的相关性,看一下对这些公司进行聚类的四种不同方式。 苹果(AAPL),亚马逊(AMZN),Facebook(META&…...
SpringBoot---内置Tomcat 配置和切换
😀前言 本篇博文是关于内置Tomcat 配置和切换,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力&#x…...
Qt 显示git版本信息
项目场景: 项目需要在APP中显示当前的版本号,考虑到git共同开发,显示git版本,查找bug或恢复设置更为便捷。 使用需求: 显示的内容包括哪个分支编译的,版本号多少,编译时间,以及是否…...
Mysql的视图和管理
MySQL 视图(view) 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含列,其数据来自对应的真实表(基表) create view 视图名 as select语句alter view 视图名 as select语句 --更新成新的视图SHOW CREATE VIEW 视图名d…...
uniapp 顶部头部样式
<u-navbartitle"商城":safeAreaInsetTop"true"><view slot"left"><image src"/static/logo.png" mode"" class"u-w-50 u-h-50"></image></view></u-navbar>...
最新ai系统ChatGPT程序源码+详细搭建教程+mj以图生图+Dall-E2绘画+支持GPT4+AI绘画+H5端+Prompt知识库
目录 一、前言 二、系统演示 三、功能模块 3.1 GPT模型提问 3.2 应用工作台 3.3 Midjourney专业绘画 3.4 mind思维导图 四、源码系统 4.1 前台演示站点 4.2 SparkAi源码下载 4.3 SparkAi系统文档 五、详细搭建教程 5.1 基础env环境配置 5.2 env.env文件配置 六、环境…...
FairyGUI-Unity 自定义UIShader
FairyGUI中给组件更换Shader,最简单的方式就是找到组件中的Shader字段进行赋值。需要注意的是,对于自定的shader效果需要将目标图片进行单独发布,也就是一个目标图片占用一张图集。(应该会有更好的解决办法,但目前还是…...
Excel/PowerPoint柱状图条形图负值设置补色
原始数据: 列1系列 1类别 14.3类别 2-2.5类别 33.5类别 44.5 默认作图 解决方案 1、选中柱子,双击,按如下顺序操作 2、这时候颜色会由一个变成两个 3、对第二个颜色进行设置,即为负值的颜色 条形图的设置方法相同...
el-date-picker 时间区域选择,type=daterange,form表单校验+数据回显问题
情景问题:新增表单有时间区域选择,选择了时间,还是提示必填的校验提示语,且修改时,通过 号赋值法,重新选择此时间范围无效。 解决方法:(重点) widthHoldTime:[]…...
LeetCode 面试题 01.02. 判定是否互为字符重排
文章目录 一、题目二、C# 题解 一、题目 给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串,点击此处跳转。 示例 1: 输入: s1 “abc”, s2 “…...
学习maven工具
文章目录 🐒个人主页🏅JavaEE系列专栏📖前言:🏨maven工具产生的背景🦓maven简介🪀pom.xml文件(project object Model 项目对象模型) 🪂maven工具安装步骤两个前提:下载 m…...
手机直播源码开发,协议讨论篇(三):RTMP实时消息传输协议
实时消息传输协议RTMP简介 RTMP又称实时消息传输协议,是一种实时通信协议。在当今数字化时代,手机直播源码平台为全球用户进行服务,如何才能增加用户,提升用户黏性?就需要让一对一直播平台能够为用户提供优质的体验。…...
【JavaEE基础学习打卡05】JDBC之基本入门就可以了
目录 前言一、JDBC学习前说明1.Java SE中JDBC2.JDBC版本 二、JDBC基本概念1.JDBC原理2.JDBC组件 三、JDBC基本编程步骤1.JDBC操作的数据库准备2.JDBC操作数据库表步骤 四、代码优化1.简单优化2.with-resources探讨 总结 前言 📜 本系列教程适用于JavaWeb初学者、爱好…...
2023/8/16 华为云OCR识别驾驶证、行驶证
目录 一、 注册华为云账号开通识别驾驶证、行驶证服务 二、编写配置文件 2.1、配置秘钥 2.2、 编写配置工具类 三、接口测试 3.1、测试接口 3.2、结果 四、实际工作中遇到的问题 4.1、前端传值问题 4.2、后端获取数据问题 4.3、使用openfeign调用接口报错 4.3、前端显示问题…...
【Java开发】 Mybatis-Plus 07:创建时间、更新时间自动添加
Mybatis-Plus 可以通过配置实体类的注解来自动添加创建时间和更新时间,这可以减轻一定的开发量。 1 在实体类中添加注解 public class User {TableId(type IdType.AUTO)private Long id;private String username;private String password;TableField(fill FieldF…...
解决vue2项目在IE11浏览器中无画面的兼容问题
解决vue2项目在IE11浏览器中无画面的兼容问题 背景介绍当前网上能找打的教程 背景介绍 当前项目面临其他浏览器都可以运行,但是在IE11浏览器中出现白屏的现象,F12后台也没有报错,项目月底也要交付了。当前项目的vue版本为2.6.11,…...
信号
信号也是IPC中的一种,是和管道,消息队列,共享内存并列的概念。 本文参考: Linux中的信号_linux中信号_wolf鬼刀的博客-CSDN博客 Linux系统编程(信号处理 sigacation函数和sigqueue函数 )_花落已飘的博客-CSDN博客 Linu…...
产品经理的真实薪资有多少?今天带你看看
作为产品经理,除了需要拥有扎实的技术背景和出色的产品设计能力,还需具备出色的领导力和商业敏感度。因此,产品经理的薪资也越来越成为人们关注的话题。那么,一般来说,产品经理的薪资水平如何呢? 薪资多少…...
《一个操作系统的实现》windows用vm安装CentOS——从bochs环境搭建到第一个demo跑通
vm安装CentOS虚拟机带有桌面的版本。su输入密码123456。更新yum -y update 。一般已经安装好后面这2个工具:yum install -y net-tools wget。看下ip地址ifconfig,然后本地终端连接ssh root192.168.249.132输入密码即可,主要是为了复制网址方便…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
标注工具核心架构分析——主窗口的图像显示
🏗️ 标注工具核心架构分析 📋 系统概述 主要有两个核心类,采用经典的 Scene-View 架构模式: 🎯 核心类结构 1. AnnotationScene (QGraphicsScene子类) 主要负责标注场景的管理和交互 🔧 关键函数&…...
TMC2226超静音步进电机驱动控制模块
目前已经使用TMC2226量产超过20K,发现在静音方面做的还是很不错。 一、TMC2226管脚定义说明 二、原理图及下载地址 一、TMC2226管脚定义说明 引脚编号类型功能OB11电机线圈 B 输出 1BRB2线圈 B 的检测电阻连接端。将检测电阻靠近该引脚连接到地。使用内部检测电阻时,将此引…...
【Ragflow】26.RagflowPlus(v0.4.0):完善解析逻辑/文档撰写模式全新升级
概述 在历经半个月的间歇性开发后,RagflowPlus再次迎来一轮升级,正式发布v0.4.0。 开源地址:https://github.com/zstar1003/ragflow-plus 更新方法 下载仓库最新代码: git clone https://github.com/zstar1003/ragflow-plus.…...
