Skip to content

๐Ÿ† [๋Œ€์ƒ์ž‘] ์ž„๋ฒ ๋””๋“œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒฝ์ง„๋Œ€ํšŒ webOS๋ถ€๋ฌธ ๋ฐฉํŒŒ์ œํŒ€ - HomeTraining ๊ธฐ๋Šฅ

Notifications You must be signed in to change notification settings

webOS-KOSS/HomeTraining

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

19 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Home Training

HomeTraining

์†Œ๊ฐœ

ํŒฌ๋ฐ๋ฏน ์ดํ›„ โ€˜ํ™ˆํŠธ์กฑโ€™ ์ด๋ผ๋Š” ๋ง์ด ์ƒ๊ธธ ๋งŒํผ ์ง‘์—์„œ ์šด๋™ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ฆ๊ฐ€ํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ง‘์—์„œ ์šด๋™์„ ํ•˜๋‹ค๋ณด๋ฉด ์˜์ง€๊ฐ€ ๋ถ€์กฑํ•ด ์šด๋™์„ ๊ธˆ์ƒˆ ๊ทธ๋งŒ๋‘๊ฑฐ๋‚˜, ์ž์‹ ์ด ์˜ฌ๋ฐ”๋ฅธ ์ž์„ธ๋กœ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„, ์˜คํžˆ๋ ค ์ž์„ธ๊ฐ€ ํŠธ๋Ÿฌ์ง€๋Š” ๋“ฑ ๋ถ€์ž‘์š”์ด ์žˆ๊ธฐ๋„ ํ•˜๋‹ค. ์šด๋™ํ•˜๋Š” ์ž์„ธ๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉด์„œ ์šด๋™ ํšŸ์ˆ˜๋ฅผ ์„ธ์ฃผ๊ณ , ์šด๋™ ์ž์„ธ๋ฅผ ๋ถ„์„ํ•ด์ฃผ๋Š” ์•ฑ์ด ์žˆ๋‹ค๋ฉด ์ง‘์—์„œ ํ˜ผ์ž ์šด๋™์„ ํ•˜๋Š” ๋ฐ ํŽธ๋ฆฌํ•  ๊ฒƒ์ด๋ฉฐ, Home++ ์›”ํŒจ๋“œ๋ผ๋Š” ํ”Œ๋žซํผ์—์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋‚˜์•„๊ฐ€์•ผํ•  ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•ด์ค€๋‹ค.

Home ++ ์›”ํŒจ๋“œ์˜ ์šด๋™ ๋ณด์กฐ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉใ…ˆ์ž๊ฐ€ ๋…นํ™” ์‹œ์ž‘์„ ๋ˆ„๋ฅด๋ฉด, 2๋ฒˆ์งธ ๋ชจ๋‹ˆํ„ฐ์—์„œ ์ž์‹ ์˜ ์šด๋™๋ชจ์Šต์„ ๋ณด์—ฌ์คŒ๊ณผ ๋™์‹œ์— ๋…นํ™”๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์šด๋™์ด ๋๋‚˜๊ณ  ๋…นํ™”์ข…๋ฃŒ๋ฅผ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด ์šด๋™ ๋ถ„์„์ด ์‹œ์ž‘๋œ๋‹ค. ์šด๋™ ๋ถ„์„์ด ๋๋‚˜๊ฒŒ ๋˜๋ฉด(์˜ค๋ž˜ ๊ฑธ๋ฆผ) ์šด๋™์„ ์–ด๋Š ์ •๋„์˜ ์†๋„๋กœ ์ง„ํ–‰ํ•˜์˜€๋Š”์ง€์— ๋Œ€ํ•œ ๋ถ„์„ ๊ทธ๋ž˜ํ”„์™€ ์šด๋™ ์‹œ๊ฐ„, ํšŸ์ˆ˜, ์†Œ๋ชจ ์นผ๋กœ๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ดํ›„ ์˜์ƒ๋ณด๊ธฐ๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์ž์„ธ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค.

System Architecture

SystemArchitecture

Flow Chart

FlowChart

๊ธฐ์ˆ  ์†Œ๊ฐœ

AWS EC2(ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„):

  • ๋ณด์•ˆ ๊ทธ๋ฃน์˜ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์—์„œ 8000ํฌํŠธ๋ฅผ ๊ฐœ๋ฐฉํ•˜์—ฌ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•˜์˜€๋‹ค.

  • Express.js(์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ / ํŒŒ์ผ ์„œ๋ฒ„)
    • Express ์„œ๋ฒ„์—์„œ exercise๋กœ routingํ•˜์—ฌ ํŒŒ์ผ์„ POST, GET์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ENACT์—์„œ ์˜์ƒ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค.
    • Request.JS ๋ชจ๋“ˆ์„ ํ†ตํ•ด ์šด๋™ ๋ถ„์„ ์˜์ƒ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค.
    • ์˜์ƒ์„ webOS์— ๋งž๋Š” ์ฝ”๋ฑ(libx264)์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ffmpeg ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

webOS(์›”ํŒจ๋“œ):

  • ENACT(com.exercise.app)

    • enact์˜ VideoPlayer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋””์˜ค๋ฅผ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค.
    • First panel์—์„œ๋Š” useEffect๋ฅผ ํ†ตํ•ด ์‹œ์ž‘ํ•˜์ž๋งˆ์ž serviceStart๋ฅผ ํ†ตํ•ด ์นด๋ฉ”๋ผ ํ™˜๊ฒฝ ์„ค์ • ๋ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํ™˜๊ฒฝ์„ค์ •์„ ํ•œ๋‹ค.

  • Node.JS(com.exercise.app.service)

    • serviceStart service: NodeJS์˜ ๊ธฐ๋ณธ ๋ชจ๋“ˆ ์ค‘ ํ•˜๋‚˜์ธ Child Process๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ /usr/sbin/camera_window_manager_exporter ๋ฅผ ํ†ตํ•ด 2๋ฒˆ์งธ ๋ชจ๋‹ˆํ„ฐ์— ์ŠคํŠธ๋ฆฌ๋ฐ ์˜์—ญ์„ ์ง€์ •ํ•ด์ค€๋‹ค. ๋˜ํ•œ com.webos.service.camera2 API์™€ com.webos.media ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ open -> setFormat -> startPreview -> load -> play์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ ์นด๋ฉ”๋ผ ์„ธํŒ…์„ ์™„๋ฃŒํ•œ๋‹ค.
    • record service: com.webos.media/startCamerRecord ๋ฅผ ํ†ตํ•ด ๋…นํ™”๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.
    • child service: com.webos.service.camera2 API์™€ com.webos.media ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ stopCameraRecord -> unload -> stopPreview -> close๋ฅผ ํ†ตํ•ด ๋…นํ™”์™€ ์ŠคํŠธ๋ฆฌ๋ฐ, ์นด๋ฉ”๋ผ๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  NodeJS์˜ ๊ธฐ๋ณธ ๋ชจ๋“ˆ ์ค‘ ํ•˜๋‚˜์ธ Child Process๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ python ์šด๋™ ๋ถ„์„์„ ์‹œ์ž‘ํ•œ๋‹ค. ์šด๋™ ๋ถ„์„์ด ๋๋‚˜๋ฉด python์—์„œ ์ถœ๋ ฅ๋œ JSON์„ Parsingํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ๊ธฐํ•ด์ค€๋‹ค. ๋˜ํ•œ Base64๋กœ ์ „๋‹ฌ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฐ€์ ธ์™€์„œ enact์— ์ „๋‹ฌํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

  • Python(Media Pipe)

    • pushup.py์—์„œ๋Š” Media Pipe๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์šด๋™ ๋ถ„์„์„ ํ•˜๊ณ , ์šด๋™ ๋ถ„์„์„ ํ•œ ๊ฒฐ๊ณผ๋ฅผ Matplotlib์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค์–ด base64๋กœ ์ธ์ฝ”๋”ฉํ•œ ํ›„, ๋ฐ์ดํ„ฐ๋ฅผ json์˜ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•˜์—ฌ webOS์—์„œ ๊ฐ’์„ parsingํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
    • upload.py์—์„œ๋Š” ์˜์ƒ์„ AWS EC2์— requests ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ POSTํ•œ๋‹ค.

๊ฐœ๋ฐœํ™˜๊ฒฝ ๋ฐ ๊ฐœ๋ฐœ์–ธ์–ด

  • ์šด์˜์ฒด์ œ : Windows 11, Ubuntu 20.04.5 LTS, webOS 2.18.0
  • ๋””๋ฐ”์ด์Šค ๊ตฌ์„ฑ : Raspberry Pi 4B
  • IDE : Visual Studio Code
  • ๊ฐœ๋ฐœ ์–ธ์–ด : ENACT, Node.JS, Python
  • package manager : npm, yarn

Quick Start

ares-setup-device์—์„œ default๋ฅผ ์ž์‹ ์ด ์„ค์น˜ํ•  webOS์˜ IP๋กœ ์„ค์ •ํ•˜์„ธ์š”.

source wallpad.setup.sh

์žฅ์•  ์š”์ธ

  1. MediaPipe ์—์„œ ์‚ฌ์šฉํ•˜๋Š” tensorflow API ๋Š” webassembly(WASM)์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”๋ฐ, webOS OSE ๋Š” WASM ์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— MediaPipe JavaScript Solution์ด ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    --> ์šด๋™ ๋ถ„์„ ์„œ๋น„์Šค ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— python ์œผ๋กœ mediapipe ๋ฅผ ์ด์šฉํ•œ ์šด๋™ ๋ถ„์„์„ ๊ตฌํ˜„ํ•˜๊ณ , node.js ์˜ child_processs ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด service ๋‹จ์—์„œ python ํŒŒ์ผ์„ ์‹คํ–‰์‹œ์ผœ ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’์„ JSON ์˜ ํ˜•ํƒœ๋กœ ๋ฐ›์•„์™€์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

  2. local์— ์žˆ๋Š” ์˜์ƒ์ด Enact์—์„œ ์ ‘๊ทผ์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.
    --> ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„๋ฅผ EC2์— ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ด์„œ ์™ธ๋ถ€์˜ ์˜์ƒ์„ URL์„ ํ†ตํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค.

About

๐Ÿ† [๋Œ€์ƒ์ž‘] ์ž„๋ฒ ๋””๋“œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒฝ์ง„๋Œ€ํšŒ webOS๋ถ€๋ฌธ ๋ฐฉํŒŒ์ œํŒ€ - HomeTraining ๊ธฐ๋Šฅ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •