【ModelScope】部署一个属于自己的AI服务

2024-01-04 22:12

本文主要是介绍【ModelScope】部署一个属于自己的AI服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

技术栈是Fastapi。

FastAPI 是一个现代、快速(基于 Starlette 和 Pydantic)、易于使用的 Python web 框架,主要用于构建 RESTful API。以下是 FastAPI 的一些优势:

  1. 性能卓越: FastAPI 基于 Starlette 框架,并使用 Pydantic 进行数据验证,因此具有出色的性能。它通过异步编程利用 Python 3.7+ 中的 async/await 特性,使其能够处理大量并发请求。

  2. 自动文档生成: FastAPI 自动生成交互式 API 文档(Swagger UI 和 ReDoc),让开发者能够轻松地查看和测试 API 端点,同时提供即时的反馈和文档。

  3. 强类型注解: FastAPI 使用 Python 的类型提示来定义 API,同时利用 Pydantic 模型进行请求和响应的验证,这提供了强大的静态类型检查和自动文档的支持。

  4. 自动验证: 使用 Pydantic 模型,FastAPI 自动验证请求的数据,并在数据不符合预期时返回错误。这有助于提高代码的稳健性和可维护性。

  5. 异步支持: 支持异步处理请求,可以使用异步函数来处理请求,使得 FastAPI 在处理高并发时表现出色。

  6. 便捷的依赖注入系统: FastAPI 提供了一个灵活的依赖注入系统,让你能够方便地注入和管理依赖项,使代码更加清晰和可测试。

  7. WebSocket 支持: FastAPI 提供了对 WebSocket 的原生支持,能够轻松地实现实时通信。

  8. 易于学习: FastAPI 的语法和设计理念使其易于学习和使用,特别是对于熟悉 Python 的开发者。

 

安装modelscope

conda create -n modelscope python=3.8
conda activate modelscope
pip install modelscope

激活虚拟环境

conda activate modelscope

 

server.py代码

import argparseimport uvicorn
from fastapi import FastAPIfrom modelscope.server.api.routers.router import api_router
from modelscope.server.core.event_handlers import (start_app_handler,stop_app_handler)def get_app(args) -> FastAPI:app = FastAPI(title='modelscope_server',version='0.1',debug=True,swagger_ui_parameters={'tryItOutEnabled': True})app.state.args = argsapp.include_router(api_router)app.add_event_handler('startup', start_app_handler(app))app.add_event_handler('shutdown', stop_app_handler(app))return appdef add_server_args(parser):parser.add_argument('--model_id', required=True, type=str, help='The target model id')parser.add_argument('--revision', required=True, type=str, help='Model revision')parser.add_argument('--host', default='0.0.0.0', help='Host to listen')parser.add_argument('--port', type=int, default=8000, help='Server port')parser.add_argument('--debug', default='debug', help='Set debug level.')parser.add_argument('--llm_first',type=bool,default=True,help='Use LLMPipeline first for llm models.')if __name__ == '__main__':parser = argparse.ArgumentParser('modelscope_server')add_server_args(parser)args = parser.parse_args()app = get_app(args)uvicorn.run(app, host=args.host, port=args.port)

 任务一:人脸检测

命令行中虚拟环境中运行脚本

python server.py --model_id damo/cv_resnet50_face-detection_retinaface --revision v2.0.2

 

访问http://127.0.0.1:8000/docs打开文档

 

  • describe方法描述请求参数和输出形式 
{"schema": {"task_name": "face-detection","schema": {"input": {"type": "object","properties": {"image": {"type": "string","description": "Base64 encoded image file or url string."}}},"parameters": {},"output": {"type": "object","properties": {"scores": {"type": "array","items": {"type": "number"}},"boxes": {"type": "array","items": {"type": "number"}},"keypoints": {"type": "array","items": {"type": "number"}}}}}},"sample": null
}
  • call方法(是模型推理的入口)

    • 两种请求方式(post)

    • curl方式(encode_base64表示图片转换为base64后的形式)

  • 图片转换base64的链接可以使用在线转https://tool.jisuapi.com/pic2base64.html

    curl -X 'POST' \ 'http://127.0.0.1:8000/call' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "input":{"image":"encode_base64"}'
  • face-detection_retinaface请求参数体(界面请求)直接使用fastapi界面请求或者使用apifox等

  • {"input":{"image":"encode_base64"}}

    请求结果

 返回结果解释

{"scores": [0.9998026490211487],"boxes": [[164.9207000732422,82.86209106445312,353.395263671875,340.145263671875]],"keypoints": [[214.5664520263672,188.255859375,303.5237121582031,190.91671752929688,256.9284362792969,242.95065307617188,223.42758178710938,283.54241943359375,287.28448486328125,286.402587890625]]
}

返回图像中人脸的分数,越大表示有人脸的可能性越大,boxes表示人脸的矩形框,左上角x,y坐标和右下角x,y坐标,keypoints返回左眼、右眼、鼻尖、左嘴角、右嘴角的坐标值x,y。 

输入图片

 根据boxes和keypoints画图

 

import cv2# 读取图像
image = cv2.imread('0.png')# 定义矩形框的坐标和大小x, y, x1, y1 = 164,82,353,340
w = 353-164
h = 340-82# 画矩形框
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)# 显示结果
# cv2.imshow('Rectangle', image)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
cv2.imwrite('0_rectangle.png', image)

 

import cv2# 读取图像
image = cv2.imread('0.png')radius = 5  # 点的半径
color = (0, 0, 255)  # 点的颜色,通常使用BGR格式
thickness = -1  # 为了画一个实心圆,线条宽度设置为-1
keypoints = [214.5664520263672,
188.255859375,
303.5237121582031,
190.91671752929688,
256.9284362792969,
242.95065307617188,
223.42758178710938,
283.54241943359375,
287.28448486328125,
286.402587890625]
print(len(keypoints))
for i in range(0,len(keypoints),2):cv2.circle(image, (int(keypoints[i]),int(keypoints[i+1])), radius, color, thickness)# 显示结果
# cv2.imshow('Point', image)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
cv2.imwrite('0_keypoints.png', image)

 

 需要注意的是不同的任务请求体的内容不一样,需要明确每个任务的请求参数具体有哪些。

 任务二:人脸融合

 第二种任务,人脸融合,需要重启服务,将model_id和revision替换。

 

python server.py --model_id damo/cv_unet-image-face-fusion_damo --revision v1.3

此时访问http://127.0.0.1/docs 

执行一下describe方法 

 

{"schema": {"task_name": "image-face-fusion","schema": {"input": {"type": "object","properties": {"template": {"type": "string","description": "Base64 encoded image file or url string."},"user": {"type": "string","description": "Base64 encoded image file or url string."}}},"parameters": {"type": "object","properties": {"user": {"type": "object","default": null}}},"output": {"type": "object","properties": {"output_img": {"type": "string","description": "The base64 encoded image."}}}}},"sample": null
}

input有两个参数,第一个是template,表示模版;第二个参数是user,表示用户的图片,最终的目的就是将用户的图片的脸替换到模版上

parameters参数一般使用默认的就行,不填,如果有特殊需求可自行尝试

output会返回一个换好脸图像的base64编码

请求体

{"input": {"template": "base64_template","user":"bas64_user"}
}

 template

 User

 

 Ourput

参考链接:

https://github.com/modelscope/modelscope/blob/master/modelscope/server/api_server.py 

这篇关于【ModelScope】部署一个属于自己的AI服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/570759

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/