ai newsMo., 26. Okt.
EilmeldungOpenAI launches GPT-6.1 Terra, a cheaper model for everyday computer work

# ๐ŸŒฑ GrowWise: An AI Garden Coach That Wants You to Close This Tab and Touch Some Actual Grass

ํ™”๋ฉด ๋„๋ผ๋Š” AI, ํ™”๋ฉด ์ผœ์„œ ๋ˆˆ ๊ณ ์น˜๋Š” VR โ€” GrowWise์™€ AmblyoPunch๊ฐ€ ๋งŒ๋‚œ ์ง€์  Hacktoberfest 'Touch Grass' ์ฑŒ... ์ง€๋‚œ ๊ฐ€์„, ๋‚˜๋Š” ํ•ด์ปคํ†ค ์‹œ์ฆŒ์„ ๋งž์•„ Hacktoberfest โ€˜Touch Grassโ€™ ์ฑŒ๋ฆฐ์ง€์— ์ฐธ์—ฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ํ‰์†Œ์—” ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋ฅผ ์œ„ํ•ด PR์„ ๋˜์ง€๋Š” ๊ฒŒ ์ผ์ƒ์ด์—ˆ์ง€๋งŒ, ์ด๋ฒˆ์—๋Š” โ€˜ํ™”๋ฉด์„ ๋„๋ผ๋Š” AIโ€™์™€ โ€˜ํ™”๋ฉด์„ ์ผœ์„œ ๋ˆˆ์„ ๊ณ ์น˜๋Š” VRโ€™์ด๋ผ๋Š” ๋ชจ์ˆœ๋œ ๋ฌธ๊ตฌ๊ฐ€ ๋จธ๋ฆฟ์†์„ ๋งด๋Œ์•˜๋‹ค. ๋‚ด ๋ˆˆ์€ ์ด๋ฏธ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ์•ฝ์‹œ(amblyopia) ์ฆ์ƒ์œผ๋กœ ํ๋ฆฟํ–ˆ๊ณ , ์˜์‚ฌ๋Š” โ€œ์Šคํฌ๋ฆฐ ํƒ€์ž„์„

dev.toMontag 18:43 ยท 26.10.3 Min. Lesezeit
Bild: dev.to

์ง€๋‚œ ๊ฐ€์„, ๋‚˜๋Š” ํ•ด์ปคํ†ค ์‹œ์ฆŒ์„ ๋งž์•„ Hacktoberfest โ€˜Touch Grassโ€™ ์ฑŒ๋ฆฐ์ง€์— ์ฐธ์—ฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ํ‰์†Œ์—” ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋ฅผ ์œ„ํ•ด PR์„ ๋˜์ง€๋Š” ๊ฒŒ ์ผ์ƒ์ด์—ˆ์ง€๋งŒ, ์ด๋ฒˆ์—๋Š” โ€˜ํ™”๋ฉด์„ ๋„๋ผ๋Š” AIโ€™์™€ โ€˜ํ™”๋ฉด์„ ์ผœ์„œ ๋ˆˆ์„ ๊ณ ์น˜๋Š” VRโ€™์ด๋ผ๋Š” ๋ชจ์ˆœ๋œ ๋ฌธ๊ตฌ๊ฐ€ ๋จธ๋ฆฟ์†์„ ๋งด๋Œ์•˜๋‹ค. ๋‚ด ๋ˆˆ์€ ์ด๋ฏธ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ์•ฝ์‹œ(amblyopia) ์ฆ์ƒ์œผ๋กœ ํ๋ฆฟํ–ˆ๊ณ , ์˜์‚ฌ๋Š” โ€œ์Šคํฌ๋ฆฐ ํƒ€์ž„์„ ์ค„์ด๋ผโ€๊ณ ๋งŒ ๋ฐ˜๋ณตํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ VR ํ—ค๋“œ์…‹์„ ์“ฐ๊ณ  ํ›ˆ๋ จ์šฉ ์ฝ˜ํ…์ธ ๋ฅผ ๋Œ๋ฆฌ๋ฉด ์˜คํžˆ๋ ค ์‹œ๋ ฅ์ด ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์—ˆ๋‹ค. GrowWise์™€ AmblyoPunch๋ผ๋Š” ๋‘ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ๋™์‹œ์— ๋“ฑ์žฅํ–ˆ๊ณ , ๋‚˜๋Š” ๊ทธ ๋‘˜์ด ์–ด๋–ป๊ฒŒ ๋งŒ๋‚˜๋Š”์ง€ ์ง์ ‘ ํ™•์ธํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค.

GitHub์—์„œ growwise/vr-amblyopia ์™€ amblyopunch/training-core ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํด๋ก ํ–ˆ๋‹ค. ๋‘˜ ๋‹ค MIT ๋ผ์ด์„ ์Šค๋กœ ๊ณต๊ฐœ๋˜์–ด ์žˆ์—ˆ๊ณ , README์—๋Š” โ€œ์‹ค์‹œ๊ฐ„ ์‹œ์„  ์ถ”์  ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘โ€๊ณผ โ€œ์ ์‘ํ˜• ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธโ€์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋งŒ ์ ํ˜€ ์žˆ์—ˆ๋‹ค. ๋ฌธ์„œํ™”๋Š” ์ตœ์†Œํ•œ์ด์—ˆ์ง€๋งŒ, ์ด์Šˆ ํŠธ๋ž˜์ปค์—๋Š” โ€œUnity 2022.3 + OpenXR 1.5์—์„œ ๋™์ž‘ ํ™•์ธโ€์ด๋ผ๋Š” ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋‚˜๋Š” ๊ณง๋ฐ”๋กœ ๋กœ์ปฌ ๋จธ์‹ ์— Unity Hub๋ฅผ ์—ด๊ณ , OpenXR ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•œ ๋’ค ์ƒ˜ํ”Œ ์”ฌ์„ ๋นŒ๋“œํ•ด๋ณด์•˜๋‹ค.

// Assets/Scripts/AmblyopiaTrainer.cs using UnityEngine; using UnityEngine.XR; public class AmblyopiaTrainer: MonoBehaviour { void Update () { // ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์–‘์•ˆ ๋ Œ๋”๋ง ํ•ด์ƒ๋„ ๋™์  ์กฐ์ ˆ float scale = Mathf. Lerp ( 0.5f, 1.5f, GetGazeWeight ()); XRSettings. eyeTextureResolutionScale = scale; } float GetGazeWeight () { // GrowWise ์‹œ์„  ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์—์„œ ๊ฐ€์ค‘์น˜ ์ถ”์ถœ (์˜ˆ์‹œ) return GrowWiseSDK. Instance?. CurrentGazeWeight?? 0.5f; } } Enter fullscreen mode Exit fullscreen mode ์œ„ ์ฝ”๋“œ๋Š” ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํ”„๋กœํ† ํƒ€์ž…์˜ ํ•ต์‹ฌ ๋ฃจํ”„๋‹ค. XRSettings.eyeTextureResolutionScale ์„ ๋Ÿฐํƒ€์ž„์— ์กฐ์ ˆํ•ด ์–‘์•ˆ ํ•ด์ƒ๋„๋ฅผ ๋น„๋Œ€์นญ์œผ๋กœ ๋งŒ๋“ค๋ฉด, ์•ฝ์‹œ ๋ˆˆ์— ๋” ๋งŽ์€ ๋””ํ…Œ์ผ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์•„์ด๋””์–ด๋‹ค. ์‹ค์ œ GrowWise SDK๊ฐ€ ์–ด๋–ค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€๋Š” ๋ฌธ์„œ๊ฐ€ ์—†์–ด์„œ, CurrentGazeWeight ๋ผ๋Š” ๊ฐ€์ƒ์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ€์ •ํ–ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋‚˜์ค‘์— ๊ณต์‹ API๊ฐ€ ๊ณต๊ฐœ๋˜๋ฉด ๊ต์ฒดํ•  ์˜ˆ์ •์ด๋‹ค.

๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์“ฐ๋Š” ์ž…์žฅ์—์„œ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์› ๋˜ ๊ฑด โ€˜์‹œ์„  ๋ฐ์ดํ„ฐ โ†’ ๋ Œ๋”๋ง ํŒŒ๋ผ๋ฏธํ„ฐโ€™ ํ๋ฆ„์„ ์–ด๋–ป๊ฒŒ ์ง€์—ฐ ์—†์ด ์—ฐ๊ฒฐํ•˜๋А๋ƒ์˜€๋‹ค. GrowWise๋Š” ํ—ค๋“œ์…‹ ๋‚ด์žฅ ์•„์ดํŠธ๋ž˜์ปค์—์„œ 90 Hz๋กœ ์‹œ์„  ๋ฒกํ„ฐ๋ฅผ ๋ฟŒ๋ ค์ค€๋‹ค. AmblyoPunch๋Š” ์ด ๋ฒกํ„ฐ๋ฅผ ๋ฐ›์•„ ๊ฐ ํ”„๋ ˆ์ž„๋งˆ๋‹ค eyeTextureResolutionScale ๊ณผ foveatedRendering ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค. ๋‘ ์‹œ์Šคํ…œ ์‚ฌ์ด์— ๋ฉ”์‹œ์ง€ ํ๋ฅผ ๋‘๋ฉด ๋ ˆ์ดํ„ด์‹œ๊ฐ€ 2~3 ํ”„๋ ˆ์ž„(์•ฝ 30 ms) ๋Š˜์–ด๋‚œ๋‹ค. ๋ฐ˜๋ฉด, Unity์˜ XRDisplaySubsystem ์ฝœ๋ฐฑ ์•ˆ์—์„œ ์ง์ ‘ ์‹œ์„  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์œผ๋ฉด 1 ํ”„๋ ˆ์ž„(โ‰ˆ11 ms) ์ด๋‚ด๋กœ ๋๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋‚ด ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ(Quest 2, Snapdragon XR2)์—์„œ ๋‘ ๋ฐฉ์‹์˜ ํ”„๋ ˆ์ž„ ํƒ€์ž„์„ ์ธก์ •ํ•ด๋ดค๋‹ค.

์ง์ ‘ ์ฝœ๋ฐฑ ๋ฐฉ์‹์ด 1.5 ms ์ •๋„ ๋น ๋ฅด์ง€๋งŒ, ์ฝ”๋“œ ๋ณต์žก๋„๋Š” ๋” ๋†’๋‹ค. ๋‚˜๋Š” โ€œ์•ˆ์ •์„ฑ > ์ตœ๊ณ  ์„ฑ๋Šฅโ€์ด๋ผ๋Š” ํŒ๋‹จ ์•„๋ž˜ ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‚˜์ค‘์— ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์—์„œ๋Š” Burst Compiler ์™€ Job System ์œผ๋กœ ๋ณ‘๋ ฌํ™”๋ฅผ ์‹œ๋„ํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค.

๋นŒ๋“œ๋ฅผ ๋งˆ์น˜๊ณ  ํ—ค๋“œ์…‹์„ ์“ฐ๊ณ  ์ฒซ ์„ธ์…˜์„ ์‹œ์ž‘ํ–ˆ๋‹ค. ํ™”๋ฉด ์ค‘์•™์— ๋–  ์žˆ๋Š” ๊นœ๋นก์ด๋Š” ํƒ€๊ฒŸ์„ ์–‘ ๋ˆˆ์œผ๋กœ ์ซ“์œผ๋ผ๋Š” ์•ˆ๋‚ด๊ฐ€ ๋–ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‚ด ์™ผ์ชฝ ๋ˆˆ(์•ฝ์‹œ ๋ˆˆ)์€ ํƒ€๊ฒŸ์„ ๊ฑฐ์˜ ์ธ์‹ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ํ”„๋ ˆ์ž„ ๋“œ๋ž์ด ์‹ฌํ•ด์ ธ 45 fps๊นŒ์ง€ ๋–จ์–ด์กŒ๊ณ , ํ—ค๋“œ์…‹ ๋‚ด์žฅ ํŒฌ์ด ๊ณผ์—ด ๊ฒฝ๊ณ ๋ฅผ ์šธ๋ ธ๋‹ค. ๋‚˜๋Š” ๋‹นํ™ฉํ•ด์„œ ํ—ค๋“œ์…‹์„ ๋ฒ—๊ณ  ์ฑ…์ƒ์— ์—Ž๋“œ๋ ธ๋‹ค. โ€œ์ด๊ฒŒ ์ •๋ง ๋ ๊นŒ?โ€๋ผ๋Š” ์˜์‹ฌ์ด ๋ฐ€๋ ค์™”๋‹ค.

๊ทธ ์ˆœ๊ฐ„, ๋‚ด ๋ฐฉ ์ฐฝ๊ฐ€๋กœ ๋“ค์–ด์˜จ ์˜คํ›„ ํ–‡์‚ด์ด ์ฑ…์ƒ ์œ„ ํ‚ค๋ณด๋“œ์— ๋น„์ณค๋‹ค. ๋‚˜๋Š” ์ˆจ์„ ๊นŠ๊ฒŒ ๋“ค์ด๋งˆ์‹œ๊ณ , ๋‹ค์‹œ ํ—ค๋“œ์…‹์„ ์ผ๋‹ค. ์ด๋ฒˆ์—๋Š” QualitySettings.vSyncCount = 0 ์œผ๋กœ ์„ค์ •์„ ๋ฐ”๊พธ๊ณ , Application.targetFrameRate = 72 ๋กœ ๊ณ ์ •ํ–ˆ๋‹ค. ํŒฌ ์†Œ์Œ์ด ์ค„์–ด๋“ค์—ˆ๊ณ , ํ”„๋ ˆ์ž„ ํƒ€์ž„์ด 11 ms๋Œ€๋กœ ์•ˆ์ •๋๋‹ค. ํƒ€๊ฒŸ์ด ์„ ๋ช…ํ•ด์ง€์ž ์™ผ์ชฝ ๋ˆˆ์ด ์กฐ๊ธˆ์”ฉ ๋ฐ˜์‘ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. 10๋ถ„ ๋’ค, ๋‚˜๋Š” ์ฒ˜์Œ์œผ๋กœ โ€œ์™ผ์ชฝ ๋ˆˆ์œผ๋กœ๋„ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹คโ€๋Š” ๋А๋‚Œ์„ ๋ฐ›์•˜๋‹ค. ๊ทธ ์ˆœ๊ฐ„์˜ ๊ฐ๋™์€ ์ฝ”๋“œ ํ•œ ์ค„๋กœ๋Š” ์„ค๋ช…ํ•  ์ˆ˜ ์—†๋‹ค.

๋‘ PR ๋ชจ๋‘ 24์‹œ๊ฐ„ ๋‚ด์— ๋ฉ”์ธํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ โ€œThanks! Merged.โ€๋ผ๋Š” ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋ฐ›์•˜๋‹ค. ๋‚ด ๊ธฐ์—ฌ๊ฐ€ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๊ฐ™์€ ๊ณ ํ†ต์„ ๋œ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด, ํ•ด์ปคํ†ค ๋ณด์ƒ๋ณด๋‹ค ๋” ํฐ ๋ณด๋žŒ์ด์—ˆ๋‹ค.

์•ž์œผ๋กœ ํ•ด๋ณด๊ณ  ์‹ถ์€ ๊ฑด, GrowWise์˜ ์‹œ์„  ํžˆํŠธ๋งต์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‹œ๊ฐํ™”ํ•ด ํ›ˆ๋ จ ์ง„ํ–‰๋„๋ฅผ ๋Œ€์‹œ๋ณด๋“œ์— ๋„์šฐ๋Š” ๊ฒƒ ์ด๋‹ค. Grafana + Loki ์Šคํƒ์œผ๋กœ ๋กœ๊ทธ๋ฅผ ๋ชจ์œผ๊ณ , Unity ์ชฝ์—์„œ UnityWebRequest ๋กœ ๋ฉ”ํŠธ๋ฆญ์„ ํ‘ธ์‹œํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋‹ค์Œ Hacktoberfest ๋•Œ ๋„์ „ํ•ด๋ณผ ๊ณ„ํš์ด๋‹ค.

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

๋งŒ์•ฝ ๋‹น์‹ ๋„ ๋น„์Šทํ•œ ๊ณ ๋ฏผ์„ ์•ˆ๊ณ  ์žˆ๋‹ค๋ฉด, ์ž‘์€ ํ—ค๋“œ์…‹๊ณผ ์˜คํ”ˆ์†Œ์Šค ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ•˜๋‚˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ณด๊ธธ ๊ถŒํ•œ๋‹ค. ํ•จ๊ป˜ ์ด ์—ฌ์ •์„ ๊ฑธ์–ด๋ณด์‹œ๊ฒ ์–ด์š”?

Quelle: dev.to (dev.to). Original รถffnen