当前位置: 首页 > news >正文

视觉理解多模态模型转为API服务

将一个视觉理解多模态模型推理转为API服务,输入图像和文本,流式输出:

import io
import torch
from PIL import Image
from fastapi import FastAPI, UploadFile, File, Form
from fastapi.responses import StreamingResponse
from transformers import AutoModel, AutoTokenizer# 初始化 FastAPI 应用
app = FastAPI()# 模型路径
model_path = "/data/models/minicpm3v-4b"# 加载模型和分词器(只在启动时加载一次)
print("Loading model, please wait...")
model = AutoModel.from_pretrained(model_path,trust_remote_code=True,attn_implementation='eager',torch_dtype=torch.bfloat16
).eval().cuda()tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
print("Model loaded successfully.")def generate_stream(image: Image.Image, prompt: str):"""流式生成回复"""msgs = [{'role': 'user', 'content': [image, prompt]}]res = model.chat(image=None,msgs=msgs,tokenizer=tokenizer,sampling=True,stream=True)for new_text in res:yield new_text@app.post("/chat")
async def chat(image: UploadFile = File(...),prompt: str = Form(...)
):# 读取图像文件img_bytes = await image.read()img = Image.open(io.BytesIO(img_bytes)).convert('RGB')return StreamingResponse(generate_stream(img, prompt), media_type="text/plain")# 启动服务
if __name__ == "__main__":import uvicornuvicorn.run("app:app", host="0.0.0.0", port=8900, reload=False)

测试该服务:

import requestsurl = "http://localhost:8900/chat"with open("image.png", "rb") as f:files = {"image": f,"prompt": (None, "Describe what you see in this image.")}with requests.post(url, files=files, stream=True) as r:for chunk in r.iter_content(chunk_size=None):print(chunk.decode("utf-8"), end="", flush=True)

输出示例:
在这里插入图片描述

http://www.xdnf.cn/news/594793.html

相关文章:

  • 【Hexo】1.搭建本地初始默认的博客
  • 链表day4
  • 多线程初阶(3)
  • 数据表格控件TeeGrid for VCL/FMX:让数据“说话”更直观!
  • Android滑动冲突解决方法
  • 西交交互增强与细节引导的具身导航!OIKG:基于观察图交互与关键细节融合框架下的视觉语言导航
  • unittest
  • GITLIbCICD流水线搭建
  • 【Java高阶面经:数据库篇】17、分库分表分页查询优化:告别慢查询与内存爆炸
  • 软件设计师“设计原则”真题考点分析——求三连
  • [Usaco2007 Dec]队列变换 题解
  • AUTOSAR图解==>AUTOSAR_SRS_PortDriver
  • 硅基计划2.0 学习总结 叁
  • CLIP中的被动学习
  • OpenAI宣布:核心API支持MCP,助力智能体开发
  • memcpy 函数的使用 (C语言)
  • 110kV/630mm2电缆5km的交流耐压试验兼顾110kVGIS开关用
  • 彩礼的异化:婚姻市场中的资本规训与性别政治批判
  • NV013NV024美光固态闪存NV028NV034
  • Tomcat多实例配置
  • 从零开始学习QT——第一步
  • vue组件渲染到iframe里面(同域名下),组件可以在同一项目下维护
  • VPC的作用
  • python调wfdb库读欧洲st-t数据库
  • 让办公更聪明:OA系统如何重塑企业协作模式
  • 第六部分:第五节 - 数据持久化 (基础):管理厨房的原材料库存
  • NACOS2.3.0开启鉴权登录
  • 基于深度学习的无线电调制识别系统
  • 数据库基础面试题(回答思路和面试建议)
  • 小林八股Java集合笔记(8k字概要版)