Πολυτεχνείο Κρήτης
Syst
Ομάδα Εργασίας :
Κυριαζής Αθανάσιος : 2008030002
Καζαντζής Πολυχρόνης – Γεώργιος : 2008030103
04/02/2014
Αναφορά Εργασίας MyBet
Embedded Systems
Σκοπός
Σκοπός της εργασίας είναι η υλοποίηση μιας εφαρμογής 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 .
Περιγραφή υλοποίησης
Αρχικά υλοποιήσαμε την αρχική οθόνη της εφαρμογής με την κλάση
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 της κάμερας. Εδώ ο χρήστης μπορεί να βγάλει τις αποδόσεις
που θέλει να αποθηκεύσει.
Τέλος όταν πατηθεί το κουμπί Watch Livescore το νέο Activity που
δημιουργείται είναι τύπου web και πηγαίνει τον χρήστη σε μια καινούργια οθόνη
όπου μέσω της σελίδας http://www.livescore.com/ μπορεί να παρακολουθήσει
την εξέλιξη των παιχνιδιών live αλλά και να δει τελικά αποτελέσματα.
Επίσης στην αρχική οθόνη έχουμε προσθέσει και μια επιπλέον λειτουργία όταν
πατηθεί το κουμπί των ρυθμίσεων όπου υπάρχει σε όλες τις συσκευές android.
Όταν πατηθεί αυτό το κουμπί μέσω της Main_Activity καλείται η συνάρτηση
onCreateOptionsMenu και έχουμε 2 επιλογές : η μία επιλογή είναι να πατήσουμε
το exit όπου τερματίζει την εφαρμογή μέσω της συνάρτησης exit της java ενώ η
δεύτερη επιλογή είναι να πατήσουμε το About Us όπου σε αυτήν την περίπτωση
δημιουργείται νέο Activity που μας πηγαίνει σε μια νέα οθόνη και καλείται το
XML αρχείο about. Στην καινούργια οθόνη ο χρήστης βλέπει κάποιες
πληροφορίες για το σκοπό της εφαρμογής, τους δημιουργούς της και κάποιες
οδηγίες για το πώς να χειριστεί την εφαρμογή. Παρακάτω δίνονται τα
στιγμιότυπα της αρχικής οθόνης όταν πατιέται το κουμπί των ρυθμίσεων και όταν
μετά πατήσουμε το about :
Θα περιγράψουμε παρακάτω τι γίνεται όταν πατιέται κάθε ένα από τα κουμπιά
της αρχικής οθόνης :
Take a picture (1η
Φάση  Πριν βγάλουμε φωτογραφία)
Όταν πατιέται αυτό το κουμπί όπως αναφέραμε και παραπάνω καλείται νέο
Activity που χειρίζεται την εφαρμογή της κάμερας. Με αυτήν την ενέργεια
μεταφερόμαστε στην κλάση CaptureActivity όπου εδώ είναι και το κύριο μέρος
της εφαρμογής. Μέσω αυτής της κλάσης χειριζόμαστε όλες της λειτουργίες της
κάμερας ώστε να μπορέσει να γίνει σωστά η αναγνώριση των αποδόσεων που
θέλει ο χρήστης μέσω του κουπονιού του στοιχήματος. Για παράδειγμα όταν ο
χρήστης προσπαθήσει να βγάλει μία απόδοση και κουνηθεί το χέρι του η
εφαρμογή της κάμερας θα κάνει Auto Focus ώστε να μπορέσει να κεντράρει στο
επιθυμητό σημείο και να πάρει το σωστό αποτέλεσμα. Μία άλλη πολύ σημαντική
λειτουργία που υλοποιείται με σκοπό την καλύτερη ακρίβεια του ocr είναι ότι
όταν ο χρήστης πάει να βγάλει φωτογραφία μια απόδοση βγαίνει ένα
τετραγωνάκι στην οθόνη ώστε να πάρει μόνο εκείνη την απόδοση ή τις αποδόσεις
που επιθυμεί και όχι μεγαλύτερο μέρος του κουπονιού. Αυτό γίνεται γιατί όσο
μεγαλύτερη επιφάνεια σαρώνει το ocr για να αναγνωρίσει κείμενο τόσο πιο αργό
γίνεται και μειώνεται και η ακρίβειά του. Όλες αυτές οι λειτουργίες της κάμερας
υλοποιούνται σε κλάσεις που βρίσκονται σε ξεχωριστό πακέτο με το όνομα
camera και καλούνται όπου χρειάζεται η κάθε μία από την κλάση
CaptureActivity. Τέλος στην οθόνη της κάμερας έχουμε προσθέσει και ένα
SutterButton όπου χρησιμοποιείται όταν ο χρήστης έχει κεντράρει τις αποδόσεις
που θέλει για να βγάλει την φωτογραφία. Αυτό το button έχει προστεθεί πάνω
δεξιά στην οθόνη ώστε να βολεύει τον χρήστη να βλέπει τις αποδόσεις όταν
τραβάει την φωτογραφία. Εδώ πρέπει να αναφέρουμε ότι για τη σωστή λήψη της
φωτογραφίας το κινητό θα πρέπει να έχει περιστραφεί. Παρακάτω δίνεται ένα
στιγμιότυπο αυτής της οθόνης :
Βλέπουμε τη φωτογραφία κάθετα γιατί
έτσι έγινε το screenshot της οθόνης.
Κανονικά για να τραβηχτεί η φωτογραφία
το κινητό πρέπει να είναι οριζόντια όπως
αναφέραμε. (Εδώ δεν έχει τραβηχτεί
ακόμα η φωτογραφία απλά βλέπουμε τις
αποδόσεις)
Take a picture (2η
ΦάσηΜε το πάτημα του SutterButto)
Αφού έχει τραβηχτεί η φωτογραφία μας εμφανίζει τις αποδόσεις που
τραβήχτηκαν ώστε να επιβεβαιώσουμε ότι είναι σωστές και να τις
αποθηκεύσουμε. Επίσης υπάρχει η δυνατότητα αν δεν θέλουμε να τις
αποθηκεύσουμε να δούμε τα παιχνίδια που ήδη έχουμε αποθηκεύσει (ίδια
λειτουργία με το View my games της αρχικής μας οθόνης). Ακόμη μπορούμε να
γράψουμε κάτι όσον αφορά την ομάδα της οποίας είναι η απόδοση ώστε να τη
θυμόμαστε. Παρακάτω δίνεται ένα στιγμιότυπο αυτής της οθόνης :
 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 της αρχικής οθόνης που
θα περιγράψουμε παρακάτω και θα δώσουμε και τα στιγμιότυπα της οθόνης.
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  Όταν
πατηθεί αυτό το κουμπί διαγράφονται όλα τα
δεδομένα της βάσης δεδομένων.
Τέλος έχουμε υλοποιήσει και κάποιους περιορισμούς οι οποίοι οι οποίοι
εμφανίζονται στην οθόνη με χρήση toast και δίνονται παρακάτω :
Αυτός ο περιορισμός καλείται όταν ο χρήστης
προσπαθήσει να ποντάρει ενώ δεν υπάρχουν
αποδόσεις στο δελτίο του όπου του
εμφανίζουμε ένα μήνυμα που λέει να εισάγει
κάποια παιχνίδια και μετά να ποντάρει.
Αυτός ο περιορισμός καλείται όταν ο χρήστης
προσπαθήσει να πατήσει το κουμπί Compute
my profit για να υπολογίσει το κέρδος του και
δεν έχει εισάγει ποντάρισμα όπου του
εμφανίζουμε ένα μήνυμα που λέει να
ποντάρει και μετά να πατήσει το κουμπί.
Αυτός ο περιορισμός καλείται όταν ο χρήστης
κάνει κάποιο λάθος και πληκτρολογήσει
κάποιο γράμμα εκεί που πρέπει να
πληκτρολογήσει το ποντάρισμα όπου του
εμφανίζουμε ένα μήνυμα που λέει ότι έχει
κάνει κάποιο λάθος και πρέπει να
προσπαθήσει ξανά.
.
Watch Livescore
Όταν πατηθεί αυτό το κουμπί δημιουργείται νέο Activity που πηγαίνει στην
κλάση SimpleBrowser. Εκεί καλείται το XML αρχείο simplebrowser που έχουμε
σχεδιάσει τα γραφικά της καινούργιας οθόνης. Παρακάτω δίνονται 2 στιγμιότυπα
αυτής της οθόνης :
Ουσιαστικά τα γραφικά αυτής της οθόνης είναι
ένα web view μέσω του οποίου μεταβαίνουμε
στην σελίδα του livescore και μπορούμε να
παρακολουθήσουμε την εξέλιξη των αγώνων
live και να δούμε παλιά αποτελέσματα(για
αυτήν τη λειτουργία πρέπει να είμαστε
συνδεδεμένοι στο internet).
Λίγα λόγια για το ocr
Το OCR είναι μια πολύπλοκη τεχνολογία που μετατρέπει τις εικόνες με κείμενο
σε επεξεργάσιμες μορφές. Το OCR μας επιτρέπει να επεξεργαστούμε σαρωμένα
βιβλία, εικόνες και φωτογραφίες με κείμενο και μας βγάζει επεξεργάσιμα
έγγραφα, όπως TXT, DOC ή PDF αρχεία. Η τεχνολογία αυτή χρησιμοποιείται
ευρέως σε πολλούς τομείς και τα πιο προηγμένα συστήματα OCR μπορούν να
χειριστούν σχεδόν όλα τα είδη των εικόνων, ακόμα και τόσο πολύπλοκα, όπως
σαρωμένες σελίδες του περιοδικού με εικόνες και στήλες ή φωτογραφίες από ένα
κινητό τηλέφωνο. Ένας από τους μηχανισμούς μοντελοποίησης του OCR με τα
καλύτερα ποσοστά επιτυχίας είναι το tesseract που είναι διαθέσιμο από τη
google.
Πως λειτουργεί το Tesseract OCR Engine
 Τα περιγράμματα αναλύονται και αποθηκεύονται
 Συγκεντρώνονται και οργανώνονται σε γραμμές κειμένου
 Οι γραμμές χωρίζονται σε λέξεις
 Στο πρώτο πέρασμα επιχειρεί να αναγνωρίσει κάθε λέξη με τη σειρά
 Περνάει από δεύτερο έλεγχο
 Απαλείφονται οι ασαφείς χώροι
 Το ψηφιακό κείμενο είναι έτοιμο
Αλγόριθμοι που χρησιμοποιεί το Tesseract
 Αλγόριθμος ανίχνευσης γραμμών από ασύμμετρη εικόνα
 Αλγόριθμος ανίχνευσης αναλογικών λέξεων και μη
 Αλγόριθμοι που σπάνε ενωμένους χαρακτήρες και ενώνουν σπασμένους
χαρακτήρες
 Αλγόριθμος γλωσσικής ανάλυσης
Προβλήματα
 Εγκατάσταση NDΚ
Αρχικά αντιμετωπίσαμε πρόβλημα κατά την εγκατάσταση NDΚ γιατί
χρειάζεται ολόκληρη διαδικασία για να τρέξει σε Windows.Τελικά
βρήκαμε έναν οδηγό στον ίντερνετ και μέσω του τερματικού καταφέραμε
και το εγκαταστήσαμε.
 Αναγνώριση κειμένου χωρίς πλαίσιο
Στην αρχή δοκιμάσαμε να αναγνωρίσουμε όλη τη φωτογραφία που
τραβάγαμε. Αυτό ήταν αδύνατο, γι’ αυτό το λόγο φτιάξαμε ένα πλαίσιο το
οποίο μεγαλώνει και μικραίνει ανάλογα με τις απαιτήσεις του χρήστη και
μέσα σε αυτό το πλαίσιο γίνεται η αναγνώριση(ocr).
 Ακρίβεια OCR
Για καλύτερη ακρίβεια και καλύτερο αποτέλεσμα του ocr,
χρησιμοποιήσαμε το auto focus της κάμερας.
 Ταυτόχρονη αποθήκευση παραπάνω του ενός παιχνιδιού
Ένα άλλο πρόβλημα που αντιμετωπίσαμε κατά την διάρκεια της
υλοποίησης του project ήταν η ταυτόχρονη αποθήκευση παραπάνω του
ενός παιχνιδιού με αποτέλεσμα όταν ο χρήστης προσπαθούσε να
αποθηκεύσει τα παιχνίδια του η εφαρμογή έκλεινε. Το πρόβλημα λύθηκε.
 Αναγνώριση παραπάνω από 5 αποδόσεων μαζί
Δεν καταφέραμε να κάνουμε αναγνώριση 5 και παραπάνω αποδόσεων
μαζί .Σε αυτή την περίπτωση η εφαρμογή προσπαθεί να αναγνωρίσει την
εικόνα και τελικά δεν τα καταφέρνει.
Χρονοδιάγραμμα 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  Παρουσίαση εφαρμογής

More Related Content

PDF
FingerPainting -- Φύλλο Εργασίας για το AppInventor
PDF
GuardDog -- Φύλλο Εργασίας για το AppInventor
PDF
I p3600 series (ell) 2
PPTX
My phone
PPT
Pathology presentation sarah reynolds
PPTX
The Events department
PPS
Animals
PPT
Kronologi
FingerPainting -- Φύλλο Εργασίας για το AppInventor
GuardDog -- Φύλλο Εργασίας για το AppInventor
I p3600 series (ell) 2
My phone
Pathology presentation sarah reynolds
The Events department
Animals
Kronologi

Viewers also liked (14)

PPTX
Hijrah Nabi
PPT
WHAT IS A PROSTHODONTIST IN BEVERLY HILLS
PPTX
Les Journées de la Francophonie 2014
PDF
Capitulo 10 10 09_2008_11_54_42
PPTX
How Makerere university is idealy thriving on her namethat she already made l...
PPT
POWER POINT
PPT
Tipos de computadoras
PPTX
E-safety Impero slides Mar2015
PPTX
Hijrah nabi
PPTX
Color transfer between high-dynamic-range images
PPTX
бессмертный полк в Туле
PPT
Sirah nabi saw
PDF
Cv.sharjeel naved.
PPTX
Live Healthy, Live Longer | Antiaging Nutrition
Hijrah Nabi
WHAT IS A PROSTHODONTIST IN BEVERLY HILLS
Les Journées de la Francophonie 2014
Capitulo 10 10 09_2008_11_54_42
How Makerere university is idealy thriving on her namethat she already made l...
POWER POINT
Tipos de computadoras
E-safety Impero slides Mar2015
Hijrah nabi
Color transfer between high-dynamic-range images
бессмертный полк в Туле
Sirah nabi saw
Cv.sharjeel naved.
Live Healthy, Live Longer | Antiaging Nutrition
Ad

Similar to Embedded Systems Report (20)

PDF
projectRATdoc
PDF
PDF
Multipe choice quiz_appinventor
PPT
App inventor2 εφαρμογή 1 (Hello purr)
PPT
Snagit
PPT
Snagit
PPTX
Algorithms
PDF
Manual mydatabase
PDF
Diploma_thesis_partial_A
PDF
08 instructionset nxtg
PDF
3d sudio max Μοντελισμός
PDF
Σημειώσεις Σεμιναρίου Επιπεδο Αρχαρίων LG.pdf
PDF
εε ομαδας4
PDF
Sample 3 dsmax
PDF
Εισαγωγή στο περιβάλλον του GameMaker
PDF
δημιουργία εικόνων και εισαγωγή τους στο διαδραστικό πίνακα
PDF
Bs views manual
projectRATdoc
Multipe choice quiz_appinventor
App inventor2 εφαρμογή 1 (Hello purr)
Snagit
Snagit
Algorithms
Manual mydatabase
Diploma_thesis_partial_A
08 instructionset nxtg
3d sudio max Μοντελισμός
Σημειώσεις Σεμιναρίου Επιπεδο Αρχαρίων LG.pdf
εε ομαδας4
Sample 3 dsmax
Εισαγωγή στο περιβάλλον του GameMaker
δημιουργία εικόνων και εισαγωγή τους στο διαδραστικό πίνακα
Bs views manual
Ad

Embedded Systems Report

  • 1. Πολυτεχνείο Κρήτης Syst Ομάδα Εργασίας : Κυριαζής Αθανάσιος : 2008030002 Καζαντζής Πολυχρόνης – Γεώργιος : 2008030103 04/02/2014 Αναφορά Εργασίας MyBet Embedded Systems
  • 2. Σκοπός Σκοπός της εργασίας είναι η υλοποίηση μιας εφαρμογής 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 .
  • 3. Περιγραφή υλοποίησης Αρχικά υλοποιήσαμε την αρχική οθόνη της εφαρμογής με την κλάση 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 της κάμερας. Εδώ ο χρήστης μπορεί να βγάλει τις αποδόσεις που θέλει να αποθηκεύσει.
  • 4. Τέλος όταν πατηθεί το κουμπί Watch Livescore το νέο Activity που δημιουργείται είναι τύπου web και πηγαίνει τον χρήστη σε μια καινούργια οθόνη όπου μέσω της σελίδας http://www.livescore.com/ μπορεί να παρακολουθήσει την εξέλιξη των παιχνιδιών live αλλά και να δει τελικά αποτελέσματα. Επίσης στην αρχική οθόνη έχουμε προσθέσει και μια επιπλέον λειτουργία όταν πατηθεί το κουμπί των ρυθμίσεων όπου υπάρχει σε όλες τις συσκευές android. Όταν πατηθεί αυτό το κουμπί μέσω της Main_Activity καλείται η συνάρτηση onCreateOptionsMenu και έχουμε 2 επιλογές : η μία επιλογή είναι να πατήσουμε το exit όπου τερματίζει την εφαρμογή μέσω της συνάρτησης exit της java ενώ η δεύτερη επιλογή είναι να πατήσουμε το About Us όπου σε αυτήν την περίπτωση δημιουργείται νέο Activity που μας πηγαίνει σε μια νέα οθόνη και καλείται το XML αρχείο about. Στην καινούργια οθόνη ο χρήστης βλέπει κάποιες πληροφορίες για το σκοπό της εφαρμογής, τους δημιουργούς της και κάποιες οδηγίες για το πώς να χειριστεί την εφαρμογή. Παρακάτω δίνονται τα στιγμιότυπα της αρχικής οθόνης όταν πατιέται το κουμπί των ρυθμίσεων και όταν μετά πατήσουμε το about :
  • 5. Θα περιγράψουμε παρακάτω τι γίνεται όταν πατιέται κάθε ένα από τα κουμπιά της αρχικής οθόνης : Take a picture (1η Φάση  Πριν βγάλουμε φωτογραφία) Όταν πατιέται αυτό το κουμπί όπως αναφέραμε και παραπάνω καλείται νέο Activity που χειρίζεται την εφαρμογή της κάμερας. Με αυτήν την ενέργεια μεταφερόμαστε στην κλάση CaptureActivity όπου εδώ είναι και το κύριο μέρος της εφαρμογής. Μέσω αυτής της κλάσης χειριζόμαστε όλες της λειτουργίες της κάμερας ώστε να μπορέσει να γίνει σωστά η αναγνώριση των αποδόσεων που θέλει ο χρήστης μέσω του κουπονιού του στοιχήματος. Για παράδειγμα όταν ο χρήστης προσπαθήσει να βγάλει μία απόδοση και κουνηθεί το χέρι του η εφαρμογή της κάμερας θα κάνει Auto Focus ώστε να μπορέσει να κεντράρει στο επιθυμητό σημείο και να πάρει το σωστό αποτέλεσμα. Μία άλλη πολύ σημαντική λειτουργία που υλοποιείται με σκοπό την καλύτερη ακρίβεια του ocr είναι ότι όταν ο χρήστης πάει να βγάλει φωτογραφία μια απόδοση βγαίνει ένα τετραγωνάκι στην οθόνη ώστε να πάρει μόνο εκείνη την απόδοση ή τις αποδόσεις που επιθυμεί και όχι μεγαλύτερο μέρος του κουπονιού. Αυτό γίνεται γιατί όσο μεγαλύτερη επιφάνεια σαρώνει το ocr για να αναγνωρίσει κείμενο τόσο πιο αργό γίνεται και μειώνεται και η ακρίβειά του. Όλες αυτές οι λειτουργίες της κάμερας υλοποιούνται σε κλάσεις που βρίσκονται σε ξεχωριστό πακέτο με το όνομα camera και καλούνται όπου χρειάζεται η κάθε μία από την κλάση CaptureActivity. Τέλος στην οθόνη της κάμερας έχουμε προσθέσει και ένα SutterButton όπου χρησιμοποιείται όταν ο χρήστης έχει κεντράρει τις αποδόσεις που θέλει για να βγάλει την φωτογραφία. Αυτό το button έχει προστεθεί πάνω δεξιά στην οθόνη ώστε να βολεύει τον χρήστη να βλέπει τις αποδόσεις όταν τραβάει την φωτογραφία. Εδώ πρέπει να αναφέρουμε ότι για τη σωστή λήψη της φωτογραφίας το κινητό θα πρέπει να έχει περιστραφεί. Παρακάτω δίνεται ένα στιγμιότυπο αυτής της οθόνης :
  • 6. Βλέπουμε τη φωτογραφία κάθετα γιατί έτσι έγινε το screenshot της οθόνης. Κανονικά για να τραβηχτεί η φωτογραφία το κινητό πρέπει να είναι οριζόντια όπως αναφέραμε. (Εδώ δεν έχει τραβηχτεί ακόμα η φωτογραφία απλά βλέπουμε τις αποδόσεις) Take a picture (2η ΦάσηΜε το πάτημα του SutterButto) Αφού έχει τραβηχτεί η φωτογραφία μας εμφανίζει τις αποδόσεις που τραβήχτηκαν ώστε να επιβεβαιώσουμε ότι είναι σωστές και να τις αποθηκεύσουμε. Επίσης υπάρχει η δυνατότητα αν δεν θέλουμε να τις αποθηκεύσουμε να δούμε τα παιχνίδια που ήδη έχουμε αποθηκεύσει (ίδια λειτουργία με το View my games της αρχικής μας οθόνης). Ακόμη μπορούμε να γράψουμε κάτι όσον αφορά την ομάδα της οποίας είναι η απόδοση ώστε να τη θυμόμαστε. Παρακάτω δίνεται ένα στιγμιότυπο αυτής της οθόνης :
  • 7.  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 της αρχικής οθόνης που θα περιγράψουμε παρακάτω και θα δώσουμε και τα στιγμιότυπα της οθόνης.
  • 8. 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  Όταν πατηθεί αυτό το κουμπί διαγράφονται όλα τα δεδομένα της βάσης δεδομένων.
  • 9. Τέλος έχουμε υλοποιήσει και κάποιους περιορισμούς οι οποίοι οι οποίοι εμφανίζονται στην οθόνη με χρήση toast και δίνονται παρακάτω : Αυτός ο περιορισμός καλείται όταν ο χρήστης προσπαθήσει να ποντάρει ενώ δεν υπάρχουν αποδόσεις στο δελτίο του όπου του εμφανίζουμε ένα μήνυμα που λέει να εισάγει κάποια παιχνίδια και μετά να ποντάρει. Αυτός ο περιορισμός καλείται όταν ο χρήστης προσπαθήσει να πατήσει το κουμπί Compute my profit για να υπολογίσει το κέρδος του και δεν έχει εισάγει ποντάρισμα όπου του εμφανίζουμε ένα μήνυμα που λέει να ποντάρει και μετά να πατήσει το κουμπί.
  • 10. Αυτός ο περιορισμός καλείται όταν ο χρήστης κάνει κάποιο λάθος και πληκτρολογήσει κάποιο γράμμα εκεί που πρέπει να πληκτρολογήσει το ποντάρισμα όπου του εμφανίζουμε ένα μήνυμα που λέει ότι έχει κάνει κάποιο λάθος και πρέπει να προσπαθήσει ξανά. . Watch Livescore Όταν πατηθεί αυτό το κουμπί δημιουργείται νέο Activity που πηγαίνει στην κλάση SimpleBrowser. Εκεί καλείται το XML αρχείο simplebrowser που έχουμε σχεδιάσει τα γραφικά της καινούργιας οθόνης. Παρακάτω δίνονται 2 στιγμιότυπα αυτής της οθόνης : Ουσιαστικά τα γραφικά αυτής της οθόνης είναι ένα web view μέσω του οποίου μεταβαίνουμε στην σελίδα του livescore και μπορούμε να παρακολουθήσουμε την εξέλιξη των αγώνων live και να δούμε παλιά αποτελέσματα(για αυτήν τη λειτουργία πρέπει να είμαστε συνδεδεμένοι στο internet).
  • 11. Λίγα λόγια για το ocr Το OCR είναι μια πολύπλοκη τεχνολογία που μετατρέπει τις εικόνες με κείμενο σε επεξεργάσιμες μορφές. Το OCR μας επιτρέπει να επεξεργαστούμε σαρωμένα βιβλία, εικόνες και φωτογραφίες με κείμενο και μας βγάζει επεξεργάσιμα έγγραφα, όπως TXT, DOC ή PDF αρχεία. Η τεχνολογία αυτή χρησιμοποιείται ευρέως σε πολλούς τομείς και τα πιο προηγμένα συστήματα OCR μπορούν να χειριστούν σχεδόν όλα τα είδη των εικόνων, ακόμα και τόσο πολύπλοκα, όπως σαρωμένες σελίδες του περιοδικού με εικόνες και στήλες ή φωτογραφίες από ένα κινητό τηλέφωνο. Ένας από τους μηχανισμούς μοντελοποίησης του OCR με τα καλύτερα ποσοστά επιτυχίας είναι το tesseract που είναι διαθέσιμο από τη google. Πως λειτουργεί το Tesseract OCR Engine  Τα περιγράμματα αναλύονται και αποθηκεύονται  Συγκεντρώνονται και οργανώνονται σε γραμμές κειμένου  Οι γραμμές χωρίζονται σε λέξεις  Στο πρώτο πέρασμα επιχειρεί να αναγνωρίσει κάθε λέξη με τη σειρά  Περνάει από δεύτερο έλεγχο  Απαλείφονται οι ασαφείς χώροι  Το ψηφιακό κείμενο είναι έτοιμο Αλγόριθμοι που χρησιμοποιεί το Tesseract  Αλγόριθμος ανίχνευσης γραμμών από ασύμμετρη εικόνα  Αλγόριθμος ανίχνευσης αναλογικών λέξεων και μη  Αλγόριθμοι που σπάνε ενωμένους χαρακτήρες και ενώνουν σπασμένους χαρακτήρες  Αλγόριθμος γλωσσικής ανάλυσης
  • 12. Προβλήματα  Εγκατάσταση NDΚ Αρχικά αντιμετωπίσαμε πρόβλημα κατά την εγκατάσταση NDΚ γιατί χρειάζεται ολόκληρη διαδικασία για να τρέξει σε Windows.Τελικά βρήκαμε έναν οδηγό στον ίντερνετ και μέσω του τερματικού καταφέραμε και το εγκαταστήσαμε.  Αναγνώριση κειμένου χωρίς πλαίσιο Στην αρχή δοκιμάσαμε να αναγνωρίσουμε όλη τη φωτογραφία που τραβάγαμε. Αυτό ήταν αδύνατο, γι’ αυτό το λόγο φτιάξαμε ένα πλαίσιο το οποίο μεγαλώνει και μικραίνει ανάλογα με τις απαιτήσεις του χρήστη και μέσα σε αυτό το πλαίσιο γίνεται η αναγνώριση(ocr).  Ακρίβεια OCR Για καλύτερη ακρίβεια και καλύτερο αποτέλεσμα του ocr, χρησιμοποιήσαμε το auto focus της κάμερας.  Ταυτόχρονη αποθήκευση παραπάνω του ενός παιχνιδιού Ένα άλλο πρόβλημα που αντιμετωπίσαμε κατά την διάρκεια της υλοποίησης του project ήταν η ταυτόχρονη αποθήκευση παραπάνω του ενός παιχνιδιού με αποτέλεσμα όταν ο χρήστης προσπαθούσε να αποθηκεύσει τα παιχνίδια του η εφαρμογή έκλεινε. Το πρόβλημα λύθηκε.  Αναγνώριση παραπάνω από 5 αποδόσεων μαζί Δεν καταφέραμε να κάνουμε αναγνώριση 5 και παραπάνω αποδόσεων μαζί .Σε αυτή την περίπτωση η εφαρμογή προσπαθεί να αναγνωρίσει την εικόνα και τελικά δεν τα καταφέρνει.
  • 13. Χρονοδιάγραμμα 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  Παρουσίαση εφαρμογής