DryHand Project

WoosangΒ·2021λ…„ 8μ›” 24일
1

Project

λͺ©λ‘ 보기
2/3

πŸ™‹β€β™‚οΈμ†Œκ°œ 및 λͺ©μ 


  • Hand gestureλ₯Ό μ΄μš©ν•œ Window Controller!
  • μ‚¬μš©μžμ˜ μ†μ˜ νŠΉμ • ν–‰μœ„λ₯Ό μ›ΉμΊ μœΌλ‘œ μΈμ‹ν•˜μ—¬ νŠΉμ • 행동 μˆ˜ν–‰
  • μ†μœΌλ‘œ 직접 μž…λ ₯ κΈ°κΈ°λ₯Ό ν™œμš©ν•˜μ—¬ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘λ™ν•˜κΈ° μ–΄λ €μš΄ 경우, 'DryHand'λ₯Ό μ΄μš©ν•˜μ—¬ μ˜μƒ ν”Œλž«νΌμ„ 편히 μ œμ–΄ν•  수 μžˆλŠ” ν”„λ‘œμ νŠΈ
  • ν‚€λ³΄λ“œμ™€ 마우슀λ₯Ό 제슀처둜 λŒ€μ‹ ν•˜λŠ” ν”„λ‘œμ νŠΈμ΄κΈ° λ•Œλ¬Έμ— μ›Ή μ„œλΉ„μŠ€λ³΄λ‹€λŠ” exe μ‹€ν–‰νŒŒμΌμ΄ μ ν•©ν•˜λ„ νŒλ‹¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ 진행 방식


  • μ €λŠ” webcam으둜 찍힌 λ°μ΄ν„°μ—μ„œ 제슀처 μΆ”μΆœ μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„ 및 데이터 μ „μ²˜λ¦¬λ₯Ό 맑아 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  • Agile λ°©μ‹μœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  • μœ μ§€λ³΄μˆ˜, 관리λ₯Ό μ‰½κ²Œν•˜κΈ° μœ„ν•΄ λͺ¨λ“ˆμ„ μ„ΈλΆ„ν™”ν•˜μ—¬ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

기술 μŠ€νƒ


μ‚¬μš© μ–Έμ–΄ : Python
Computer Vision : Tensorflow, MediaPipe, OpenCV
Control : Pyautogui
GUI & .exe : PyQt5, Pyinstaller
Collaboration : Slack, Trello, Github, Google-meet, Google-drive

진행 κ³Όμ •


제슀처 μΆ”μΆœ λͺ¨λ“ˆ κ΅¬ν˜„


  • μ „λ°˜μ μœΌλ‘œ 손을 μΈμ‹ν•˜λŠ” 과정을 Google의 MediaPipe 라이브러리λ₯Ό 가져와 μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • μœ„μ˜ κ΅¬ν˜„ν•œ λͺ¨λ“ˆμ„ 톡해 Sliding Window 기법을 μ΄μš©ν•˜μ—¬ μ΄λ―Έμ§€μ—μ„œ 손이 μΈμ‹λ˜λŠ” μ‹œμ λΆ€ν„° νŠΉμ • ν”„λ ˆμž„λ§ŒνΌμ˜ μ’Œν‘œ 데이터λ₯Ό 맀 μˆœκ°„ μˆ˜μ§‘ν•˜μ—¬ CSV 파일둜 μΆ”μΆœν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    πŸ“Œλ¬Έμ œμ 

    문제점1. Sliding Window κΈ°λ²•μœΌλ‘œ 데이터λ₯Ό μΆ”μΆœν•˜μ—¬ μ›ν•˜λŠ” 데이터λ₯Ό μ–»κΈ° μœ„ν•΄μ„œλŠ” λ…Έμ΄μ¦ˆ 데이터가 μƒμ„±λ˜λŠ” 문제 λ°œμƒ -> ν–₯ν›„ μ‹€μ œ ν”„λ‘œκ·Έλž¨μƒμ—μ„œ λΆˆν•„μš”ν•œ λͺ¨λΈ μΆ”λ‘  λ°œμƒ
    문제점2. λ‹€μ–‘ν•œ 제슀처의 λ™μž‘μœΌλ‘œ νŠΉμ • ν”„λ ˆμž„μ„ μ§€μ •ν•˜μ—¬ 데이터λ₯Ό μΆ”μΆœν•˜λŠ” 것은 λΆ€μ ν•©ν•˜λ‹€κ³  νŒλ‹¨
    문제점3. RNN 데이터(csv, etc) νŠΉμ„±μƒ 데이터 μ¦κ°•μ˜ 어렀움 λ°œμƒ

    πŸ“ ν•΄κ²°λ°©μ•ˆ

    • 문제점1-λΆˆν•„μš”ν•œ λͺ¨λΈ μΆ”λ‘  λ°œμƒ μ•Όκ΅¬μ—μ„œ μ„ μˆ˜λΌλ¦¬ 사인을 μ£Όκ³ λ°›λŠ” 것에 μ˜κ°μ„ λ°›μ•„ νŠΉμ • λ™μž‘μ„ ν–ˆμ„ λ•Œλ§Œ 제슀처 인식 λͺ¨λ“œλ‘œ λ³€ν™˜ν•˜λŠ” ν•¨μˆ˜ κ΅¬ν˜„
      -> 이λ₯Ό μœ„ν•΄ HandDetector λͺ¨λ“ˆμ˜ fingersUp ν•¨μˆ˜ κ΅¬ν˜„
      -> λ˜ν•œ 인식λ₯ μ— λŒ€ν•œ thresholdλ₯Ό μ§€μ •ν•˜μ—¬ μ—‰λš±ν•œ μ œμŠ€μ²˜κ°€ λ™μž‘ν•˜λŠ” 것을 λ°©μ§€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    • 문제점2-μ λ‹Ήν•œ frame을 지정? 제슀처 인식 λͺ¨λ“œκ΅¬ν˜„μœΌλ‘œ μΈν•˜μ—¬ νŠΉμ • ν”„λ ˆμž„μ„ λ„‰λ„‰ν•˜κ²Œ μ„€μ •ν•˜μ—¬ κΈ΄ λ™μž‘κ³Ό 짧은 λ™μž‘μ€ λͺ¨λ‘ ꡬ뢄할 수 있게 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
      -> 짧은 λ™μž‘μ˜ 경우 λ‚¨λŠ” ν”„λ ˆμž„ 값을 0으둜 μ±„μ›Œ λ„£μ—ˆμŠ΅λ‹ˆλ‹€.

    • 문제점3-데이터 μ¦κ°•μ˜ 어렀움 μƒλŒ€μ μœΌλ‘œ 데이터 증강이 νŽΈν•œ 이미지 λ°μ΄ν„°λ‘œ λ³€ν™˜
      -> numpy의 zerosν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ 검은색 캠퍼슀λ₯Ό 생성
      -> μœ„μ—μ„œ μƒμ„±ν•œ 캠퍼슀 μœ„μ— 제슀처 μ’Œν‘œλ₯Ό μ„ μœΌλ‘œ μ—°κ²°ν•˜μ—¬ 이미지 νŒŒμΌμ„ 생성

  • μœ„μ˜ λ¬Έμ œν•΄κ²°λ‘œ μΈν•œ ν•™μŠ΅ 데이터 생산 λŠ₯λ₯ μ΄ 50% 이상 μ¦κ°€ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λͺ¨λΈλ§


  • CNN λͺ¨λΈμ˜ Back-Bone으둜 VGG16, MobileNetV2, RNN λͺ¨λΈ(LSTM) μ΄λ ‡κ²Œ 3가지 λͺ¨λΈλ‘œ μ‹€ν—˜μ„ μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • 데이터 μ¦κ°•μ˜ μ–΄λ €μ›€μœΌλ‘œ RNN λͺ¨λΈλ³΄λ‹€λŠ” CNN λͺ¨λΈμ˜ μ΄ˆμ μ„ λ§žμΆ”μ–΄ μ‹€ν—˜μ„ μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • 인식λ₯ μ΄ κ°€μž₯ λ†’μ•˜λ˜ VGG16λͺ¨λΈμ„ μ„ νƒν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

각 λͺ¨λΈλ³„ 인식λ₯  λ³΄κ³ μ„œ

ν”„λ‘œμ νŠΈ 데λͺ¨ μ˜μƒ 및 기타 κΈ°λŠ₯

πŸ“λŠλ‚€μ 


  • 이전 ν”„λ‘œμ νŠΈμ—μ„œ λΆ€μ‘±ν–ˆλ˜ λΆ€λΆ„λ“€(github ν™œμš©, ν˜‘μ—… λ“±λ“±)을 μ±„μ›Œκ°€λ©° μ§„ν–‰ν•˜μ—¬ 더 λœ»κΉŠμ—ˆλ˜ ν”„λ‘œμ νŠΈκ°€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • νŒ€μ›λ“€κ³Ό ν•¨κ»˜ gitflow에 λŒ€ν•΄ μŠ€ν„°λ””λ₯Ό μ§„ν–‰ν•˜μ˜€κ³  λ‹€μ–‘ν•œ ν˜‘μ—… νˆ΄μ„ μ‚¬μš©ν•˜μ—¬ 개발의 생산성을 λ†’μ˜€μŠ΅λ‹ˆλ‹€.
  • 맀주 κΈˆμš”μΌλ§ˆλ‹€ νŒ€μ›λ“€λΌλ¦¬ 회고λ₯Ό μ§„ν–‰ν•˜μ—¬ λΉ„λŒ€λ©΄μœΌλ‘œ μ§„ν–‰λœ Projectμ˜€μ§€λ§Œ 잘 끝 맞좜 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  • 이번 ν”„λ‘œμ νŠΈλ‘œ ν•™μŠ΅ λ°μ΄ν„°μ˜ 질이 μ–Όλ§ˆλ‚˜ μ€‘μš”ν•œμ§€ μƒκΈ°ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • μ•„μ‰¬μš΄ 점은 RCNN λͺ¨λΈμ„ ꡬ좕해보지 λͺ»ν–ˆλ˜ 점과 GAN을 μ΄μš©ν•˜λ©΄ RNN 데이터도 증강할 수 μžˆλ‹€λŠ” 사싀을 ν”„λ‘œμ νŠΈ λλ‚œ 직후에 μ•Œκ²Œ 된 μ μž…λ‹ˆλ‹€.

DryHand github

0개의 λŒ“κΈ€