使用mediapip 检测pose 并作为一个服务

代码

import uvicorn
from fastapi import FastAPI, HTTPException
import cv2
import mediapipe as mp
from pydantic import BaseModelapp = FastAPI()# 创建一个模型来序列化姿态数据
class PoseData(BaseModel):landmarks: list# 初始化MediaPipe的姿态估计模型
mp_pose = mp.solutions.pose
pose = mp_pose.Pose()# 初始化摄像头
cap = cv2.VideoCapture("q888.mp4")@app.get("/pose")
def get_pose():# 从摄像头读取一帧success, image = cap.read()if not success:raise HTTPException(status_code=500, detail="Failed to capture image")# 转换为RGB格式,因为MediaPipe需要RGB图像image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 处理图像以获取姿态数据results = pose.process(image)# 如果没有检测到姿态,返回错误if not results.pose_landmarks:raise HTTPException(status_code=404, detail="No pose detected")# 获取所有地标的位置和IDlandmarks = []for landmark in results.pose_landmarks.landmark:landmarks.append({'x': landmark.x,'y': landmark.y,'z': landmark.z,'visibility': landmark.visibility})# 返回姿态数据return PoseData(landmarks=landmarks)if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=8000)# 释放资源cap.release()pose.close()

解析

当然,以下是该代码的逐行解析:

import uvicorn
from fastapi import FastAPI, HTTPException
import cv2
import mediapipe as mp
from pydantic import BaseModel
  • 导入必要的库:uvicorn 用于运行 FastAPI 应用,FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,HTTPException 用于处理 HTTP 错误,cv2 是 OpenCV 的 Python 绑定库,用于图像处理,mediapipe 是一个跨平台的机器学习解决方案库,用于构建各种感知增强应用,BaseModel 用于数据验证和设置类型提示。
app = FastAPI()
  • 创建一个 FastAPI 实例。
class PoseData(BaseModel):landmarks: list
  • 定义一个 Pydantic 模型 PoseData,用于序列化和反序列化姿态数据。该模型包含一个名为 landmarks 的列表字段。
mp_pose = mp.solutions.pose
pose = mp_pose.Pose()
  • 初始化 MediaPipe 的姿态估计模型。
cap = cv2.VideoCapture("q888.mp4")
  • 初始化摄像头,这里使用的是视频文件 q888.mp4 而不是实际的摄像头。
@app.get("/pose")
def get_pose():
  • 定义一个路由 /pose,这是一个 GET 请求,返回姿态数据。
    success, image = cap.read()if not success:raise HTTPException(status_code=500, detail="Failed to capture image")
  • 从摄像头读取一帧图像,如果读取失败,则抛出一个 HTTP 500 内部服务器错误。
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
  • 将图像从 BGR 格式转换为 RGB 格式,因为 MediaPipe 需要 RGB 图像。
    results = pose.process(image)
  • 使用 MediaPipe 的姿态估计模型处理图像以获取姿态数据。
    if not results.pose_landmarks:raise HTTPException(status_code=404, detail="No pose detected")
  • 如果没有检测到姿态,则抛出一个 HTTP 404 未找到错误。
    landmarks = []for landmark in results.pose_landmarks.landmark:landmarks.append({'x': landmark.x,'y': landmark.y,'z': landmark.z,'visibility': landmark.visibility})
  • 遍历检测结果中的所有地标,并将它们的位置和可见性添加到 landmarks 列表中。
    return PoseData(landmarks=landmarks)
  • 返回序列化的姿态数据。
if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=8000)
  • 如果该脚本作为主程序运行,则启动 FastAPI 应用,监听所有网络接口的 8000 端口。
    cap.release()pose.close()
  • 释放摄像头资源和关闭 MediaPipe 的姿态估计模型。这段代码实际上不会执行,因为 uvicorn.run 是一个阻塞调用,它不会继续执行之后的代码。正确的方法是在一个事件循环中处理资源的释放。

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

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

相关文章

GD32MCU最小系统构成条件

大家是否有这个疑惑:大学课程学习51的时候,老师告诉我们51的最小系统构成?那么进入32位单片机时代,gd32最小系统构成又是怎么样的呢? 1.供电电路 需要确保供电的电压电流稳定,以东方红开发版为例&#xff…

Qt WARNING: Failure to find: xxxxxx.h

重新规划了自定义文件夹后,编译出现错误,如 Qmake WARNING: Failure to find: xxxxxx.h 或者 error: XXXX.h: No such file or directory 如果文件是在windows下直接重新放置新的目录,那么需要修改.pro文件 老文件的可能没有注释或删除&am…

ABAQUS广东正版代理商:亿达四方——达索官方授权

在粤港澳大湾区建设的浪潮中,广东作为中国改革开放的前沿阵地,始终走在科技创新的最前线。亿达四方,作为国际领先的仿真软件ABAQUS在广东地区的官方授权代理商,正以先进的技术和服务,推动着广东地区制造业向智能化、高…

【Tomcat目录详解】关于Tomcat你还需要了解的详细内容

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Tomcat的文件结构2.1 bin目录2.1.1 startup和shutdown2.1.2 Catalina2.1.3 serv…

深入解析EtherCAT `CheckProductCode` 属性:确保系统一致性与安全性

在工业自动化领域,EtherCAT(Ethernet for Control Automation Technology)已成为一种广泛应用的实时以太网协议。它的高性能、灵活性和可靠性使其成为复杂自动化任务的理想选择。然而,确保系统的正确配置和安全运行是使用EtherCAT…

【43页PPT】企业数据架构数据治理设计规划咨询项目建议

本项目聚焦于企业数据资产的深度挖掘与价值最大化,旨在通过一系列定制化策略与架构设计,重塑企业的数据生态体系。我们的核心任务包括: 企业现状深度剖析:全面审视企业当前的数据环境、业务流程及战略方向,精准把握数…

Opencv中的直方图

cv2.calcHist() 直方图是图像中像素强度分布的图形表达方式,统计了每一个强度值所具有的像素个数。并可以计算图像中的一个或多个通道的直方图。 dst cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])images:源图像&am…

Docker 基本管理及部署

目录 1.Docker概述 1.1 Docker是什么? 1.2 Docker的宗旨 1.3 容器的优点 1.4 Docker与虚拟机的区别 1.5 容器在内核中支持的两种技术 1.6 namespace的六大类型 2.Docker核心概念 2.1 镜像 2.2 容器 2.3 仓库 3.安装Docker 3.1 查看 docker 版本信息 4.…

Java程序打印日志

一、maven依赖 POM文件中添加以下依赖&#xff0c;maven依赖的jar包版本可以在maven central repository 查看 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version><…

【C语言】《回调函数》详细解析

目录 1. 什么是回调函数&#xff1f;2. 回调函数的用途3. 回调函数的基本实现3.1 定义回调函数类型3.2 注册回调函数3.3 使用回调函数 4. 示例与输出5. 注意事项6. 参考文献7. 结束语 回调函数&#xff08;Callback Function&#xff09;在C语言中是一种非常重要且常用的编程技…

CentOS7将yum源更换为国内源保姆级教程(含一键脚本)

在 CentOS 7 中更换 YUM (Yellowdog Updater Modified) 源到国内镜像可以显著提升软件包的下载速度。以下是一种常见的方法来更换为国内源&#xff0c;例如阿里云镜像&#xff1a; 备份原有源配置文件&#xff1a; sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d…

Apple trackpad 一代在win10下使用

鼠标点的食指有的累&#xff0c;翻出来一个旧的Apple trackpad一代&#xff0c;经典的电池仓和蓝牙配置。 支持手势操作&#xff0c;双指滑动可以滚动滚动条。 使用官方 Boot Camp 驱动程序。 有个AppleWirelessTrackpad64.exe安装就可以。

FPGA上板项目(一)——点灯熟悉完整开发流程、ILA在线调试

目录 创建工程创建 HDL 代码仿真添加管脚约束添加时序约束生成 bit 文件下载ILA 在线调试 创建工程 型号选择&#xff1a;以 AXU9EG 开发板为例&#xff0c;芯片选择 xczu9eg-ffvb1156-2-i 创建 HDL 代码 注意&#xff1a;由于输入时钟为 200MHz 的差分时钟&#xff0c;因此…

一文带你入门机器学习降维算法

专栏介绍 1.专栏面向零基础或基础较差的机器学习入门的读者朋友,旨在利用实际代码案例和通俗化文字说明,使读者朋友快速上手机器学习及其相关知识体系。 2.专栏内容上包括数据采集、数据读写、数据预处理、分类\回归\聚类算法、可视化等技术。 3.需要强调的是,专栏仅介绍主…

2024年高职云计算实验室建设及云计算实训平台整体解决方案

随着云计算技术的飞速发展&#xff0c;高职院校亟需构建一个与行业需求紧密结合的云计算实验室和实训平台。以下是针对2024年高职院校云计算实验室建设的全面解决方案。 1、在高职云计算实验室的建设与规划中&#xff0c;首要任务是立足于云计算学科的精准定位&#xff0c;紧密…

4.SpringBoot自定义封装Starter实践

目录 概述旧版2.7之后自定义Starter 概述 SpringBoot自定义封装Starter实践 旧版 在SpringBoot2.7之前&#xff0c;META-INF 下 spring.factories 加 org.springframework.boot.autoconfigure.EnableAutoConfigurationXXAutoConfiguration 2.7之后 SpringBoot2.7推出新的自动配…

LeetCode 2974.最小数字游戏:排序+交换奇偶位

【LetMeFly】2974.最小数字游戏&#xff1a;排序交换奇偶位 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-number-game/ 你有一个下标从 0 开始、长度为 偶数 的整数数组 nums &#xff0c;同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏&#xff…

爬虫-浏览器自动化

什么是selenium selenium是浏览器自动化测试框架&#xff0c;原本用于网页测试。但到了爬虫领域&#xff0c;它又成为了爬虫的好帮手。有了 selenium&#xff0c;我们便不再需要判断网页数据加载的方式&#xff0c;只要让 selenium 自动控制浏览器&#xff0c;就像有双无形的手…

字体反爬之自动化通过字体文件生成映射字典

1、首先找到以.ttf结尾的字体文件,下载下来,以我的字体文件sfont.ttf为例 sont.ttf下载地址https://download.csdn.net/download/lingyingdon/89534953 目前只测试了.ttf文件。如果想使用woff字体文件,请自行测试 2、下载分割字体文件的软件fontforge, 安装后将安装路径添加…

【以史为镜、以史明志,知史爱党、知史爱国】中华上下五千年之-元朝

元朝是中国历史上第一个由蒙古族族建立的大统一封建王朝。完整的元王朝历史进程分为四个阶段&#xff1a; 元朝的历史让我们一笔带过&#xff0c;相信大家也不怎么喜欢看。同意的点赞&#xff01; 元朝的前身——蒙古汗国&#xff08;1206年—1271年&#xff09; 建立王朝统治—…