Torchvision 을 사용하여 사람의 키포인트를 찾아내는 딥러닝 모델 예제 입니다.
Torchvision 의 keypointrcnn_resnet50_fpn 모델을 참조하세요.
Torchvision 을 사용한 사람의 키포인트 를 찾아내는 딥러닝 모델 예제
import torch
import torchvision
from torchvision import models
import torchvision.transforms as T
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches
IMG_SIZE = 480
THRESHOLD = 0.95
# Pytorch keypointrcnn Model Download
model = models.detection.keypointrcnn_resnet50_fpn(pretrained=True).eval()
# Load Image Resizing
img = Image.open('Images/group-of-people-2297627.jpg')
img = img.resize((IMG_SIZE, int(img.height * IMG_SIZE / img.width)))
# Image to Tensor Conversion
trf = T.Compose([
T.ToTensor()
])
input_img = trf(img)
print(input_img.shape)
# Inference
out = model([input_img])[0]
![]() |
▣ Load 한 이미지를 보다 작게 resize 처리 한 결과와 keypointrcnn_resnet50_fpn 모델 결과 이미지 정보를 보여줍니다.
codes = [
Path.MOVETO,
Path.LINETO,
Path.LINETO
]
fig, ax = plt.subplots(1, figsize=(16, 16))
ax.imshow(img)
▣ 모델 결과 이미지정보중 box 와 score , keypoint만을 사용한 결과를 보여줍니다.
▣ box 는 사람을 인식한 위치 포인트를 나타내고, score 는 사람을 인식한 확률값입니다.
▣ keypoint 는 인식되 사람의 핵심 point를 나타냅니다.
for box, score, keypoints in zip(out['boxes'], out['scores'], out['keypoints']):
# Numpy Array 로 변환한다.
score = score.detach().numpy()
▣ score가 THRESHOLD (0.95) 이하인경우 제외 시킵니다.
if score < THRESHOLD:
continue
box = box.detach().numpy()
keypoints = keypoints.detach().numpy()[:, :2]
rect = patches.Rectangle((box[0], box[1]), box[2]-box[0], box[3]-box[1], linewidth=2,
edgecolor='b', facecolor='none')
ax.add_patch(rect)
# 17 keypoints
for k in keypoints:
circle = patches.Circle((k[0], k[1]), radius=2, facecolor='r')
ax.add_patch(circle)
# draw path
# left arm
path = Path(keypoints[5:10:2], codes)
line = patches.PathPatch(path, linewidth=2, facecolor='none', edgecolor='r')
ax.add_patch(line)
# right arm
path = Path(keypoints[6:11:2], codes)
line = patches.PathPatch(path, linewidth=2, facecolor='none', edgecolor='r')
ax.add_patch(line)
# left leg
path = Path(keypoints[11:16:2], codes)
line = patches.PathPatch(path, linewidth=2, facecolor='none', edgecolor='r')
ax.add_patch(line)
# right leg
path = Path(keypoints[12:17:2], codes)
line = patches.PathPatch(path, linewidth=2, facecolor='none', edgecolor='r')
ax.add_patch(line)
plt.show()
실행 결과
파란색 박스의 사람을 인식하는 표식과 빨강 포인트와 라인으로 사람의 키 포인트 (얼굴 포인트와 신체포인트)를 인식하는 모델 결과를 확인 할 수 있습니다.
'TensorFlow 2.0' 카테고리의 다른 글
Numpy 저장된 이미지 파일을 읽어와서 다른 이미지로 얼굴인식하는 딥러닝 모델 예제 (0) | 2019.11.24 |
---|---|
얼굴을 인식한 이미지 배열을 Numpy 저장하는 딥러닝 모델 예제 (0) | 2019.11.24 |
Time Series Datasets 으로 예측하기 예제 (0) | 2019.11.19 |
숫자 인식 학습된 모델을 읽어 손글씨 숫자를 인식 검증하는 예제 (0) | 2019.11.11 |
텐서플로우 손글씨 숫자 인식 학습하고 결과 저장하기 예제 (0) | 2019.11.11 |