【python FastAPI】fastapi中如何限制输入参数,如何让docs更好看,如何自定义错误码json返回

原则:

  1. 输入输出都基于BaseModel
  2. 依靠JSONResponse制定返回错误的json信息
  3. 依靠装饰器中@app.post制定responses字典从而让docs文档更丰富

import uvicorn
from pydantic import BaseModel, Field
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from transformers import BlipProcessor, BlipForConditionalGeneration
from fastapi.responses import JSONResponse
from PIL import Image
import io
import base64class UpscalerRequest(BaseModel):base64_image: str = Field(...,title="Base64 Encoded Image",description="The base64-encoded image that you want to upscale.")outscale: float = Field(...,ge=1.0,  # 大于等于1.0le=5.0,  # 小于等于5.0title="Upscale Factor",description="The scaling factor for image upscaling. Should be between 1.0 and 5.0.")class UpscalerResponse(BaseModel):base64_image_out: str = Field(...,title="Base64 Encoded Upscaled Image",description="The base64-encoded image after upscaling.")class CustomErrorResponse:def __init__(self, description: str, error_code: int, detail: str):self.description = descriptionself.error_code = error_codeself.detail = detaildef to_response_dict(self):return {"description": self.description,"content": {"application/json": {"example": {"error_code": self.error_code, "detail": self.detail}}},}def __call__(self, extra_detail=None):if extra_detail is not None:self.detail = f"detail:{self.detail}, extra_detail:{extra_detail}"return JSONResponse(content={"error_code": self.error_code, "detail": self.detail}, status_code=self.error_code)image_upscaler_CustomErrorResponse = CustomErrorResponse("超分执行错误", 501, "upscale error")@app.post("/image_upscaler", response_model=UpscalerResponse, summary="Image Upscaler",responses={501: image_upscaler_CustomErrorResponse.to_response_dict()})
def image_upscaler(request: UpscalerRequest):"""Image Upscaler.Parameters:- `base64_image`: The base64-encoded image.- `outscale`: The scaling factor for image upscaling (between 1.0 and 5.0).Returns:- `output`: The base64-encoded upscaled image.Example:```python
import requests
import base64
from PIL import Image
from io import BytesIO# 1. 读取图像文件并转换为base64字符串
image_path = "car.png"
with open(image_path, "rb") as image_file:base64_image = base64.b64encode(image_file.read()).decode("utf-8")# 2. 构造请求数据
outpainting_request = {"base64_image": base64_image,"outscale": 3,
}# 3. 发送HTTP POST请求
api_url = "http://home.elvisiky.com:7862/image_upscaler"
response = requests.post(api_url, json=outpainting_request)# 4. 处理响应
if response.status_code == 200:result_data = response.json()# 5. 保存base64编码的图像为文件detected_map_base64 = result_data["base64_image_out"]detected_map_image = Image.open(BytesIO(base64.b64decode(detected_map_base64)))detected_map_image.save("base64_image_out.png")print("图像保存成功!")
else:print(f"API调用失败,HTTP状态码:{response.status_code}")print(response.json())```"""try:base64_image = request.base64_imagelogging.info(f"image_upscaler, image length {len(base64_image)}")img = decode_image_from_base64(base64_image)img_cv2 = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)output = enhance_image(img_cv2, outscale=request.outscale)if output is None:return image_upscaler_CustomErrorResponse()else:output_base64 = base64.b64encode(cv2.imencode('.png', output)[1]).decode('utf-8')return {"base64_image_out": output_base64}except Exception as e:return image_upscaler_CustomErrorResponse(str(e))if __name__ == '__main__':uvicorn.run(f'{os.path.basename(__file__).split(".")[0]}:app',host='0.0.0.0',port=7862,reload=False,workers=1)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/158845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python之pyc文件的生成与反编译

目录 1、什么是pyc文件 2、手动生成pyc文件 3、pyc文件的执行 4、pyc文件的反编译 1、什么是pyc文件 pyc文件(PyCodeObject)是Python编译后的结果。当python程序运行时,编译的结果是保存于PyCodeObject,程序运行结束后&#x…

(动手学习深度学习)第13章 实战kaggle竞赛:狗的品种识别

文章目录 1. 导入相关库2. 加载数据集3. 整理数据集4. 图像增广5. 读取数据6. 微调预训练模型7. 定义损失函数和评价损失函数9. 训练模型 1. 导入相关库 import os import torch import torchvision from torch import nn from d2l import torch as d2l2. 加载数据集 - 该数据…

编程中的各种常见的文件编码有哪些?

在计算机编程中,常见的文件编码有很多种。下面是一些常见的文件编码: UTF-8(Unicode Transformation Format - 8-bit): 它是一种变长字符编码,能够表示世界上几乎所有的字符,是最常用的 Unicode…

java抽象类和static

抽象类 并不是所有的类都是用来描绘对象的, 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类 使用abstract 修饰类抽象类不能被实例化。在抽象类当中,可以有抽象方法,或者 非抽象方法!什么是抽象方法,一个方…

基于野马算法优化概率神经网络PNN的分类预测 - 附代码

基于野马算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于野马算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于野马优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现

目录 Ⅰ. 实践说明 0x00 计数器(Counter) 0x01 异步计数器(Asynchronous Counter)

深度学习中的图像融合:图像融合论文阅读与实战

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 abs 介绍图像融合概念,回顾sota模型,其中包括数字摄像图像融合,多模态图像融合, 接着评估一些代表方法 介绍一些常见应用,比如RGBT目标跟踪,…

鸿蒙4.0开发笔记之DevEco Studio启动时不直接打开原项目(二)

1、想要在DevEco Studio启动时不直接打开关闭前的那个项目,可以在设置中进行。 有两个位置可以进入“设置”,一个是左上角的File>Settings,二是右上方的设置图标。 2、进入Settings界面以后,选择Appearance&Behavior下面…

Java Stream中的API你都用过了吗?

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 在本教程中,您将通过大量示例来学习 Java 8 Stream API。 Java 在 Java 8 中提供了一个新的附加包,称为 java.util.stream。该包由类、接口和枚举组成&#x…

AIGC创作系统ChatGPT网站系统源码,支持最新GPT-4-Turbo模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

万宾科技智能井盖的效果怎么样?

日常出行过程中,人们最不想看到交通拥堵或者道路维修等现象,因为这代表出行受到影响甚至会导致不能按时赴约等。所以城市路面的安全和稳定,是市民朋友非常关心的话题。骑行在路上的时候,如果经过井盖时发出异常声响,骑…

Apache配置文件详解

引言: Apache是一种功能强大的Web服务器软件,通过配置文件可以对其行为进行高度定制。对于初学者来说,理解和正确配置Apache的配置文件是非常重要的。本文将详细解释Apache配置文件的各个方面,并给出一些入门指南,帮助读者快速上手。 1、主配置文件(httpd.conf): 主…

jQuery【菜单功能、淡入淡出轮播图(上)、淡入淡出轮播图(下)、折叠面板】(五)-全面详解(学习总结---从入门到深化)

目录 菜单功能 淡入淡出轮播图(上) 淡入淡出轮播图(下) 折叠面板 菜单功能 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…

这是大学生就业网站最基础的布局。

<!DOCTYPE html> <html> <head> <title>大学生就业网站</title> <style> /* Reset default margin and padding */ *, *::before, *::after { margin: 0; padding: 0; box-s…

2023亚太地区数学建模C题思路+模型+代码+论文

2023亚太杯&#xff0c;亚太地区C题思路模型&#xff1a;开赛后第一时间更新&#xff0c;获取见文末名片 【赛程安排】   注册截止日期&#xff1a;北京时间2023年11月22日&#xff08;星期三&#xff09;   竞赛开始时间&#xff1a;北京时间2023年11月23日&#xff08;星…

【python基础】文件和异常详解:使用、读取、写入、追加、保存用户的信息,以及优雅的处理异常

文章目录 一. 从文件中读取数据1. 读取整个文件2. 文件路径3. 逐行读取4. 创建一个包含文件各行内容的列表 二. 写入文件1. 写入空文件2. 写入多行3. 附加到文件 三. 异常1. 处理ZeroDivisionError异常2. 使用try-except代码块3. try-except-else ing4. 处理FileNotFoundError异…

centos7安装mariadb

步骤 1: 更新系统 确保您的系统已更新为最新版本。在终端或命令行中执行以下命令&#xff1a; sudo yum update步骤 2: 安装MariaDB 添加MariaDB仓库 sudo yum install epel-release # 安装 EPEL 软件仓库 sudo rpm -Uvh https://downloads.mariadb.com/MariaDB/mariadb_re…

SpingBoot原理

目录 配置优先级Bean管理 (掌握)Bean的获取 ApplicationContext.getBeanBean的作用域 Scope("prototype") Lazy第三方Bean Bean Configuration SpringBoot底层原理 起步依赖与自动配置(无需手撸但面试高频知识点)自动配置引入第三方依赖常见方案方案1&#xff1a;Com…

46-设计问题-最小栈

原题链接&#xff1a; 198. 打家劫舍 题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&a…