Java llama al script de Python para obtener los resultados de predicción del servicio de modelo de predicción

Recientemente, el proyecto necesita obtener los resultados de predicción del modelo a través del programa Java para tomar decisiones de lógica comercial, por lo que se entrena e implementa un modelo en el servidor, y luego se escribe un programa Java para obtener los resultados de predicción llamando a Python. guion.

Proceso de implementación de modelos: implementación de modelos de TensorFlow

1. Instalar Anaconda

Instalar Anaconda en Linux

2. Escribir programa py

Llame a la interfaz del modelo de predicción para la predicción de resultados

[Preste atención al problema del entorno py aquí, hay una situación en la que no se importa el kit de herramientas]

import requests
import json
import numpy as np
import sys

class NpEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.integer):
            return int(obj)
        elif isinstance(obj, np.floating):
            return float(obj)
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        else:
            return super(NpEncoder, self).default(obj)

def getPredict(list):
    data = json.dumps({
    
    "instances":list},cls=NpEncoder)
    # headers = {"content-type":"applicaiton/json"}
    response = requests.post("http://192.168.152.111:8501/v1/models/model:predict",data=data)
    # print(response.text)
    embeddings = json.loads(response.text)['predictions']
    return embeddings[0][0]

if __name__ == '__main__':
    list = []
    for i in range(1,len(sys.argv)):
        list.append((float(sys.argv[i])))
        
    list = np.array(list).reshape(1,6)
    
    print(getPredict(list))

3. Escribir programas Java

Llame al script de python a través de Java para obtener el valor de retorno previsto

public static String getPredictInfo(NodeIndicatorsVo nodeIndicatorsVo){
    
    
        String cpuIdle = nodeIndicatorsVo.getCpuIdle();
        String diskFree = nodeIndicatorsVo.getDiskFree();
        String memFree = nodeIndicatorsVo.getMemFree();
        String AvgWaitTime = String.valueOf(nodeIndicatorsVo.getAvgWaitTime());
        String AvgDealTime = String.valueOf(nodeIndicatorsVo.getAvgDealTime());
        String Cap = String.valueOf(nodeIndicatorsVo.getCapacity());
        String result = null;
        try {
    
    
            String[] arg1 = new String[] {
    
     "/usr/local/anaconda3/envs/common/bin/python3.8", "/home/hl/model.py", cpuIdle, diskFree, memFree, AvgWaitTime, AvgDealTime, Cap };
            Process proc = Runtime.getRuntime().exec(arg1);// 执行py文件

            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            result = in.readLine();

            in.close();
            proc.waitFor();
        } catch (IOException | InterruptedException e) {
    
    
            e.printStackTrace();
        }
        if (result == null){
    
    
            return "NULL";
        }

        if (Float.parseFloat(result) > 0.5){
    
    
            return "1";
        }else {
    
    
            return "0";
        }
    }

Supongo que te gusta

Origin blog.csdn.net/lafsca5/article/details/126608538
Recomendado
Clasificación