Google出了一个开源的、跨途径的、可定制化的机器学习处理方案工具包,给在线流媒体(当然也能够用于一般的视频、图画等)供给了机器学习处理方案。感兴趣的同学能够翻开这个网址了解概略:mediapipe.dev/
它供给了手势、人体姿态、人脸、物品等辨认和寻找功用,并供给了C++、Pyth电脑截图快捷键ctrl加什么on、JavaPythonScript等编程言语的工具包以及iOS、Andjavascript高档程序设计roid途径的处理方案,今天我们就来看一下怎样运用Medjavascript是干什么的iaPipe供给的人体姿态辨认功用,运用Python编程结束一个“引体向上检测”的程序。
电脑需求设备Python3,主张设备Python3.8.x的版别。除此之外,还opencv物体辨认需求设备Opencv-Python、MediaPipe以及numpy几个工具包,能够运用pip进行设备:
pip install mediapipe numpy opencv-python
我的电脑opencv-python是Python3.8.3,各工具包版opencv调用摄像头别是:
mediappython123渠道登录ipe==0.8.3.1
numpy==1.20.2
opepython培训班膏火一般多少ncv-python==4.5.1.48
编写一个poseutil.py模块,这个postutil模块有一个PoseDetector类,供给了检测人体姿态、opencv物体辨认获取人体姿态数据以及获取人体关节的视点的办法。代码如下,详细处理看代码注释:
import cv2
import mediapipe as mp
import math
class PoseDetector():
'''
人体姿态检测类
'javascript:void(0)''
def __init__(self,
static_image_mode=False,
upper_body_onlpython是什么意思y=Fpython123渠道登录alse,
smooth_landmarks=True,
mipython是什么意思n_detection_confidence=0.5,
min_tracking_confidence=0.5):
'''
初始化
:param static_image_python是什么意思mode: 是否是静态图片,默以为否
:param upper_body_only: 是否是上半身,python编程默以为否
:param smooth_landmarks: 设置为True减python编程少颤抖
:param min_detectionopencv物体辨认_confidenpython保留字ce:人员检测模型的最小置信度值,默以为0.5
:param min_tracking_conpython编程fidence:姿态可信符号的最小置信度值,默许电脑快捷键为0.5
'''
self.static_image_mode = static_image_mode
self.upper_body_only = upper_body_only
self.smooth_landmarks = smooth_landmarks
self.min_detectjavascript九九乘法表ion_confidence = min_detection_confidence
self.min_trackopencv装置教程ing_confidence = min_topencv3和4的差异racking_confidence
# 创立一个Pose方针用于检测人体姿态
self.pose = mp.solutions.pose.Ppython下载装置教程o电脑怎样截图se(self.static_i电脑怎样录屏mage_mode,电脑怎样康复出厂设置 self.javascript什么意思upper_body_only, self.opencv入门要学多久smooth_landmarks,
self.min_dpython123渠道登录etection_confidence, self.min_tracking_confidence)
def fijavascript和java的差异nd_pose(self, img, draw=True):
'''
检测姿态办法
:param img电脑键盘功用基础知识: 一帧图JavaScript像
:param draw: 是否画出人体姿态节点和联接图
:returJavaScriptn: 处python怎样读理过的图画
'''
imgRGB = cv2.cvtCol电脑快捷键or(img, cv2.COLOR_BGR2RGB)
# pose.process(imgRGB) 会辨认这帧图片中的人体姿态数据,保存到self.results中
sopencv人脸辨认算法elf.results = selpython能够做什么作业f.pose.process(imgRGB)
if self.resul电脑开不了机ts.pose_landmarks:
if draw:
mp.solutions.drawing_utils.draw_landmarks(img, self.results.pose_landmarks,
mp.solutions.pose.POSE_CONNECTIONS)
return img
def find_positions(self, img):
'''
获取人体姿态数据
:ppython培训班膏火一般多少aram img: 一帧图画
:param draw: 是否画出人体姿态节点和联接图
:return: 人体姿态数据列表
'''
# 人体姿态数据列表,每个成员由3个数字组成:id, x, y
# id代表人体的某个关opencv库节点,x和y代表坐电脑怎样康复出厂设置标方位数据
self.lmslist = []
if self.results.pose_landm电脑截图快捷键arks:
for id, lm in enumerate(self.results.pose_landmarks.landmark):
h,机器学习 w, c = img.shape
cjavascript面试题x, cy = int(lm.x * w), i电脑快捷键nt(lm.y * h)
self.lmslist.append([id, cx, cy])
return self.lmslist
def find_angle(self, img, p1, p2, p3, draw=True):
'opencv装置教程''
获取人体姿态中3个点p1-p2-p3的视点
:param img: 一帧图画
:param p1: 第1个点
:param p2opencv物体辨认: 第2个点
:param p3: 第3个点
:python编程param draw: 是否画出3个点的联接图
:retu电脑快捷键rn: 视点
'''
x1, y1 = self.lmslist[p1javascript和java的差异][1], self.lmslist[p1][2]
x2, y2 = self.lmopencv-pythonslis电脑蓝屏t[p2][1], self.lmslist[p2][电脑键盘功用基础知识2]
x3, y3 = self.lmslist[p3][1], self.lmslist[p3][2]
# 运用三角函数公式获取3个点p1-p2-p3,以p2为角的视点值,0-1电脑键盘功用基础知识80度之间
angle = int(math.degrees(math.atan2(y1-y2, x1-x2) - math.atan2(y3-y2, x3-x2)))
if angle < 0:
angle = angle + 360
if angle > 180:
angle = 360 -opencv人脸辨认算法 angle
if draw:
cv2.circle(img, (x1, y1), 8, (0, 255, 255), cv2.FILLED)
cv2.circle(img, (x2, y2), 15, (255, 0, 255), cv2.FILLED)
cv2.circle(img, (x3, y3), 8, (0, 255, 255), cv2.FILLED)
cv2.line(img, (x1, y1), (x2, y2), (255, 255, 255, 3))
cv2opencv装置教程.line(img, (x2, y2), (x3, y3), (255, 255, 255, 3))
#cv2.putText(img, str(angle), (x2-50, y2+50),cv2opencv装置教程.FONT_opencv入门要学多久HERSHEY_SIMPjavascript:void(0)LEX, 2, (0, 255, 255), 2)
return angle
编写另Python一个posetracking.py代码,在这个代码中,调用poseut电脑il.py的PoseDetector类供给的办法,从引体向上的视频中(或者是实时摄像头视频)获取人体左右手肘的的曲折视点,假定我们以手肘视点从170度(完全放松时)到20度(引体向上拉上去时)确定一个规范的引体向上,这样我们就可电脑蓝屏以检测规范引体向上结束个数啦。
从上图可知:11、13、15这3个点是左边肩膀、手肘和手腕的节点,而12、1javascript是干什么的4、16是右手的。完好代码如下:
import cv2
import numpy as np
from poseutil import PoseDetector
# opencv翻开一个视频
cap = cv2.VideoCapture('mp4/1.mp4')
# 创立一个PoseDetectpython下载装置教程or类的方针
detector = PoseDetectopython基础教程r()
# 方向和结束次数的变量
dir = 0
count = 0
while True:
# 读取视频图片帧
success, img = cap.read()
if success:
# 检测视频图片帧中人体姿态
img = detectopython怎样读r.find_pose(img, draw=True)
# 获取人体姿态列表数据
lmslist = detector.find_positions(img)
# 右python怎样读手肘的视点
right_angle = detector.find_ajavascript面试题ngle(iopencv物体辨认mg, 12, 14, 16)
# 以170到20度检测右手肘曲折的程度
right_per = np.interp(right_angle, (20, 170), (100, 0))
# 进度条高度数据
right_bar = np.interp(right_angle, (20, 170), (2python12300, 400))
# 运用opencv画进度条和写右手肘曲折的程度
cv2.rectangle(img, (1200, 200), (1python下载装置教程220, 400), (0, 255, 0), 3)Python
cv2.rectangle(img, (1200, intpython编程(right_bar)), (1220, 400), (0, 2OpenCV55, 0), cv2.FILLED)
cv2.putText(img, str(int(right_per)) + '%', (1190, 450), cv2.FONT_HERSHEY_Spython能够做什么作业IMPLEX, 1, (0, 255, 255), 2)
# 左手肘的视点
left_angle = detector.find_angle(img, 11, 13, 15)
left_per = np.interp(lefjavascript:void(0)t_angle, (20, 170), (100, 0))
left_bar = np.interp(left_angle, (20, 170), (200,javascript:void(0) 400)opencv-python)
cv2.recpython编程tangle(img, (500, 200), (520, 400), (0, 255, 0), 3)
cv2.rectangle(img, (500, int(left_bar)), (5opencv装置20, 400), (0, 255, 0), cv2.FILLED)
cv2.opencv库putText(img, str(int(left_per)) + '%', (490, 450), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2)
# 检测个数,我这儿设置的是从20%做到80%,就以为是一个
if (left_per >= 80 and right_per >= 80):
if dir == 0:
count = count + 0.5
dir = 1
if (left_per <= 20 and right_per <= 20):
if dir == 1:
count = coopencv入门要学多久unt + 0.5
dir = 0
# 在视频上显示结束个数
cv2.putText(img, str(int(count)), (1000, 100), cv2.FONT_HERSHEY_SIMPLEX, 3, (0, 255, 255), 4)
cv2.imshow('Image', img)
else:
break
k = cv2.waitKey(1opencv入门要学多久)
if k == ord('q'):
bpython培训班膏火一般多少reak
cap.rpython123elease()
cv2.destroyAllWindows()
运转代码,我们会看到2JavaScript个手肘的视点改变以及2个进度条和结束个数,运用它就能够检测规范javascript是干什么的引体向上的结束个数啦。