Forum » Programiranje » [C# in Python] Sistem za vadbo biljard igre osmica v obogateni resničnosti
[C# in Python] Sistem za vadbo biljard igre osmica v obogateni resničnosti

acookook ::
Tale tema služi kot blog za mojo magistrsko nalogo, gre se bolj za par brc v lastno rit.
Da ne dolgovezim, tu je kratek povzetek:
Nekateri uporabniki si želijo ustvariti umetne, računalniško ustvarjene svetove v navidezni resničnosti (angl. “virtual reality”), predvsem za izkušnje pri videoigrah, simulacijah
in izobraževalnih vsebinah [1]. Za slednje se pogosto uporablja zlasti obogatena resnič-
nost (angl. “augmented reality”), ki vključuje navidezne objekte v realni svet, in jih
omogoča videti ter upravljati s pomočjo posebne strojne opreme, kot so očala z integriranimi kamerami. Motivacija za uporabo teh tehnologij izhaja iz njihove uporabnosti in
prilagodljivosti, kjer uporabnik lahko izvaja popolno simulacijo sveta, ter brez tveganja
preizkuša različne scenarije. Ti scenariji vključujejo na primer različna usposabljanja ali
načrtovanja izdelkov.
Obogatena resničnost uporabnikom omogoča vizualizacijo in manipulacijo z digitalnimi
vsebinami, kot so arhitekturne rešitve, navidezne dirkalne steze ali analiza igre šaha, kjer
sistem ponudi predloge za naslednje poteze in jih tudi vizualizira. Prav tako zagotavlja
izpis metapodatkov, kot sta hitrost avtomobilčkov ali število figur na igralni površini, ali
pa na na zahtevo poišče in izpiše podatke o želenem avtomobilčku, brez da bi morali zato
odpreti spletni brskalnik.
Če pa se osredotočimo na področje izobraževanja, pa nam obogatena resničnost lahko
2pomaga pri učenju kompleksnih spretnosti, kot so recimo igranje klavirja s pomočjo aplikacije PianoVision [2], uvajanje zaposlenega pri sestavljanju avtodoma ali pa z s pomočjo
videoiger pomaga pri rehabilitaciji po poškodbah (angl. “exergaming”) [3], ki uporabljajo
obstoječe okolje. Te tehnologije nam tako ne olajšajo le dostop do znanja, temveč tudi
spodbujajo kreativnost, fizično aktivnost in uporabniku prilagojeno učenje.
Tako izobraževanje se lahko aplicira tudi na druga področja, mora pa se v splošnem poskrbeti za zaznavo objektov, kar med drugim vključuje prilagajanje na različne svetlobne
razmere ter izbiro algoritmov oziroma (pred-definiranih) semantičnih označb scene (angl.
“semantic scene classification”) za razumevanje okolice [4]. Te modele se mora izbrati
glede na to, kako hitro in natančno želimo želene objekte zaznati ter pridobiti informacije
o poziciji teh objektov. Rešitve se s trenutnim nivojem tehnologije uporabljajo tudi za
prikaz načrtovanih poti realnih objektov. Naprava lahko sledi premikajočim se objektom,
kot so na primer različne žoge ali krogle za različne igre biljarda. Prav na te krogle se
bomo tudi v tem magistrskem delu osredotočili.
Sistemi za pomoč pri vadbi biljard igre osmica že obstajajo, a so vezani na starejše naprave, ki poleg tega, da so redke, tudi nikoli niso bile zares priljubljene [5] in zahtevajo
veliko odprtega fizičnega prostora, da lahko svoje delo opravijo učinkovito. Glede na razvoj tehnologije in priljubljenost očal za navidezno in obogateno resničnost Meta Quest
3 (v nadaljevanju Quest 3) lahko predpostavimo, da je možno razviti identičen sistem, ki
je bolj priročen glede razpoložljivega prostora, hkrati pa je sposoben napovedovati igro
biljarda z minimalno enako točnostjo, kot to počno rešitve razvite za druge komercialno
dostopne senzorje. Prav tako bi nam lahko sistem služil kot pomočnik za prikazovanje
različnih tehnik, hkrati pa se prikaz še lahko razširi na tretjo dimenzijo. Upoštevati je
mogoče tudi kot, pod katerim udarimo igralno kroglo (angl. “cue ball”), da lahko še
določimo zasuk krogle, na podlagi katerega lahko dodatno napovemo naslednji igralni
položaj. Natančnost napovedi sistema bomo preverili s statističnimi metodami, glede na
realne scenarije. Za to bomo izvedli simulacije in analizirali odstopanja med napovedanimi in dejanskimi položaji krogel. Ključni kazalniki bodo povprečna napaka napovedi,
standardni odklon in robustnost sistema pri različnih pogojih (svetlobne razmere, vrtenje
krogle). Aplikacijo bomo primerjali z drugimi rešitvami, ki delujejo s pomočjo zaznave
položaja krogel in palice, ki ga navajajo Sousa idr. [5], ter rešitvami, ki obljubljajo realistične fizikalne simulacije objektov, ki so v celoti virtualni. Primer take komercialno
dostopne aplikacije je na voljo v spletni trgovini videoiger za Quest 3 “Meta Store”, aplikacija pa se imenuje “MiRacle Pool” [6].
Link do github repozitorija: https://github.com/shanji97/ARPool_Magi...
Da ne dolgovezim, tu je kratek povzetek:
Nekateri uporabniki si želijo ustvariti umetne, računalniško ustvarjene svetove v navidezni resničnosti (angl. “virtual reality”), predvsem za izkušnje pri videoigrah, simulacijah
in izobraževalnih vsebinah [1]. Za slednje se pogosto uporablja zlasti obogatena resnič-
nost (angl. “augmented reality”), ki vključuje navidezne objekte v realni svet, in jih
omogoča videti ter upravljati s pomočjo posebne strojne opreme, kot so očala z integriranimi kamerami. Motivacija za uporabo teh tehnologij izhaja iz njihove uporabnosti in
prilagodljivosti, kjer uporabnik lahko izvaja popolno simulacijo sveta, ter brez tveganja
preizkuša različne scenarije. Ti scenariji vključujejo na primer različna usposabljanja ali
načrtovanja izdelkov.
Obogatena resničnost uporabnikom omogoča vizualizacijo in manipulacijo z digitalnimi
vsebinami, kot so arhitekturne rešitve, navidezne dirkalne steze ali analiza igre šaha, kjer
sistem ponudi predloge za naslednje poteze in jih tudi vizualizira. Prav tako zagotavlja
izpis metapodatkov, kot sta hitrost avtomobilčkov ali število figur na igralni površini, ali
pa na na zahtevo poišče in izpiše podatke o želenem avtomobilčku, brez da bi morali zato
odpreti spletni brskalnik.
Če pa se osredotočimo na področje izobraževanja, pa nam obogatena resničnost lahko
2pomaga pri učenju kompleksnih spretnosti, kot so recimo igranje klavirja s pomočjo aplikacije PianoVision [2], uvajanje zaposlenega pri sestavljanju avtodoma ali pa z s pomočjo
videoiger pomaga pri rehabilitaciji po poškodbah (angl. “exergaming”) [3], ki uporabljajo
obstoječe okolje. Te tehnologije nam tako ne olajšajo le dostop do znanja, temveč tudi
spodbujajo kreativnost, fizično aktivnost in uporabniku prilagojeno učenje.
Tako izobraževanje se lahko aplicira tudi na druga področja, mora pa se v splošnem poskrbeti za zaznavo objektov, kar med drugim vključuje prilagajanje na različne svetlobne
razmere ter izbiro algoritmov oziroma (pred-definiranih) semantičnih označb scene (angl.
“semantic scene classification”) za razumevanje okolice [4]. Te modele se mora izbrati
glede na to, kako hitro in natančno želimo želene objekte zaznati ter pridobiti informacije
o poziciji teh objektov. Rešitve se s trenutnim nivojem tehnologije uporabljajo tudi za
prikaz načrtovanih poti realnih objektov. Naprava lahko sledi premikajočim se objektom,
kot so na primer različne žoge ali krogle za različne igre biljarda. Prav na te krogle se
bomo tudi v tem magistrskem delu osredotočili.
Sistemi za pomoč pri vadbi biljard igre osmica že obstajajo, a so vezani na starejše naprave, ki poleg tega, da so redke, tudi nikoli niso bile zares priljubljene [5] in zahtevajo
veliko odprtega fizičnega prostora, da lahko svoje delo opravijo učinkovito. Glede na razvoj tehnologije in priljubljenost očal za navidezno in obogateno resničnost Meta Quest
3 (v nadaljevanju Quest 3) lahko predpostavimo, da je možno razviti identičen sistem, ki
je bolj priročen glede razpoložljivega prostora, hkrati pa je sposoben napovedovati igro
biljarda z minimalno enako točnostjo, kot to počno rešitve razvite za druge komercialno
dostopne senzorje. Prav tako bi nam lahko sistem služil kot pomočnik za prikazovanje
različnih tehnik, hkrati pa se prikaz še lahko razširi na tretjo dimenzijo. Upoštevati je
mogoče tudi kot, pod katerim udarimo igralno kroglo (angl. “cue ball”), da lahko še
določimo zasuk krogle, na podlagi katerega lahko dodatno napovemo naslednji igralni
položaj. Natančnost napovedi sistema bomo preverili s statističnimi metodami, glede na
realne scenarije. Za to bomo izvedli simulacije in analizirali odstopanja med napovedanimi in dejanskimi položaji krogel. Ključni kazalniki bodo povprečna napaka napovedi,
standardni odklon in robustnost sistema pri različnih pogojih (svetlobne razmere, vrtenje
krogle). Aplikacijo bomo primerjali z drugimi rešitvami, ki delujejo s pomočjo zaznave
položaja krogel in palice, ki ga navajajo Sousa idr. [5], ter rešitvami, ki obljubljajo realistične fizikalne simulacije objektov, ki so v celoti virtualni. Primer take komercialno
dostopne aplikacije je na voljo v spletni trgovini videoiger za Quest 3 “Meta Store”, aplikacija pa se imenuje “MiRacle Pool” [6].
Link do github repozitorija: https://github.com/shanji97/ARPool_Magi...
.

acookook ::
Trenutno se ukvarjam z detekcijo same mize, žepkov in krogel na mizi. Detekcija že deluje, prav tako je spisan wrapper za Droid Cam OBS, s katerim preko Python skripte kontroliram kamere na telefonu, urediti pa je še potrebno kalibracijo kamer pomočjo katere bom lahko 2D koordinate zaznanih objektov mapiral v 3D koordinate, da jih bodo Questi znali prikazati ja dejanski mizi.
Predvsem bi bili dobrošli nasveti glede organizacije celotnega repozitorija, kjer sta trenutno aktivni veji "main" in "billard-table-detection", vodenje issue-ov pa delno poteka v githubu, delno pa v python fileih. Glede na to, da nisem del velikega tim-a, bi izbrisal obstoječe issue v githubu in si jih urejal v samih source datotekah. A imate kakšne nasvete in priporočila, sploh da se lažje držim nekih konvencij. Čim enostavneje.
Predvsem bi bili dobrošli nasveti glede organizacije celotnega repozitorija, kjer sta trenutno aktivni veji "main" in "billard-table-detection", vodenje issue-ov pa delno poteka v githubu, delno pa v python fileih. Glede na to, da nisem del velikega tim-a, bi izbrisal obstoječe issue v githubu in si jih urejal v samih source datotekah. A imate kakšne nasvete in priporočila, sploh da se lažje držim nekih konvencij. Čim enostavneje.
.

bedak_res ::
Zakaj imaš dve aktivni veji? Tukaj bi bilo bolj primerno da zadevo ločiš v dva različna projekta, kakršnekoli skupne komponente pa v tretji projekt - library.
Ne vem ali imaš skupne zadeve ali ne in ali občasno tudi mergaš iz veje v vejo - mogoče sedaj še gre - ampak kasneje ko bo zadeva kompleksnejša boš imel s tem ogromne težave.
Za drugo predlagam, da vse spremembe vodiš izključno kot issue v githubu. Saj je orodje namenjeno prav temu, pa nima veze kako velik team imaš. Na ta način bo tudi sledljivost boljša - kaj si naredil, kdaj in zakaj.
Še to sem pozabil napisat: Poskusi se čimprej navaditi, da je za vsako spremembo namenjen issue -> iz maina odpreš branch/merge request -> na branchu delaš svoje spremembe -> mergas branch v main. Ne glede na to za kako veliko/malo spremembo se gre, saj je tak način dela tudi v poslovnem svetu.
Pa veliko sreče in vztrajnosti ti želim.
Ne vem ali imaš skupne zadeve ali ne in ali občasno tudi mergaš iz veje v vejo - mogoče sedaj še gre - ampak kasneje ko bo zadeva kompleksnejša boš imel s tem ogromne težave.
Za drugo predlagam, da vse spremembe vodiš izključno kot issue v githubu. Saj je orodje namenjeno prav temu, pa nima veze kako velik team imaš. Na ta način bo tudi sledljivost boljša - kaj si naredil, kdaj in zakaj.
Še to sem pozabil napisat: Poskusi se čimprej navaditi, da je za vsako spremembo namenjen issue -> iz maina odpreš branch/merge request -> na branchu delaš svoje spremembe -> mergas branch v main. Ne glede na to za kako veliko/malo spremembo se gre, saj je tak način dela tudi v poslovnem svetu.
Pa veliko sreče in vztrajnosti ti želim.
Zgodovina sprememb…
- spremenilo: bedak_res ()

acookook ::
Ma dva brancha sem imel zaradi tega, ker sem se takoj zagnal v razvoj aplikacije v Unityju in sem šele pred kratkim v restartal celotno zadevo na drug način. Ker vem, da mi ne bo uspelo, bom vlogo še enkrat moral oddati, se pravi, da spet odprem branch, ki sem ga že imel, pa sem ga izbrisal, ker ne vem ravno napovedovati prihodnosti. V firmah, sem imel do zdaj luksuz, da je to že vse bilo pripravljeno in mi tvoj nasvet niti ni predstavljal težav. Sedaj premišljujem, kaj je najboljši course of action, sploh sedaj, ko imam že kar nekaj Python kode napisane.
"active-app-development" bi skoraj lahko zbrisal, ker je koda delno uporabna.
Nič, bo se treba disciplinirati.
"active-app-development" bi skoraj lahko zbrisal, ker je koda delno uporabna.
Nič, bo se treba disciplinirati.
.

acookook ::
Je kar veliko to za spisati v glavnem pa je kalibracija spisana (commit: 1fea04ea354ef8a483962f9ee711b60b81fdc582), sedaj pa še dejansko vse pofotkati in preveriti s pomočjo "caliscope". Tu bo potem narediti oceno, kaj je dejansko dopustno (pričakujem neko majhno razliko) in videti, če je float64 res potrebno imeti. Za 720p sem se odločil, da če bo res potrebno, bomo naračunali. Dejansko bi si želel, da vsaka taka hardcodana zadeva prepiše v nekaj čim bolj univerzalnega.
Kar se tiče fotkanja bom izvedel vse pri 1920x1080 (za caliscope 60FPS) v ProRaw Max (48MP) in JPEG Lossless (za video pa bi imel vklopljen Apple ProRes in HDR kodiranje). Tu bi rabil še malo pomoči glede ostalih nastavitev, kot so Camera Fusion), popačenje (bi rekel bolj barrel distorsion, kot pa fisheye) pa bo itak treba ročno popravljati. Tu mi bo pomagala metoda
Kar se tiče fotkanja bom izvedel vse pri 1920x1080 (za caliscope 60FPS) v ProRaw Max (48MP) in JPEG Lossless (za video pa bi imel vklopljen Apple ProRes in HDR kodiranje). Tu bi rabil še malo pomoči glede ostalih nastavitev, kot so Camera Fusion), popačenje (bi rekel bolj barrel distorsion, kot pa fisheye) pa bo itak treba ročno popravljati. Tu mi bo pomagala metoda
def undistort(self, img: np.ndarray, camera: str, target_resolution = None) -> np.ndarray: intrinsics = self.get_intrinsics(camera, target_resolution) K = intrinsics.K() dist = np.array(intrinsics.dist, dtype=np.float64) new_K, _ = cv2.getOptimalNewCameraMatrix(K, dist, (intrinsics.width, intrinsics.height), 1.0, (intrinsics.width, intrinsics.height)) return cv2.undistort(img, K, dist, None, new_K)
.
Zgodovina sprememb…
- spremenil: acookook ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Navidezna resničnost vs virtualna resničnostOddelek: Znanost in tehnologija | 747 (559) | Machete |
» | Meta snuje cenejšo različico QuestaOddelek: Novice / Zasloni / projektorji / ... | 2868 (2258) | OutOfTheBox |
» | Premijski AR naočniki Quest Pro pridejo konec oktobraOddelek: Novice / Zasloni / projektorji / ... | 5994 (3587) | sbawe64 |
» | Kaj uporabljate oz. priporocate za code review?Oddelek: Programiranje | 2366 (1307) | showsover |
» | Zuckerberg prihodnost Facebooka vidi predvsem v VR in AROddelek: Novice / Znanost in tehnologija | 7838 (6610) | Utk |