Uvicorn运行FastAPI图像分类服务报cannot convert dictionary update sequence错误
问题根因
报错和Uvicorn无关,是FastAPI序列化响应阶段触发的错误:你接口返回的score是TensorFlow的张量或Numpy数组类型,FastAPI默认的JSON编码器不支持这类非Python原生数据类型,因此序列化失败。
修复方法
仅需要修改接口返回逻辑,将score转换为支持JSON序列化的Python原生类型即可:
把原代码中最后一行返回逻辑
return score
修改为
return score.tolist()
如果你的分类结果是单值,也可以用return float(score)返回单个数值。
可选优化
你当前代码中保存临时文件的步骤可以省略,直接读取上传的文件对象即可,减少不必要的IO开销,修改后的图片读取逻辑参考:
@app.post('/api/predict') async def predict_image(file: UploadFile = File(...)): # 直接读取上传文件内容 content = await file.read() img = keras.preprocessing.image.load_img( BytesIO(content), target_size=input_shape ) img_array = image.img_to_array(img) img_array = tf.expand_dims(img_array, 0) predictions = model.predict(img_array) score = predictions[0] return score.tolist()
这样就不需要处理临时文件的创建和删除逻辑,也避免了临时文件清理不彻底的问题。
内容的提问来源于stack exchange,提问作者NominalSystems
相关产品推荐
相关产品推荐

