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

这篇具有很好参考价值的文章主要介绍了【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 argparse

import uvicorn
from fastapi import FastAPI

from 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 = args
    app.include_router(api_router)

    app.add_event_handler('startup', start_app_handler(app))
    app.add_event_handler('shutdown', stop_app_handler(app))
    return app


def 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

【ModelScope】部署一个属于自己的AI服务,人工智能 

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

【ModelScope】部署一个属于自己的AI服务,人工智能 

  • 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"}}

    请求结果

【ModelScope】部署一个属于自己的AI服务,人工智能

 返回结果解释

{
    "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。 

输入图片

【ModelScope】部署一个属于自己的AI服务,人工智能

 根据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)

【ModelScope】部署一个属于自己的AI服务,人工智能

 【ModelScope】部署一个属于自己的AI服务,人工智能

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

 任务二:人脸融合

 第二种任务,人脸融合,需要重启服务,将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

【ModelScope】部署一个属于自己的AI服务,人工智能

 User

 【ModelScope】部署一个属于自己的AI服务,人工智能

 Ourput

【ModelScope】部署一个属于自己的AI服务,人工智能

参考链接:

https://github.com/modelscope/modelscope/blob/master/modelscope/server/api_server.py 文章来源地址https://www.toymoban.com/news/detail-780266.html

到了这里,关于【ModelScope】部署一个属于自己的AI服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 新手小白如何使用Laf免费接入Claude,并快速拥有一个属于自己的AI助手

    Claude是一款人工智能聊天机器人。它可以像朋友一样和你自然地互动聊天。和Claude聊天体验很像跟人聊天,你可以讨论任何话题,问各种各样的问题。Claude会尽量理解你说的每一句话,并给出合适的回复。相比之下,Chat GPT是一个开源的对话模型,主要用于生成对话的回复内

    2024年03月23日
    浏览(77)
  • 【gitlab部署】centos8安装gitlab(搭建属于自己的代码服务器)

    在团队开发过程中,想要拥有高效的开发效率,选择一个好的 代码开发工具 是必不可少的。搭建git服务器有两种方式 ● github(国外的,很卡)或者gitee(国内的,网速还可以,可以设置项目为私有,防止其他人可见) ● 通过gitlab搭建自己的git服务器 要求 ● gitlab十分吃内存,建议

    2024年02月11日
    浏览(53)
  • 使用Google Colab免费部署属于自己的Stable Diffusion模型在线服务

    Stable Diffusion模型(稳定扩散模型) 是一种用于生成式建模的深度学习模型,它使用随机微分方程(SDE)来建模连续时间的动态过程。在图像、声音、文本等各种领域都有广泛的应用。与传统的生成式模型相比,Stable Diffusion模型能够生成更加高质量的样本。其原理是通过对随

    2023年04月24日
    浏览(84)
  • 本地使用IIS快速搭建一个属于自己的网站,并发布公网访问「无需购买云服务器」

    在网上各种教程和介绍中,搭建网页都会借助各种软件的帮助,比如网页运行的Apache和Nginx、数据库软件MySQL和MSSQL之类,为方便用户使用,还出现了XAMPP、PHPStudy、宝塔面板等等一系列集成服务,都是为了方便我们能快速建立网站。是不是不适用这些软件就无法建立网站了呢?

    2024年02月05日
    浏览(65)
  • [手机Linux] 二,安卓手机安装linux系统, 部署完全属于自己的服务器(Linux Deploy)

    背景: 之前买过一台阿里云服务器1G1核的,玩起来真的是卡脑壳,卡卡的,经费在燃烧却得不到灰烬,而是萌想做一台完全属于自己的服务器,而是百度发现原来我们的安卓手机也可以当服务器器(Linux),而是翻了一下箱底找到了曾经的宝贝,差点当垃圾(其实可以拿去市场换

    2024年02月04日
    浏览(52)
  • java调用chatgpt接口,实现专属于自己的人工智能助手

    今天突然突发奇想,就想要用java来调用chatget的接口,实现自己的聊天机器人,但是网上找文章,属实是少的可怜(可能是不让发吧)。找到了一些文章,但是基本都是通过调用别人的库来完成的,导入其他的jar还有不低的学习成本,于是就自己使用HttpClient5写了一个,在这里讲

    2024年02月03日
    浏览(57)
  • 如何自己制作一个属于自己的小程序?

    在这个数字化时代,小程序已经成为了我们生活中不可或缺的一部分。它们方便快捷,无需下载安装,扫一扫就能使用。如果你想拥有一个属于自己的小程序,不论是为了个人兴趣,还是商业用途,都可以通过编程或者使用免代码工具来实现。下面,我们就来探讨一下如何自

    2024年01月24日
    浏览(54)
  • 搭建一个属于自己的springboot项目

    最近公司要上个新系统,指定由我来带两个人进行开发,既然是新项目,那么项目搭建的事就落到我的头上了。现在都是使用springboot进行开发,为此我搭环境使用的是springboot,具体java环境如下, 使用springboot的版本是2.3.3.RELEASE。使用maven进行项目管理, 总结下,我使用到的

    2024年02月07日
    浏览(52)
  • 如何搭建一个属于自己的网站(使用宝塔面板)

    1.域名 简单的解释一下,我们购买的域名会给我们一个公网ip,通常这个公网ip是很难记.所以我们可以将域名与ip进行\\\"绑定\\\". 域名的话建议购买一个有意义,不要太贵的.注意次年续费的价格!! 阿里云 或者 腾讯云 下面这个是我的域名(和我名字差不多的意思) 2.服务器 服务器的话

    2024年02月05日
    浏览(53)
  • 人工智能发展简史——未来是属于AI人工智能的。

       目录 人工智能发展简史 第一章:起步期-20世纪50年代及以前

    2024年02月09日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包