Pozdrav svima.

 

Zadnji članak koji je Kristijan Šarić napisao bavio se detekcijom raka dojke i kako možemo koristiti umjetnu inteligenciju kako bismo spasili još više ljudi – https://exact-byte.com/hr/detekcija-raka-dojke-umjetnom-inteligencijom/

Teško da mi je sakriti razočaranje za projekt koji se, nakon samo 1000 primjera, slagao sa puno (nije radio savršeno, ne, to nije za očekivati nakon 1000 primjera) prognoza specijalista za radiologiju, te bi se, uz suradnju sa doktorima, mogao pretvoriti u nešto što može stvarno pomoći spasiti puno života.

 

Ali dobro. Danas nastavljamo drugom temom, te ja napokon završavam svoje obećanje koje sam dao prije 2 godine. 

Izradio sam besplatnu aplikaciju koja može prepoznati znakovnu abecedu pomoću smartphone-a (pametnog mobitela) te tu istu aplikaciju možete skinuti besplatno za Android.

Aplikacija je “učila” na ograničenom broju primjera, tako da neće raditi savršeno, ali je super primjer aplikacije koja bi radila jako dobro da se uključi veliki broj ljudi.

 

Prvi mail sa ovom idejom za aplikaciju za prepoznavanje znakovnog jezika za osobe oštećena sluha bio je poslan 16.07.2019, te je tek sada završena.

Teško je raditi svoj posao za koji ste plaćeni i uz to raditi besplatne aplikacije i sve ostalo, tako da čitatelj/korisnik može naći malo razumijevanja, nadam se.

Aplikaciju sam završio tako da sam tamo u 6. mjesecu završio svoju suradnju sa IOHK. Više ne radim sa 5. najvećom kriptovalutom u svijetu, bio sam tamo preko 4 godine te im želim sav uspjeh.

Sa druge strane, imam vremena raditi na nekim zanimljivijim projektima koje ću prezentirati kroz sljedećih par mjeseci.

Tko je uključen?

U ovaj projekt od početka bila je uključena Udruga gluhih i nagluhih Istarske županije, te više o njoj možete pronaći ovdje – https://ugniz.hr/

 

Tada je suradnju samnom započela Dina Ivas, ali je u međuvremenu otišla raditi drugi posao. Svejedno, bitno je spomenuti da je bila uključena oko organizacije snimanja dvoručne abecede, o čemu ću više malo kasnije. Trenutna osoba sa kojom sam u kontaktu je Alma Zulim, te je upravo ona dočekala kraj ovog projekta kada sam se javio ove godine.

Kako je to započelo?

Moja ideja je bila – hajde da probamo nešto jednostavno i nešto što bi trebalo raditi u roku od mjesec – dva. Tako da sam za početak odabrao napraviti znakovnu abecedu. Znakovna abeceda je isto što je abeceda, ali se izvodi rukama te je namjenenja za gluhe i nagluhe.

Sam znakovni “govor” je puno dinamičniji i kompliciraniji od ovoga, pošto uključuje pokrete glave, usana i generalno, tijela. Za takav projekt potrebno je puno vremena i, samim time, puno novca. Aplikacija koje radim besplatno jesu za promociju, ali i ja moram od nečega živjeti, tako da ne mogu raditi nešto godinu dana bez ikakvog novca.

 

Drugim riječima, htio sam izraditi prototip aplikacije na mobitelu i vidjeti da li je moguće izraditi mobilnu aplikaciju koja bi u realnom vremenu na mobitelu mogla prepoznati znakovni jezik bez dodatne opreme, koristeći samo kameru?

Moj odgovor za sada je – da, to izgleda izvedivo.

Prvo ću krenuti od abecede i onda nastaviti u smjeru gdje bi bilo moguće ići i što bi bilo moguće napraviti, pošto imam par lijepih ideja kako riješiti neke probleme.

Znakovna abeceda

Da bismo uopće krenuli i vidjeli što možemo napraviti, potrebno je imati primjere kojima ćemo “učiti” umjetnu inteligenciju kako da raspoznaje slova.

Tako da smo dogovorili sa udrugom gluhih i nagluhih da će se par članova skupiti i napraviti video snimke sa istom pozadinom gdje će pokušati uhvatiti različite pozicije slova.

Primjer člana koji u videu pokazuje pokazuje redom znakovnu abecedu, pokušavajući prikazati ruku u različitim položajima. Zašto u različitim položajima? Zato što želimo da umjetna inteligencija nauči generalizirati položaj ruku za pojedino slovo – želimo da umjetna inteligencija “shvati” da je bitan položaj ruku, ali ne samo u jednoj pozi, već da prepozna da je bitan položaj ruku neovisno o nekim rotacijama i translacijama.

Ovako nešto radila bi augmentacija (https://en.wikipedia.org/wiki/Data_augmentation) slika da radimo sa slikama.

Nakon što smo pribavili video snimke za 6 člana (nije baš previše, ali za početak dovoljno dobro), odvojili smo snimke na dijelove gdje su pojedina slova. Time smo dobili, za svakog člana, snimke pojedinih slova. Taj posao je tada odrađivala Linda Štaba, koja je bila na stručnom osposobljavanju u EXACT BYTE.

Onda smo te snimke pojedinačno učitavali da bismo iz njih dobili slike.

Primjer dvije različite slike:

Nakon što smo dobili te slike iz snimki, slučajnim smo odabirom podijelili slike u skup za treniranje i skup za testiranje.

E sada već imamo neku skupinu podataka sa kojima možemo krenuti.

Neuspjeli pokušaji

Uvijek pričamo o tome kako nešto uspijemo napraviti, ali rijetko kada spominjemo što sve nije uspjelo. Ako netko bude krenuo ovim putem, bitno je spomenuti kakve stvari definitivno neće raditi, ili za koje će biti potrebna ogromna količina podataka.

Kao prvo, ideja da ću ja samo ubaciti hrpu slika u neuralnu mrežu sa malo augmentacije i stvar će raditi, nije baš išla po planu. Mislim, super je preciznost u testnim podacima, ali u stvarnom svijetu je neupotrijebljivo.

Kao drugo, ideja da ću prvo detektirati ruke, pa crop-ati ruke, pa to ubaciti u neuralnu mrežu jednako je bezuspješna, iako bliža stvarnosti.

Probao sam sa različitim skupovima podataka da probam dobiti nešto tako, čak i sa segmentacijom, koristeći EgoHands podatke. Na kraju to i dalje nije bilo dovoljno, tako da sam i to pustio.

Zaključak bi bio, potrebno bi bilo jako puno primjera kako bi neuralna mreža naučila iz slike generalizirati tako nešto. U mom slučaju, potpuno neuspješno.

Kako radi aplikacija?

 

Na kraju, shvatio sam da je najbolje da imamo mapiranje iz slike u koordinate zglobova ruku i onda pomoću tih koordinata mapiranje u sama slova. 

 

Na žalost, da bismo ovo prvo mapiranje dobili, trebalo bi to posnimati sa rukavicama koje mogu takve koordinate poslati automatski, a i trebali bismo lijep broj primjera.

 

Tako da sam na kraju besramno pokrao/posudio to iz postojećeg Google projekta – https://mediapipe.dev/

 

Kako radi praćenje ruke u tom projektu? Pa aplikacija prepoznaje (prvo palac, ali da ne kompliciramo sada) ruku i vraća 3D koordinate (x, y, z) pomoću točaka koje ruka sadržava (21 točku).

Kako to prepoznavanje radi? Možete vidjeti ovdje u primjeru.

Slike su kopirane sa stranica https://mediapipe.dev/

 

Nakon što imamo prvi dio mapiranja, sljedeći dio mapiranja je relativno lagan.

 

Za svaku sliku detektiramo 3 koordinate svake točke za obje ruke. To je 3 * 21 * 2 = 126 točaka. To su nam ulazni podaci. Izlazni podaci su nam slovo koje detektiramo, naravno. Pošto u obzir uzimamo samo statična slova (slova za koja ne trebaju pokret), rezultat je 22 slova.

Postoje i “dinamična slova”, slova za koja je potreban pokret. To su slova poput slova sa kvačicom – č, ć i ostala. Zašto ne uzimamo u obzir takva slova?

Jer takva slova zahtjevaju pokret, što je u biti skupina slika u vremenu.

Animacija – film ili crtani, skup su slika koje sve vrte u vremenu i zahtjevaju veliku skupinu istih kako bi shvatili pokret. To je problem zbog više stvari.

Kao prvo, problem je jer zahtjeva puno veću količinu primjera, a kao drugo, puno jači mobitel i performanse na njemu. No, siguran sam da se to može riješiti uz veći broj primjera, ali tada problem više nije regresijski i klasifikacijski, već je regresijski i klasifikacijski, ali pomoću vremenskih serija (pogledati recimo https://exact-byte.com/hr/novi-tekstovi-cece-pomocu-umjetne-inteligencije/).

Zato i kažem da je ovo prototip aplikacije pravog znakovnog jezika – dokazuje da rad na mobitelu radi toliko brzo da je moguće implementirati dinamične pokrete koji bi radili na mobitelu. I da, uz dovoljno resursa (novaca i vremena), vjerujem da bih mogao to napraviti.

 

Dakle, moguće je uz pomoć vremenske serija (LSTM ili slično) napraviti prepoznavanje pokreta, te nudim još jednu zanimljivu i korisnu ideju ako netko krene ovim putem.

 

Augmentacija slike može poslužiti kako bi se poboljšao/generalizirao model za prepoznavanje objekta na slici. 

Isto tako, možemo napraviti augmentaciju modela za ruke, gdje možemo, za pojedina slova, pomicati “prste” u rotaciji oko zgloba, ili zoomirati ruke, formirajući tako puno bogatiji dataset.

Kako mogu probati aplikaciju?

 

Aplikacija se može skinuti za Android, nalazi se na Google Play Store-u, te je moguće aplikaciju koristiti ako je skinete ovdje – https://play.google.com/store/apps/details?id=com.eb.hsgn

 

Ako imate dvije kamere (prednju i zadnju), moguće je testirati na oba načina.

 

Kao što sam već pisao, ne očekujte čuda. Probajte se na kameri udaljiti tako da vam se vidi gornji dio tijela (od struka nagore) te da su vam ruku u kadru. Zatim probajte rukama postići položaj slova. Neka slova su jako laka i rade odmah, druga nisu baš.

 

Za ta druga, potrebno je puno dodatnih primjera da bi aplikacija radila bolje.

 

Nemojte očekivati čuda, znam da će ljudi to pogledati i reći “ovo je glupo”, ali ako uzmete u obzir da je to aplikacija koja bez posebnih alata prepoznaje (dosta dobro) znakovni jezik, i da ukazuje na smjer gdje se može koristiti cijeli znakovni jezik zajedno sa pokretima, ovo je impresivno.