wiki:harjoitustyöt/kuittiskanneri
Last modified 16 months ago Last modified on 2016-05-24 03:53:38

https://github.com/jasalt/kuittiskanneri

Kuittiskanneri

Kuvaus

Mobiili web sovellus rahankäytön ja ruokaostosten seurantaan.

Tavoitteena saada toimiva skannerisovellus Kortepohjassa elävän tietotekniikkaopiskelijan päivittäisiin tarpeisiin. Ainoastaan Kortepohjan ja Savelan alueen elintarvikeliikkeet ovat tuettuja.

Sovellus vastaanottaa käyttäjän skannaaman kuitin ja parsii siitä tuotteet. Skannaus talletetaan tietokantaan käyttäjän suorittaman korjauksen ja hyväksynnän jälkeen.

Käyttäjä voi tarkastella käyttöliittymässä aiemmin skannaamiaan tuotteita, sekä tarkastella yhteenvetoja ostetuista tuotteista.

Monipuolisemmat tietokantahaut mahdollistavat sovelluksen laajentamisen, mutta päätarkoituksena on toimia helppona tiedonkeruuvälineenä. Tietokantaa voidaan käsitellä ja tarkastella myöhemmin tilastollisilla analysointityökaluilla (esim Scipy) mikäli dataa saadaan kerättyä merkittävästi. Tietokantaa voidaan mahdollisesti myös laajentaa sisältämään tuotteiden ravintoarvomääriä ym. hyödyllisiä attribuutteja joiden avulla dataa voitaisiin hyödyntää monipuolisemmin.

Toteutus

Käyttöliittymä AngularJS, Bootstrap Palvelin Python Flask Tietokanta MongoDB

OCR parsiminen suoritetaan palvelimella. Käytössä Tesseract OCR C-kirjasto shellin kautta.Kuvalle suoritetaan tunnistuksen aikana joitain muokkauksia Imagemagick shell-työkalulla tunnistustarkkuuden parantamiseksi. Oikeinkirjoitus-korjauksen jälkeen OCR-prosessin palauttamasta merkkijonosta parsitaan tuotteet merkkijonokäsittelyiden avulla.

Käyttäjä tarkistaa ja varmistaa skannauksen palauttaman datan käyttöliittymässä. Esitetään epävarmat tuoterivit erikseen ja tarjotaan automaattitäydennystoiminto joka hyödyntää käyttäjän aiemmin ostamia tuotteita ja Kortepohjan elintarvike-liikkeistä saatavien tuotteiden listaa.

Tiedot käyttäjän ostoksista tallennetaan MongoDB dokumenttitietokantaan. Tietokanta hostataan maksuttomalla Mongolabin testipalvelimella ja se varmuuskopioidaan päivittäin kun sovellus pääsee testikäyttöön. Palvelinohjelmistona Twisted WSGI Container joka ajetaan Digitaloceanin edullisella Ubuntu 14.04 LTS virtuaalikoneella.

Käyttäjäkirjautuminen HTTP Simple authentikoinnilla. Salasanan hash on talletettuna tietokantaan. Suljetussa testikäytössä SSL on pois käytöstä, mutta sen aiheuttama tietoturvariski on tiedossa. Ennen mahdollista julkaisua yleiseen käyttöön sovellukseen liittyy useita muitakin ongelmia mm. spämmääjien suhteen, mutta niistä ei tässä murehdita..

Taustapalvelin on käytössä myös Simo Rinteen GKO-kurssin harjoitustyössä, joskin tietokantaa ja käyttäjäauthentikointia käyttöliittymä ei hyödynnä.

Sovellusta on kehitetty alkukesästä 2014 lähtien ja työhön käytetyt tunnit on kirjattu asianmukaisesti.

Aikataulutus

Tähän mennessä aikaa on käytetty 50h suunnitteluun, asennuksiin, testailuun ja demoapplikaation tuottamiseen (http://kuit.dy.fi (toimii ehkä vielä 26.8)).

Suuntaa antava aikataulutus toteutuksen loppuunviemisestä:

  • 20h kirjautumistoiminto kuntoon
    • Tällä hetkellä kirjautumisen perustoiminta toimii testisivulla. Kirjautuminen lisätään tarkastettavaksi jokaisen pyynnön yhteydessä
  • 30h käyttöliittymän viilaaminen
    • Kuitin lisääminen ilman skannausta
    • Kirjautumis- ja rekisteröimistoiminnot,
    • Historian näyttäminen
    • Tilastojen esittäminen
    • Automaattitäydennystoiminto
  • 20h OCR tunnistuksen parantaminen
    • Parannetaan kuvan tunnistuksen tarkkuutta kuvan esikäsittelyllä
    • Parannetaan tunnistustarkkuutta sanalistoilla. Keskitytään Kortepohjasta saataviin suosituimpiin peruselintarvikkeisiin (makaroni, banaani, maito, ...)
    • Tulkinnan onnistumisprosentin ilmoitus käyttöliittymälle
  • 10h tietokantarakenteiden ja -operaatioiden toteuttaminen
    • Käyttäjän ostoshistoria
    • Käyttäjän statistiikat
  • 10h Palvelinsäätö ym
    • Automaattiset backupit tietokannasta
    • Automaattiset backupit palvelinkoneen levystä (snapshot)
    • Koodin julkaisu avoimena, tällä hetkellä piilossa Githubissa koska rumaa ja sisältää avaimia

Tavoite saada valmiiksi 14.9.2014 mennessä.