embedded systems report

13
Πολυτεχνείο Κρήτης Syst Ομάδα Εργασίας : Κυριαζής Αθανάσιος : 2008030002 Καζαντζής Πολυχρόνης – Γεώργιος : 2008030103 04/02/2014 Αναφορά Εργασίας MyBet Embedded Systems

Upload: athanasios-kyriazis

Post on 07-Apr-2017

70 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Embedded Systems Report

Πολυτεχνείο Κρήτης

Syst

Ομάδα Εργασίας :

Κυριαζής Αθανάσιος : 2008030002

Καζαντζής Πολυχρόνης – Γεώργιος : 2008030103

04/02/2014

Αναφορά Εργασίας MyBet Embedded Systems

Page 2: Embedded Systems Report

Σκοπός

Σκοπός της εργασίας είναι η υλοποίηση μιας εφαρμογής Android για τον

υπολογισμό κέρδους του στοιχήματος χρησιμοποιώντας οπτική αναγνώριση

χαρακτήρων (ocr). Ο χρήστης θα μπορεί να βγάζει φωτογραφία τις αποδόσεις

που επιθυμεί και να υπολογίζει το κέρδος του γρήγορα και εύκολα.

Απαιτήσεις

Οι απαιτήσεις ώστε να μπορέσει κάποιος να χρησιμοποιήσει την εφαρμογή είναι

οι ακόλουθες :

Πρέπει να διαθέτει ένα smartphone με λογισμικό android.

Το smartphone πρέπει να έχει κάμερα τουλάχιστον 5 megapixel ώστε να

γίνεται σωστά η αναγνώριση.

Οθόνη τουλάχιστον 4 inches.

Λειτουργικό Android Froyo 2.2 ή νεότερο (ουσιαστικά εδώ περιέχεται η

μεγαλύτερη γκάμα android smartphone)

Απαιτούμενος αποθηκευτικός χώρος στην μνήμη τηλεφώνου 8 MB ώστε

να εγκατασταθεί με επιτυχία η εφαρμογή.

Σύνδεση στο internet μετά την εγκατάσταση της εφαρμογής ώστε να

κατεβάσει κάποια απαιτούμενα πακέτα για την αναγνώριση (αυτό γίνεται

μόνο στο πρώτο τρέξιμο της εφαρμογής) και για να βλέπει ο χρήστης την

εξέλιξη των παιχνιδιών live αν το επιθυμεί.

Εργαλεία

Τα εργαλεία που χρησιμοποιήσαμε για την υλοποίηση της εφαρμογής έχουν ως

εξής :

Αρχικά εγκαταστήσαμε την πλατφόρμα του eclipse ώστε να μπορέσουμε να

δουλέψουμε σε java και τον compiler του eclipse, το jdk. Μετά εγκαταστήσαμε

το extension του eclipse (sdk) για εφαρμογές android που κατεβάζει όλες τις

βιβλιοθήκες που χρειάζονται αναλόγως με την έκδοση του κάθε λογισμικού.

Τέλος χρειαστήκαμε και το ndk μέσω του οποίου μπορεί το eclipse να διαβάζει

βιβλιοθήκες σε γλώσσα c για android εφαρμογές. Στην περίπτωσή μας το

χρειαστήκαμε ώστε να περάσουμε τις βιβλιοθήκες του εργαλείου tesseract που

είναι υπεύθυνο για την υλοποίηση του ocr. Το ndk το κάναμε build μέσω του

τερματικού των windows Cygwin και για να γίνει αυτό χρησιμοποιήσαμε και το

Apache-Ant 1.29 .

Page 3: Embedded Systems Report

Περιγραφή υλοποίησης

Αρχικά υλοποιήσαμε την αρχική οθόνη της εφαρμογής με την κλάση

Main_Activity η οποία περιέχει το κεντρικό menu της εφαρμογής και δημιουργεί

νέα Activities για κάθε ένα από τα κουμπιά που υπάρχουν μέσω του

OnClickListener. Όλα τα γραφικά της αρχικής οθόνης περιέχονται στο XML

αρχείο activity_main και συνδέονται με την κλάση Main_Activity με την εντολή

setContentView μέσω της συνάρτησης OnCreate. Τα 3 buttons που σχεδιάσαμε

καθώς και η αρχική οθόνη της εφαρμογής φαίνονται παρακάτω :

View my games

Take a picture

Watch Livescore

Όπως βλέπουμε και παραπάνω ο χρήστης στην αρχή έχει 3 επιλογές :

Αν πατήσει το κουμπί View my games δημιουργείται νέο Activity σε μια

καινούργια οθόνη που μπορεί να δει τις αποδόσεις και την περιγραφή (αν

υπάρχει) των παιχνιδιών που έχει βγάλει φωτογραφία μέχρι εκείνη τη στιγμή.

Αν πατήσει το κουμπί Take a picture επίσης δημιουργείται νέο Activity το οποίο

είναι το Activity της κάμερας. Εδώ ο χρήστης μπορεί να βγάλει τις αποδόσεις

που θέλει να αποθηκεύσει.

Page 4: Embedded Systems Report

Τέλος όταν πατηθεί το κουμπί Watch Livescore το νέο Activity που

δημιουργείται είναι τύπου web και πηγαίνει τον χρήστη σε μια καινούργια οθόνη

όπου μέσω της σελίδας http://www.livescore.com/ μπορεί να παρακολουθήσει

την εξέλιξη των παιχνιδιών live αλλά και να δει τελικά αποτελέσματα.

Επίσης στην αρχική οθόνη έχουμε προσθέσει και μια επιπλέον λειτουργία όταν

πατηθεί το κουμπί των ρυθμίσεων όπου υπάρχει σε όλες τις συσκευές android.

Όταν πατηθεί αυτό το κουμπί μέσω της Main_Activity καλείται η συνάρτηση

onCreateOptionsMenu και έχουμε 2 επιλογές : η μία επιλογή είναι να πατήσουμε

το exit όπου τερματίζει την εφαρμογή μέσω της συνάρτησης exit της java ενώ η

δεύτερη επιλογή είναι να πατήσουμε το About Us όπου σε αυτήν την περίπτωση

δημιουργείται νέο Activity που μας πηγαίνει σε μια νέα οθόνη και καλείται το

XML αρχείο about. Στην καινούργια οθόνη ο χρήστης βλέπει κάποιες

πληροφορίες για το σκοπό της εφαρμογής, τους δημιουργούς της και κάποιες

οδηγίες για το πώς να χειριστεί την εφαρμογή. Παρακάτω δίνονται τα

στιγμιότυπα της αρχικής οθόνης όταν πατιέται το κουμπί των ρυθμίσεων και όταν

μετά πατήσουμε το about :

Page 5: Embedded Systems Report

Θα περιγράψουμε παρακάτω τι γίνεται όταν πατιέται κάθε ένα από τα κουμπιά

της αρχικής οθόνης :

Take a picture (1η Φάση Πριν βγάλουμε φωτογραφία)

Όταν πατιέται αυτό το κουμπί όπως αναφέραμε και παραπάνω καλείται νέο

Activity που χειρίζεται την εφαρμογή της κάμερας. Με αυτήν την ενέργεια

μεταφερόμαστε στην κλάση CaptureActivity όπου εδώ είναι και το κύριο μέρος

της εφαρμογής. Μέσω αυτής της κλάσης χειριζόμαστε όλες της λειτουργίες της

κάμερας ώστε να μπορέσει να γίνει σωστά η αναγνώριση των αποδόσεων που

θέλει ο χρήστης μέσω του κουπονιού του στοιχήματος. Για παράδειγμα όταν ο

χρήστης προσπαθήσει να βγάλει μία απόδοση και κουνηθεί το χέρι του η

εφαρμογή της κάμερας θα κάνει Auto Focus ώστε να μπορέσει να κεντράρει στο

επιθυμητό σημείο και να πάρει το σωστό αποτέλεσμα. Μία άλλη πολύ σημαντική

λειτουργία που υλοποιείται με σκοπό την καλύτερη ακρίβεια του ocr είναι ότι

όταν ο χρήστης πάει να βγάλει φωτογραφία μια απόδοση βγαίνει ένα

τετραγωνάκι στην οθόνη ώστε να πάρει μόνο εκείνη την απόδοση ή τις αποδόσεις

που επιθυμεί και όχι μεγαλύτερο μέρος του κουπονιού. Αυτό γίνεται γιατί όσο

μεγαλύτερη επιφάνεια σαρώνει το ocr για να αναγνωρίσει κείμενο τόσο πιο αργό

γίνεται και μειώνεται και η ακρίβειά του. Όλες αυτές οι λειτουργίες της κάμερας

υλοποιούνται σε κλάσεις που βρίσκονται σε ξεχωριστό πακέτο με το όνομα

camera και καλούνται όπου χρειάζεται η κάθε μία από την κλάση

CaptureActivity. Τέλος στην οθόνη της κάμερας έχουμε προσθέσει και ένα

SutterButton όπου χρησιμοποιείται όταν ο χρήστης έχει κεντράρει τις αποδόσεις

που θέλει για να βγάλει την φωτογραφία. Αυτό το button έχει προστεθεί πάνω

δεξιά στην οθόνη ώστε να βολεύει τον χρήστη να βλέπει τις αποδόσεις όταν

τραβάει την φωτογραφία. Εδώ πρέπει να αναφέρουμε ότι για τη σωστή λήψη της

φωτογραφίας το κινητό θα πρέπει να έχει περιστραφεί. Παρακάτω δίνεται ένα

στιγμιότυπο αυτής της οθόνης :

Page 6: Embedded Systems Report

Βλέπουμε τη φωτογραφία κάθετα γιατί

έτσι έγινε το screenshot της οθόνης.

Κανονικά για να τραβηχτεί η φωτογραφία

το κινητό πρέπει να είναι οριζόντια όπως

αναφέραμε. (Εδώ δεν έχει τραβηχτεί

ακόμα η φωτογραφία απλά βλέπουμε τις

αποδόσεις)

Take a picture (2η ΦάσηΜε το πάτημα του SutterButto)

Αφού έχει τραβηχτεί η φωτογραφία μας εμφανίζει τις αποδόσεις που

τραβήχτηκαν ώστε να επιβεβαιώσουμε ότι είναι σωστές και να τις

αποθηκεύσουμε. Επίσης υπάρχει η δυνατότητα αν δεν θέλουμε να τις

αποθηκεύσουμε να δούμε τα παιχνίδια που ήδη έχουμε αποθηκεύσει (ίδια

λειτουργία με το View my games της αρχικής μας οθόνης). Ακόμη μπορούμε να

γράψουμε κάτι όσον αφορά την ομάδα της οποίας είναι η απόδοση ώστε να τη

θυμόμαστε. Παρακάτω δίνεται ένα στιγμιότυπο αυτής της οθόνης :

Page 7: Embedded Systems Report

Save my games

View my games

Όταν πατήσουμε View my games μπορούμε να

δούμε ότι έχουμε αποθηκεύσει ήδη.

Όταν πατήσουμε Save my games αποθηκεύονται

οι αποδόσεις που έχουμε πάρει φωτογραφία μαζί

με την περιγραφή της ομάδας και μας εμφανίζει

και κατάλληλο μήνυμα με χρήση toast όπως

φαίνεται παρακάτω :

Οι οθόνες αυτών των 2 φάσεων βρίσκονται στο XML αρχείο capture.

Όταν πατήσουμε Save my games καλείται η OnClick συνάρτηση στην κλάση

CaptureActivity και αποθηκεύει τις αποδόσεις μέσω της SQL που έχουμε

υλοποιήσει στην κλάση SQLite_Handler. Για την αποθήκευση και για τον σωστό

υπολογισμό του κέρδους αργότερα τα μετατρέπουμε σε float.

Όταν πατήσουμε View my games μπορούμε να δούμε τις αποδόσεις και τα

παιχνίδια που έχουμε αποθηκεύσει δηλαδή το δελτίο στοιχήματος του χρήστη.

Αυτό γίνεται πάλι από την συνάρτηση OnClick στην κλάση CaptureActivity που

δημιουργεί νέο Activity το οποίο υλοποιείται στην κλάση SQLView. Όπως

είπαμε αυτή είναι ίδια λειτουργία με την View my games της αρχικής οθόνης που

θα περιγράψουμε παρακάτω και θα δώσουμε και τα στιγμιότυπα της οθόνης.

Page 8: Embedded Systems Report

View my games

Όταν πατηθεί αυτό το κουμπί δημιουργείται νέο Activity που πηγαίνει στην

κλάση SQLView. Εκεί καλείται το XML αρχείο sqlview που έχουμε σχεδιάσει

τα γραφικά της καινούργιας οθόνης όπου γίνεται η σύνοψη των αποδόσεων και

ο υπολογισμός του κέρδους του χρήστη. Παρακάτω δίνονται 2 στιγμιότυπα αυτής

της οθόνης :

Όπως βλέπουμε αυτή η οθόνη έχει 2

στιγμιότυπα και έχουμε φτιάξει τα γραφικά

για να βολεύει τον χρήστη αναλόγως πως

έχουμε περιστρέψει το κινητό.

Edit text your bet Εισάγει ο χρήστης

το ποσό που θέλει να ποντάρει.

Button Compute my profit Όταν

πατηθεί αυτό το κουμπί εμφανίζεται το

κέρδος του χρήστη στο παρακάτω text view.

Text view Your Profit

Button Delete all instances Όταν

πατηθεί αυτό το κουμπί διαγράφονται όλα τα

δεδομένα της βάσης δεδομένων.

Page 9: Embedded Systems Report

Τέλος έχουμε υλοποιήσει και κάποιους περιορισμούς οι οποίοι οι οποίοι

εμφανίζονται στην οθόνη με χρήση toast και δίνονται παρακάτω :

Αυτός ο περιορισμός καλείται όταν ο χρήστης

προσπαθήσει να ποντάρει ενώ δεν υπάρχουν

αποδόσεις στο δελτίο του όπου του

εμφανίζουμε ένα μήνυμα που λέει να εισάγει

κάποια παιχνίδια και μετά να ποντάρει.

Αυτός ο περιορισμός καλείται όταν ο χρήστης

προσπαθήσει να πατήσει το κουμπί Compute

my profit για να υπολογίσει το κέρδος του και

δεν έχει εισάγει ποντάρισμα όπου του

εμφανίζουμε ένα μήνυμα που λέει να

ποντάρει και μετά να πατήσει το κουμπί.

Page 10: Embedded Systems Report

Αυτός ο περιορισμός καλείται όταν ο χρήστης

κάνει κάποιο λάθος και πληκτρολογήσει

κάποιο γράμμα εκεί που πρέπει να

πληκτρολογήσει το ποντάρισμα όπου του

εμφανίζουμε ένα μήνυμα που λέει ότι έχει

κάνει κάποιο λάθος και πρέπει να

προσπαθήσει ξανά.

.

Watch Livescore

Όταν πατηθεί αυτό το κουμπί δημιουργείται νέο Activity που πηγαίνει στην

κλάση SimpleBrowser. Εκεί καλείται το XML αρχείο simplebrowser που έχουμε

σχεδιάσει τα γραφικά της καινούργιας οθόνης. Παρακάτω δίνονται 2 στιγμιότυπα

αυτής της οθόνης :

Ουσιαστικά τα γραφικά αυτής της οθόνης είναι

ένα web view μέσω του οποίου μεταβαίνουμε

στην σελίδα του livescore και μπορούμε να

παρακολουθήσουμε την εξέλιξη των αγώνων

live και να δούμε παλιά αποτελέσματα(για

αυτήν τη λειτουργία πρέπει να είμαστε

συνδεδεμένοι στο internet).

Page 11: Embedded Systems Report

Λίγα λόγια για το ocr

Το OCR είναι μια πολύπλοκη τεχνολογία που μετατρέπει τις εικόνες με κείμενο

σε επεξεργάσιμες μορφές. Το OCR μας επιτρέπει να επεξεργαστούμε σαρωμένα

βιβλία, εικόνες και φωτογραφίες με κείμενο και μας βγάζει επεξεργάσιμα

έγγραφα, όπως TXT, DOC ή PDF αρχεία. Η τεχνολογία αυτή χρησιμοποιείται

ευρέως σε πολλούς τομείς και τα πιο προηγμένα συστήματα OCR μπορούν να

χειριστούν σχεδόν όλα τα είδη των εικόνων, ακόμα και τόσο πολύπλοκα, όπως

σαρωμένες σελίδες του περιοδικού με εικόνες και στήλες ή φωτογραφίες από ένα

κινητό τηλέφωνο. Ένας από τους μηχανισμούς μοντελοποίησης του OCR με τα

καλύτερα ποσοστά επιτυχίας είναι το tesseract που είναι διαθέσιμο από τη

google.

Πως λειτουργεί το Tesseract OCR Engine

Τα περιγράμματα αναλύονται και αποθηκεύονται

Συγκεντρώνονται και οργανώνονται σε γραμμές κειμένου

Οι γραμμές χωρίζονται σε λέξεις

Στο πρώτο πέρασμα επιχειρεί να αναγνωρίσει κάθε λέξη με τη σειρά

Περνάει από δεύτερο έλεγχο

Απαλείφονται οι ασαφείς χώροι

Το ψηφιακό κείμενο είναι έτοιμο

Αλγόριθμοι που χρησιμοποιεί το Tesseract

Αλγόριθμος ανίχνευσης γραμμών από ασύμμετρη εικόνα

Αλγόριθμος ανίχνευσης αναλογικών λέξεων και μη

Αλγόριθμοι που σπάνε ενωμένους χαρακτήρες και ενώνουν σπασμένους

χαρακτήρες

Αλγόριθμος γλωσσικής ανάλυσης

Page 12: Embedded Systems Report

Προβλήματα

Εγκατάσταση NDΚ

Αρχικά αντιμετωπίσαμε πρόβλημα κατά την εγκατάσταση NDΚ γιατί

χρειάζεται ολόκληρη διαδικασία για να τρέξει σε Windows.Τελικά

βρήκαμε έναν οδηγό στον ίντερνετ και μέσω του τερματικού καταφέραμε

και το εγκαταστήσαμε.

Αναγνώριση κειμένου χωρίς πλαίσιο

Στην αρχή δοκιμάσαμε να αναγνωρίσουμε όλη τη φωτογραφία που

τραβάγαμε. Αυτό ήταν αδύνατο, γι’ αυτό το λόγο φτιάξαμε ένα πλαίσιο το

οποίο μεγαλώνει και μικραίνει ανάλογα με τις απαιτήσεις του χρήστη και

μέσα σε αυτό το πλαίσιο γίνεται η αναγνώριση(ocr).

Ακρίβεια OCR

Για καλύτερη ακρίβεια και καλύτερο αποτέλεσμα του ocr,

χρησιμοποιήσαμε το auto focus της κάμερας.

Ταυτόχρονη αποθήκευση παραπάνω του ενός παιχνιδιού

Ένα άλλο πρόβλημα που αντιμετωπίσαμε κατά την διάρκεια της

υλοποίησης του project ήταν η ταυτόχρονη αποθήκευση παραπάνω του

ενός παιχνιδιού με αποτέλεσμα όταν ο χρήστης προσπαθούσε να

αποθηκεύσει τα παιχνίδια του η εφαρμογή έκλεινε. Το πρόβλημα λύθηκε.

Αναγνώριση παραπάνω από 5 αποδόσεων μαζί

Δεν καταφέραμε να κάνουμε αναγνώριση 5 και παραπάνω αποδόσεων

μαζί .Σε αυτή την περίπτωση η εφαρμογή προσπαθεί να αναγνωρίσει την

εικόνα και τελικά δεν τα καταφέρνει.

Page 13: Embedded Systems Report

Χρονοδιάγραμμα project

Την υλοποίηση του project την χωρίσαμε σε 4 φάσης όπως φαίνονται και

παραπάνω στο σχήμα.

30/10/13 Παρουσίαση ιδέας και αρχή εργασίας

Φάση 1 (30/10/13 ) – Φάση 2 (15/11/13 ) Σκέψεις υλοποίησης εφαρμογής και

εύρεση αλγορίθμου OCR

Φάση 2 (15/11/13 ) – Φάση 3 (20/12/13 ) Εγκατάσταση εργαλείων και

υλοποίηση εφαρμογής μόνο για OCR

Φάση 3 (20/12/13 ) – Φάση 4 (15/01/10 ) Ολοκλήρωση εφαρμογής με τα

απαιτούμενα γραφικά

Φάση 4 (15/01/10 ) – Φάση 5 (28/1/14 ) Επίλυση προβλημάτων και βελτίωση

αποτελεσμάτων

28/1/14 Παρουσίαση εφαρμογής