Embedded Systems Report
-
Upload
athanasios-kyriazis -
Category
Documents
-
view
70 -
download
1
Transcript of Embedded Systems Report
Πολυτεχνείο Κρήτης
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 Παρουσίαση εφαρμογής