当前需求:
Web后端基于Java语言编写,后端中的计算模块产生的计算结果是机器学习模型的参数。
(1)Java后端向python模型传递参数
(2)python模型接收参数,生成分类结果值
(3)python模型将分类结果值返回给Java后端
一.生成pkl文件
注意版本问题,默认生成为python3文件
#使用joblib.dump方法将模型保存到文件
import joblib
joblib.dump(rfc,'model_joblib.pkl')
print('模型导出文件成功!')
如果想得到python2版本的话:
#使用joblib.dump方法将模型保存到文件import joblibjoblib.dump(rfc,'model_joblib.pkl',protocol=2)print('模型导出文件成功!')

二.创建Flask项目
通过pycharm傻瓜式操作即可。

三.Flask部分核心代码
import joblibimport numpy as npfrom flask import Flask,request,jsonifyimport pickleimport pandas as pdimport sklearnapp = Flask(__name__)# 加载机器学习模型model = joblib.load('/data/workarea/PythonArea/xxxProject/xxxtic/model_joblib.pkl')@app.route('/classify',methods=['POST'])def predict():# Get the input data from the requestinput_data = request.get_json()# Convert the input data to a numpy arrayinput_array = np.array(input_data['input'])# Make the prediction using the modelprediction = model.predict(input_array.reshape(1, -1))# Return the prediction as a JSON responseresponse = {'prediction': prediction[0]}return jsonify(response)if __name__ == '__main__':app.run()
试运行项目,并通过ApiPost工具对接口进行测试

那么python这部分的服务到这里就完成了。接下来的工作就是在Java后端中传递参数并获得结果。
四.Java后端请求分类结果
package com.githan.utils;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;/*** @author han56* @description 功能描述:调用python机器学习模型* @create 2023/4/13 上午9:30*/public class UseDecisionModel {public static void main(String[] args) {try {// 创建连接URL url = new URL("http://127.0.0.1:5000/classify");HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setDoOutput(true);connection.setDoInput(true);connection.setRequestMethod("POST");connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");connection.setRequestProperty("Accept", "application/json");connection.setRequestProperty("Accept-Encoding", "UTF-8");// 构建请求参数JSONObject requestParams = new JSONObject();JSONArray jsonArray = new JSONArray();jsonArray.add(1.0);jsonArray.add(1.34);jsonArray.add(65150.70672);requestParams.put("input",jsonArray);// 发送请求OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");writer.write(requestParams.toString());writer.flush();writer.close();// 获取响应BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;StringBuilder response = new StringBuilder();while ((line = reader.readLine()) != null) {response.append(line);}reader.close();// 打印响应JSONObject res = JSONObject.parseObject(response.toString());System.out.println(res);} catch (Exception e) {e.printStackTrace();}}}

这样就基本完成了Java后端与Python项目之间的互通了,这样实现的好处就是不受版本限制,在python中版本不同还是很坑的。缺点:效率偏低等。
文章转载自码农智涵的程序人生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




