You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Web服务器托管ML图像分类函数并向客户端返回预测结果

实现方案

你可以通过把预测函数封装为HTTP接口的方式实现服务端托管,客户端上传图片后服务端返回预测结果,不需要把大体积模型打包到安卓端。

第一步:安装服务端依赖

你需要先安装接口框架和模型运行所需的依赖:

pip install fastapi uvicorn pillow tensorflow numpy

第二步:编写服务端接口代码

你可以直接基于你现有的预测函数改造,新建main.py文件写入以下内容:

from keras.models import load_model
from PIL import Image, ImageOps
import numpy as np
from fastapi import FastAPI, File, UploadFile
import io

# 初始化FastAPI应用
app = FastAPI()

# 模型和标签全局加载,只在服务启动时运行一次,提升性能
labels= ["Banana", "Fan", "Clock","Coin","Leaf","Paper_airplane","Pen","Phone","Spoon","Tomato"]
model = load_model('keras_model.h5')
data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)

def RunPrediction(img):
    image = img
    size = (224, 224)
    image = ImageOps.fit(image, size, Image.ANTIALIAS)
    image_array = np.asarray(image)
    normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1
    data[0] = normalized_image_array
    prediction = model.predict(data)
    return prediction

# 预测接口,接收上传的图片文件
@app.post("/predict")
async def predict(image: UploadFile = File(...)):
    # 读取上传的图片内容
    image_content = await image.read()
    img = Image.open(io.BytesIO(image_content)).convert("RGB")
    # 调用预测函数
    prediction = RunPrediction(img)[0]
    # 取置信度最高的分类结果
    max_idx = np.argmax(prediction)
    result = {
        "label": labels[max_idx],
        "confidence": float(prediction[max_idx]),
        "all_probabilities": prediction.tolist()
    }
    return result

第三步:启动服务

在代码和keras_model.h5模型文件所在目录下运行以下命令启动服务:

uvicorn main:app --host 0.0.0.0 --port 8000
  • 本地测试时可以直接用http://127.0.0.1:8000访问接口
  • 部署到云服务器后,将127.0.0.1替换为服务器公网IP即可供外部设备调用

客户端调用示例

Python脚本调用

安装requests依赖:

pip install requests

调用代码:

import requests

url = "http://你的服务IP:8000/predict"
# 替换为你要预测的图片路径
files = {"image": open("test.jpg", "rb")}
response = requests.post(url, files=files)
print(response.json())

安卓端调用

安卓端可以用OkHttp或Retrofit框架构造POST请求,把图片作为文件参数上传到上述接口,解析返回的JSON数据即可拿到预测结果,无需在本地加载大体积模型文件。

注意事项
  • 生产环境部署建议添加接口鉴权逻辑,避免接口被恶意调用占用资源
  • 高并发场景下可以用Gunicorn结合Uvicorn启动服务,提升稳定性和并发处理能力
  • 如果不需要返回所有分类的概率,可以只返回置信度最高的标签和置信度,减少传输数据量

内容的提问来源于stack exchange,提问作者CatCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:24:00