maanantai 7. joulukuuta 2015

lauantai 28. marraskuuta 2015

Mobiiliapplikaation vaiheita (OSA II)




Tässä blogisarjassa käymme lävitse Morse-miehet 2.0 ryhmän mobiiliapplikaation kehitystä.  Tämä on sarjan toinen kirjoitus.

Yritämme luoda Android-sovellusta, joka kykenee lähettämään viestejä käyttäen matkapuhelimen salamavaloa ja myös tunnistamaan viestejä käyttäen kameraa. Viestit koostuvat ”viivoista” ja ”pisteistä”, joiden esiintymisjärjestys kertoo viestin sisällön. Viesti voi olla esimerkiksi ”-..----..-.-.-..” ja merkkien järjestyksestä voidaan muodostaa selkokielinen viesti. Säännöt tähän luomme myöhemmin, sillä se on erittäin yksinkertaista toteuttaa. Hankalinta projektissa on pisteiden ja viivojen lukeminen video-kuvalta.

Aloitimme Android-sovelluksen tekemisen lokakuun alussa. Ensimmäisessä versiossa tavoitteena oli luoda pisteiden ja viivojen lähettäminen käyttäen salamavaloa. Käyttöliittymän tuli olla hyvin yksinkertainen ja sitä käytettäisiin vain kehityksessä. Vielä ensimmäisessä versiossa emme tavoitelleet videokuvan näyttämistä saati sen tunnistamista.

Emme vielä tienneet, millä tavalla viestejä kannattaa salamavalolla lähettää . Vaihtoehtoja on kaksi. Ensimmäinen on vilkuttaa valoa tasaisin väliajoin siten, että valo päällä tulkitaan viivaksi ja valo pois päältä pisteeksi. Toinen vaihtoehto on lähettää viestejä siten, että viiva kestää kolme aikayksikköä ja piste yhden. Valon näkymisen kesto kertoo, mikä merkki on kyseessä.

Teknisesti aloitimme toteuttamaan valon vilkuttamista käyttäen Androidin Camera1 API:a. Tiedostimme API:n olevan hieman vanha ja tulevaisuudessa saattaisi tulla yhteensopivuusongelmia. Camera1 on kuitenkin erittäin helppokäyttöinen ja se sopi oivasti ensimmäiseen versioon, missä tarkoituksena oli tukea vain muutamaa puhelinta. Toteutimme yksinkertaiset luokat valojen hallintaan ja yksinkertaisen käyttöliittymän.

Ensimmäinen toimiva versio valmistui huomattavan nopeasti ilman suurempia ongelmia. Applikaatio pystyi lähettämään pisteiksi ja viivoiksi koodattua tekstiä edellä mainituilla lähetystavoilla.



Kehitystarpeisiin luotu käyttöliittymä

Huomasimme nopeasti, että Camera1 API ei tue edes meidän kaikkien henkilökohtaisia puhelimia, mikä tekisi kehittämisestä huomattavasti hankalampaa. Ainoa ratkaisu oli tämän jälkeen siirtyä käyttämään Camera2 API:a. Tämä ei osoittautunut triviaaliksi ja käytimme huomattavasti aikaa Camera2 käyttöönottoon. Lopulta sekin saatiin toimimaan! Koodista tuli sekavaa, mutta sovellus toimi.

Seuraavaksi päätimme parantaa käyttöliittymää, koska nykyisessä on huomattavan vaikea esittää videokuvaa sen ahtauden takia. Suunnittelimme hienon käyttöliittymän ja toteutimme sen. Käyttöliitymä ei kuitenkaan toimi vielä kaikilla puhelimilla, joten hienosäätöä tarvitaan vielä.

Tällä hetkellä yritämme liittää C++:lla tehtyä tunnistusalgoritmia kiinni Android-sovellukseen. Se on osoittautunut erittäin vaikeaksi. Hiomista löytyy vielä myös viestien lähetyksen kanssa, sillä salamavalon ajoitukset ovat vielä vähän sekaisin. Olemme kuitenkin optimistisia, että saamme toteutettua yksinkertaisen Android-sovelluksen ennen kurssin päättymistä.