做电子元器件销售什么网站好/360浏览器网页版入口

做电子元器件销售什么网站好,360浏览器网页版入口,军事最新消息中国,网站建设一般多钱手势识别是计算机视觉领域中的重要方向,通过对摄像机采集的手部相关的图像序列进行分析处理,进而识别其中的手势,手势被识别后用户就可以通过手势来控制设备或者与设备交互。完整的手势识别一般有手的检测和姿态估计、手部跟踪和手势识别等。…

手势识别是计算机视觉领域中的重要方向,通过对摄像机采集的手部相关的图像序列进行分析处理,进而识别其中的手势,手势被识别后用户就可以通过手势来控制设备或者与设备交互。完整的手势识别一般有手的检测和姿态估计、手部跟踪和手势识别等。

一、手掌检测

import cv2
import mediapipe as mp# 初始化 MediaPipe 手部模型
mp_hands = mp.solutions.hands
hands = mp_hands.Hands()# 初始化视频流
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:break# 转换为 RGBrgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 获取手部关键点results = hands.process(rgb_frame)# 如果检测到手部if results.multi_hand_landmarks:for landmarks in results.multi_hand_landmarks:# 绘制手部关键点mp.solutions.drawing_utils.draw_landmarks(frame, landmarks, mp_hands.HAND_CONNECTIONS)# 显示图像cv2.imshow('Hand Detection', frame)# 按 'q' 键退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源
cap.release()
cv2.destroyAllWindows()

这段代码是一个简单的手部检测应用程序,使用了 OpenCV 和 MediaPipe 库来实时检测和绘制手部关键点。下面是对代码的详细解释:

1. 导入必要的库
import cv2
import mediapipe as mp
  • cv2 是 OpenCV 的 Python 接口库,用于图像处理和计算机视觉任务。
  • mediapipe 是 Google 提供的一个跨平台框架,用于实现高效的计算机视觉任务,这里用它来做手部关键点检测。
2. 初始化 MediaPipe 手部模型
mp_hands = mp.solutions.hands
hands = mp_hands.Hands()
  • mp_hands 是 MediaPipe 提供的手部检测模块。通过 mp.solutions.hands 访问。
  • hands = mp_hands.Hands() 创建了一个 Hands 对象,用于进行手部检测。它会自动处理图像中的手部检测、手部关键点识别和跟踪。
3. 初始化视频流
cap = cv2.VideoCapture(0)
  • cv2.VideoCapture(0) 打开了计算机的默认摄像头(0表示第一个摄像头)。返回的 cap 对象用于读取视频流。
4. 开始处理视频流
while True:ret, frame = cap.read()if not ret:break
  • cap.read() 从摄像头读取一帧图像并返回两个值:retframeret 是布尔值,表示图像是否成功读取,frame 是当前帧的图像。
  • 如果 retFalse,则说明读取图像失败,程序退出循环。
5. 转换图像为 RGB
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
  • OpenCV 使用 BGR(蓝绿红)色彩空间,而 MediaPipe 要求输入图像为 RGB(红绿蓝)色彩空间。因此,我们用 cv2.cvtColor 将图像从 BGR 转换为 RGB。
6. 处理图像以检测手部关键点
results = hands.process(rgb_frame)
  • hands.process(rgb_frame) 将 RGB 图像传递给 MediaPipe 的 Hands 模型进行处理。
  • results 包含了检测到的手部信息,包括手部关键点的位置。如果图像中没有手部,results.multi_hand_landmarks 会是空的。
7. 绘制手部关键点
if results.multi_hand_landmarks:for landmarks in results.multi_hand_landmarks:mp.solutions.drawing_utils.draw_landmarks(frame, landmarks, mp_hands.HAND_CONNECTIONS)
  • results.multi_hand_landmarks 是一个包含所有检测到的手的关键点位置的列表。如果检测到手部,它会返回一个非空列表。
  • landmarks 是每个手部的关键点集合,每个关键点是一个 (x, y, z) 坐标。
  • mp.solutions.drawing_utils.draw_landmarks(frame, landmarks, mp_hands.HAND_CONNECTIONS) 将每个手的关键点绘制到 frame 图像上,并且连接关键点,形成手的骨架结构。mp_hands.HAND_CONNECTIONS 用于连接不同的关键点。
8. 显示处理后的图像
cv2.imshow('Hand Detection', frame)
  • cv2.imshow 显示处理后的图像(frame)。窗口的标题是 ‘Hand Detection’。
9. 按键退出
if cv2.waitKey(1) & 0xFF == ord('q'):break
  • cv2.waitKey(1) 等待键盘输入,1 表示等待 1 毫秒。返回值是按下键的 ASCII 码。
  • 如果按下 q 键,ord('q') 的值与 cv2.waitKey(1) 返回值相等,程序就会退出循环,停止视频流。
10. 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()
  • cap.release() 释放摄像头资源。
  • cv2.destroyAllWindows() 关闭所有 OpenCV 显示的窗口。

二、手关键点估计

要进行手关键点估计,可以使用 MediaPipe 库来进行高效的手部检测,结合 OpenCV 来进行图像处理和显示。这里将展示一个基于 MediaPipe 手部模型的手关键点估计的完整代码。

MediaPipe 提供了一个预训练的模型来检测手部的 21 个关键点,包括手指关节和手掌部位。我们将使用 MediaPipe 提供的 Hands 模块来检测手部关键点。

import cv2
import mediapipe as mp# 初始化 MediaPipe 手部检测模型
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(min_detection_confidence=0.7, min_tracking_confidence=0.5)
mp_drawing = mp.solutions.drawing_utils# 打开摄像头
cap = cv2.VideoCapture(0)while True:# 读取每一帧图像ret, frame = cap.read()if not ret:print("无法获取视频帧")break# 将图像转换为 RGB 格式,MediaPipe 需要 RGB 输入rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 获取手部关键点检测结果results = hands.process(rgb_frame)# 如果检测到手部if results.multi_hand_landmarks:for landmarks in results.multi_hand_landmarks:# 绘制手部关键点和连接线mp_drawing.draw_landmarks(frame, landmarks, mp_hands.HAND_CONNECTIONS)# 获取并显示每个关键点的坐标for idx, landmark in enumerate(landmarks.landmark):h, w, c = frame.shapecx, cy = int(landmark.x * w), int(landmark.y * h)cv2.putText(frame, str(idx), (cx, cy), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1, cv2.LINE_AA)cv2.circle(frame, (cx, cy), 5, (0, 0, 255), -1)  # 绘制红色的关键点# 显示图像cv2.imshow('Hand Keypoint Estimation', frame)# 按 'q' 键退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头资源并关闭窗口
cap.release()
cv2.destroyAllWindows()
1.代码解释
  1. 初始化 MediaPipe 手部模型

    • 使用 mp.solutions.hands.Hands() 创建手部检测模型,min_detection_confidence=0.7min_tracking_confidence=0.5 表示最低的检测和追踪置信度阈值,适用于动态环境中。
  2. 打开摄像头

    • 使用 cv2.VideoCapture(0) 打开计算机的默认摄像头,并获取实时视频流。
  3. 图像转换

    • OpenCV 默认使用 BGR 色彩空间,但 MediaPipe 需要 RGB 色彩空间,因此使用 cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) 将图像转换为 RGB 格式。
  4. 处理图像并获取手部关键点

    • hands.process(rgb_frame) 用于处理图像并检测手部关键点。results 对象包含手部信息,如果检测到手部,results.multi_hand_landmarks 将返回手部的 21 个关键点的位置。
  5. 绘制关键点和连接线

    • mp_drawing.draw_landmarks(frame, landmarks, mp_hands.HAND_CONNECTIONS) 绘制手的 21 个关键点以及它们之间的连接线(即手指的骨架)。
    • landmarks.landmark 包含了每个关键点的 (x, y, z) 坐标,其中 xy 是图像中的像素坐标,z 是深度信息(在 3D 空间中的位置,但对于 2D 图像可忽略)。
  6. 显示关键点坐标

    • 对于每个关键点,通过 cv2.putText 在图像上显示关键点的索引。cv2.circle 用来在图像上绘制关键点位置。
  7. 显示视频流

    • 使用 cv2.imshow() 来显示处理过的每一帧图像,展示检测到的手部关键点。
  8. 退出条件

    • 按下 q 键退出程序并释放摄像头资源。
2.手部关键点索引

MediaPipe 的 Hands 模型检测手部的 21 个关键点,索引如下(从 0 到 20):

  • 0: 手腕
  • 1: 大拇指根部
  • 2: 大拇指第一关节
  • 3: 大拇指第二关节
  • 4: 大拇指尖端
  • 5: 食指根部
  • 6: 食指第一关节
  • 7: 食指第二关节
  • 8: 食指尖端
  • 9: 中指根部
  • 10: 中指第一关节
  • 11: 中指第二关节
  • 12: 中指尖端
  • 13: 无名指根部
  • 14: 无名指第一关节
  • 15: 无名指第二关节
  • 16: 无名指尖端
  • 17: 小指根部
  • 18: 小指第一关节
  • 19: 小指第二关节
  • 20: 小指尖端

三、实例

YOLO(You Only Look Once)是一个非常强大的目标检测算法,特别适用于实时应用。它将目标检测任务转化为一个回归问题,能够快速且准确地检测图像中的目标物体。虽然 YOLO 本身并没有直接针对手部关键点估计的功能,但可以用它来检测手部区域,然后结合其他模型(比如 MediaPipe 或深度学习的关键点检测模型)来进行手关键点估计。

  1. YOLO 检测手部:首先用 YOLO 模型检测图像中的手部位置,YOLO 会输出手部的边界框。
  2. 手部关键点估计:然后,我们可以通过一个手部关键点估计模型(如 MediaPipe 或自定义深度学习模型)来进一步估计手部的 21 个关键点。
import cv2
import torch
import mediapipe as mp# 初始化 MediaPipe 手部检测模型
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(min_detection_confidence=0.7, min_tracking_confidence=0.5)
mp_drawing = mp.solutions.drawing_utils# 加载 YOLOv5 模型(选择合适的模型大小)
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # 'yolov5s' 是一个小型的 YOLOv5 模型# 打开摄像头
cap = cv2.VideoCapture(0)while True:# 读取每一帧图像ret, frame = cap.read()if not ret:print("无法获取视频帧")break# 使用 YOLOv5 检测图像中的物体(包括手部)results = model(frame)  # 检测结果,包括边界框、标签、置信度等# 提取 YOLOv5 检测到的手部(通常手部被标记为 0 或其他标签,依赖于训练数据)# 获取所有检测到的物体的边界框hands_detections = results.xyxy[0]  # 获取检测结果,xyxy 形式 [x_min, y_min, x_max, y_max, confidence, class]for detection in hands_detections:if detection[5] == 0:  # 类别 0 代表手部(具体根据训练数据集而定)x_min, y_min, x_max, y_max = map(int, detection[:4])# 在图像上绘制手部边界框cv2.rectangle(frame, (x_min, y_min), (x_max, y_max), (255, 0, 0), 2)# 提取手部区域并进行手部关键点估计hand_region = frame[y_min:y_max, x_min:x_max]rgb_hand_region = cv2.cvtColor(hand_region, cv2.COLOR_BGR2RGB)# 使用 MediaPipe 估计手部关键点hand_results = hands.process(rgb_hand_region)# 如果检测到手部关键点if hand_results.multi_hand_landmarks:for landmarks in hand_results.multi_hand_landmarks:# 绘制手部关键点和连接线mp_drawing.draw_landmarks(frame, landmarks, mp_hands.HAND_CONNECTIONS)for idx, landmark in enumerate(landmarks.landmark):h, w, c = frame.shapecx, cy = int(landmark.x * w), int(landmark.y * h)cv2.putText(frame, str(idx), (cx, cy), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1, cv2.LINE_AA)cv2.circle(frame, (cx, cy), 5, (0, 0, 255), -1)  # 绘制红色的关键点# 显示图像cv2.imshow('Hand Detection and Keypoint Estimation', frame)# 按 'q' 键退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头资源并关闭窗口
cap.release()
cv2.destroyAllWindows()
1.代码解析
  1. 加载 YOLOv5 模型
    • torch.hub.load('ultralytics/yolov5', 'yolov5s') 载入 YOLOv5 模型,yolov5s 是一个小型的 YOLOv5 模型,适合实时应用。可以根据需求选择 yolov5myolov5l(更大的模型,精度更高但速度较慢)。
  2. 读取摄像头视频流
    • 使用 cv2.VideoCapture(0) 打开摄像头并读取每一帧图像。
  3. YOLOv5 物体检测
    • 使用 model(frame) 进行图像检测,返回一个 results 对象,其中包含检测到的边界框、类别标签、置信度等信息。
  4. 提取手部区域
    • 如果 YOLO 检测到手部(通过检测类别标号),提取手部的区域并将其转化为 RGB 格式(因为 MediaPipe 需要 RGB 输入)。
  5. MediaPipe 手部关键点估计
    • 使用 hands.process(rgb_hand_region) 进行手部关键点估计,返回手部的关键点信息。
    • 使用 mp_drawing.draw_landmarks() 绘制手部的 21 个关键点和连接线。
  6. 结果显示
    • 将检测到的手部边界框、关键点及连接线显示在视频流上。
  7. 退出条件
    • 按下 q 键退出程序。

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

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

相关文章

VSCode 移除EmmyLua插件的红色波浪线提示

VSCode 中安装插件EmmyLua,然后打开lua文件的时候,如果lua代码引用了C#脚本的变量,经常出现 “undefined global variable: UnityEngineEmmyLua(undefined-global)” 的红色波浪线提示,这个提示看着比较烦人,我们可以通…

【音视频】视频基本概念

一、视频的基本概念 1.1 视频码率(kb/s) 视频码率是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流进度也就越高 1.2 视频帧率(fps) 视频帧率…

Grafana服务安装并启动

Grafana服务安装并启动 1、介绍2、下载Grafana3、解压缩文件4、启动Grafana服务5、增加数据源,填写Prometheus访问地址6、增加图表 1、介绍 Grafana是一个开源的可视化系统监控和警报工具包。 2、下载Grafana 介绍:Grafana是一个开源的可视化系统监控和警报工具包…

MySQL零基础教程14—子查询

子查询比较简单,我们还是通过案例引入。 有时候我们查询的时候,需要用到的不止一个表的数据,比如下面的场景: 查询名字叫李晓红同学的班主任姓名 我们提供三个表的基础信息如下: 从三张表的结构,我们不难…

基于单片机和Wifi技术的智能台灯设计

摘要 :本文主要介绍了基于单片机AT89C51和Wifi技术的智能台灯的硬件和软件设计。该智能台灯具有根据当前光线自动调节灯光亮度的功能,还可对用户使用台灯时处于非正常的距离和姿态时给予报警提示,用户可以随时通过手机app查询智能台灯的报警记…

在MySQL拿到一条慢SQL语句要如何优化?

在工作的过程中,很多时候会发现执行业务逻辑的时候,某一条SQL语句执行得非常慢。这时候,要如何处理这条语句,如何判断语句慢的地方在哪里? 一、初级排查 EXPLAIN慢SQL分析 MySQL官网用法: https://dev.mys…

优选算法的智慧之光:滑动窗口专题(二)

专栏:算法的魔法世界​​​​​​ 个人主页:手握风云 目录 一、例题讲解 1.1. 最大连续1的个数 III 1.2. 找到字符串中所有字母异位词 1.3. 串联所有单词的子串 1.4. 最小覆盖子串 一、例题讲解 1.1. 最大连续1的个数 III 题目要求是二进制数组&am…

2025嵌入式软件开发工程师--音频方向

一、选择题(每题3分,共30分) 1.以下哪个不是C语言中的关键字?( ) A. int B. Float C. Define D. Return 2.以下代码的输出是: ( ) inta 5, b 10; printf("%d“, a b); A. 15 B.16 …

【Python 数据结构 1.零基础复习】

目录 一、输入与输出 1.输入 2.格式化输出 二、数字与变量 1.字符串 & 整型 2.字符串 & 整型 & 浮点型 3.变量 练习 2235. 两整数相加 三、运算与操作 1.四则运算 练习 2769. 找出最大的可达成数字 3.取整与取余 练习 2651. 计算列车到站时间 ​编辑 四、真与假 1…

大模型时代下的数据标注革命:工具、挑战与未来趋势

引言 随着大模型技术的飞速发展,人工智能对高质量标注数据的依赖愈发显著。传统的人工标注方式在效率、成本和场景适应性上逐渐显现瓶颈,而大模型凭借其强大的泛化能力和多模态理解能力,正在推动数据标注从“劳动密集型”向“智能工业化”转…

【azure openai】用tts实现语音对话【demo】

能实现: 只要替换里面的key,就能跑通。 key的查找方法: 【保姆级教程】如何在azure里快速找到openai的key和demo-CSDN博客 代码结构: azure_openai_client.py main.py prompts_config.py speech_utils.py stt01.py tts01.…

Spark(5)host配置

(一.)host配置的作用: hosts 文件是一个本地的文本文件,它的作用是将主机名映射到对应的 IP 地址,在 DNS(域名系统)解析之前,系统会先查询 hosts 文件来确定目标主机的 IP 地址。 (二…

Hive-04之存储格式、SerDe、企业级调优

一、主题 hive表的数据压缩和文件存储格式hive的自定义UDF函数hive的JDBC代码操作hive的SerDe介绍和使用hive的优化 二、要点 1. hive表的文件存储格式 Hive支持的存储数的格式主要有:TEXTFILE(行式存储) 、SEQUENCEFILE(行式存储)、ORC&…

Excel的行高、列宽单位不统一?还是LaTeX靠谱

想要生成田字格、米字格、带拼音标准,方便小学生书法和练字。Word,Excel之类所见即所得是最容易相当的方式。但它们处理带田字格之类背景时,如果没有专用模板、奇奇怪怪的插件,使用起来会碰到各种问题。比如,Word里面用…

[免费]微信小程序(校园)二手交易系统(uni-app+SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序(校园)二手交易系统(uni-appSpringBoot后端Vue管理端),分享下哈。 项目视频演示 【免费】微信小程序(校园)二手交易系统(uni-appSpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bi…

清华北大DeepSeek六册

「清华北大-Deepseek使用手册」 链接:https://pan.quark.cn/s/98782f7d61dc 「清华大学Deepseek整理) 1-6版本链接:https://pan.quark.cn/s/72194e32428a AI学术工具公测链接:https://pan.baidu.com/s/104w_uBB2F42Da0qnk78_ew …

零信任沙箱:为网络安全筑牢“隔离墙”

在数字化浪潮汹涌澎湃的今天,网络安全如同一艘船在波涛汹涌的大海中航行,面临着重重挑战。数据泄露、恶意软件攻击、网络钓鱼等安全威胁层出不穷,让企业和个人用户防不胜防。而零信任沙箱,就像是一座坚固的“隔离墙”,…

【String】917. 仅仅反转字母

917. 仅仅反转字母 - 力扣(LeetCode) 使用双指针,一个指针指向s的开始,一个指向s的末尾,同时遍历即可。

大语言模型学习

大语言模型发展历程 当前国内外主流LLM模型 ‌一、国外主流LLM‌ ‌LLaMA2‌ Meta推出的开源模型,参数规模涵盖70亿至700亿,支持代码生成和多领域任务适配‌57。衍生版本包括Code Llama(代码生成优化)和Llama Chat(对…

3dsmax烘焙光照贴图然后在unity中使用

效果预览 看不清[完蛋!] 实现步骤 使用 软件 软体名称地址photoshophttps://www.adobe.com/products/photoshop.htmlunity3Dhttps://unity.com/3dsmaxhttps://www.autodesk.com.cn/products/3ds-max/free-trialpacker-iohttps://www.uv-packer.com/HDR 贴图地址…