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输入密码即可,主要是为了复制网址方便…...
360CDN 全系列产品体验:CDN / 高防 / SDK 游戏盾横向测评
作为深耕互联网技术领域多年的开发者,平时无论是个人项目还是公司业务,都经常需要用到CDN加速、网络防护类产品。近期正好完整上手测试了360CDN全系列核心产品,涵盖基础CDN加速、高防CDN、SDK游戏盾三款,全程以真实业务场景为测试…...
Windows系统下Python 3.11环境配置全攻略
1. Python 3.11环境配置前的准备工作 在开始安装Python 3.11之前,我们需要做一些准备工作。首先确认你的Windows系统版本,右键点击"此电脑"选择"属性",在系统类型中查看是32位还是64位系统。Python 3.11官方已经停止对32…...
一文讲透|一键生成论文工具:2026年最新测评与推荐大全
2026年真正好用的一键生成论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。…...
每日一道面试题 06|Spring Bean 的生命周期(高频必问)
面试题请完整说一下 Spring Bean 从加载到销毁的整个生命周期?有哪些关键扩展点?一、一句话概括生命周期Bean 从被 Spring 容器实例化 → 属性填充 → 初始化 → 正常使用 → 容器关闭时销毁的完整过程。二、标准生命周期流程(按顺序背&#…...
【Godot】【整活】用 50 行代码做一个“抖音同款解压小游戏”(附源码)
最近短视频平台上经常能看到一种“解压小游戏”: 点一下 → 爆炸特效 💥 滑一下 → 连锁反应 🎯 满屏粒子 → 爽感拉满 😎 这些游戏的核心特点只有三个字: 👉 简单、直接、上头 今天我们就用 Godot 4,只用 约 50 行代码,实现一个“点击爆炸”的解压小游戏。 精…...
Proxmox VE虚拟化实战:如何给MikroTik RouterOS配置PCI直通网卡(ROS 6.44.2实测)
Proxmox VE虚拟化实战:MikroTik RouterOS PCI直通网卡性能优化指南 在虚拟化环境中部署网络设备时,性能损耗一直是困扰技术人员的核心问题。当我们需要在Proxmox VE上运行MikroTik RouterOS作为软路由时,传统的virtio虚拟网卡方案往往无法满足…...
专业级视频对比分析工具:video-compare的技术架构深度解析
专业级视频对比分析工具:video-compare的技术架构深度解析 【免费下载链接】video-compare Split screen video comparison tool using FFmpeg and SDL2 项目地址: https://gitcode.com/gh_mirrors/vi/video-compare 在视频编码质量评估、算法效果验证和媒体…...
CosyVoice3实战:3秒克隆老板声音,自动生成会议纪要语音
CosyVoice3实战:3秒克隆老板声音,自动生成会议纪要语音 1. 为什么你需要这个声音克隆神器? 想象一下这个场景:周一早上9点的例会刚结束,你需要立即整理会议录音并生成会议纪要。传统方法可能需要你: 花1…...
利用VMware虚拟机在本地模拟星图GPU平台环境测试MogFace-large
利用VMware虚拟机在本地模拟星图GPU平台环境测试MogFace-large 想试试最新的MogFace-large人脸检测模型,但手头没有现成的云GPU服务器?或者想先在本地环境里跑通流程,验证一下效果再上云?今天就来分享一个非常实用的方法…...
从热电偶到串口显示:用STM32F103C8T6+MAX6675搭建简易温度监控系统
从零搭建热电偶温度监控系统:STM32F103C8T6与MAX6675实战指南 在工业测量和创客项目中,温度监控是最基础却至关重要的环节。想象一下,当你需要精确控制3D打印机的热床温度、监测烘焙设备的加热曲线,或是记录温室大棚的环境变化时&…...
