mediapipe——人間の姿勢関節点検出(ポーズモジュール)学習ノート(フル)

1.1 ソリューション API、パラメーター

API/パラメータ 説明する
STATIC_IMAGE_MOD デフォルトはFalseで、入力イメージをビデオ ストリームとして扱います。最初の画像内で最も目立つ人物を検出し、検出に成功した後はポーズのランドマークをさらに特定しようとします。後続の画像では、ターゲットの追跡が失われるまで、別の検出を呼び出すことなく、単にそれらのランドマークを追跡するだけで、計算と待ち時間を削減できます。Trueの場合、人物検出メソッドは各入力画像に対して実行されます。これは、静的で無関係な画像のバッチを処理するのに非常に適しています。
MODEL_COMPLEXITY デフォルトは 1 で、姿勢ランドマーク モデルの複雑さは 0、1、2 です。一般に、ランドマークの精度と推論レイテンシーは、モデルが複雑になるにつれて増加します。
スムーズランドマーク デフォルトは True で、画像を滑らかにし、さまざまな入力画像のポーズ ランドマークをフィルタリングしてジッターを軽減しますが、static_image_mode も True に設定されている場合は無視されます。
上半身のみ デフォルトは False で、上半身のランドマークのみを検出するかどうかを指定します。人体の姿勢には 33 個のランドマーク、上半身の姿勢には 25 個のランドマークがあります。
セグメンテーションを有効にする デフォルトは False です。true に設定すると、ソリューションはポーズ ランドマークに加えてセグメンテーション マスクを生成します。
スムーズセグメンテーション デフォルトは True で、さまざまな入力イメージのセグメンテーション マスクをフィルタリングしてジッターを低減しますが、enable_segmentation が False に設定されている場合、または static_image_mode が True に設定されている場合は無視されます。
min_tracking_confidence デフォルトは 0.5 です。正常に追跡されたとみなされる姿勢ランドマークのランドマーク追跡モデルからの最小信頼値 (0 ~ 1)。それ以外の場合は、次の入力画像で人物検出が自動的に呼び出されます。より高い値に設定すると、ソリューションの堅牢性が向上しますが、待ち時間が長くなります。static_image_mode が True の場合、人物検出はすべての画像フレームで実行されます。
min_detection_confidence デフォルトは 0.5 で、人物検出モデルの最小信頼値 (0 ~ 1 の間) です。しきい値がこのしきい値より高い場合、検出は成功したとみなされます。

1.2 重要な点と接続を描画する

1.2.1 API
  • mediapipe.solutions.drawing_utils.draw_landmarks()

mediapipe.solutions.drawing_utils はモジュールです。最初にモジュールのエイリアスを作成してから、特定の操作を実行できます。

mp_drawing = mp.solutions.drawing_utils
mp_drawing.draw_landmarks()
1.2.2 関数パラメータ
パラメータ 説明する
画像 描かなければならない原画
ランドマークリスト 検出されたキーポイント座標 (results.pose_landmarks)
接続 接続線はこれらの座標を接続する必要があります (mpPose.POSE_CONNECTIONS)。このパラメータが渡されない場合、接続されません。
ランドマーク_図面_仕様 座標の色と太さ
接続図面仕様 接続線の太さや色など
results = pose.process(image)
mpDraw.draw_landmarks(img, results.pose_landmarks, mpPose.POSE_CONNECTIONS)

1.3 姿勢関節点追跡カプセル化モジュール

  • mp.ソリューション.ポーズ
mpPose = mp.solutions.pose  # 姿态识别方法,创建一个别名
#调用myPose模块中的Pose类
pose = mpPose.Pose(static_image_mode=False, # 静态图模式,False代表置信度高时继续跟踪,True代表实时跟踪检测新的结果
                   #upper_body_only=False,  # 是否只检测上半身
                   smooth_landmarks=True,  # 平滑,一般为True
                   min_detection_confidence=0.5, # 检测置信度
                   min_tracking_confidence=0.5)  # 跟踪置信度

1.4 33 個の関節点の座標を表示する

1.4.1 33 関節点パラメータ名

ここに画像の説明を挿入します

class PoseLandmark(enum.IntEnum):
  """The 33 pose landmarks."""
  NOSE = 0
  LEFT_EYE_INNER = 1
  LEFT_EYE = 2
  LEFT_EYE_OUTER = 3
  RIGHT_EYE_INNER = 4
  RIGHT_EYE = 5
  RIGHT_EYE_OUTER = 6
  LEFT_EAR = 7
  RIGHT_EAR = 8
  MOUTH_LEFT = 9
  MOUTH_RIGHT = 10
  LEFT_SHOULDER = 11
  RIGHT_SHOULDER = 12
  LEFT_ELBOW = 13
  RIGHT_ELBOW = 14
  LEFT_WRIST = 15
  RIGHT_WRIST = 16
  LEFT_PINKY = 17
  RIGHT_PINKY = 18
  LEFT_INDEX = 19
  RIGHT_INDEX = 20
  LEFT_THUMB = 21
  RIGHT_THUMB = 22
  LEFT_HIP = 23
  RIGHT_HIP = 24
  LEFT_KNEE = 25
  RIGHT_KNEE = 26
  LEFT_ANKLE = 27
  RIGHT_ANKLE = 28
  LEFT_HEEL = 29
  RIGHT_HEEL = 30
  LEFT_FOOT_INDEX = 31
  RIGHT_FOOT_INDEX = 32
1.4.2 ある関節点の座標を確認する
results = pose.process(image)#将图像传给姿态识别模型
#用index保存索引,记录序号,lm为具体值
for index, lm in enumerate(results.pose_landmarks.landmark):
            
        	#print(lm)
          	"""
          	x: 0.42567315697669983
			y: 4.285938739776611
			z: 0.28193268179893494
			visibility: 0.001105456380173564
          	"""
            
            
            # 保存每帧图像的宽、高、通道数
            h, w, c = img.shape
            
            # 得到的关键点坐标x/y/z/visibility都是比例坐标,在[0,1]之间
            # 转换为像素坐标(cx,cy),图像的实际长宽乘以比例,像素坐标一定是整数
            cx, cy = int(lm.x * w), int(lm.y * h)
            
            # 打印坐标信息
            print(index, cx, cy)

1.4.3 xy スケール座標をピクセル座標に変換する
  • 直接生成した座​​標値は小さすぎるため、画像のピクセルサイズ単位に変換できます。
# 保存每帧图像的宽、高、通道数
h, w, c = img.shape
            
# 得到的关键点坐标x/y/z/visibility都是比例坐标,在[0,1]之间
# 转换为像素坐标(cx,cy),图像的实际长宽乘以比例,像素坐标一定是整数
cx, cy = int(lm.x * w), int(lm.y * h)

1.5 FPS の表示

  • FPS: 1秒あたりに送信されるフレーム数
1.5.1 FPS の表示
#循环之前pTime初始化为0
#每一次循环:
cTime = time.time() #处理完一帧图像的时间
fps = 1/(cTime-pTime)#即为FPS
pTime = cTime  #重置起始时间
1.5.2 画像に FPS を表示する
# 在视频上显示fps信息,先转换成整数再变成字符串形式,文本显示坐标,文本字体,文本大小
cv2.putText(img, str(int(fps)), (70,50), cv2.FONT_HERSHEY_PLAIN, 3, (255,0,0), 3)  

おすすめ

転載: blog.csdn.net/weixin_63676550/article/details/128855431