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
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";
}
}