Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával

A VK-nak klassz hagyománya van - egy belső hackathon, amelyen csak a VKontakte srácai vehetnek részt. A hackathonról annak a csapatnak a nevében mesélek, amelyik idén első helyezést ért el, és teljes egészében belehalt a fáradtságba, de sikerült kipróbálni egy táncos mozgásérzékelőt a mese kamerához.

Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával

A nevem Paul, vezetem a VKontakte vezető kutatócsoportját, és melegen viszonyulok a hackathonokhoz: résztvevőként (Junction vagy számos deephack) és mostanában kurátorként (VK hackathon vagy VKontakte eset a Junctionnél - egyébként ez volt az első alkalom Részt vettem ott orosz cégnél). Negyedik éve rendezzük meg a mindenki számára nyitott VK Hackathont (utoljára az Ermitázs Főhadiszállására másztunk be), amelyen technikai csapatunk jelentős része a VK-hoz való csatlakozás előtt részt vett.

A belső hackathon lehetővé teszi a csapat számára, hogy sokat kísérletezzen a platformmal, teszteljen különböző ötleteket és általában jól érezze magát. Lényeges különbség, hogy a megoldások sokkal jobban integrálhatók a VK-ba, ami lehetőséget ad érdekes prototípusok megvalósítására.

A hackathon egész nap a Singer House-ban zajlik – a hét kellős közepén a Székház éjféli megmozdulássá változik. Vicces nézni, ahogy reggel meglepetten néznek körül a takarítók – egy általában üres iroda reggel 6-kor hirtelen tele van bozontos emberekkel, akik zombiként mozognak, és azt kiabálják: „Még öt óra!” Vagy amikor hajnali háromkor besétál a konyhába, és olyan szagú, mint az egyetemi kollégiumokban: energiaitalok, pizza és pánik. Ez természetesen hétköznapi napon történik, de ilyen tömeges méretekben ritka.

Három korábbi belső hackathonra került sor a nyáron. 2019-ben úgy döntöttünk, hogy nem vesztegetjük az időt apróságokra, és egy téli hackathont is tartunk - két hackathon sokkal jobb, mint egy, mert ez remek lehetőség egy olyan ötlet kísérletezésére és megvalósítására, amelyre a megszokott ritmusban nem jut elég idő. Változtak a szabályok is: korábban maximum három fős lehetett egy csapat, idén viszont már négyen, de egy nem kódot ír, hanem másra specializálódott. A csapatba tervezőket, termékmenedzsereket, tesztelőket, marketingeseket és más srácokat lehetett meghívni. Összesen 38 csapat vett részt ezen a hackathonon.

Dreamtim (pontosabban egy a 38-ból)

Megállapodtunk vele Danei és együtt meggyőztük Egor и Tyoma csatlakozz a csapathoz. Ahogy az várható volt, a modellek minket, Egor az iOS-t, Tyoma a gyártást és a tervezést. Mobilfejlesztés + tervezés + egy kis gépi tanulás és háttérprogram a siker kulcsa a 2k19 hackathonon.

Még ebben az évben is megjelent a számokra való felosztás, ami korábban nem volt: Média (amelyben részt vettünk), Kommunikáció, Infrastruktúra, Tartalom és Szórakozás. Erős versenytársaink voltak. Például folyamatosan motivált minket a VK vezető tervezője Ilya, aki bejött a szobánkba és megmutatta csapata ötletének prototípusait.

Ötlet

— Szinte az összes hackathonon, amin részt vettem, díjat nyertem, és ezt vártam a téli belső hackathontól is. (Danya magabiztos volt)

A mi (konkrétan Danináék) ötletünk eredetileg a következő volt: a zenegenerálás témáját szerettük volna feltárni + minden a készüléken legyen, különben "túl backend" lenne. A hackathon ötletbörzével kezdődött – gondolkoztunk, mit találhatunk ki. A zene generálása érdekes, de szeretném felhasználófüggővé tenni. Néhány gomb? Esetleg rajzolj a képernyőre és generálj ez alapján zenét? Ugyanakkor a Music team srácaitól megtanultuk, hogyan adjuk hozzá a szükséges számokat. De még mindig nem tűnt egészen helyesnek. A szomszédos csapatok vidáman dolgoztak valamit a laptopjaikon, és csalódást okoztak.

— Mi van akkor, ha felismeri a léggitárt, mintha gitározna, és ennek függvényében a gitár hangját játssza? (Tema)

Bingó! Az ötlet harcias, és megvan az erőnk, hogy mindent nagyszerűen elrendezzünk. A mozgásfelismeréshez létezik posenet, és nagyon jól van (mobilbarát is). Tegyünk úgy!

Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával

döntés

A fő feladatok egy rács létrehozása az eszközön (valósnak kell lennie), és megtanulják a mozgások felismerését. Egor elkezdett portolni, Tyoma azon kezdett gondolkodni, hogy milyen mozdulatokat lenne érdekes beépíteni (csak egy gitár – unalmas), Danyával pedig elkezdtük felismerni őket. De ehhez adatok kellenek. Mi a különbség a PRO és az amatőr között? A PRO-nak van egy GPU-s klasztere - ez egy dolog, kettő -, a PRO akkor gyűjt adatokat magának, amikor szüksége van rá. Danya standot szervezett, ahol egy felismert figura nyers koordinátaadatait rögzítették kamerából, majd táncolnak! Aznap este megtanultunk fogselymet táncolni, skibidi и dudtsa.

Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával
Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával

Mozgások rögzítésének állványaként egy munkahelyi laptopot használtunk, amely először Dani arcát rögzítette (korábban egy sort sem írt JS-ben), amikor újabb érthetetlen JS hibát látott.

Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával

— Nem értem, szinthibám van: a nyomtatás eltűnt a Pythonban! (Danya)

Éjszakai tánc (szó szerint)

Sok órányi folyamatos mozgást vettünk fel éjszaka a kamera előtt. Ők maguk vették fel, és elkapták a fejlesztőket is, akik a padlóra tévedtek és TÁNCOLÁSRA kényszerítették őket. Hét különböző kombinációt kaptunk – most meg kellett tanulnunk megkülönböztetni őket.

Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával
Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával

– Háromóránként bejöttem megnézni, hogy a srácok életben vannak-e. Pasa felkiáltott: „Van egy forgáspontunk!” - és Danya teljes erejéből hajlított. Aztán mindenki sípot táncolt. Amikor Daniilnek elfogyott az ereje, pasa kinyitotta az ablakot, és így szólt: „Srácok, fel kell frissülnünk.” (Madina)

Az ábra adatait előfeldolgoztuk: a lábakat kidobtuk, a fejet átlagoltuk, és a törzshöz viszonyított poláris koordinátákra konvertáltuk. A mozgásérzékelőt catboost segítségével betanítottuk – a modell adatfolyamának három másodperces kivonatát felhasználva. Egészen eddig az éjszakáig nem dolgoztunk a könyvtárral – kiderült, hogy harci jellegű, és iOS-re is felteheted.

Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával

Több osztályos osztályozást tanítottak, az egyik osztály a lehető legunalmasabb volt – csak a kamera előtt ácsorogni. A legnehezebb a „rock” mozgás rögzítése volt - olyan önzetlenül ráztuk a fejünket, hogy egy idő után forogni kezdett. És kinyújtották a kezét egy „kecskével”, bár ez értelmetlen volt - a posenetnek csak egy pontja van az egész kezén, nem látja az ujjakat.

Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával

— Hajnali 3 körül pasa bemászott egy hálózsákba, és egy órán keresztül kizárólag abban mozgott, úgy ugrált, mint egy igazi kenguru. (Madina)

Reggel 8 körül egy kis válság sújtott bennünket - minden elromlott, semmi sem működött, de aztán hirtelen minden magától működni kezdett. Mindkét modell becsavarása az alkalmazásba bizonyult a legnagyobb kihívásnak – Egor szó szerint öt perccel a határidő előtt végzett az összeszereléssel. Adjuk meg neki a szót:

— Miután megtaláltuk az ötletet, minden nagyon jól és eredményesen ment. A srácok betanították a rácsot és táncoltak, én pedig közvetlenül a böngészőben JavaScriptben csatoltam a PoseNet-et a story kamerához. A kezdeti tesztfutások jól működtek és meglepően gyorsak voltak. Ezért amikor reggel kiderült, hogy a WebView-ban a WebGL váratlanul lefagyott, amikor textúrákkal dolgoztunk valami hülyeség miatt, és nem lehetett megoldást találni, majdnem kétségbeestem. De már késő volt feladni: égtünk az ötlettől. Ezért a legutolsó erőnkkel és az utolsó kannával a red bullával behúztunk egy alternatív CoreML-alapú modellt az iOS kliensbe menet közben, és elkezdtük natívan követni a pózokat – hogy aztán táncokkal elküldhessük a modellnek. és kap valami eredményt a kimeneten. Lényegében újra megismételtük a munkát! Egy másik kihívás a második modell volt, amely hirtelen több mint ezer érvet kezdett várni inputként! Az Xcode olyan interfészt generált hozzá, amelyet egyszerűen irreális lenne közvetlenül használni. Szerencsére az Objective-C tudásom nem hagyott cserben, és elegáns megoldás született. (Yegor)

Dobás

Pénteken 14 órakor lejárt a határidő a projektről készült videó feltöltésére – több csapat nem ért el időben, ezért kizárták őket. 14:40-kor pedig pitch-et tartottunk a pályakurátoroknak a termékkel kapcsolatban. Voltak srácaink a Videó és Zene csapatból, és úgy tűnt, mindent szeretnek a pályán. Második helyezést értünk el a pályánkon (elsőt szerettük volna, mert olyan klassz projektünk van!) és végül a döntőbe kerültünk (a pályánkról két csapat kvalifikálta magát).

— Idén voltam először kurátora egy belső hackathonnak. Visszafogottan mondom: rendkívül nehéz volt értékelni a munkát. Kivétel nélkül minden csapat színvonala hihetetlen volt. Egy funkciónak nem csak technológiailag fejlettnek kell lennie, nem csak „gyártáshoz közelinek”, nem csak „termékeink számára potenciálisan hasznosnak”. A nyertes projektnek egyszerre meg kell felelnie ezeknek a kritériumoknak. Úgy tűnik, a srácoknak sikerült. (Andrew)

17:40-kor tartottuk az utolsó dobást. Ekkor már egy újabb demót kellett készíteni, ezúttal az egész Csapatnak, és más volt a zsűri, a műszaki igazgató, a termékigazgató és a marketing igazgató.

Este ötkor mindennek vége volt – hazamentünk aludni, semmit sem tudva az eredményekről.

Az eredmények végre

Az eredményeket csak hétfőn hirdették ki. Először a számok nyerteseit díjazták (nem a mi esetünk - emlékeztessem, másodikok voltunk), majd a közönség vezetői szavaztak (nem mi), majd a harmadik (és ez szintén nem mi) a második (ismét nem mi) és végül mi.

Itt vannak azok a projektek, amelyekkel versenyezni kellett:

2. hely - reszponzív hangasszisztens;
3. hely - a belső hibák idővonala;
A People's Choice Award emlékeztet a közelgő chat-találkozókra.

– Ez a legjobb hackathon, amelyen valaha részt vettem. Sokkal több volt a hajtás, mint még a Junctionnél is. (Danya)

– Nagyon szerettem egy teljesen más részlegről érkezett kollégákkal dolgozni – még soha nem nyúltam a gépi tanuláshoz, valami varázslatnak tűnt számomra, de most már nem az. (Yegor)

— Nagyon klassz volt egy ilyen menő csapat részévé válni egy ilyen menő projekttel. Egy nap alatt sikerült tervezőnek, videósnak, hangmérnöknek, vágónak, zenésznek és szövegírónak lenni! Én voltam az egyetlen, akinek sikerült aludnia. (Tema)

Élet a hackathon után

A legtöbb hackathonon kifejlesztett projekt különböző okok miatt nem jut el az értékesítésig: fókuszváltás, a megvalósítás bonyolultsága, valami előre nem látható a megvalósításban. Ez alól a belső hackathon sem kivétel.

Ennek ellenére felsoroljuk a napvilágot látott projekteket:

Hogyan nyertünk meg egy belső hackathont skibidi, fogselyem és javascript tanulásával

Forrás: will.com

Hozzászólás