반응형
▣ 설치 패키지 :
코드를 실행하려면 다음 명령어로 필요한 라이브러리를 설치해야 합니다:
pip install opencv-python mediapipe
프로그램 설명
- MediaPipe Hands: 손의 21개 관절(landmarks)을 감지하고 추적합니다.
- OpenCV: 웹캠에서 비디오 프레임을 캡처하고 이미지를 처리합니다.
- 코드 동작:
웹캠에서 손을 감지하고, 각 관절의 좌표를 출력하며, 관절을 초록색 점과 선으로 시각화합니다.
여기서는 엄지손가락 끝(Tip)의 좌표를 예시로 출력합니다. - 종료: ESC 키를 누르면 프로그램이 종료됩니다.
import cv2
import mediapipe as mp
# MediaPipe Hands 모델 초기화
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
max_num_hands=1, # 최대 1개의 손 감지
min_detection_confidence=0.7,
min_tracking_confidence=0.5
)
mp_drawing = mp.solutions.drawing_utils
# 웹캠 캡처
cap = cv2.VideoCapture(0)
while cap.isOpened():
success, image = cap.read()
if not success:
print("웹캠을 열 수 없습니다.")
break
# 이미지 BGR에서 RGB로 변환
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 이미지 처리용으로 복사
image.flags.writeable = False
results = hands.process(image)
# 이미지 다시 BGR로 변환
image.flags.writeable = True
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
# 손 감지 결과 처리
if results.multi_hand_landmarks:
for hand_landmarks in results.multi_hand_landmarks:
# 손 관절 그리기
mp_drawing.draw_landmarks(
image,
hand_landmarks,
mp_hands.HAND_CONNECTIONS,
mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=2, circle_radius=2),
mp_drawing.DrawingSpec(color=(0, 0, 255), thickness=2)
)
# 관절 좌표 출력 (예: 엄지손가락 끝)
thumb_tip = hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_TIP]
print(f"엄지손가락 끝: (x: {thumb_tip.x}, y: {thumb_tip.y}, z: {thumb_tip.z})")
# 화면에 이미지 표시
cv2.imshow('Hand Tracking', image)
if cv2.waitKey(5) & 0xFF == 27: # ESC 키로 종료
break
# 리소스 해제
cap.release()
cv2.destroyAllWindows()

반응형
'업무 자동화 > python & CAD' 카테고리의 다른 글
| 가위 / 바위/ 보 게임 (3) | 2025.08.29 |
|---|---|
| 클래스(Class) (2) | 2025.08.29 |
| 개 와 고양이 이미지를 분류 하기 #3 (1) | 2025.08.29 |
| Qt Designer] 시그널(Signal)과 슬롯(Slot) (0) | 2025.08.29 |
| 개 와 고양이 이미지를 분류 하기 #2 (0) | 2025.08.28 |