Εφαρμογή Επαυξημένης Πραγματικότητας Μέσω Αναγνώρισης Κειμένου

Σχετικά έγγραφα
Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

Περιεχόμενα ΓΕΩΠΥΛΗ ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΚΕΝΤΡΙΚΟ SITE. ΧΑΡΤΗΣ... 2 Είσοδος στην εφαρμογή «Χάρτης»... 2 Λειτουργίες εφαρμογής «Χάρτης»...

Unity editor. Μέρος 2ο

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι

Εισαγωγή στο 3DS Max 2009

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Unity Editor #02 Κεντρικό Μενού: File, Build Settings και Build & Run

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Dcad 1.0

Λίγα λόγια από το συγγραφέα Κεφάλαιο 1: Microsoft Excel Κεφάλαιο 2: Η δομή ενός φύλλου εργασίας... 26

«DIGITAL STORY TELLING» PROJECT

Scripting σε Unity. Μέρος 2ο

7.Α.1 Παρουσιάσεις. 7.Α.2 Περιγραφή περιεχομένων της εφαρμογής

5 ο ΚΕΦΑΛΑΙΟ: ΠΡΑΚΤΙΚΟ ΚΟΜΜΑΤΙ

Εισαγωγή στο περιβάλλον Blender

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

Unity Editor #03 Κεντρικό Μενού: Edit

Οπτική Επικοινωνία 4 - Α.Ε Προτεινόμενες ρυθμίσεις V-Ray 3.4 για Rhino. Υλικά

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

Ο Οδηγός γρήγορης εκκίνησης

ΟΔΗΓΙΕΣ ΓΙΑ ΤΟ ΠΑΙΧΝΙΔΙ.

A7.2 Δημιουργία Απλής Γραφικής Εφαρμογής σε Περιβάλλον Scratch

Ψηφιακή τέχνη DIGITAL ART

Ημερίδα διάχυσης αποτελεσμάτων έργου Ιωάννινα, 14/10/2015

Γεωργάκης Αριστείδης ΠΕ20

WiFi V-Timer ΕΚΔΟΣΗ 2Η

Εγχειρίδιο Χρήσης του «Μαθη.Συ.»

Πρακτική εφαρμογή στην ειδικότητα: Λογισμικό για τη δημιουργία εργασίας εξαμήνου

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

ANDROID Προγραμματισμός Εφαρμογών

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010

ΕΓΧΕΙΡΙΔΙΟ ΜΑΘΗΤΗ. της Πλατφόρμας Τηλεκατάρτισης

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

Unity Μια Πρώτη Ματιά

Αυτόνομοι Πράκτορες. ΝΑΟ Μουσικός

B) Ετοιμάζοντας μια Παρουσίαση

Δημιουργία ιστοσελίδας με. Wordpress - Βασικές λειτουργίες

Πατώντας την επιλογή αυτή, ανοίγει ένα παράθυρο που έχει την ίδια μορφή με αυτό που εμφανίζεται όταν δημιουργούμε μία μεταβλητή.

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

Κεφάλαιο 1 Χρήση προτύπου 2. Κεφάλαιο 2 Τροποποίηση μιας παρουσίασης 9. Κεφάλαιο 4 Προσθήκη αντικειμένων 26. Κεφάλαιο 5 Ειδικά εφέ 35

Λίγα λόγια από το συγγραφέα Κεφάλαιο 1: PowerPoint Κεφάλαιο 2: Εκκίνηση του PowerPoint... 13

Εργαστήριο Εφαρμοσμένης Πληροφορικής

Slalom Race Computer Game on Scratch

Γενικές Οδηγίες για τις νέες Εκτυπωτικές Φόρμες

Copyright 2017 HP Development Company, L.P.

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

4.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας

Κλιμάκιο Πληροφορικής Σεμινάρια για τα λογισμικά κλειστού τύπου Κύκλος Α

Πληρουορική Γ Γσμμασίοσ

Αναπαραγωγή και stop/pause έτοιμων ηχητικών clips

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών ΤΗΜΜΥ Α.Π.Θ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. DS Gomoku.

ΥΠΗΡΕΣΙΕΣ ΔΙΑΔΙΚΤΟΥ Explorer & Outlook 2013

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ LIVETRIP TRAVELLER

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Προγραμματισμός ΙI (Θ)

PowerPoint Ένα εργαλείο παρουσίασης

3D FLASH ANIMATOR (3DFA)

Εγχειρίδιο Χρήσης V3.0

Το δεύτερο παιχνίδι ΤΟΥΒΛΑΚΙΑ

Πρακτική εφαρμογή στην ειδικότητα: Λογισμικό για τη δημιουργία εργασίας εξαμήνου

Δημιουργία ιστοσελίδας με Wordpress - Βασικές λειτουργίες

ΟΔΗΓΌΣ ΓΡΉΓΟΡΗΣ ΕΚΚΊΝΗΣΗΣ

αντίστοιχο γεγονός. Όταν όντως το κουμπί

ΕΦΑΠΤΟΜΕΝΗ ΓΩΝΙΑΣ ΚΑΙ ΚΛΙΣΗ ΕΥΘΕΙΑΣ ΜΑΘΗΜΑΤΙΚΑ Β' ΓΥΜΝΑΣΙΟΥ

Vodafone Business Connect

Εργασία-3: Παρουσίαση Εργασίας. Ομάδα Α. Προετοιμασία Αναφοράς

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10

Texturing, Animation, Lighting, Rendering

2.1 Σύνδεση Εξωτερικής Συσκευής στο IDE

Οδηγίες Χρήσεως Ψηφιακού Αποθετηρίου Ιστοριών στην Ελληνική Νοηματική Γλώσσα (ΕΝΓ)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ. Εργαστηριακές Ασκήσεις για το Μάθημα «Δίκτυα Υπολογιστών I»

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ DVR KTEC

Φύλλα εργασίας. MicroWorlds Pro. Πολυμεσικές Εφαρμογές με την χρήση της γλώσσας LOGO Στο Γυμνάσιο. Β. Χ. Χρυσοχοΐδης

Χρήσιμες Ρυθμίσεις του Windows 7 στον Η/Υ σας

Sricam R CONCEPTUM. SricamPC. Εγχειρίδιο εφαρμογής

Μεταβλητές. Για περισσότερες λεπτομέρειες πάνω στις μεταβλητές θα ήταν χρήσιμο να διαβάσεις το

Παράδειγμα «Ημίτονο και ζωγραφική!»: Έχει δει στα μαθηματικά τη γραφική παράσταση της συνάρτησης του ημιτόνου; Σας θυμίζει κάτι η παρακάτω εικόνα;

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ. Ηλεκτρονική Υποβολή Α.Π.Δ.

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Η εντολή «επανέλαβε Χ»

SharePoint Online. Δημιουργήστε μια τοποθεσία ή μια δημοσίευση ειδήσεων. Αναζήτηση Βρείτε Τοποθεσίες, Άτομα ή Αρχεία.

Άσκηση 13 η Ειδικά Εφέ. Στόχος της άσκησης

Ελέγξτε την ταινία σας

(Αντιγραφή) ή χρησιμοποιήστε το πληκτρολόγιο για να καταχωρίσετε τους αριθμούς των αντιγράφων. Αντιγραφή με χρήση της γυάλινης επιφάνειας σάρωσης

Σχεδιαστικά Προγράμματα Επίπλου

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ "PROΩΘΗΣΗ" PROώθηση

ΠΑΡΑΔΕΙΓΜΑ ΣΤΟ BIZAGI ΕΘΝΙΚΗ ΣΧΟΛΗ ΔΗΜΟΣΙΑΣ ΔΙΟΙΚΗΣΗΣ & ΑΥΤΟΔΙΟΙΚΗΣΗΣ

Άσκηση 6 η Ανύψωση Σχημάτων. Στόχος της άσκησης

ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ: ΜΑΘΗΜΑΤΙΚΑ ΣΤ ΔΗΜΟΤΙΚΟΥ «ΤΑ ΚΛΑΣΜΑΤΑ»

Κεφάλαιο 2.3: Ρυθμίσεις των Windows

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel...9

ΒΑΣΙΚΑ ΜΑΘΗΜΑΤΑ ΝΤΟΥΛΑΚΗΣ - ΜΕΝΙΟΥΔΑΚΗΣ ΕΠΑ.Λ ΕΛ. ΒΕΝΙΖΕΛΟΥ

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

Οδηγίες χρήσης για την εφαρµογή Spot4U

Interactive Power Point

Microsoft PowerPoint 2007

Έλεγχος φωτισμού από το Smartphone ή Tablet σας, μέσω του

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

ΦΥΣΙΚΗ ΓΕΝΙΚΗΣ ΠΑΙΔΕΙΑΣ Α ΛΥΚΕΙΟΥ

Σύμβαση 457 ΟΠΣ Πολιτικής Προστασίας. Εγχειρίδιο Χρήσης Εφαρμογής Γεωγραφικής Απεικόνισης (Version: 1.0)

Transcript:

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Εφαρμογή Επαυξημένης Πραγματικότητας Μέσω Αναγνώρισης Κειμένου Χρήστος Δ. Συρράκος Επιβλέπων : Δημήτριος Βαρουτάς, Αναπληρωτής Καθηγητής ΑΘΗΝΑ ΜΑΡΤΙΟΣ 2018

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Εφαρμογή Επαυξημένης Πραγματικότητας Μέσω Αναγνώρισης Κειμένου Χρήστος Δ. Συρράκος Α.Μ.: 1115201100118 Επιβλέπων : Δημήτριος Βαρουτάς, Αναπληρωτής Καθηγητής

Περίληψη Η εργασία αυτή έχει ως στόχο τη δημιουργία μιας εφαρμογής που αναγνωρίζει κείμενο μέσω κάμερας και επαυξάνει ψηφιακό περιεχόμενο. Θα αναλύσουμε τις δυνατότητες της επαυξημένης πραγματικότητας ( Augmented Reality), τους περιορισμούς που μας επιβάλλει η σημερινή τεχνολογία, καθώς και τα εργαλεία με τα οποία μπορούμε να εργαστούμε για να παράγουμε μια τέτοια εφαρμογή. Πιο συγκεκριμένα, θα χρησιμοποιήσουμε την πλατφόρμα του Unity3D σε συνδυασμό με τη γλώσσα C# και τη βιβλιοθήκη του Vuforia ώστε να δημιουργήσουμε μια εφαρμογή για κινητές συσκευές android, η οποία θα παράγει ένα ψηφιακό περιβάλλον ανάλογα με τις εντοπισμένες λέξεις και θα δίνει εν τέλει τη δυνατότητα στο χρήστη να αλληλεπιδράσει με το περιβάλλον αυτό. Θεματική περιοχή : Επαυξημένη Πραγματικότητα Λέξεις κλειδιά : ψηφιακό περιβάλλον, εφαρμογή, αλληλεπίδραση, αναγνώριση κειμένου, Unity, Vuforia, C#

Abstract In this thesis, we will create an application that reads text through a camera and augments a digital environment. We will analyse the capabilities and restrictions that Augmented Reality is facing, as well as the tools that will help us develop an application of this kind. Specifically, we will use the Unity3D platform along with the C# language and the Vuforia library, in order to create an application for android mobile devices that augments a digital environment in response to each recognized word and gives the user the opportunity to interact with the said environment. Subject Area : Augmented Reality Keywords : digital environment, application, interaction, text recognition, Unity, Vuforia, C#

ΠΕΡΙΕΧΟΜΕΝΑ 1.ΕΙΣΑΓΩΓΗ... 8 1.1 Τι είναι η επαυξημένη πραγματικότητα?... 8 1.2 unity3d και vuforia... 9 1.3 Εγκατάσταση και σύνδεση unity3d-vuforia... 10 1.4 Αναγνώριση κειμένου... 11 1.5 Βασικές ρυθμίσεις editor και vuforia... 12 1.6 Εντοπισμός λέξεων... 12 2. UNITY KAI C#... 14 2.1 Coroutines σε Unity... 16 3.VUFORIA KAI C#... 17 3.2 Δημιουργία αρχείου.apk και δοκιμή εφαρμογής... 20 3.3 Πειραματισμός παραμέτρων... 21 4. ΠΕΡΙΟΡΙΣΜΟΙ ΣΤΗΝ ΑΝΑΓΝΩΡΙΣΗ ΚΕΙΜΕΝΟΥ:ΣΥΜΠΕΡΑΣΜΑΤΑ... 26 5. SCALABILITY ΕΦΑΡΜΟΓΗΣ... 27 5.1 Εκτέλεση δυναμικής εφαρμογής.... 28 5.2 Δοκιμή εφαρμογής σε τυχαίο κείμενο.... 29 6.ΑΛΛΗΛΕΠΙΔΡΑΣΗ ΜΕ ΤΟ ΧΡΗΣΤΗ... 33 6.1 Scale script... 33 6.2 Move script... 34 6.3 Color Script... 34 7. ΕΞΑΤΟΜΙΚΕΥΜΕΝΗ ΑΛΛΗΛΕΠΙΔΡΑΣΗ... 38 7.1 Εισαγωγή νέων μοντέλων... 38 7.2 Επιπλέον δυνατότητες αλληλεπίδρασης... 39 8.ΤΕΛΙΚΗ ΕΦΑΡΜΟΓΗ... 40 9.ΣΥΜΠΕΡΑΣΜΑΤΑ ΚΑΙ ΠΑΡΑΤΗΡΗΣΕΙΣ... 44 9.1 Unity:... 44 9.2 Vuforia :... 44 ΣΥΝΤΜΗΣΕΙΣ ΑΡΚΤΙΚΟΛΕΞΑ ΑΚΡΩΝΥΜΙΑ... 46 ΠΙΝΑΚΑΣ ΟΡΟΛΟΓΙΑΣ... 47 ΑΝΑΦΟΡΕΣ... 48

ΚΑΤΑΛΟΓΟΣ ΕΙΚΟΝΩΝ Εικόνα 1: χρήση A.R. στον τομέα της αρχιτεκτονικής... 8 Εικόνα 2: χρήση A.R. στον τομέα μηχανικής... 8 Εικόνα 3: χρήση A.R. στον τομέα ιατρικής... 9 Εικόνα 4: Vuforia Installer... 10 Εικόνα 5: Vuforia Developer Portal... 11 Εικόνα 6: Ιεραρχία unity... 13 Εικόνα 7: Παράδειγμα Awake()... 14 Εικόνα 8: Παράδειγμα Start()... 15 Εικόνα 9: Παράδειγμα Update()... 15 Εικόνα 10: Παράδειγμα coroutine... 16 Εικόνα 11: TextTracker & White Filter List... 17 Εικόνα 12: set και get Region of Interest... 18 Εικόνα 13: get active trackables στον Statemanager... 18 Εικόνα 14: Ιεραρχία στον editor μετά την είσοδο των 3-d μοντέλων... 19 Εικόνα 15: Scene view στον editor... 20 Εικόνα 16: Εφαρμογή κατά την εκτέλεση... 20 Εικόνα 17: Τυχαίο κείμενο... 22 Εικόνα 18: Ιεραρχία μετά την είσοδο του τυχαίου κειμένου... 23 Εικόνα 19: Νέο scene view στον editor... 24 Εικόνα 20: Νέα εφαρμογή κατά την εκτέλεση... 24 Εικόνα 21: Εφαρμογή κατά την εκτέλεση με γωνία προβολής... 25 Εικόνα 22: Δυναμική δημιουργία αντικειμένων... 27 Εικόνα 23: Rotate script και ένταξή του στο Main script... 27 Εικόνα 24: Ενεργοποίηση component... 28 Εικόνα 25: Δυναμική ιεραρχία... 28 Εικόνα 26: Δυναμικό scene view ( κάμερα )... 28 Εικόνα 27:Δυναμική ιεραρχία κατά την εκτέλεση... 29 Εικόνα 28: Δοκιμή δυναμικής εφαρμογής σε βιβλίο... 29 Εικόνα 29: Αποτελέσματα δοκιμής βιβλίου στην ιεραρχία... 30 Εικόνα 30: Αναζήτηση στο vwl λεξικό... 30 Εικόνα 31: Δοκιμή δυναμικής εφαρμογής με γωνία προβολής... 31 Εικόνα 32: Αποτελέσματα στην ιεραρχία ( μέσω γωνίας προβολής )... 31 Εικόνα 33: Ενεργά εντοπισμένες λέξεις... 32 Εικόνα 34: Χρήση του Leantouch για pinch zoom... 33 Εικόνα 35: Υλοποίηση scale script... 34 Εικόνα 36: Υλοποίηση move script... 34 Εικόνα 37: Υλοποίηση color script... 35 Εικόνα 38: Υπολογισμοί για την ανάθεση χρωμάτων... 36 Εικόνα 39: Αναθέσεις χρωμάτων ανάλογα με τον προσανατολισμό... 37 Εικόνα 40: box Collider component... 38 Εικόνα 41: Εισαγωγή fbx μοντέλων... 38 Εικόνα 42: Αυτοκίνητα και κύβοι, χωρίς διεπαφή... 40 Εικόνα 43: Zoom in σε αυτοκίνητα και μετακίνηση κύβων εκτός frame... 40 Εικόνα 44: Zoom in σε κύβους και ανάθεση texture... 41 Εικόνα 45: Zoom in και ανάθεση texture σε λουλούδι... 41 Εικόνα 46: Αναγνώριση μεγάλου κειμένου... 42 Εικόνα 47: Το ίδιο κείμενο όπως παραπάνω, zoom in στο σπίτι... 42 Εικόνα 48: Ανάθεση διαφορετικών textures σε διαφορετικούς κύβους... 43 Εικόνα 49: Έλεγχος ακτίνας αντικειμένου... 45

ΚΑΤΑΛΟΓΟΣ ΠΙΝΑΚΩΝ Πίνακας 1: Αποτελέσματα μετρήσεων... 22

ΠΡΟΛΟΓΟΣ Η παρούσα πτυχιακή εργασία εκπονήθηκε στα πλαίσια της ολοκλήρωσης των προΰποθέσεων για την λήψη πτυχίου από το τμήμα Πληροφορικής και Τηλεπικοινωνιών στο Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Σκοπός μου κατά τη διάρκεια της εκπόνησής της ήταν καταρχάς η διερεύνηση και ο πειραματισμός με μια τεχνολογία που πιστεύω ότι θα έχει μεγάλη επιρροή στο μέλλον του ψηφιακού κόσμου, αλλά και η σαφής μεταφορά των αποτελεσμάτων, ώστε να γίνει κατανοητή και προσιτή η νέα αυτή τεχνολογία, ακόμα και από άτομα που δεν έχουν εμπειρία στο χώρο.

1.ΕΙΣΑΓΩΓΗ 1.1 Τι είναι η επαυξημένη πραγματικότητα? Η επαυξημένη πραγματικότητα είναι η θέαση ενός φυσικού πραγματικού περιβάλλοντος, του οποίου τα στοιχεία επαυξάνονται από έναν υπολογιστή σε κάποια ψηφιακή μορφή ( ήχου, εικόνας, βίντεο, κειμένου ). Είναι δηλαδή ένας τρόπος να εμπλουτίσουμε τον πραγματικό κόσμο με ψηφιακές πληροφορίες. Στο παρελθόν, όπου ο ψηφιακός κόσμος ήταν τεχνολογικά περιoρισμένος, δεν υπήρχε ιδιαίτερη χρησιμότητα για τέτοιου είδους εφαρμογές. Πλέον όμως, όπου τα αντικείμενα του επαυξημένου περιβάλλοντος μπορούν έχουν και αυτά διαστάσεις, όγκο, βάρος και ακολουθούν και αυτά τους νόμους της φυσικής, οι εφαρμογές της νέας αυτής τεχνολογίας είναι πολυάριθμες και αφορούν πολλούς διαφορετικούς τομείς. Μπορούμε να φανταστούμε την επίδραση που θα έχει στο μέλλον σε τομείς όπως η εκπαίδευση ( αλληλεπίδραση, κατανόηση και περισσότερο ενδιαφέρον ), στη βιομηχανία ( ταχύτητα και ακρίβεια ), στην αρχιτεκτονική ( παρουσίαση και ψηφιοποίηση οράματος). Βλέπουμε παρακάτω μερικά παραδείγματα των παραπάνω ενδεχόμενων εφαρμογών Εικόνα 1. χρήση A.R. στον τομέα της αρχιτεκτονικής Εικόνα 2. χρήση A.R. στον τομέα μηχανικής Χ.Συρράκος 8

Εικόνα 3. χρήση A.R. στον τομέα ιατρικής Η επαύξηση του πραγματικού περιβάλλοντος γίνεται μετά την αναγνώριση κάποιων μοτίβων ή αντικειμένων μέσω μιας κάμερας και υλοποιείται με τις παρακάτω δύο τεχνικές υλοποίηση: Marker-Based A.R. Marker-Less A.R. Η πρώτη τεχνική (marker-based) αφορά την αναγνώριση αντικειμένων στην οποία έχουν δοθεί προκαθορισμένα στοιχεία ως προς το τι θα αναγνωρίσει η κάμερα. Ξέρουμε δηλαδή εξαρχής τι θα ψάξει η εφαρμογή κατά την αναγνώριση δεδομένων μέσω της κάμερας. Η δεύτερη τεχνική (marker-less) αφορά την αναγνώριση αντικειμένων στην οποία δεν έχουν δοθεί εξαρχής στοιχεία ως προς τον τύπο δεδομένων που θα αναγνωρίσει η κάμερα. Τέτοιου είδους εφαρμογές είναι αρκετά δύσκολο να υλοποιηθούν καθώς ο αλγόριθμος που θα υλοποιηθεί οφείλει να αναγνωρίζει σχήματα, χρώματα και άλλα μοτίβα σε αντίθεση με τα προκαθορισμένα αντικείμενα της marker-based τεχνικής. Στα πλαίσια αυτής της εργασίας θα ασχοληθούμε κυρίως με την marker-based AR, αλλά θα αναφερθούμε στο τέλος και στις δυνατότητες επέκτασης της εφαρμογής με την βοήθεια της marker-less AR. 1.2 unity3d και vuforia Υπάρχουν πολλά εργαλεία τα οποία υποστηρίζουν τη δημιουργία τέτοιου είδους εφαρμογών. Στα πλαίσια της εργασίας αυτής εμείς θα ασχοληθούμε με το unity3d και το vuforia. Το unity3d είναι μια πλατφόρμα που χρησιμοποιείται κυρίως για την ανάπτυξη παιχνιδιών και προσομοιώσεων δύο ή τριών διαστάσεων.διαθέτει μια βασική σκηνή πάνω στην οποία μπορεί ο δημιουργός να χτίσει ανάλογα με τις ανάγκες του.οι προγραμματιστικές γλώσσες που υποστηρίζει είναι η C#, η Javascript και η Boo. Πάνω σε αυτή την πλατφόρμα, με τη βοήθεια του vuforia, μπορούμε να πειραματιστούμε και να αναπτύξουμε εφαρμογές επαυξημένης πραγματικότητας. Το vuforia είναι ένα πακέτο λογισμικού το οποίο συνδέεται με την παραπάνω πλατφόρμα ( unity ) και επιτρέπει την δημιουργία εφαρμογών AR. Είναι δηλαδή πρακτικά μια βιβλιοθήκη με συναρτήσεις που αφορούν κυρίως τον εντοπισμό αντικειμένων που εγκαταστάται στο unity. Μέσω της τεχνολογίας *Τεχνητής Όρασης επιτρέπει στον δημιουργό να εντοπίσει αντικείμενα/κείμενο σε ένα πραγματικό περιβάλλον και να προβάλλει πάνω τους κάτι ψηφιακό ώστε να φαίνεται και αυτό τελικά κομμάτι του περιβάλλοντος.το αποτέλεσμα αυτό το επιτυγχάνουμε με το συνδυασμό του Unity editor και του vuforia sdk (software development kit). Για να μπορέσουμε Χ.Συρράκος 9

όμως να ξεκινήσουμε να πειραματιζόμαστε πρέπει αρχικά να συνδέσουμε την πλατφόρμα του unity3d με το πακέτο λογισμικού του vuforia. 1.3 Εγκατάσταση και σύνδεση unity3d-vuforia Στην ιστοσελίδα του vuforia ( vuforia.com ) υπάρχουν άφθονες πληροφορίες όσον αφορά τη δομή και τις λειτουργίες των πακέτων λογισμικού που διαθέτει. Για την εγκατάσταση των πακέτων αυτών θα ακολουθήσουμε την εξής διαδικασία. Εικόνα 4. Vuforia Installer Μετά την εγκατάσταση του unity3d είναι σημαντικό να επιλέξουμε την υποστήριξη του vuforia A.R. όπως φαίνεται παραπάνω. Στη συνέχεια επιλέγουμε 3D περιβάλλον ανάπτυξης και πραγματοποιούμε εκκίνηση της εφαρμογής. Για να μπορέσουμε να χρησιμοποιήσουμε την κάμερα επαυξημένης πραγματικότητας (AR camera) στον unity editor, χρειαζόμαστε ένα κλειδί το οποίο το ανακτούμε απο την ιστοσελίδα του vuforia (Get development key, χρειάζεται εγγραφή χρήστη). Η σελίδα ανάκτησης του κλειδιού φαίνεται παρακάτω. Χ.Συρράκος 10

Εικόνα 5. Vuforia Developer Portal Μετά την επιτυχή εισαγωγή του κλειδιού στον inspector (πάνω δεξιά στον editor) και το σωστό configuration κατά την εγκατάσταση του vuforia ανάλογα με τις ανάγκες μας, έχουμε ένα έτοιμο περιβάλλον στο οποίο μπορούμε δημιουργήσουμε εφαρμογές επαυξημένης πραγματικότητας. Οι ρυθμίσεις / εγκαταστάσεις θα πρέπει να αλλάζουν ανάλογα με τις ανάγκες της εκάστοτε εφαρμογής. Οι παραπάνω ρυθμίσεις αφορούν τα απαραίτητα βήματα για τη χρήση της A.R. κάμερας και την υποστήριξη της επαυξημένης πραγματικότητας στο unity3d ώστε να μπορούμε να πραγματοποιήσουμε αναγνώριση κειμένου. 1.4 Αναγνώριση κειμένου Η αναγνώριση κειμένου στον τομέα του A.R. έχει ως στόχο τον εντοπισμό γραμμάτων, λέξεων και κατ επέκταση κειμένου μέσω κάμερας, την αναγνώριση και την αντιστοιχία τους με ένα λεξικό και τέλος τη χρήση του εντοπισμένου κειμένου (επαύξηση, τροποποίηση, αντιγραφή κλπ. ). Mε τα εργαλεία που ασχολούμαστε ο εντοπισμός και η αναγνώριση θα γίνει μέσω της A.R. κάμερας του unity editor, ενώ το λεξικό για την αντιστοιχία το βρίσκουμε στην ιστοσελίδα του vuforia ως English-Word.vwl. Είναι, λοιπόν, ενδιαφέρον να δούμε τις δυνατότητες, καθώς και τους περιορισμούς, των εργαλείων αυτών που μας παρέχονται. Στην ιεραρχία του Unity editor ( πάνω αριστερά ) μπορούμε να προσθέσουμε και να διαγράψουμε αντικείμενα. Εκεί θα τοποθετήσουμε αρχικά την A.R. κάμερα και θα δημιουργήσουμε διάφορα αντικείμενα τα οποία θα τα κληροδοτήσουμε σε αυτήν. Κάθε αντικείμενο (GameObject) μπορεί δηλαδή να έχει παιδιά, στα οποία να μεταφέρει και να χρησιμοποιεί τις ιδιότητες του. Είναι σημαντικό να τονίσουμε ότι κάθε συμπεριφορά και ιδιότητα των GameObjects συνδέεται με ένα script, το οποίο εκτελείται στην εκκίνηση της εφαρμογής. Αυτό σημαίνει ότι μπορούμε να τροποποιήσουμε τη συμπεριφορά των αντικειμένων μας σε μια εφαρμογή δυναμικά, κατά τη διάρκεια της εκτέλεσής της( Τα gameobjects δεν είναι δηλαδή απαραίτητα στατικά ). Για τη συγκεκριμένη εργασία θα χρησιμοποιήσουμε τις ιδιότητες της A.R. κάμερας και γενικότερα του πακέτου λογισμικού του vuforia για να εντοπίσουμε λέξεις ( words ) και Χ.Συρράκος 11

έπειτα να τις επαυξήσουμε ψηφιακά. Επειδή ο unity editor χρησιμοποιείται για ποικίλες εφαρμογές διαφορετικών αναγκών, θα χρειαστεί να κάνουμε κάποιες τροποποιήσεις στις βασικές ρυθμίσεις. Οι ρυθμίσεις αυτές έχουν να κάνουν με τη σωστή λειτουργία της εφαρμογής και όχι με παραμέτρους επίδοσης ή προτίμησης που θα δούμε αργότερα. 1.5 Βασικές ρυθμίσεις editor και vuforia Για να πάρουμε, λοιπόν, τα αποτελέσματα που θέλουμε, κάνουμε τις εξής ρυθμίσεις στον unity editor : Δημιουργία φακέλου Streaming/QCAR στα assets για να τοποθετήσουμε το.vwl αρχείο που περιέχει το λεξικό που χρησιμοποιείται για την ταυτοποίηση των λέξεων (το αρχείο αυτό υπάρχει στην ιστοσελίδα του vuforia ως ένα standard αγγλικό λεξικό). Open vuforia configuration στον inspector για την ενεργοποίηση της AR κάμερας Ενεργοποίηση του vuforia augmented reality στα build settings του unity Επιλεγμένη κονσόλα android ios στα build settings για την μετέπειτα μεταφορά της εφαρμογής σε κινητό android. Δημιουργία φακέλου scripts στα assets του vuforia στον οποίο θα τοποθετούμε οποιαδήποτε modification scripts χρειαστεί να γράψουμε (προεραιτικά) Στον φάκελο Assets/vuforia/prefabs υπάρχουν όλα τα πακέτα λογισμικού του vuforia που αφορούν τον εντοπισμό.εμείς θα χρησιμοποιήσουμε αρχικά το πακέτο TextRecognition. Στις ρυθμίσεις του, αντιστοιχόυμε την word list με το λεξικό που αποθηκεύσαμε στο φάκελο Assets/Streaming/QCAR. Εάν θέλουμε να εντοπίσουμε κάποιες λέξεις που δεν υπάρχουν στη βάση ( στο αποθηκευμένο λεξικό ), εισάγουμε τις καινούριες αυτές λέξεις στο πλαίσιο του additional words. Με τον ίδιο τρόπο όπως από πάνω δουλεύει και το Filter Mode, με τη διαφορά ότι εάν επιλεχθεί αυτή η παράμετρος, η κάμερα θα εντοπίζει μόνο τις λέξεις που δόθηκαν. Το λεξικό δηλαδή δεν λειτουργεί εάν επιλεχθεί το filter. Για την αναγνώριση των λέξεων πρέπει επίσης να επιλεγεί στον inspector το πλαίσιο use word prefabs με max simultaneous words τον αριθμό που επιθυμούμε. Στον φάκελο Assets/vuforia/prefabs υπάρχει το πακέτο Word το οποίο εμπεριέχει το λογισμικό για τη συμπεριφορά της εφαρμογής σε περίπτωση εντοπισμού κάποιας λέξης ( trackable event handler ). Η συμπεριφορά αυτή προσαρμόζεται ανάλογα με την κατάσταση δύο συναρτήσεων, ontrackingfound και ontrackinglost, που αφορούν όπως περιγράφει και το όνομά τους τον εντοπισμό η οχι κάποιας λέξης. Το πακέτο αυτό, όταν το τοποθετούμε στην ιεραρχία ( ως GameObject ) στις περισσότερες περιπτώσεις θα το κάνουμε παιδι του TextRecognition. Επίσης στις ρυθμίσεις του, στο πλαίσιο predefined word γράφουμε τη λέξη που θέλουμε να αναγνωρίσουμε. Οι παραπάνω ρυθμίσεις αφορούν τη σωστή λειτουργία του editor και τον εντοπισμό λέξεων βάσει των αναγκών της εφαρμογής μας. Το κατά πόσον ο εντοπισμός αυτός είναι αποδοτικός και το κατά πόσο επιδέχεται βελτίωση θα το δούμε στο τελευταίο κεφάλαιο της εργασίας. Προς το παρόν θα χρησιμοποιήσουμε και θα αξιολογήσουμε το έτοιμο πακέτο εντοπισμού. Ο εντοπισμός όμως από μόνος του δεν προσφέρει κάτι στον χρήστη της εφαρμογής. Θα πρέπει,δηλαδή, να εκμεταλλευτούμε τον εντοπισμό αυτό και να παράγουμε κάτι ψηφιακό πάνω σε αυτόν. Για αρχή, θα επαυξήσουμε τις λέξεις που εντοπίζουμε με τις αντίστοιχες σε τρισδιάστατη μορφή. Δηλαδή, κάθε φορά που εντοπίζεται μια λέξη, θα εμφανίζεται από πάνω της η ίδια, αλλα σε 3-D μορφή. 1.6 Εντοπισμός λέξεων Οι λέξεις που επιλέξαμε για το συγκεκριμένο παράδειγμα είναι οι : Go, Stop, Wednesday, Week, Weak. Χ.Συρράκος 12

Η ιεραρχία στον editor μέχρι αυτή τη στιγμή θα πρέπει να είναι όπως η εικόνα παρακάτω. Εικόνα 6. Ιεραρχία unity Δηλαδή το αντικείμενο TextRecognition να είναι παιδί της A.R. κάμερας και οι λέξεις (words) να είναι παιδιά του TextRecognition. Αυτή είναι μια standard δομή με την οποία επιτυγχάνεται η αναγνώριση κάποιων συγκεκριμένων λέξεων. Ας δούμε τώρα το πως δουλεύουν ακριβώς τα αντικείμενα της ιεραρχίας και με ποιον τρόπο συνδέονται με τα αντίστοιχα scripts. Χ.Συρράκος 13

2. UNITY KAI C# Όπως προαναφέραμε, κάθε gameobject συνδέεται με ένα script. Η βασική κλάση ( base class ) από την οποία κληρονομούν τις ιδιότητες και τις συναρτήσεις όλα τα αντικείμενα στον unity editor είναι η Monobehaviour. Προτού μελετήσουμε τις ιδιότητές της είναι σημαντικό να αναφέρουμε ότι στο περιβάλλον του unity όλα τα scripts τρέχουν σε ένα μόνο thread, που σημαίνει ότι κάθε script που εκτελείται δεν μπορεί να διακοπεί από κάποιο άλλο εξωτερικά ( με εξαίρεση τη χρήση των coroutines που θα εξηγήσουμε σε λίγο ). Μερικές από τις βασικές συναρτήσεις της Μοnobehaviour που μας βοηθούν να καταλάβουμε τη λειτουργία και τη χρησιμότητά της σε 3D και real time εφαρμογές είναι οι εξής : Awake() : Καλείται ακριβώς μια φορά για κάθε αντικείμενο τη στιγμή που αρχικοποιείται ( δηλαδή πριν απο την εκκίνηση ) Παράδειγμα : αντικείμενο ) ( η συνάρτηση FindWithTag επιστρέφει ουσιαστικά ένα ενεργό Εικόνα 7. Παράδειγμα Awake() Παρατήρηση : Οι αρχικοποιήσεις των αντικειμένων γίνονται με τυχαία σειρά, οπότε καλό είναι οι συνδέσεις και οι αναφορές μεταξύ αντικειμένων να γίνονται στην κλήση των awake() και όχι των start() που θα δούμε αμέσως μετά. Χ.Συρράκος 14

Start() : Καλείται ακριβώς μια φορά για κάθε αντικείμενο στο πρώτο frame μετά την εκκίνηση. Παράδειγμα : Εικόνα 8. Παράδειγμα Start() Παρατήρηση : Η κλήση της start() πραγματοποιείται μετά την κλήση των awake() συναρτήσεων όλων των αντικειμένων. Update() : Καλείται σε κάθε frame κατά τη διάρκεια μιας εφαρμογής. Παράδειγμα : Επιστροφή στο debug log του χρόνου που χρειάστηκε για το τελευταίο frame ( μέσω της συνάρτησης Τime.deltaTime ) Εικόνα 9. Παράδειγμα Update() Οι παραπάνω συναρτήσεις αποτελούν το βασικό κορμό της Monobehaviour κλάσης και χρησιμοποιούνται από κάθε αντικείμενο στην ιεραρχία. Στην ιστοσελίδα του unity υπάρχουν αναλυτικά όλες οι συναρτήσεις και οι ιδιότητές τους.δε θα τις δούμε όλες αναλυτικά καθώς οι περισσότερες έχουν άμεση σχέση με game development σε 3D περιβάλλον και όχι για το είδος της εφαρμογής που θα αναπτύξουμε εμείς. Παρ όλα αυτά είναι χρήσιμο να γνωρίζουμε το είδος των συναρτήσεων που προσφέρουν οι κλάσεις και τα namespaces του Unity ώστε στη συνέχεια να μπορούμε να ανατρέξουμε σε αυτές σε περίπτωση που χρειαστούμε κάποιες από τις ιδιότητές τους. Για τα δικά μας δεδομένα για παράδειγμα, ενδέχεται να φανούν πολύ χρήσιμες οι συναρτήσεις της κλάσης Math για πολύπλοκους υπολογισμούς σε δύο και τρεις διαστάσεις, η fixedupdate για update σε αντικείμενα που ακολουθούν νόμους της φυσικής ( colliders / rigidbody ), η Physics.Raycast για αναγνώριση αλληλεπίδρασης Χ.Συρράκος 15

χρήστη-αντικειμένου και πολλές άλλες που θα δούμε στη συνέχεια, όταν αρχίζουν να παρουσιάζονται οι αντίστοιχες ανάγκες. Προς το παρόν αρκεί να δούμε τη μέθοδο υλοποίησης των coroutines στο unity καθώς και τη χρησιμότητά τους. 2.1 Coroutines σε Unity Το Manual του Unity δίνει το παρακάτω παράδειγμα για την απλή κατανόηση των coroutines. Έστω ότι θέλουμε το επαυξημένο περιεχόμενο που εμφανίζεται μετά τον εντοπισμό λέξεων/εικόνων να κινείται σε έναν άξονα ή να αλλάζει ένταση χρώματος κατά την πάροδο του χρόνου. Εάν υλοποιήσουμε αυτή την κίνηση ή την αλλαγή σε μια συνάρτηση Update_Pos_and_Color() θα εκτελεστεί πρώτα ολόκληρη η συνάρτηση και μετά θα ανανεωθεί το επόμενο frame, με αποτέλεσμα οποιαδήποτε αλλαγή να είναι στιγμιαία και όχι γραμμική κατά την πάροδο του χρόνου όπως θα θέλαμε. Το θέμα αυτό μπορούμε να το λύσουμε με τη χρήση των coroutines (ή με τη χρήση Update()/FixedUpdate() εάν υπάρχει η δυνατότητα ). Μια coroutine έχει παρόμοια συμπεριφορά με μια συνάρτηση και λειτουργεί ως εξής : Στην κλήση της παγώνει η συνάρτηση (yield) και επιστρέφει η ροή στον unity ώστε να γίνει ανανέωση του frame (update) Μετά το την ανανέωση επιστρέφει η ροή του προγράμματος στην coroutine και συνεχίζει απο το σημείο που έμεινε. Έτσι καταλαβαίνουμε ότι μπορούμε να υλοποιήσουμε το παράδειγμα που αναφέραμε απο πάνω ως εξής : Εικόνα 10. Παράδειγμα coroutine Με αυτόν τον τρόπο, σε κάθε yield ανανεώνεται το frame με αποτέλεσμα να πάρουμε στη μεταβλητή μας (που θα αντιστοιχίζεται σε κάποιο αντικείμενο) Χ διαφορετικά material.colors σε πάροδο Χ δευτερολέπτων. Σε πραγματικά δεδομένα βέβαια κάτι τέτοιο όπως προαναφέραμε πολύ απλά γίνεται με τη χρήση της συνάρτησης Update, αυξάνοντας το δείκτη χρώματος κατά ένα μικρό ποσοστό σε κάθε frame. Ένα πιο εύστοχο παράδειγμα για ουσιώδη χρήση coroutine θα μπορούσαμε να πούμε ότι είναι η εκτέλεση πεπερασμένων βημάτων μετά τη σήμανση κάποιου εξωτερικού event (μετά το πάγωμα ). Κάτι τέτοιο δε θα παρουσιαστεί στις ανάγκες της εφαρμογής, οπότε δε θα αναφερθούμε περεταίρω. Χ.Συρράκος 16

3.VUFORIA KAI C# Τώρα που είδαμε τον βασικό κορμό της Monobehaviour μπορούμε να προχωρήσουμε στη μελέτη των A.R. camera, TextRecognition και Word, τα οποία όλα κληρονομούν τις ιδιότητές της. A.R. camera : Στο script της A.R. camera που είναι συνδεδεμένο με το αντίστοιχο gameobject, γίνεται έλεγχος πιθανών λαθών κατά την εκκίνηση της εκάστοτε εφαρμογής. Ο κώδικας αφορά κυρίως τη σωστή αρχικοποίηση των παραμέτρων και τη σωστή εκκίνηση της κάμερας μέσω του Unity ή της απομακρυσμένης συσκευής. Αυτό γίνεται με τη βοήθεια της Μonobehaviour σε συνδυασμό με συναρτήσεις αρχικοποίησης του vuforia όπως οι seterroroccured() και onvuforiainitializationerror(). Παρατήρηση : Είναι επίσης σημαντικό να αναφέρουμε ότι οι αλλαγές στον inspector που αφορούν την A.R. κάμερα γίνονται overwrite από το script της.οπότε, οποιαδήποτε τροποποίηση θέλουμε να κάνουμε θα πρέπει να την εντάξουμε στο παραπάνω script ( ενδέχεται να είναι bug ) TextRecognition Prefab: Το πακέτο αυτό αναγνωρίζει τυπωμένες λέξεις. Δεν έχει τη δυνατότητα να αναγνωρίζει χειρόγραφους χαρακτήρες καθώς ο τρόπος ταυτοποίησης γίνεται με αντιστοίχηση των εντοπισμένων λέξεων με ένα έτοιμο λεξικό. Όπως αναφέραμε στην αρχή, δηλαδή, είναι μια τεχνική marker-based A.R.. To script που αντιστοιχεί στο πακέτο αυτό αρχικοποιεί και ξεκινά τον TextTracker*. Σε αντίθεση με την A.R. κάμερα και τα Words που θα δούμε σε λίγο, δεν έχει κάποια γεωμετρική αναπαράσταση στη σκηνή. Δύο παραδείγματα χρήσης του TextRecognition script φαίνονται παρακάτω. *TextTracker : Κλάση που αρχικοποιεί και ξεκινά τον εντοπισμό κατά την εκκίνηση της εφαρμογής μέσω των συναρτήσεων GetRegionOfInterest(), SetRegionOfInterest(), Start() και Stop() 1.Set Wordlist - Filter Εικόνα 11. TextTracker & White Filter List Προσθέτοντας το παραπάνω κομμάτι στο script του ΤextRecognition επιτυγχάνουμε τον εντοπισμό των λέξεων που ορίσαμε χωρίς τη χρήση του λεξικού (παρ όλα αυτά οφείλουμε να έχουμε αποθηκευμένο ένα λεξικό σαν βάση αλλιώς δεν έχουμε πρόσβαση στα filters ). Με παρόμοιο τρόπο μπορούμε να εισάγουμε δικό μας λεξικό ( αρκεί να είναι.vwl extension ), να τροποποιήσουμε ένα ήδη υπάρχων και να εισάγουμε λέξεις σε Filter_Mode.BlackList. Παρατήρηση: Οι ρυθμίσεις αυτού του είδους μπορούν να γίνουν και μέσω του inspector στον unity editor. Χ.Συρράκος 17

2. Region of Interest ( Picture Analysis ) Εικόνα 12. set και get Region of Interest Με αυτόν τον τρόπο ορίζουμε τον χώρο στην οθόνη ( σε pixels ) στον οποίο θέλουμε να εστίασουμε την ανάλυση της εικόνας. Οι λέξεις που αναγνωρίζονται στον χώρο αυτό αντιστοιχίζονται στη συνέχεια με τις αντίστοιχες που υπάρχουν στο λεξικό (ή αυτές που έχουμε ορίσει εμείς ). Παρατήρηση : Υπάρχουν δύο Regions of Interest ( RoI ) που μας ενδιαφέρουν, το RoI για αναγνώριση ( detection ) και το RoI για εντοπισμό ( tracking ).Η αναγνώριση έχει να κάνει με τη διαδικασία αναζήτησης και εξέτασης των λέξεων, ενώ ο εντοπισμός έπεται της αναγνώρισης και βοηθά στο να παραμένουν τα αντικείμενα που αναγνωρίζονται στην εστίαση της κάμερας.έτσι ώστε να Όσον αφορά το tracking δεν μας ενδιαφέρει ιδιαίτερα το μέγεθος που θα ορίσουμε καθώς δεν υπάρχει επιβάρυνση ως προς την επίδοση ακόμα και στην περίπτωση που ορίσουμε ως RoI ολόκληρη την οθόνη. Για το detection όμως πρέπει να είμαστε προσεκτικοί καθώς όσο μεγαλώνει το RoI τόσο πιο αργή θα είναι και η αναγνώριση των αντικειμένων. Word Prefab : Το πακέτο αυτό συνδέεται με το Wordbehaviour script. Κατά την εκκίνηση της εφαρμογής, μετά απο κάθε εντοπισμό, δημιουργείται και αρχικοποιείται ένα νέο Word το οποίο συνδέεται με την αντίστοιχη λέξη. Η δημιουργία αυτή δεν γίνεται δυναμικά. Οφείλει να δηλώσει ο χρήστης, δηλαδή, εξαρχής το μέγιστο αριθμό λέξεων που θα δημιουργηθούν ( είναι ο ορισμός του MaxSimultaneous words στον inspector ή μέσω script ). Καταλαβαίνουμε, λοιπόν, ότι αφού δημιουργούνται κατά την εκτέλεση της εφαρμογής ( runtime ) scripts που συνδέονται με τα GameObjects που έχουμε ορίσει, μπορούμε να διαχειριστούμε το αποτέλεσμα του εντοπισμού με όποιον τρόπο θέλουμε. Έστω για παράδειγμα ότι θέλουμε να εισάγουμε κάθε νέα λέξη που εντοπίζεται σε έναν εξωτερικό φάκελο. Με τη βοήθεια των κλάσεων του WordManager μπορούμε να υλοποιήσουμε κάτι τέτοιο ως εξής: Εικόνα 13. get active trackables στον Statemanager Παρατήρηση : Τα αποτελέσματα του WordResult που παίρνουμε μέσω των manager κλάσεων ανανεώνονται σε κάθε frame. Πολλές απο τις ρυθμίσεις και τα παραδείγματα που είδαμε παραπάνω είναι δυνατόν να υλοποιηθούν απευθείας μέσω του unity editor χωρίς να τροποποιήσουμε κάποιο script. Είναι σημαντικό παρ όλα αυτά να γνωρίζουμε πως να παρεμβένουμε στα παρασκήνια καθώς αυτό θα μας βοηθήσει σε περιπτώσεις όπου η χρήση του editor δεν παρέχει Χ.Συρράκος 18

κάποια άμεση λύση ( όπως τα παραδείγματα της προσαρμογής του RoI και της αντιγραφής λέξεων σε εξωτερικό φάκελο ) και σε περιπτώσεις όπου θα θέλουμε η εφαρμογή μας να έχει δυναμικό χαρακτήρα ( όπως θα δούμε στη συνέχεια ). 3.1 Δημιουργία επαυξημένης πραγματικότητας Θα δημιουργήσουμε 3D αντικείμενα και θα τα τοποθετήσουμε στην ιεραρχία.για κάθε λέξη που έχουμε, δημιουργούμε στην ιεραρχία 3d-Text και το κάνουμε παιδί της αντίστοιχης λέξης. Έχουμε, δηλαδή, το εξής αποτέλεσμα. Εικόνα 14. Ιεραρχία στον editor μετά την είσοδο των 3-d μοντέλων Στο πλαίσιο TextMesh γράφουμε τη λέξη που θέλουμε να εμφανιστεί επαυξημένα και στο Transform, όπου αναγράφονται οι συντεταγμένες και η γωνία με την οποία θα εμφανιστεί το αντικείμενο, τροποποιούμε την παράμετρο rotation X στον inspector κατα 40 περίπου μοίρες. Αυτό το κάνουμε διότι διαφορετικά με την αναγνώριση της κάμερας το επαυξημένο κείμενο θα εμφανιστεί κάθετα στην γωνία προβολής και δεν θα είναι εύκολα αναγνώσιμο. Τέλος, τροποποιούμε τις παραμέτρους Position ώστε κάθε 3D λέξη να βρίσκεται πάνω απο την αντίστοιχή της στη σκηνή (για διευκόλυνση, η τροποποίηση αυτή γίνεται και κατευθείαν πάνω στη σκηνή επιλέγοντας τον κέρσορα μετακίνησης ). Η σκηνή μας μετά απο αυτές τις τροποποιήσεις θα είναι όπως παρακάτω. Χ.Συρράκος 19

Εικόνα 15. Scene view στον editor Αλλαγές για τις ιδιότητες του 3D κειμένου, όπως μέγεθος, χρώμα, αποστάσεις, σκιές και διάφορα άλλα εφέ, μπορούμε να κάνουμε είτε στον inspector, στα πλαίσια Material και TextMesh, είτε μέσω ενός script το οποίο το τοποθετούμε πάνω στο αντικείμενο που θέλουμε ( attach to GameObject). 3.2 Δημιουργία αρχείου.apk και δοκιμή εφαρμογής Για να δοκιμάσουμε τη λειτουργία της εφαρμογής μπορούμε είτε να την τρέξουμε στον unity editor ( είναι απαραίτητη η κάμερα υπολογιστή ) είτε να την περάσουμε σε μια συσκευή που διαθέτει κάμερα. Εμείς θα κατασκευάσουμε ένα.apk αρχείο και θα το περάσουμε σε συσκευή κινητού android. Στα build settings του unity επιλέγουμε το πλαίσιο Add open scenes ώστε να προσθεθεί η σκηνή προς μεταφορά. Ύστερα στην πλατφόρμα επιλέγουμε android και στα player settings ( inspector ) ονομάζουμε την εφαρμογή. Τέλος συνδέουμε τη συσκευή που θέλουμε στον υπολογιστή και μεταφέρουμε το αρχείο με την επιλογή build and run (σε android πρέπει να έχουμε το usb debugging ανοιχτό στα dev settings). Δοκιμάζοντας την εφαρμογή βλέπουμε ότι παίρνουμε ένα αποτέλεσμα όπως παρακάτω. Αναγνωρίζονται, δηλαδή, μέσω της A.R. κάμερας όλες οι λέξεις σωστά. Εικόνα 16. Εφαρμογή κατά την εκτέλεση Χ.Συρράκος 20

Είναι σημαντικό τώρα να αλλάξουμε τις παραμέτρους του κειμένου και της κάμερας για να δούμε με ποιο τρόπο αλλάζουν τα αποτελέσματα που παίρνουμε. Τι θα αλλάξει, δηλαδή, εάν τροποποιήσουμε το μέγεθος του κειμένου, τη γραμματοσειρά του κειμένου, τη γωνία και την απόσταση της κάμερας, τον αριθμό των αντικειμένων προς αναγνώριση. 3.3 Πειραματισμός παραμέτρων 3.3.1 Απόσταση και Μέγεθος Αρχικά ας παρατηρήσουμε τα αποτελέσματα που παίρνουμε μεταβάλλοντας το μέγεθος της γραμματοσειράς και την απόσταση της κάμερας από τον στόχο. Στον παρακάτω πίνακα αναγράφονται τα αποτελέσματα που πήραμε για τέσσερα διαφορετικά fonts όσον αφορά τη μέγιστη απόσταση απο την οποία μπορούν να γίνουν αντιληπτές οι λέξεις. Πίνακας 1. Αποτελέσματα μετρήσεων Font Distance 24 55 cm 36 105 cm 50 152 cm 110 362 cm Tο μέγεθος του font έχει μετρηθεί με τη γραμματοσειρά Calibri και Arial του Microsoft Word. Παρατήρηση: Να σημειωθεί ότι οι παραπάνω αποστάσεις αφορούν τη μέγιστη δυνατή απόσταση από την οποία μπορεί να γίνει η αναγνώριση μέσω της κάμερας. Σε αυτές τις αποστάσεις η ταχύτητα αναγνώρισης είναι σχετικά αργή (3-5 δευτερόλεπτα ), ενώ προσεγγιστικά η σχεδόν αυτόματη αναγνώριση ( < 1-1,5 sec ) γίνεται στη μέση των παραπάνω αποστάσεων. Εκτός από το παραπάνω συμπέρασμα υπάρχουν και κάποιες άλλες παρατηρήσεις που προέκυψαν απο τις προηγούμενες δοκιμές. Όταν γίνεται η αναγνώριση των λέξεων σε μια μέγιστη απόσταση X, τότε η μεταβλητή OnTrackingFound συνεχίζει να είναι αληθής για απόσταση μεγαλύτερη απο το Χ. Δηλαδή, το επαυξημένο αντικείμενο συνεχίζει να υφίσταται σε απόσταση στην οποία εάν δοκιμάζαμε να εντοπίσουμε τις λέξεις απτην αρχή, δεν θα γινόταν η αναγνώριση. Το φαινόμενο αυτό αφορά τον όρο Extended_Tracking που μπορούμε να δούμε στα scripts. Για τις τιμές που δοκιμάσαμε, παρατηρούμε οτι η συνάρτηση που συνδέει το font και την απόσταση έχει την τάση να προσεγγίζει την γραφική παράσταση μιας παραβολής. Για αρκετά μεγαλύτερες τιμές, η συναρτηση είτε θα συνεχίζει να έχει αυτή τη συμπεριφορά, είτε η απόσταση θα αρχίσει να αυξάνεται με ακόμα μεγαλύτερο ρυθμό. Χ.Συρράκος 21

Με απλά λόγια, όσο μεγαλύτερο είναι το font τόσο μεγαλύτερη θα είναι και η απόσταση αναγνώρισης. Ο τύπος γραμματοσειράς ( font ) δεν παίζει ρόλο στην ταχύτητα και απόσταση αναγνώρισης, αρκεί να είναι παραπλήσιος με τον standard τύπο που χρησιμοποιείται ( υπάρχει λίστα στο portal του vuforia για τις υποστηριζόμενες γραμματοσειρές ). Ο εντοπισμός ( detection ) σε γωνίες μεγάλης κλίσης δεν είναι εφικτός, αλλά σε περίπτωση που γίνει ο εντοπισμός ( υπό κάποια μικρότερη γωνία ), τότε η παρακολούθηση ( extended_tracking ) συνεχίζει να υφίσταται και σε μεγαλύτερες γωνίες ( αντίστοιχο αποτέλεσμα με την πρώτη παρατήρηση που αφορά την απόσταση ). Σε αποστάσεις μεγαλύτερες από αυτές του πίνακα, ενδέχεται να υπάρχει αργή και μερική αναγνώριση λέξεων. Δηλαδή, μπορεί να αναγνωρίζονται με μεγάλη καθυστέρηση μερικές από τις λέξεις, με τις υπόλοιπες να μην αναγνωρίζονται ποτέ. Επειδή δεν υπήρχε πλήρης αναγνώριση, δεν χρησιμοποιήσαμε αυτές τις τιμές στον πίνακα. Είναι δυνατή η ταυτόχρονη αναγνώριση δύο ή περισσότερων στόχων έως τη μέγιστη δυνατή απόσταση εντοπισμού του μικρότερου ( ως προς το font ). Η αναγνώριση γίνεται μόνο με landscape προσανατολισμό κάμερας (ενδέχεται να είναι bug της παρούσας έκδοσης). 3.3.2 Εμπλουτισμός κειμένου Θα δοκιμάσουμε τώρα να εμπλουτίσουμε τον στόχο με πολλές λέξεις ( τυχαίες ) ώστε να δούμε σε αυτήν την περίπτωση τι αποτελέσματα θα πάρουμε συγκριτικά με τις 5 λέξεις που είχαμε πριν. Το κείμενο που θα εξετάσουμε ( προέκυψε από random text generator ) είναι το εξής. Εικόνα 17. Τυχαίο κείμενο Θα εργαστούμε με τον ίδιο τρόπο όπως και με τις 5 λέξεις (στατικά, μέσω της ιεραρχίας Χ.Συρράκος 22

). Για κάθε μία θα εισάγουμε ένα word και ένα 3D text αντικείμενο στη σκηνή ως παιδιά του TextRecognition. Η ιεραρχία, λοιπόν, θα είναι όπως παρακάτω Εικόνα 18. Ιεραρχία μετά την είσοδο του τυχαίου κειμένου Όπου κάθε λέξη έχει ως παιδιά τα text και 3d_text. Παρατήρηση : Καταλαβαίνουμε, ότι μετά από αυτό το παράδειγμα, σε περίπτωση που θέλουμε να αναγνωρίσουμε ένα μεγάλο πλήθος λέξεων, η χρήση της ιεραρχίας για την εισαγωγή των επιθυμητών λέξεων καθίσταται μη αποδοτική. Θα δούμε αργότερα, λοιπόν, τον τρόπο με τον οποίο μπορούμε να αντιμετωπίσουμε αυτό το πρόβλημα( πως η εφαρμογή θα αποκτήσει δηλαδή scalability ). Χ.Συρράκος 23

Η σκηνή μετά τις κατάλληλες τροποποιήσεις ( ομοίως με τις 5 λέξεις ) θα είναι ως εξής. Εικόνα 19. Νέο scene view στον editor Δοκιμάζοντας την εφαρμογή σε συσκευή android παίρνουμε το εξής αποτέλεσμα. Εικόνα 20. Νέα εφαρμογή κατά την εκτέλεση Κάθε λέξη ωστόσο δεν αναγνωρίζεται το ίδιο γρήγορα. Σε απόσταση 50 εκατοστών για την παραπάνω γραμματοσειρά(24 Αrial) το 90% περίπου των λέξεων αναγνωρίστηκαν αμέσως, ενώ το υπόλοιπο 10% χρειάστηκαν 2-3 δευτερόλεπτα επιπλέον ή κάποια παραπάνω εστίαση. Παρατηρούμε δηλαδή, ένα μικρό πρόβλημα αποδοτικότητας (ταχύτητα) όσο προσθέτουμε νέο κείμενο. Χ.Συρράκος 24

3.3.3. Πειραματισμός παραμέτρων : Γωνία Προβολής Εάν αυξήσουμε τη γωνία προβολής κατά 50-70 μοίρες θα δούμε το εξής αποτέλεσμα. Εικόνα 21. Εφαρμογή κατά την εκτέλεση με γωνία προβολής Δεν αναγνωρίζονται δηλαδή όλες οι λέξεις ανεξαρτήτως διάρκειας αναμονής ή εστίασης. Όσο αυξάνουμε τη γωνία, δηλαδή, παρατηρούμε προβλήματα σε ταχύτητα εντοπισμού και σε αναγνώριση. Χ.Συρράκος 25

4. ΠΕΡΙΟΡΙΣΜΟΙ ΣΤΗΝ ΑΝΑΓΝΩΡΙΣΗ ΚΕΙΜΕΝΟΥ:ΣΥΜΠΕΡΑΣΜΑΤΑ Μετά από τις παραλλαγές στις παραμέτρους καταλήγουμε στις εξής παρατηρήσεις : H αύξηση στο πλήθος των λέξεων προς αναγνώριση έχει μια μικρή επίδραση στην ταχύτητα αναγνώρισης, αλλά δεν επηρεάζει την πραγματοποίηση της αναγνώρισης. Λύση : Η αργή αναγνώριση έχει με το γεγονός ότι το Region of Interest στο πληθωρικό κείμενο είναι μεγαλύτερο απο κάποιο άλλο με λίγα στοιχεία. Μια λύση, λοιπόν, είναι να περιορίσουμε το RoI ώστε να αυξηθεί η ταχύτητα αναγνώρισης. Έτσι όμως, θα μειωθεί το εύρος των λέξεων που θα αναγνωρίζονται σε κάθε frame της κάμερας. Εξαρτάται, λοιπόν, από την υλοποίηση που θέλουμε να ακολουθήσουμε για το ποια λύση θα διαλέξουμε, καθώς και οι δύο έχουν τα μειονεκτήματά τους. Στην αλλαγή της γωνίας προβολής παρουσιάστηκαν τα περισσότερα προβλήματα καθώς είχε επίπτωση και στην πραγματοποίηση της αναγνώρισης αλλά και στην ταχύτητα. Πιθανή Λύση: Όσο αυξάνεται η γωνία προβολής, τόσο στρεβλώνεται η φόρμα των λέξεων. Με την τεχνική που χρησιμοποιούμε ( marker-based AR ) δεν μπορεί να υπάρξει κάποια λύση ως προς αυτό το πρόβλημα καθώς παρά τον σωστό εντοπισμό των αντικειμένων, δεν θα υπάρχει σωστή αντιστοίχιση με το λεξικό που έχουμε ορίσει. Για να διορθώσουμε, λοιπόν, αυτό το πρόβλημα, θα πρέπει να χρησιμοποιήσουμε εφαρμογές που δεν χρειάζονται κάποιο λεξικό για ταύτιση με τις εντοπισμένες λέξεις (marker-less A.R. ). Παρατήρηση : Στην παραμετροποίηση της απόστασης σε συνάρτηση με την αναγνώριση θεωρώ ότι πήραμε αρκετά ικανοποιητικά αποτελέσματα και δεν υπάρχει λόγος επιδίωξης βελτίωσης στο συγκεκριμένο κομμάτι. Εκτός από τις παραμέτρους που αφορούν την αποδοτικότητα της εφαρμογής ( ταχύτητα / αναγνώριση ) μπορούμε να προσθέσουμε χαρακτηριστικά που βελτιώνουν τη λειτουργικότητα και την αλληλεπίδραση με το χρήστη καθώς και τη δυνατότητα επεκτασιμότητας* της εφαρμογής. Θα δούμε παρακάτω τον τρόπο με τον οποίο μπορούν να υλοποιηθούν μερικά από αυτά τα χαρακτηριστικά. *Χωρίς την ικανότητα της επεκτασιμότητας ( scalability ) οι περισσότερες εφαρμογές καθίστανται μη πρακτικές. Είναι πολύ σημαντικό, λοιπόν, να δώσουμε τη δυνατότητα αυτή στην εφαρμογή μας. Χ.Συρράκος 26

5. SCALABILITY ΕΦΑΡΜΟΓΗΣ Αρχικά, θέλουμε να εντοπίζουμε κάθε λέξη που τροφοδοτείται μέσω του λεξικού, χωρίς να την τοποθετούμε εμείς στη σκηνή. Για να το κάνουμε αυτό θα εκμεταλευτούμε το DefaultTrackableEventHandler script του vuforia στο οποίο υλοποιούνται οι συναρτήσεις OnTrackingFound() και OnTrackingLost(). Ουσιαστικά μετά απο κάθε επιτυχή εντοπισμό, θα δημιουργούμε ένα νέο επαυξημένο αντικείμενο και θα το κληροδοτούμε στην αντίστοιχη λέξη. Οι λέξεις δημιουργούνται αυτόματα απο το vuforia αλλά ως κλώνοι, οπότε θα πρέπει να αλλάξουμε τα ονόματα των λέξεων αυτών ώστε να μπορούμε μετά να αναφερθούμε σε καθεμία ξεχωριστά. Εικόνα 22. Δυναμική δημιουργία αντικειμένων Προσθέτοντας τον παραπάνω κώδικα μετά από κάθε επιτυχές tracking της κάμερας καταφέρνουμε να δημιουργήσουμε δυναμικά το επαυξημένο αντικείμενο και να το κληροδοτήσουμε στις λέξεις-κλώνους. Στα αντικείμενα αυτά μπορούμε να δώσουμε ιδιότητες ή να κάνουμε attach άλλα script μέσω της συνάρτησης get_component. Για παράδειγμα εάν θέλουμε να προσθέσουμε ένα script στον επαυξημένο κύβο που τον κάνει να περιστρέφεται θα πράξουμε ως εξής: Εικόνα 23. Rotate script και ένταξή του στο Main script Χ.Συρράκος 27

Εάν ακόμα θέλουμε να χρησιμοποιήσουμε κάποια μεταβλητή που βρίσκεται σε άλλη κλάση μπορούμε να αναφερθούμε σε αυτή παρομοίως ως εξής: Εικόνα 24. Ενεργοποίηση component Όπου my_var πρέπει να είναι αναγκαστικά public static μεταβλητή στην κλάση myscript ( και στην προκειμένη περίπτωση Boolean ). Πρωτού προσθέσουμε δυνατότητες αλληλεπίδρασης των αντικειμένων με το χρήστη ας παρατηρήσουμε τα αποτελέσματα της νέας δυναμικής εφαρμογής. 5.1 Εκτέλεση δυναμικής εφαρμογής. Για να δούμε τη δυναμική λειτουργία της εφαρμογής θα πρέπει να την τρέξουμε στον Unity Editor ώστε να βλέπουμε κατά την εκτέλεση της τη δημιουργία αντικειμένων και τα αντίστοιχα μηνύματα της κονσόλας. Για παράδειγμα στον εντοπισμό πέντε λέξεων που πραγματοποιήσαμε αρχικά η ιεραρχία / σκηνή θα είναι όπως παρακάτω : Βήμα 1 : Κλειστή Εφαρμογή Βήμα 2 : Play Εικόνα 25. Δυναμική ιεραρχία Εικόνα 26. Δυναμικό scene view ( κάμερα ) Χ.Συρράκος 28

Εικόνα 27.Δυναμική ιεραρχία κατά την εκτέλεση Βλέπουμε, λοιπόν, ότι σωστά δημιουργήθηκαν τα αντικείμενα στην ιεραρχία, αλλά οι λέξεις κλώνοι δεν είναι παιδιά του TextRecognition. Για καλύτερη οργάνωση, λοιπόν, θα πραγματοποιήσουμε αυτήν την αλλαγή ως εξής : textrec = GameObject.Find("TextRecognition"); // textrec -> GameObject variable this.transform.parent = textrec.transform; Παρατήρηση : Εάν κάποια στιγμή της εφαρμογής χαθεί μια λέξη απτον tracker της κάμερας και στη συνέχεια ξαναβρεθεί, θα δημιουργηθεί ξανά ένας επαυξημένος κύβος πάνω απο τον προηγούμενο. Αυτή τη λειτουργικότητα πρέπει να την αποφύγουμε, οπότε σε κάθε tracking lost είναι καλό να καταστρέφουμε το παιδί της λέξης που χάθηκε ( destroy(name) ). 5.2 Δοκιμή εφαρμογής σε τυχαίο κείμενο. Είναι ενδιαφέροντα τα αποτελέσματα εάν δοκιμάσουμε τη δυναμική αυτή εφαρμογή σε ένα τυχαίο κείμενο χωρίς προκαθορισμένα fonts και sizes. Δοκιμή σε βιβλίο : Μηδενική γωνία προβολής Εικόνα 28. Δοκιμή δυναμικής εφαρμογής σε βιβλίο Βλέπουμε ότι επαυξάνονται οι περισσότερες από τις λέξεις. Είναι αξιοσημείωτο το γεγονός όμως ότι εντοπίζονται λέξεις ( δημιουργούνται αντικείμενα στον editor ) που είναι εκτός του frame της κάμερας που βλέπουμε. Αυτό μπορεί να αλλάζει από συσκευή σε συσκευή ανάλογα με το ποσοστό του φακού της κάμερας που χρησιμοποιείται ως viewpoint του χρήστη. Επίσης επειδή δεν έχουμε δώσει εμείς προκαθορισμένες λέξεις προς αναγνώριση τα λάθη που γίνονται είναι αρκετά. Βλέπουμε παρακάτω την ιεραρχία μετά από πέντε περίπου δευτερόλεπτα εστίασης στο βιβλίο. Χ.Συρράκος 29

Εικόνα 29. Αποτελέσματα δοκιμής βιβλίου στην ιεραρχία Πολλές από τις λέξεις που εντοπίζονται δεν βγάζουν νόημα, παρόλα αυτά βρίσκονται στο standard λεξικό του Vuforia γι αυτό και θεωρούνται αποδεκτές. Για παράδειγμα η λέξη lix που έχει εντοπιστεί βλέπουμε ότι όντως υπάρχει στο vwl αρχείο του Vuforia. Αυτό αποτελεί και ένα από τα βασικά μειονεκτήματα του Vuforia, ότι ενδέχεται δηλαδή να εντοπίζονται λανθασμένες λέξεις, ή και κομμάτια λέξεων (πχ στη λέξη lipstick να αναγνωρίζεται το lip σαν αποδεκτή λέξη). Εικόνα 30. Αναζήτηση στο vwl λεξικό Το φαινόμενο αυτό γίνεται εντονότερα αντιλειπτό εάν αυξήσουμε λίγο τη γωνία προβολής με αποτέλεσμα όπως είχαμε αναφέρει και προτύτερα να έχουμε επιπτώσεις στην αναγνώριση και την ταχύτητα αναγνώρισης λέξεων. Συγκεκριμένα βλέπουμε τα αποτελέσματα με Χ.Συρράκος 30

Δοκιμή σε βιβλίο : Γωνία προβολής (~35-40 μοίρες ) Εικόνα 31. Δοκιμή δυναμικής εφαρμογής με γωνία προβολής Εικόνα 32. Αποτελέσματα στην ιεραρχία ( μέσω γωνίας προβολής ) Παρατήρηση : Για να αποφύγουμε τέτοια συμπεριφορά μπορούμε να φτιάξουμε το δικό μας λεξικό και να τροφοδοτήσουμε αυτό στον editor αντί για το ήδη υπάρχων. 5.3 Διαχείριση εντοπισμένων λέξεων Είναι σημαντικό να γνωρίζουμε κατά τη διάρκεια της εφαρμογής πόσες και ποιες λέξεις είναι εντοπισμένες. Κάτι τέτοιο μπορούμε να το υλοποιήσουμε με τη βοήθεια των κλάσεων StateManager και WordManager. Επειδή τα αποτελέσματα των εντοπισμών είναι συνεχώς μεταβλητά και αλλάζουν απο frame σε frame, θα εντάξουμε τον κώδικα στη συνάρτηση Update. Χ.Συρράκος 31

Εικόνα 33. Ενεργά εντοπισμένες λέξεις Το παραπάνω script μας γράφει σε καθε frame στην κονσόλα ποια αντικείμενα είναι εντοπισμένα. Αυτό δεν έχει κάποια πρακτική σημασία, αλλά μπορούμε στη θέση του Log να βάλουμε οποιαδήποτε λειτουργικότητα θέλουμε ως προς τις λέξεις αυτές ανάλογα με τις ανάγκες μας (θα το χρησιμοποιήσουμε για την αλληλεπίδραση με το χρήστη στη συνέχεια). Χ.Συρράκος 32

6.ΑΛΛΗΛΕΠΙΔΡΑΣΗ ΜΕ ΤΟ ΧΡΗΣΤΗ Η οποιαδήποτε πιθανή αλληλεπίδραση με το χρήστη προσδίδει σίγουρα ένα παραπάνω ενδιαφέρον σε μια εφαρμογή. Δώσαμε παραπάνω μερικές ιδέες ως προς τις πιθανές υλοποιήσεις που θα μπορούσαμε να κάνουμε στα πλαίσια της εφαρμογής που αναπτύσσουμε. Ενώ οι τεχνικές λεπτομέρειες αλλάζουν από interaction σε interaction, η γενική ιδέα από πίσω παραμένει η ίδια, το πως δηλαδή θα πραγματοποιηθεί. Έχουμε ήδη μια δυναμικά αναπτυσσόμενη σκηνή με λέξεις, οι οποίες έχουν ως παιδιά ένα επαυξημένο αντικείμενο η καθεμία. Αυτό που θέλουμε εμείς, λοιπόν, είναι να προσθέσουμε ως components στα επαυξημένα αντικείμενα κάποια behavioural scripts, στα οποία θα εντάσσουμε τις εκάστοτε τεχνικές λεπτομέρειες. Ας δούμε για παράδειγμα την υλοποίηση της δυνατότητας μεγέθυνσης και σμίκρινσης των αντικειμένων, της μετακίνησής τους, καθώς και της προσθήκης επιπλέον texture στα επαυξημένα αντικείμενα. 6.1 Scale script Για τη δημιουργία των παραπάνω αλληλεπιδράσεων θα χρησιμοποιήσουμε ως είσοδος απτο χρήστη το touch στην οθόνη του κινητού (μπορούν να υλοποιηθούν εύκολα και συναρτήσεις εντοπισμού του ποντικιού σε υπολογιστή για γρήγορες δοκιμές και testing ). Για τη μεγέθυνση και τη σμίκρυνση αντικειμένων θα χρειαστούμε είσοδο απο δύο δάχτυλα στην οθόνη. Δεν θα χρειαστούμε συντεταγμένες του touch στην οθόνη, αλλά μόνο μια συνάνρτηση που συνδέει την απόσταση μεταξύ των δαχτύλων που κάνουν το διαδεδομένο pinch zoom in και zoom out. Θα χρησιμοποιήσουμε τη βιβλιοθήκη του LeanTouch απο το Asset Store του Vuforia ( free ) για να έχουμε εύκολη πρόσβαση σε τέτοιου είδους συναρτήσεις μαθηματικού περιεχομένου. Εικόνα 34. Χρήση του Leantouch για pinch zoom Για τα απαιτούμενα δάχτυλα και τον υπολογισμό του scaling χρησιμοποιούμε,λοιπόν, μέσω του LeanΤouch τις παραπάνω συναρτήσεις. Στη συνέχεια τροποποιούμε ένα scaling script ως εξής Χ.Συρράκος 33

Εικόνα 35. Υλοποίηση scale script Και κάνουμε το κάνουμε attach στα αντικείμενα που δημιουργούμε δυναμικά ως components. Με τον τρόπο αυτό, κατά το τρέξιμο της εφαρμογής θα γίνονται scale όλα τα επαυξημένα αντικείμενα μετά από την κατάλληλη είσοδο χρήστη. 6.2 Move script Με παρόμοιο τρόπο εργαζόμαστε και για το script που θα μετακινεί τα επαυξημένα αντικείμενα σε δύο άξονες της οθόνης. Τώρα, σε αντίθεση με την περίπτωση του scaling, θα χρειαστούμε τις συντεταγμένες του σημείου στο οποίο ακουμπά ο χρήστης την οθόνη, ώστε κατά την μετακίνηση του δαχτύλου να ακολουθείται ο αντίστοιχος προσανατολισμός. Στην περίπτωση αυτή θα έχουμε ως απαραίτητη είσοδο ένα touch (RequiredFingerCount= 1 ) και θα πραγματοποιήσουμε τη μετακίνηση με την ScreenToWorldPoint : Εικόνα 36. Υλοποίηση move script όπου screendelta είναι οι συντεταγμένες των δαχτύλων ( σε x,y άξονες ). 6.3 Color Script Αυτό το script μπορεί να χρησιμοποιηθεί αντί για το Μove καθώς αναγνωρίζει swipe του χρήστη προς όλες τις κατευθύνσεις για αλλαγή τεσσάρων χρωμάτων. Σε περίπτωση που θέλουμε να χρησιμοποιήσουμε και τα δύο, θα πρέπει απλώς να υλοποιήσουμε ένα διαφορετικό τρόπο αλληλεπίδρασης με την οθόνη (π.χ. double tap). Βλέπουμε Χ.Συρράκος 34

παρακάτω αναλυτικά τη χρήση των touch_phase συναρτήσεων καθώς και τη δυνατότητα αλλαγής χρώματος και μέσω του unity editor ( είσοδος από πληκτρολόγιο ). Εικόνα 37. Υλοποίηση color script Όπου checkswipe είναι η συνάρτηση που υπολογίζει την πραγματοποίηση και τον υπολογισμό του swipe ( την βλέπουμε παρακάτω ) και η shader1 είναι μια μεταβλητή τύπου shader που ορίζουμε εμείς ανάλογα με τα αποτελέσματα που θέλουμε (π.χ. public shader1 = Shader.Find( Diffuse ); ) Χ.Συρράκος 35

Εικόνα 38. Υπολογισμοί για την ανάθεση χρωμάτων Τέλος οι VerticalMove και horizontalmove είναι συναρτήσεις υπολογισμού της κατεύθυνσης μέσω του Math namespace, όπως φαίνεται παρακάτω. Χ.Συρράκος 36

Εικόνα 39. Αναθέσεις χρωμάτων ανάλογα με τον προσανατολισμό οι OnSwipe_Up, OnSwipe_Down, OnSwipe_Left, OnSwipe_Right κάνουν assign κάποιο χρώμα της επιλογής μας ανάλογα με την κατεύθυνση της εισόδου του χρήστη.παρατήρηση : επειδή τα χρώματα είναι μονοδιάστατα, σε περίπτωση που θέλουμε να χρωματίσουμε μοντέλα θα ήταν προτιμότερο να αναθέτουμε textures αντί για colors.αυτό γίνεται με τη φόρτωση των textures που θέλουμε στο Unity και την αντιστοίχιση στα gameobjects που θέλουμε μέσω της Add_Component(). Χ.Συρράκος 37

7. ΕΞΑΤΟΜΙΚΕΥΜΕΝΗ ΑΛΛΗΛΕΠΙΔΡΑΣΗ Τοποθετώντας τα παραπάνω scripts στα gameobjects που θέλουμε να κληρονομήσουν αυτές τις ιδιότητες θα παρατηρήσουμε ότι κάθε κίνηση επιδρά πάνω σε όλα τα αντικείμενα ομαδικά. Στην περίπτωση πολλαπλών ίδιων μοντέλων όπως οι κύβοι που δημιουργήσαμε μια τέτοια λύση θα ήταν αποδεκτή, παρόλα αυτά εάν έχουμε διαφορετικά επαυξημένα μοντέλα (όπως θα δούμε στη συνέχεια) θα είναι προτιμότερο ο χρήστης να μπορεί να επιδράσει πάνω στο καθένα ξεχωριστά. Μια τέτοια λύση μπορεί να υλοποιηθεί με τη χρήση των Touch.Count() και Input.GetTouch() (ή input.mouseposition για δοκιμές στον unity editor) σε συνδυασμό με τα Raycast του Unity. Ουσιαστικά το Raycast είναι μια συνάρτηση που εντοπίζει σύγκρουση. Συγκεκριμένα, στέλνει μια ακτίνα (αόρατη) με σημείο εκκίνησης Α προς κατεύθυνση Β με μέγιστη διαδρομή Γ και εάν υπάρχει κάποιο αντικείμενο κατά τη διάρκεια αυτής της διαδρομής συγκρούεται με αυτό και μπορούμε κατ αυτόν τον τρόπο να αναφερθούμε και να τροποποιήσουμε το αντικείμενο σύγκρουσης (τα Α,Β,Γ τα ορίζει ο χρήστης ). Για να εντοπιστεί αυτή η σύγκρουση πρέπει το αντικείμενο να έχει ως component έναν Collider, οπότε στη δυναμική δημιουργία των κύβων θα προσθέσουμε και το εξής : Εικόνα 40. box Collider component Οπότε σε περίπτωση που θέλουμε κάθε αντικείμενο να κινείται ξεχωριστά μπορούμε να ελέγχουμε τις συγκρούσεις με τα επαυξημένα μοντέλα με την Physics.Raycast(). 7.1 Εισαγωγή νέων μοντέλων Για να έχει παραπάνω νόημα η εξατομικευμένη αλληλεπίδραση, καλό θα ήταν πολλά από τα επαυξημένα αντικείμενα που προβάλλονται να είναι διαφορετικά μεταξύ τους. Μπορούμε, λοιπόν, μετά από επιτυχή αναγνώριση ενός πεπερασμένου συνόλου λέξεων να επαυξάνουμε το περιβάλλον με μοντέλα που έχουν άμεση σχέση με τις λέξεις αυτές. Για παράδειγμα μετά τον εντοπισμό της λέξης House, να εμφανίζεται ένα 3-D μοντέλο σπιτιού ( αντίστοιχα για Car, Dog, Insect, Computer κλπ. ). Για την υλοποίηση του συγκεκριμένου feature αρκεί να τροποποιήσουμε τον trackableeventhandler ώστε μετά από κάθε Tracking_Found να δημιουργεί ένα επαυξημένο αντικείμενο ανάλογα με το TrackableName. Το επαυξημένο αυτό μοντέλο πρέπει να είναι τύπου.fbx για να είναι συμβατό με το unity. Σε περίπτωση που είναι άλλου τύπου ( έχει δημιουργηθεί είτε σε 3Ds-max είτε σε Blender είτε σε άλλο λογισμικό ) μπορεί να μετατραπεί σε fbx με τον δωρεάν converter του AutoDesk. Στον trackableeventhandler ήδη δημιουργήσαμε τους κύβους μετά από κάθε εντοπισμό οπότε το μόνο που μένει να κάνουμε είναι η εισαγωγή ελέγχου λέξης και αντιστοίχησης με το fbx μοντέλο που θέλουμε. Για παράδειγμα : Εικόνα 41. Εισαγωγή fbx μοντέλων Χ.Συρράκος 38

Προσοχή χρειάζεται στην αντιστοίχιση της λέξης με αυτήν που αναμένουμε να ψάξουμε. Εάν είχαμε για παράδειγμα TrackableName = insect αντι για Insect δεν θα υπήρχε αντιστοίχιση, καθώς ανεξαρτήτως το πως είναι γραμμένη η λέξη στο κείμενο που αναγνωρίζεται ( κεφαλαία / πεζά ή συνδυασμός αυτών ), ο text tracker αναγνωρίζει και περνάει τη λέξη με το πρώτο γράμμα κεφαλαίο και τα υπόλοιπα πεζά. Ομοίως μπορούμε να περάσουμε όσα fbx μοντέλα θέλουμε, αρκεί να προσέξουμε σε ορισμένα μπορεί να χρειάζονται παραλλαγές στα behavioural scripts που κάνουμε attach. Σε ένα αυτοκίνητο θα ταίριαζε για παράδειγμα ένα rotate script που το γυρνάει γύρω από τον άξονα Χ με μια αργή σχετικά ταχύτητα, ενώ σε ένα 3D text template όχι. Επίσης εάν τα μοντέλα έχουν by default μικρό σχετικά collider box size(μπορούμε να το δούμε μέσω του inspector) θα πρέπει να το μεγαλώσουμε εμείς μετά τη δημιουργία των μοντέλων και κάποιου collider, διότι σε διαφορετική περίπτωση θα δυσκολευόμαστε αρκετά στο ray collision με το αντικείμενο μέσω της επαφής με την οθόνη. Μια σχετικά καλή ενδεικτική τιμή ενός box collider που έχει δοκιμαστεί σε συσκευή android Xperia Z3,4 είναι η Vector3(2.5, 2.5, 2.5 ). 7.2 Επιπλέον δυνατότητες αλληλεπίδρασης Υπάρχουν αμέτρητες δυνατότητες αλληλεπίδρασης με το χρήστη σε μια εφαρμογή. Σκοπός του developer είναι να υλοποιήσει εκείνες που ταιριάζουν καλύτερα στην εκάστοτε εφαρμογή, είναι εύκολες και κατανοητές στη χρήση και προσδίδουν θετικά στοιχεία στην εμπειρία χρήστη. Με τα παραπάνω παραδείγματα καλύψαμε τις δυνατότητες επεξεργασίας εισόδου από το χρήστη, είτε από ποντίκι/πληκτρολόγιο, είτε από οθόνη αφής, οπότε βάσει αυτών μπορεί να υλοποιηθεί οποιοδήοποτε feauture μπορούμε να σκεφτούμε. Για παράδειγμα : Swap models : Δημιουργούμε κατά την εκκίνηση της εφαρμογής έναν αριθμό μοντέλων και τα κάνουμε όλα setactive(false) εκτός από ένα. Σε κάθε Swipe του χρήστη ( είδαμε πως γίνεται το catch του swipe ) απενεργοποιούμε το ενεργό και ενεργοποιούμε το επόμενο σε σειρά. (π.χ. με χρήση λίστας) Destroy Object on touch : Εάν εντοπιστεί collision ( με τη χρήση raycast) με ένα gameobject A, τότε το καταστρέφουμε (Destroy(mygameobject) ). Για να γίνει περισσότερο εντυπωσιακή αυτή η αλληλεπίδραση μπορούμε να προσθέσουμε Particles στο σημείο του collision για να προσεγγίσουμε τα εφέ μιας έκρηξης για παράδειγμα. Apply Texture to model : Δημιουργώντας μια λίστα με κάποια textures μπορούμε σε κάθε collision με gameobject ( όπως με το destroy) να πραγματοποιούμε εναλλαγή στο texture του μοντέλου που θέλουμε ανάλογα με την προτίμησή μας. Rotate model : Ομοίως με τη χρήση collision και swipe detection, κάνουμε transform.rotate το μοντέλο σύγκρουσης ανάλογα με τον προσανατολισμό του swipe. Επιλέγουμε, λοιπόν, τις αλληλεπιδράσεις που πιστεύουμε ότι ταιριάζουν καλύτερα στην εφαρμογή μας και δοκιμάζουμε τα αποτελέσματα. Χ.Συρράκος 39

8.ΤΕΛΙΚΗ ΕΦΑΡΜΟΓΗ Για το συγκεκριμένο παράδειγμα, επιλέξαμε να χρησιμοποιήσουμε τα script των zoom in/out, change texture και move, καθώς αυτά δίνουν αρκετές δυνατότητες αλληλεπίδρασης του χρήστη με τα εμφανιζόμενα μοντέλα. Μερικές ενδεικτικές φωτογραφίες της τελικής, δυναμικής εφαρμογής με ενταγμένα τα user-interaction feautures που επιλέξαμε είναι οι παρακάτω : Εικόνα 42. Αυτοκίνητα και κύβοι, χωρίς διεπαφή Εικόνα 43. Zoom in σε αυτοκίνητα και μετακίνηση κύβων εκτός frame Χ.Συρράκος 40

Εικόνα 44. Zoom in σε κύβους και ανάθεση texture Εικόνα 45. Zoom in και ανάθεση texture σε λουλούδι Χ.Συρράκος 41

Εικόνα 46. Αναγνώριση μεγάλου κειμένου Εικόνα 47. Το ίδιο κείμενο όπως παραπάνω, zoom in στο σπίτι Χ.Συρράκος 42

Εικόνα 48. Ανάθεση διαφορετικών textures σε διαφορετικούς κύβους Χ.Συρράκος 43