CTRL+F Android-sovellus Vili-Robert Hietala Opinnäytteen raportointi Sähköosasto Toukokuu 2015
KUVAILULEHTI 14.04.2015 Tekijä(t) Vili-Robert Hietala Työn laji Opinnäytteen raportointi Sivumäärä 7 Luottamuksellisuus salainen saakka Työn nimi Ctrl+f Android-sovellus Osasto/tutkinto Sähköosasto, ICT-asentaja, kolmoistutkinto Työn ohjaaja Juha Eskola, Mika Lukkarinen Toimeksiantaja(t) - Tiivistelmä Ctrl+f on Android-sovellus tekstin hakemiseen muun muassa kirjoista käyttäen Android-puhelimien kameraa. Projektissa hyödynsin Tesseract OCR:ää, joka on yksi parhaimmista avoimen lähdekoodin tekstintunnistuskirjastoista. Sovellus jäi hieman keskeneräiseksi enkä sitä tule jatkamaan nykyiseltä pohjaltaan. Avainsanat (asiasanat) Java, Android, puhelin, sovellus, haku
SISÄLTÖ 1. 1. JOHDANTO 1 2. ALUSTA 2 3. TYÖKALUT 3 4. SOVELLUKSEN KÄYTTÖ JA TOIMINTA 4 4.1. Sovelluksen päänäkymä 4 4.2. Sovelluksen asetukset 4 4.3. Historia 5 5. PÄÄTÄNTÖ 6 LÄHTEET 7
1 2. JOHDANTO Idean projektiini sain Tuomas Laitalalta luultavasti 2014 vuoden alussa. Projektin aloitin kesäkuussa 2014. Ctrl+f on Javalla ohjelmoitu Android-sovellus tekstin hakemiseen muun muassa kirjoista käyttäen Android-puhelimien omaa kameraa. Tavoitteena on, että käyttäjä voi kirjoittaa hakusanan ja osoittaa tekstiä, jolloin sovellus automaattisesti osaa hakea hakusanaa tekstistä ja korostaa osumat. Nykyisillään sovellus kuitenkin vaatii käyttäjää painamaan nappia ottaakseen kuvan, jonka jälkeen sovellus skannaa kuvan läpi ja korostaa osumat.
2 3. ALUSTA Kehitysalustana päädyin käyttämään Googlen Androidia. Syinä valintaani olivat muun muassa Androidin korkea käyttäjämäärä, edullisuus kehitysalustana sekä hyvä tuki kehitykseen. Android ei vaadi maksullista kehittäjälisenssiä sovelluksen testaamiseen puhelimella toisin kuin Applen ios. Yksi syistä oli myös puhelimien saatavuus. Kenelläkään tutullani ei ollut lainattavissa iphonea tai Windows Phonea. Itselläni ei myöskään Android-puhelinta projektia aloittaessani ollut, mutta Anttu Suhonen lainasi vanhaa puhelintansa projektia varten. Käytin projektissani ohjelmointikielenä Javaa, koska siihen löytyy hyvät dokumentaatiot ja sen käyttäminen suhteellisen helppoa. Tätä ennen olin tehnyt Androidille Javalla yhden yksinkertaisen pelin, joten minulla oli jonkinlainen pohja Javasta ja Androidista ennen työn alkua.
3 4. TYÖKALUT Ohjelmointiympäristönä käytin Eclipseä, josta Google tarjoaa omaa jakelupakettiaan Android-sovelluskehitystä varten. Kyseinen paketti sisältää useita työkaluja Androidkehittämistä varten, esimerkiksi sovelluksen ulkoasuun WYSIWYG-editorin (What You See Is What You Get, mitä näet on mitä saat ) sekä kääntämiseen ja ajamiseen vaadittavat kirjastot. Mukana ohjelmistossa tulee myös Android-emulaattori, jolla pystyy testaamaan sovellusta ilman fyysistä laitetta. Varsinaisella puhelimella sovelluksen käyttäminen ja testaaminen oli kuitenkin miellyttävämpää ja nopeampaa. Versionhallintaa varten hyödynsin Git-versionhallintaohjelmistoa, joka mahdollistaa useiden erilaisten versioiden tekemisen ilman että pääversio projektista muuttuu. Myöhemmin muutokset eri versioista voi liittää pääversioon. Lähdekoodit ja muut tiedostot olen laittanut Bitbucket-pilvipalveluun, joiden hakemiseen ja päivittämiseen käytän Atlassian SourceTree Git-asiakasohjelmaa. Itse sovellusta varten merkittävin kirjasto on Tesseract OCR:sta Androidille luotu Tess- Two kirjasto. Kyseinen kirjasto mahdollistaa tekstintunnistuksen hyvällä tarkkuudella, varsinkin englanninkielisillä teksteillä. Tesseract OCR tukee yli 60 eri kieltä, vaihtelevalla tarkkuudella. Kuva 1 selittää tekstintunnistusprosessin vaiheet yksinkertaisesti. KUVA 1. Tekstintunnistusprosessi (Ray Smith, Google Inc, OSCON 2007)
4 5. SOVELLUKSEN KÄYTTÖ JA TOIMINTA Teksti kertoo sovelluksen käytön ja toiminnan nykyisessä tilassaan. Kaikki ei siis vastaa täydellisesti mahdollisen lopullisen version käyttöä ja toimintaa. Sovelluksen voi jakaa kolmeen osaan: Päänäkymä, joka sisältää kaikki päätoiminnot. Asetukset, joka sisältää asetukset. Kolmas on historia, joka tulisi näyttämään hakuhistorian. Päänäkymän tein ensin, asetukset seuraavaksi ja viimeiseksi olen jättänyt historian tekemisen vähäisen tarpeellisuuden vuoksi. 5.1. Sovelluksen päänäkymä Sovelluksen päänäkymä tulee näkyviin ensimmäiseksi kun sovelluksen käynnistää. Se sisältää napit, joista käyttäjä pääsee asetuksiin ja historiaan, hakukentän sekä hakunapin. Käyttäjä syöttää hakusanan hakukenttään, jonka jälkeen osoittaa kameralla haettavaa tekstiä ja painaa hakunappia. Sovellus näyttää käyttäjälle otetun kuvan ja hetken päästä korostaa osumat. Käyttäjän syötettyä hakusanan ja painettua hakunappia, sovellus ottaa kuvan ja vie sen bittikarttamuotoon. Bittikartasta tunnistetaan teksti Tess-Two funktioiden avulla. Sovellus käy sitten läpi kaikki tunnistetut sanat ja vertaa niitä hakusanaan. Vastaavien sanojen koordinaatit lisätään listaan, jonka sovellus käy läpi piirtäessä korostukset otetun kuvan päälle. KUVA 2. Kuvan muuttaminen kaksiväriseksi ja osuman korostaminen 5.2. Sovelluksen asetukset Asetuksista käyttäjä voi vaihtaa tekstintunnistuksessa käytettävää kieltä, historian pituutta, ladata uusia kieliä ja poistaa niitä puhelimesta. Käyttäjä voi valita tekstintunnistuksessa käytettävän kielen painamalla Language ja valitsemalla halutun kielen avautuvasta listasta. Muiden asetusten muuttaminen tapahtuu samalla tavalla.
5 Käyttäjän avatessa asetukset sovellus tutkii kansion, joka sisältää ladatut kielet ja luo löydetyistä kielistä listan. Lista näytetään käyttäjälle, josta käyttäjä voi valita haluamansa kielen. Nykyisessä tilassaan sovellus ei kuitenkaan välitä valinnasta vaan käyttää aina suomen kieltä tekstintunnistuksessa. Sovellus luo oman prosessin kielen lataukselle käyttäjän halutessa ladata uuden kielen. Näin käyttäjä voi poistua sovelluksesta ilman että lataus keskeytyy. Latauksen tila näytetään Androidin ilmoituksissa. Keskeneräisessä latauksessa tiedostonimessä on pääte.part, jotta sovellus tietää luodessaan listaa kielistä, että kyseistä kieltä ei ole vielä ladattu kokonaan. Latauksen valmistuttua sovellus luo ilmoituksen latauksen valmistumisesta ja poistaa.part päätteen tiedostosta sekä päivittää kielilistan. KUVA 3. Latauksen tila ilmoituksissa 5.3. Historia Historianäkymä on käytännössä täysin tyhjä eikä sisällä tällä hetkellä mitään. Lopullisemmassa versiossa sovellus lisäisi kaikki haut listaan, josta valitsemalla käyttäjä näkisi uudelleen edellisten hakujen tulokset. KUVA 4. Asetukset
6 6. PÄÄTÄNTÖ Sovellus on toivottua hitaampi hakemaan eikä ole tämän takia kovin käytännöllinen. Tekstin tunnistuksen tarkkuus on myös sovelluksen nykyisessä tilassa liian epävarma. Nopeutta ja haun varmuutta voisi parantaa ainakin muutamilla keinolla. Nopeutta voisi kasvattaa jakamalla kuvan pienempiin osiin sekä mahdollisesti muokkaamalla kuvaa yksinkertaisemmaksi ennen tekstintunnistusta. Kuvan muokkaaminen pitää kuitenkin tehdä varovaisesti, ettei teksti menetä tarkkuutta. Nykyisellään sovellus korostaa vain ne skannatut sanat, jotka ovat täysin identtiset hakusanan kanssa. Järkevää olisi käyttää yksinkertaista algoritmia tutkimaan onko skannattu sana lähes identtinen hakusanan kanssa. Nykyään on enemmän kokemusta Javasta ja sovelluskehittämisestä Androidille ja jos projektia lähtisin jatkamaan, aloittaisin koko projektin alusta. Nykyinen koodi ei ole hyvää ja sitä on turha lähteä jatkamaan.
7 LÄHTEET Google:DokumentaatiotAndroid3sovelluskehitykseen. http://developer.android.com/ StackOverflow:OhjelmointiaiheinenQ&A3sivusto. http://stackoverflow.com/ Tess3Two:Tess3Two kirjastondokumentaatiotjalähdekoodit. https://github.com/rmtheis/tess3two/ (Kuva1)RaySmith,GoogleInc,OSCON2007: https://tesseract3ocr.googlecode.com/files/tesseractoscon.pdf
LIITTEET Englanninkielinendokumentaatio,jonkakirjoitinsuurimmaksiosaksiennenprojektin aloittamista.sisältäämyösprojektilokin. https://drive.google.com/file/d/0b5g3bdxh4yk4bgfpn0pqzdjxuda/view KUVA 5. Sovelluksen kuvake