java - 通过flask将图像文件从spring boot java发送到python
问题描述
所以我从这个论坛看到了这段代码:Connect Java with Python Flask
from flask import Flask, jsonify, request
import json
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/add/', methods = ['POST'])
def add_numbers():
if request.method == 'POST':
decoded_data = request.data.decode('utf-8')
params = json.loads(decoded_data)
return jsonify({'sum': params['x'] + params['y']})
if __name__ == '__main__':
app.run(debug=True)
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class PostClass {
public static void main(String args[]){
HttpURLConnection conn = null;
DataOutputStream os = null;
try{
URL url = new URL("http://127.0.0.1:5000/add/"); //important to add the trailing slash after add
String[] inputData = {"{\"x\": 5, \"y\": 8, \"text\":\"random text\"}",
"{\"x\":5, \"y\":14, \"text\":\"testing\"}"};
for(String input: inputData){
byte[] postData = input.getBytes(StandardCharsets.UTF_8);
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty("Content-Length", Integer.toString(input.length()));
os = new DataOutputStream(conn.getOutputStream());
os.write(postData);
os.flush();
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally
{
if(conn != null)
{
conn.disconnect();
}
}
}
}
它展示了如何将变量从 java 传递给 python,然后从 python 它将响应返回 json 结果。我想知道的是你如何为文件图像做类似的事情,以便python可以使用flask.request.files ['request from java']。我需要将文件图像发送到 python,以便 python 使用机器学习来预测图像。请协助。对不起,如果这个问题听起来很蹩脚。我只有6个月的经验。这是从我的 android studio 接收响应的 python 代码。我想从我的 Spring Boot 中实现相同的请求,以便我将使用可以接收来自 android 和 java 的请求的相同 python。
@app.route('/', methods=['GET', 'POST'])
def handle_request():
imagefile = flask.request.files['image']
# to extract file name
filename = werkzeug.utils.secure_filename(imagefile.filename)
print("\nReceived image File name: " + imagefile.filename)
imagefile.save(filename)
imageML = load_img('androidFlask.jpg', color_mode='rgb', target_size= (224,224))
imageArray = img_to_array(imageML)
imageArray = np.expand_dims(imageArray, axis = 0)
imageArray = imageArray/255.0
prediction = breedModel.predict(imageArray)
predicted_class = np.argmax(np.round(prediction), axis = 1)
result = str(label_mapping[predicted_class[0]])
result = result.replace("_", " ")
return result
app.run(host="0.0.0.0", port=5000, debug=True)
解决方案
和我有类似问题的朋友可以看看这篇文章。使用带有 HttpURLConnection 的 POST 发送文件 这似乎是我的问题的解决方案。
推荐阅读
- javascript - 有没有办法确定参数是否是 JavaScript 中的方法?
- .htaccess - .htaccess 将所有子域重定向到相应的文件夹
- javascript - 链接从生成器函数返回的承诺
- docker - 如何使用单个 docker compose 在不同目录中构建容器
- python - 关于霍夫变换及其绘图(3点绘制)
- spring-boot - 如何使用 JUnit5 正确设置 Spring Boot 2.2 REST 完全集成测试
- java - 为什么我在JAVA中得到这个“表达式的类型必须是数组类型但解析为字符串”
- reactjs - 在 React 中为大文件(超过 4kb)加载 WASM 模块的正确方法
- javascript - 在 Javascript 中将文本区域限制为 6 行(行)
- pine-script - 如何更正我在 line.new() 中的负索引?脚本