一、在tensorflow中新建及保存模型
启动Jupyter Notebook
新建Notebook
代码
from flask import Flask, request, jsonify # type: ignore
import numpy as np # type: ignore
import tensorflow as tf # type: ignore
import json
from PIL import Image # type: ignore
app = Flask(__name__)
# 加载模型(确保模型文件与此脚本在同一目录下,或者提供正确的路径)
model = tf.keras.models.load_model('mnist_model.h5')
def get_image_metadata(image_path):
img = Image.open(image_path)
metadata = {
'filename': image_path.split('/')[-1],
'width': img.width,
'height': img.height,
'format': img.format,
'mode': img.mode
}
return metadata
def image_to_json(image_path, output_path):
metadata = get_image_metadata(image_path)
with open(output_path, 'w') as f:
json.dump(metadata, f, ensure_ascii=False, indent=4)
def preprocess_image(img):
# 将 PIL 图像转换为 numpy 数组
img_array = np.array(img)
# 归一化
img_array = img_array / 255.0
# 如果模型需要特定的维度(例如,扩展维度和颜色通道),则进行调整
img_array = np.expand_dims(img_array, axis=0)
# 如果模型接受的是灰度图像,但是 PIL 加载的是 RGB 图像,需要转换为灰度
if img_array.shape[3] == 3:
img_array = np.mean(img_array, axis=3, keepdims=True)
return img_array
@app.route('/predictlast', methods=['GET'])
def predictlast():
# if 'file' not in request.files:
# return jsonify({'error': 'No file part in the request'}), 400
# file = request.files['file']
# file = Image.open('path_to_your_image.jpg')
# 如果用户未选择文件,浏览器也会提交一个空文件部分,没有文件名
# if file.filename == '':
# return jsonify({'error': 'No selected file'}), 400
# 读取图片文件
img = Image.open('path_to_your_image.jpg')
# 转换为模型需要的格式
img_array = preprocess_image(img)
# 使用模型进行预测
prediction = model.predict(img_array)
# print(prediction)
# 假设你的模型输出的是 one-hot 编码,你需要找到概率最高的类别
# predicted_class = np.argmax(prediction, axis=1)[0]
# 返回预测结果
# return jsonify({'predicted_class': predicted_class})
return "dfd"
@app.route('/test', methods=['GET'])
def test():
print(233)
# data = request.get_json() # 假设客户端发送JSON格式的数据
# data =get_image_metadata('path_to_your_image.jpg')
image_to_json('path_to_your_image.jpg', 'image_metadata.json')
# input_data = np.array(data).reshape(1, -1) # 转换输入数据格式以适应模型
# print(input_data)
# prediction = model.predict(input_data) # 使用模型进行预测
# return jsonify({'prediction': prediction.tolist()}) # 返回预测结果作为JSON响应
return "dfdf"
if __name__ == '__main__':
app.run(debug=True) # 启动Flask应用(开发模式)
二、VScode 启动Flask命令
pip install tensorflow
pip install Pillow
python -- mnist_hello.py
启动效果
三、访问地址
http://127.0.0.1:5000/predictlast