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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42936.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42936.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42936.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【K8S源碼之Pod漂移】整體概況分析 controller-manager 中的 nodelifecycle controller(Pod的驅逐)

參考 k8s 污點驅逐詳解-源碼分析 - 掘金 k8s驅逐篇(5)-kube-controller-manager驅逐 - 良凱爾 - 博客園 k8s驅逐篇(6)-kube-controller-manager驅逐-NodeLifecycleController源碼分析 - 良凱爾 - 博客園 k8s驅逐篇(7)-kube-controller-manager驅逐-taintManager源碼分析 - 良…

esp32C3 micropython oled 恐龍快跑游戲

目錄 簡介 效果展示 源代碼 main.py ssd1306.py 實現思路 血量值 分數 恐龍 障礙物 得分與血量值的計算 簡介 使用合宙esp32c3模塊&#xff0c;基于micropython平臺開發的一款oled小游戲&#xff0c;恐龍快跑&#xff0c;所有代碼已經給出&#xff0c;將兩個py文件…

【Maven教程】(一)入門介紹篇:Maven基礎概念與其他構建工具:理解構建過程與Maven的多重作用,以及與敏捷開發的關系 ~

Maven入門介紹篇 1?? 基礎概念1.1 構建1.2 maven對構建的支持1.3 Maven的其他作用 2?? 其他構建工具2.1 IDE2.2 Make2.3 Ant2.4 Jenkins 3?? Maven與敏捷開發&#x1f33e; 總結 1?? 基礎概念 "Maven"可以翻譯為 “知識的積累者” 或 “專家”。這個詞源于波…

Qt應用開發(基礎篇)——MDI窗口 QMdiArea QMdiSubWindow

一、前言 QMdiArea類繼承于QAbstractScrollArea&#xff0c;QAbstractScrollArea繼承于QFrame&#xff0c;是Qt用來顯示MDI窗口的部件。 滾屏區域基類 QAbstractScrollAreahttps://blog.csdn.net/u014491932/article/details/132245486 框架類 QFramehttps://blog.csdn.net/u01…

面試算法編程題

面試算法編程題記錄 題目 : 羊圈里的狼 題目背景 : 一到了晚上&#xff0c;草原牧民的羊就會被趕進羊圈里。這時&#xff0c;野外的狼群就會打羊羔的主意。為了保護羊羔&#xff0c;牧民需要將羊圈里的狼趕走或殺死。由于來的狼很多&#xff0c;他需要快速甄別哪些狼在羊圈里面…

FANUC機器人加減速倍率指令ACC的使用方法說明

FANUC機器人加減速倍率指令ACC的使用方法說明 單位有一臺FANUC機器人(型號:M-900iB 360kg),偶爾會在啟動的瞬間會報SRVO-050碰撞檢測報警,而事實上機器人并沒有開始移動或和其他工件產生碰撞,一直查了很長時間,也沒有查到具體的原因,也嘗試過重新進行負載推算,但是偶爾…

恒運資本:CPO概念發力走高,兆龍互聯漲超10%,華是科技再創新高

CPO概念15日盤中發力走高&#xff0c;截至發稿&#xff0c;華是科技漲超15%再創新高&#xff0c;兆龍互聯漲逾11%&#xff0c;中貝通訊漲停&#xff0c;永鼎股份、太辰光漲超5%&#xff0c;天孚通訊漲逾4%。 消息面上&#xff0c;光通訊聞名咨詢機構LightCounting近日發布的202…

國產之光:訊飛星火最新大模型V2.0

大家好&#xff0c;我是herosunly。985院校碩士畢業&#xff0c;現擔任算法研究員一職&#xff0c;熱衷于機器學習算法研究與應用。曾獲得阿里云天池比賽第一名&#xff0c;CCF比賽第二名&#xff0c;科大訊飛比賽第三名。擁有多項發明專利。對機器學習和深度學習擁有自己獨到的…

每天一道leetcode:1466. 重新規劃路線(圖論中等廣度優先遍歷)

今日份題目&#xff1a; n 座城市&#xff0c;從 0 到 n-1 編號&#xff0c;其間共有 n-1 條路線。因此&#xff0c;要想在兩座不同城市之間旅行只有唯一一條路線可供選擇&#xff08;路線網形成一顆樹&#xff09;。去年&#xff0c;交通運輸部決定重新規劃路線&#xff0c;以…

OpenCV-Python中的圖像處理-視頻分析

OpenCV-Python中的圖像處理-視頻分析 視頻分析Meanshift算法Camshift算法光流Lucas-Kanade Optical FlowDense Optical Flow 視頻分析 學習使用 Meanshift 和 Camshift 算法在視頻中找到并跟蹤目標對象: Meanshift算法 Meanshift 算法的基本原理是和很簡單的。假設我們有一堆…

Failed to init API, possibly an invalid tessdata path: ./ ubuntu

1、問題描述 Failed to init API, possibly an invalid tessdata path: ./2、解決方案&#xff1a; 添加“TESSDATA_PREFIX”到系統環境變量中&#xff0c;值為testdata的父路徑&#xff08;一般就是 Tesseract-OCR 的安裝路徑&#xff09;亦可解決。在~/.bashrc中添加 expo…

【學習日記】【FreeRTOS】空閑任務與阻塞延時

寫在前面 本文是基于野火 RTOS 教程對空閑任務和阻塞延時的詳解。 一、什么是任務中的阻塞延時 說到阻塞延時&#xff0c;筆者的第一反應就是在單片機的 while 循環中&#xff0c;使用一個 for 循環不斷遞減一個大數&#xff0c;通過 CPU 不斷執行一條指令的耗時進行延時。這…

python優雅地爬蟲!

背景 我需要獲得新聞&#xff0c;然后tts&#xff0c;在每天上班的路上可以聽一下。具體的方案后期我也會做一次分享。先看我喜歡的萬能的老路&#xff1a;獲得html內容-> python的工具庫解析&#xff0c;獲得元素中的內容&#xff0c;完成。 好家伙&#xff0c;我知道我爬…

視頻云存儲/安防監控/視頻匯聚EasyCVR平臺新增設備經緯度選取

視頻云存儲/安防監控EasyCVR視頻匯聚平臺基于云邊端智能協同&#xff0c;支持海量視頻的輕量化接入與匯聚、轉碼與處理、全網智能分發、視頻集中存儲等。音視頻流媒體視頻平臺EasyCVR拓展性強&#xff0c;視頻能力豐富&#xff0c;具體可實現視頻監控直播、視頻輪播、視頻錄像、…

公網遠程連接Redis數據庫「內網穿透」

文章目錄 1. Linux(centos8)安裝redis數據庫2. 配置redis數據庫3. 內網穿透3.1 安裝cpolar內網穿透3.2 創建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一個固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址連接 前言 潔潔的個人主頁 我就問你有沒有發揮&#xff0…

藍牙資訊|蘋果Apple Watch可手勢操控Mac和Apple TV等設備

根據美國商標和專利局&#xff08;USPTO&#xff09;公示的清單&#xff0c;蘋果公司近日獲得了一項技術專利&#xff0c;概述了未來的 Apple Watch 手表&#xff0c;使用手勢等操控 Mac 和 Apple TV 等設備。 該專利描述未來 Apple Watch 可以交互實現編輯圖像、繪圖、處理文…

02:STM32--EXTI外部中斷

目錄 一:中斷 1:簡歷 2:AFIO 3:EXTI ?編輯 4:NVIC基本結構 5:使用步驟 二:中斷的應用 A:對外式紅外傳感計數器 1:連接圖?編輯 2:函數介紹 3:硬件介紹 4:計數代碼 B;旋轉編碼計數器 1:連接圖 2:硬件介紹 3:旋轉編碼器代碼: 一:中斷 1:簡歷 中斷&#xff1a;在主程…

Flutter 測試小結

Flutter 項目結構 pubspec.yaml 類似于 RN 的 package.json&#xff0c;該文件分別在最外層及 example 中有&#xff0c;更新該文件后&#xff0c;需要執行的 Pub get lib 目錄下的 dart 文件為 Flutter 插件封裝后的接口源碼&#xff0c;方便在其他 dart 文件中調用 example 目…

python通過S7協議讀取西門子200smart數據

發現網上很多關于python通過s7協議控制200smart的代碼都失敗&#xff0c;我猜應該是版本的問題。自己搗鼓了半天&#xff0c;終于測試成功 from snap7 import util,clientmy_plc client.Client() #建立一個客戶端對象 my_plc.set_connection_type(3) #如果是200smart,必須有此…

Flink流批一體計算(14):PyFlink Tabel API之SQL查詢

舉個例子 查詢 source 表&#xff0c;同時執行計算 # 通過 Table API 創建一張表&#xff1a; source_table table_env.from_path("datagen") # 或者通過 SQL 查詢語句創建一張表&#xff1a; source_table table_env.sql_query("SELECT * FROM datagen&quo…