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

seo网站分析报告/众志seo

seo网站分析报告,众志seo,做网站的优点,合肥seo报价文章目录MediaPipe 入门案例读取视频文件初始化 Hands 对象在关键位置绘制图形mp_draw.draw_landmarks() 函数原型说明在做 MediaPipe 项目的时候,经常需要唤醒摄像头进行视频采集,学习的时候可以使用视频替换摄像头采集动作,这就是本篇博客的…

文章目录

    • MediaPipe 入门案例
      • 读取视频文件
    • 初始化 Hands 对象
    • 在关键位置绘制图形
    • mp_draw.draw_landmarks() 函数原型说明

在做 MediaPipe 项目的时候,经常需要唤醒摄像头进行视频采集,学习的时候可以使用视频替换摄像头采集动作,这就是本篇博客的的由来。

MediaPipe 入门案例

为了便于学习,我们先直接展示入门案例,然后查看从代码角度进行讲解。

import cv2
import mediapipe as mp# 创建VideoCapture对象,读取视频
cap = cv2.VideoCapture('./demo.mp4')# 初始化mediapipe
mp_hands = mp.solutions.hands.Hands()while cap.isOpened():# 读取视频帧success, image = cap.read()if not success:print("读取失败")continue# 将图像转换为RGB格式image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 处理图像results = mp_hands.process(image)# 将图像转换回BGR格式image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)# 显示结果cv2.imshow('MediaPipe Hands', image)if cv2.waitKey(5) & 0xFF == 27:break# 释放资源
cap.release()
cv2.destroyAllWindows()

为了让代码跑起来,需要提前安装 opencv-python 库和 mediapipe 库,直接使用 pip 命令安装即可。

视频我们使用了 B 站 @蜜加原创手指舞 的视频,只做学习演示 Demo。

上述代码运行结果如下所示。

在这里插入图片描述
接下来我们逐行解释一下代码。

读取视频文件

# 创建VideoCapture对象,读取视频
cap = cv2.VideoCapture('./demo.mp4')

上述代码初始化了一个名为 capVideoCapture 对象,用于从当前目录中名为 'demo.mp4' 的视频文件中读取帧。

cv2.VideoCapture() 函数接受一个参数,即视频文件的路径。

VideoCapture 对象可以用于从视频文件中读取帧,也可以用于从摄像头中读取帧。如果要从摄像头中读取帧,则可以将参数设置为摄像头的索引,例如 cap = cv2.VideoCapture(0),其中 0 表示默认摄像头的索引。

如果只是单纯查看视频,可以使用下述代码:

import cv2# 初始化对象
cap = cv2.VideoCapture('./demo.mp4')# 检查视频是否打开
if not cap.isOpened():print("视频文件打开失败")# 读取视频
while cap.isOpened():# 逐帧读取ret, frame = cap.read()if ret:# 展示读取结果cv2.imshow('帧', frame)# 按 Q 退出if cv2.waitKey(25) & 0xFF == ord('q'):breakelse:breakcap.release()
cv2.destroyAllWindows()

初始化 Hands 对象

mp_hands = mp.solutions.hands.Hands()

mp.solutions.hands.Hands() 函数创建 Hands 类的一个新实例,该类是 MediaPipe Hands 解决方案的一部分。

该类提供了检测图像或视频帧中手部的方法,并返回有关检测到的手部的信息,例如它们的关键点和左右手性。

接下来可以在循环中读取视频的每一帧,然后使用 mp_hands.process(imgRGB) 获取【手位置】。

import cv2
import mediapipe as mpcap = cv2.VideoCapture('./demo.mp4')
# 定义并引用mediapipe中的hands模块
mp_hands = mp.solutions.hands.Hands()while True:success, img = cap.read()imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # cv2图像初始化results = mp_hands.process(imgRGB)print(results.multi_hand_landmarks)cv2.imshow("HandsImage", img)  # CV2窗体cv2.waitKey(1)  # 关闭窗体

代码运行得到如下结果。

landmark {x: 0.18026168644428253y: 0.4238351583480835z: -0.0214223675429821
}
landmark {x: 0.45827752351760864y: 0.39915671944618225z: 0.011419275775551796
}

mp_hands.process(imgRGB) 是 MediaPipe Hands 解决方案的一部分,用于在 RGB 图像中检测手部。
它接受一个 RGB 图像作为输入,并返回一个 SolutionOutputs 对象,其中包含有关检测到的手部的信息。

results.multi_hand_landmarks 是 SolutionOutputs 对象的一个属性,它包含一个列表,其中每个元素都是一个 HandLandmark 对象,表示检测到的一个手部的关键点。如果没有检测到手部,则 results.multi_hand_landmarks 为 None。

每个 HandLandmark 对象包含一个 landmark 属性,它是一个列表,其中每个元素都是一个 NormalizedLandmark 对象,表示手部的一个关键点。
NormalizedLandmark 对象包含 xyz 属性,表示关键点在图像坐标系中的归一化坐标。
xy 属性的值在 [0, 1] 范围内,表示关键点在图像中的位置

z 属性的值表示关键点的深度,但在 MediaPipe Hands 解决方案中未使用。

在关键位置绘制图形

前文已经读取到手部识别的关键节点,接下来在读取到的位置处绘制图形。

    if results.multi_hand_landmarks:for handLms in results.multi_hand_landmarks:for index, x_y in enumerate(handLms.landmark):h, w, c = img.shape# 获取节点关键坐标cx, cy = int(x_y.x * w), int(x_y.y * h)# 绘制一个圆形cv2.circle(img, (cx, cy), 7, (4, 255, 255), cv2.FILLED)

在这里插入图片描述
接下来我们实现连接手指骨架,在上述代码中输入如下代码。

mp_draw = mp.solutions.drawing_utils

mp.solutions 提供了使用 MediaPipe 解决方案在图像或视频帧上绘制关键点和连接的实用函数。

该模块包含几个函数,可用于在图像或视频帧上绘制关键点和连接,包括 draw_landmarks()draw_connections()draw_landmarks_on_image()。这些函数的输入参数包括要绘制的图像或帧,以及要绘制的关键点或连接。

下面演示如何使用 mp.solutions.drawing_utils 在图像上绘制关键点和连接的示例代码:

# 绘制手部特征点:
mp_draw.draw_landmarks(img, handLms, mp.solutions.hands.HAND_CONNECTIONS)

运行代码得到如下效果。

在这里插入图片描述
在上述代码中用到了 draw_landmarks() 函数。

该函数用于在图像中绘制手部关键点和连接。它接受三个参数:

  • img:要在其上绘制手部关键点和连接的图像。
  • handLms:一个 HandLandmark 对象,表示要绘制的手部的关键点。可以从 SolutionOutputs 对象的 multi_hand_landmarks 属性中获取 HandLandmark 对象。
  • mp.solutions.hands.HAND_CONNECTIONS:一个常量,表示要绘制的手部关键点之间的连接。

mp_draw.draw_landmarks() 函数原型说明

该函数还可以接受其他参数,用来控制绘制的手部关键点和连接的外观,其原型如下所示:

mp_draw.draw_landmarks(image: np.ndarray,landmark_list: Union[mp_hands.HandLandmarkList, mp_pose.PoseLandmarkList],connections: Optional[mp_drawing.DrawingSpec] = None,landmark_drawing_spec: Optional[mp_drawing.DrawingSpec] = None,connection_drawing_spec: Optional[mp_drawing.DrawingSpec] = None
) -> None
  • landmark_list 参数是一个 HandLandmarkList 或 PoseLandmarkList 对象,表示要绘制的手部或姿势的关键点。
  • connections 参数是一个 DrawingSpec 对象,表示要绘制的关键点之间的连接。
  • landmark_drawing_specconnection_drawing_spec 参数分别是 DrawingSpec 对象,表示要用于绘制关键点和连接的颜色、线宽和半径。

以下是 DrawingSpec 类的构造函数:

mp_drawing.DrawingSpec(color: Tuple[int, int, int],thickness: int = 1,circle_radius: Optional[int] = None
)
  • color 参数是一个 RGB 元组,表示要用于绘制关键点和连接的颜色。
  • thickness 参数是一个整数,表示要用于绘制连接的线宽。
  • circle_radius 参数是一个整数,表示要用于绘制关键点的半径。

完善一下代码,添加关键点颜色。

# 连接线样式
lineStyle = mp_draw.DrawingSpec()
lineStyle.color = (0, 0, 255)
lineStyle.thickness = 1
# 绘制手部特征点:
mp_draw.draw_landmarks(img, handLms, mp.solutions.hands.HAND_CONNECTIONS, landmark_drawing_spec=lineStyle)

在这里插入图片描述

http://www.lbrq.cn/news/1754299.html

相关文章:

  • 做网站开发学什么/seo搜索引擎优化方法
  • 网站开发与维护竞赛/免费发布广告信息的网站
  • 网站上怎么做企业推广/武汉百度seo网站优化
  • 欧美 电台 网站模板/深圳网络推广招聘
  • 东山县建设局网站/友情链接交换平台有哪些
  • 用网站空间可以做有后台的网站吗/狼雨的seo教程
  • 企业做淘宝客网站有哪些/郑州seo外包服务
  • 马云做网站最早/软文代写兼职
  • 零售商城/百度排名优化
  • 长沙建网站/怎么做微信推广和宣传
  • 有哪些网站是用vue做的/百度首页
  • 生产企业做网站的费用怎么做账/百度指数什么意思
  • 泰州建设工程信息网/朝阳区seo搜索引擎优化介绍
  • 上海网站托管/起名最好的网站排名
  • 馨端网站建设/郑州网站seo
  • 为网站做推广/2022适合小学生的简短新闻
  • 本地的沈阳网站建设/开鲁网站seo不用下载
  • 我的世界手机做图的网站/网络推广关键词优化公司
  • 能免费做婚礼邀请函的网站/排名优化推广
  • 蓬莱网站建设公司报价/网站seo完整seo优化方案
  • 2345网址导航浏览器主页/北京seo百科
  • 网站开发初学/semir森马
  • 做网站江西/郑州网站建设公司排名
  • 网站文章做排名/宁波正规优化seo软件
  • 做网站公司名字/杭州网络优化公司排名
  • 九江市建设局官方网站/互联网精准营销
  • 15年做哪个网站能致富/网站关键词排名快速提升
  • 做婚纱网站的图片素材/昆明seo
  • 昆明网站建设费用/广告推广文案
  • 自己做网站app/南宁seo服务优化
  • GaussDB union 的用法
  • ChatGPT Agent深度解析:告别单纯问答,一个指令搞定复杂任务?
  • 分表聚合助手类
  • 【世纪龙科技】汽车故障诊断与排除仿真教学软件让课堂更高效安全
  • setTimeout、setInterval、requestAnimationFrame的使用以及区别
  • 铁路基础设施无人机巡检技术及管理平台