๊ตฌํ ๋๊ธฐ
๋ชจ๋ฐ์ผ ํ๊ฒฝ์์์ AR ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ , ๋ค๋ฅธ AR ํ๋ก์ ํธ๋ฅผ ๋ง์ด ๋ณด๋ฉด์ ๋๋ ๊ฒ ํ ๊ฐ์ง ์๋ค๋ฉด ๋๊ฐ ์ฌ์ฉ์ํํ ์ ๋ ฅ์ ๋ฐ์ ๋ ์ค๋งํธํฐ ํฐ์น๋ก ๋ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ์ด๋ฐ ์ ์ ์ฝ๊ฐ์ ์์ฌ์์ด ์์ด ์ง์ ์์ ์ถ์ ํ์ฌ, AR ๋ก ์ฆ๊ฐํ ์ค๋ธ์ ํธ์ ์ํธ์์ฉ ํ๋ ๊ฒ์ ๊ตฌํํด ๋ณด๊ณ ์ถ์๋ค.
์ผ๋ง ์ ์, ๋ฐํํ ์ ํ์ Vision Pro์์์ ์ปจํธ๋กค๋ฌ ์๋ ์ฅ๋ฉด์ด ์ธ์ ๊น์๋ฐ, ๋๋ฐ์ด์ค๊ฐ ๊ธ๋์ค์ ์ค๋งํธํฐ์ด๋์ ์ฐจ์ด ์ผ ๋ฟ ๋ด๊ฐ ์์ํ๋ ๊ทธ๋ฆผ์ ๊ฐ์ง๊ณ ์์๋ค.
์ฐพ์๋ณด๋, Unity ์์ง ์์ฒด์๋ ์์ง ์ ๋์์ ์ธ์ํ๊ธฐ ์ํ ๊ณต์์ ์ธ ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ด ๋ณด์๋ค.
๊ทธ๋ ๊ธฐ์, ์ธ๋ถ์์ ์ ์ค์ฒ ์ธ์, ์ ๋์ ๋ฐ์ดํฐ๋ฅผ Unity ์์ง์์ ๋ฐ์์ค๋ ๋ฐฉ์์ ์ ํํ๋ค.
MediaPipe๋ ๋ฌด์์ธ๊ฐ?
์ ๋์ ์ธ์์ ์ํด MediaPipe๋ฅผ ์ด์ฉํ๊ฒ ๋์๋ค. MediaPipe๋ ์ค์๊ฐ ๋น์ ๋ฐ ์ค๋์ค ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ๊ธฐ ์ํ ํ๋ ์์ํฌ์ด๊ณ , ๊ตฌ๊ธ์์ ๊ฐ๋ฐ๋์๋ค. ์ฃผ๋ก, ์ปดํจํฐ๋น์ , ์ ์ค์ฒ ์ธ์, ๊ฐ์ฒด ์ถ์ , ์ผ๊ตด ๊ฐ์ง ๋ฑ์ ์์ ์ ์ฌ์ฉ๋๋ค.
ML(๋จธ์ ๋ฌ๋)์ ์ฌ์ฉํ์ฌ ์๋ง๋ค 21๊ฐ์ 3D ๋๋๋งํฌ๋ฅผ ํ๋ ์๋ง๋ค ์ถ๋ก ํ๋๋ฐ, ํด๋ํฐ์์๋ ์ค์๊ฐ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ณ 2๊ฐ ์ด์์ ์์ ์ธ์ํ ์๋ ์๋ค๊ณ ํ๋ค.
์๋ฆฌ๋ ๊ฐ๋ตํ๊ฒ ๋ชจ๋ ์ด๋ฏธ์ง์์ ์์ ๊ฐ์งํ์ฌ ์ ๊ฒฝ๊ณ ๋ฐ์ค๋ฅผ ๋ฐํํ๋ Palm Detection Model (์๋ฐ๋ฅ ๊ฐ์ง ๋ชจ๋ธ) ํ์ฉ ํ ์ถ์ถ๋ ์ด๋ฏธ์ง ์์ญ์ 3D ํธ๋ ํคํฌ์ธํธ๋ฅผ ๋ฐํํ๋ Hand Landmark Model (ํธ๋ ๋๋ ๋งํฌ ๋ชจ๋ธ)์ด ์ด์ฉ๋๋ค.
์ข ๋ ์์ธํ ๊ถ๊ธํ๋ค๋ฉด, ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
https://puleugo.tistory.com/10
[ํ์ด์ฌ] MediaPipe ์ ์ธ์(Hands)
์๋ฌธ : https://google.github.io/mediapipe/solutions/hands ๊ฐ์ ์์ ๋ชจ์๊ณผ ์์ง์์ ์ธ์ํ๋ ๋ฅ๋ ฅ์ ์ฌ๋ฌ ๊ธฐ์ ์์ญ๊ณผ ํ๋ซํผ์์ ์๋น์ค ์ด์ฉ์์๊ฒ ์ข์ ์ธ์์ ์ค ์์๋ ์ค์ํ ์์๊ฐ ๋ ์ ์๋ค. ์
puleugo.tistory.com
PyCharm์์ ์ ๋์ ์ธ์ ๊ตฌํํ๊ธฐ
๊ฐ๋ฐํ๊ฒฝ์ PyCharm์ ์ด์ฉํด์ Python ์ฝ๋๋ก ๊ตฌํ์ ์ฝ๊ฒ ์งํํ ์ ์๋ค.
์ฌ๊ธฐ์ ๋ง์ฝ, ์น์บ (Webcam)์ด ๋ฐ๋ก ์ค๋น๊ฐ ๋์ด ์์ง ์๋ค๋ฉด, ํด๋ํฐ ์นด๋ฉ๋ผ๋ฅผ ํ์ฉํ IP WebCam ์ดํ์ Play Store์์ ๋ค์ด๋ฐ์์ ์์ํด ๋ณผ ์ ์๋ค.
PyCharm์ด ์ค์น๋์๋ค๋ฉด, File - Settings ํด๋ฆญ
ํ์ํ ํจํค์ง CvZone ์ MediaPipe๋ฅผ ๊ฒ์ํด์ Install ํด์ค๋๋ค.
CvZone์ OpenCV์ ํจ๊ป ์ฌ์ฉ๋๋ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ผ๊ตด์ธ์, ๋๋๋งํฌ ๊ฐ์ง, ์์ธ ์ถ์ , ๋์ ์ธ์ ๋ฑ๊ณผ ๊ฐ์ ์์ ์ ์ํํ๋ ๋ฐ ๋์์ ์ฃผ๋ ๋๊ตฌ์ ๋๋ค.
CVZone์ ๋ง์ฝ ์ต์ ๋ฒ์ ์ผ๋ก Install ํ๊ณ , ์๋์ ๊ฐ์ด Import๋ฅผ ์์ผ์ฃผ์๋๋ฐ
OpenCV์ ๊ดํด ์๋ ์์ฑ์ด ์งํ์ด ์ ๋๋ค๋ฉด, OpenCV-Python์ 4.5.5.64๋ก ๋ฎ์ถฐ์ ๋ค์ ์ค์น๋ฅผ ํด์ฃผ์๋ฉด ์ ์์ ์ผ๋ก ์๋ ์์ฑ์ด ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋๋ค.
from cvzone.HandTrackingModule import HandDetector
# IP WebCam ์ดํ์ ์ฌ์ฉ ํ ๊ฒฝ์ฐ
cap = cv2.VideoCapture("http://Your IP Number/video")
# WebCam ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
cap = cv2.VideoCapture(0)
# ์์ ๊ฐ์ง
detector = HandDetector(maxHands=1, detectionCon=0.8)
while True:
# ์น์ผ์์ ํ๋ ์ ๊ฐ์ ธ์ค๊ธฐ
success, img = cap.read()
# Hands
hands, img = detector.findHands(img)
cv2.imshow("Image", img)
if cv2.waitKey(1) == ord("q"): # q ๋๋ฅผ ์ ์น์ผ ์ข ๋ฃ
break
์ ์ฝ๋๋ ์น์ผ์ผ๋ก๋ถํฐ ์์์ ๋ฐ์์ ์ฌ์ฉ์์ ์์ ๊ฐ์งํ๊ฒ ๋ฉ๋๋ค. ์๋๋ ์ฝ๋์ ๊ฐ ๋ถ๋ถ์ ๋ํ ์ค๋ช ์ ๋๋ค.
1. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ:
- `import cv2`: OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํฌํธํฉ๋๋ค.
OpenCV๋ ์์ ์ฒ๋ฆฌ์ ์ปดํจํฐ ๋น์ ์์ ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- `from cvzone.HandTrackingModule import HandDetector`: cvzone ํจํค์ง์์ HandDetector ๋ชจ๋์ ์ํฌํธํฉ๋๋ค. ์ด ๋ชจ๋์ ์์ ๊ฐ์งํ๊ณ ์ถ์ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
2. IP ์น์บ ์ค์ :
- `cap = cv2.VideoCapture(0)`: ์น์บ ์์ ์์์ ๋ฐ์์ค๊ธฐ ์ํด `cv2.VideoCapture` ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. `0`์ ๊ธฐ๋ณธ ์น์บ ์ ์๋ฏธํฉ๋๋ค.
3. ์ ๊ฐ์ง ๊ฐ์ฒด ์์ฑ:
- `detector = HandDetector(maxHands=1, detectionCon=0.8)`: `HandDetector` ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. `maxHands`๋ ๊ฐ์งํ ์์ ์ต๋ ์๋ฅผ ์ง์ ํ๋ฉฐ, `detectionCon`์ ์์ ๊ฐ์งํ๊ธฐ ์ํ ์ ๋ขฐ๋ ์๊ณ๊ฐ์ ์ค์ ํฉ๋๋ค.
4. ์์ ์ฒ๋ฆฌ ๋ฃจํ:
- `while True:`: ๋ฌดํ ๋ฃจํ๋ฅผ ์์ํฉ๋๋ค.
- `success, img = cap.read()`: ์น์บ ์์ ํ๋ ์์ ์ฝ์ด์ต๋๋ค.
`success`๋ ํ๋ ์ ์ฝ๊ธฐ๊ฐ ์ฑ๊ณตํ๋์ง๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฌ์ธ ๊ฐ์ด๊ณ , `img`๋ ์ฝ์ด์จ ํ๋ ์ ์ด๋ฏธ์ง์ ๋๋ค.
5. ์ ๊ฐ์ง:
- `hands, img = detector.findHands(img)`: `HandDetector` ๊ฐ์ฒด์ `findHands()` ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๊ฐ์งํฉ๋๋ค. `img`์๋ ์ ๊ฐ์ง ๊ฒฐ๊ณผ๊ฐ ๊ทธ๋ ค์ง ์ด๋ฏธ์ง๊ฐ ๋ฐํ๋๊ณ , `hands`์๋ ๊ฐ์ง๋ ์์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฆฌ์คํธ๊ฐ ๋ฐํ๋ฉ๋๋ค.
6. ์์ ์ถ๋ ฅ:
- `cv2.imshow("Image", img)`: `img`์ ์ ์ฅ๋ ์ด๋ฏธ์ง๋ฅผ "Image"๋ผ๋ ์ฐฝ์ ์ถ๋ ฅํฉ๋๋ค.
7. ์ข ๋ฃ ์กฐ๊ฑด:
- `if cv2.waitKey(1) == ord("q"):`: ์ฌ์ฉ์๊ฐ "q" ํค๋ฅผ ๋๋ฅด๋ฉด ๋ฃจํ๋ฅผ ์ข ๋ฃํฉ๋๋ค.
- `cv2.waitKey(1)`: ์ฌ์ฉ์์ ํค ์ ๋ ฅ์ 1๋ฐ๋ฆฌ์ด ๋์ ๋๊ธฐํ๊ณ , ์ ๋ ฅ์ด ์์ผ๋ฉด ํด๋น ํค์ ์ ๋์ฝ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค.
- `ord("q")`: ๋ฌธ์ "q"์ ์ ๋์ฝ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค.
- `break`: ๋ฃจํ๋ฅผ ์ข ๋ฃํฉ๋๋ค.
์คํ ํ๋ฉด
์ ๋ IP WebCam ์ดํ์ ์ฌ์ฉํ์ฌ ์ผ๋ฐ WebCam์ ์ด์ฉํ ์คํ ํ๋ฉด์ด๋ ๋ค๋ฅผ ์ ์์ต๋๋ค.
IP WebCam ์ดํ์ ์ฌ์ฉํ์ ๋ค๋ฉด ์ดํ์ ๋จผ์ ์คํ ํ, ์ฝ๋๋ฅผ Run ํด์ฃผ์ธ์.
์ค๋ฅธ์, ์ผ์ ์ฅ์๋ค ํ๋ค ํด๋ณด๋ฉด์ ์ ์์ ์ผ๋ก ์์ด ์ ์ธ์๋๋ ์ฅ๋ฉด์ ํ์ธํ ์ ์์ต๋๋ค.
'Computer Vision' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Unity] MediaPipe ์ฐ๋ํด์ ์ ์ํธ์์ฉ ๊ตฌํํ๊ธฐ (1) | 2023.06.12 |
---|---|
Pycharm์์ OpenCV๋ฅผ ํ์ฉํ ์ผ๊ตด ์ธ์ ํ๊ฒฝ ์ธํ ๋ฐ ์ผ๊ตด ์ธ์ ํ ์คํธ (0) | 2023.02.14 |