Οπτική αναγνώριση και παρακολούθηση αντικείμενων σε πραγματικό χρόνο
Οι τεχνολογίες οπτικής αναγνώρισης και παρακολούθησης αντικειμένων σε πραγματικό χρόνο μπαίνουν όλο και πιο έντονα στην καθημερινότητα μας. To βλέπουμε στα πάρκινγκ σούπερ μάρκετ και εμπορικών, στα διόδια σε εφαρμογές ακόμη και παιχνίδια. Στη ρομποτική μάλιστα η “όραση” είναι από τα πρώτα πράγματα που σκέφτεται κάποιος να ενσωματώσει ή που θα ήθελε να ενσωματώσει στο δημιούργημα του.
.Εδώ θα δούμε μια υλοποίηση με χαμηλού κόστους υλικά της phidget. Όλα τα προϊόντα της phidget θα τα βρείτε στην Ελλάδα από την futurehouse.gr.
Υλικά
Τα υλικά που χρησιμοποιήθηκαν για την κατασκευή είναι:
1. 1χ Web Camera (Logitech C500)
Κατασκευαστής: Logitech
Ανάλυση: 1.3 MP
Microphone: Ναι
Ανάλυση φτογραφίας: 5.0 MP
FPS: 30 FPS
2. 1χ PhidgetAdvancedServo 8-Motor
Το PhidgetAdvancedServo 8-Motor σας επιτρέπει να ελέγχετε τη θέση, ταχύτητα και επιτάχυνση μέχρι και 8 RC σέρβο κινητήρων. Απαιτεί ένα 6-15VDC εξωτερικό τροφοδοτικό. Η μεταγωγική(switching) τροφοδοσία του, επιτρέπει στο AdvancedServo την αποτελεσματική λειτουργία από 6 έως 15 VDC και μπορεί να χρησιμοποιηθεί με ένα ευρύ φάσμα μπαταριών.
Το 1061 διαθέτει υψηλή ανάλυση 125 βημάτων ανά μοίρα. Επίσης μετρά την κατανάλωση ενέργειας σε κάθε σέρβο και η μεταγωγική τροφοδοσία προστατεύει τα μοτέρ από υπέρταση. Μπορεί να τροφοδοτήσει servo κινητήρες μέχρι 1.5amps.
Το AdvancedServo συνδέεται απευθείας στη θύρα USB του υπολογιστή.
3. 2χ Hitec HS-485HB Deluxe Servo
Characteristic | Value |
---|---|
Operating Voltage | 4.8V - 6.0V |
Bearing Type | Top Ball Bearing |
Rotation | 180° |
Maximum Speed | 272°/sec |
Running Current | 1066 - 180mA at no load |
1061 - 150mA at no load | |
Stall Current | 1066 - 450mA |
1061 - 750mA | |
Stall Torque | 66.6 oz-in |
4.8 kg-cm | |
Size | 1.57" x 0.78" x 1.49" |
39.8 x 19.8 x 38 mm | |
Weight | 1.59oz |
45g |
Σαν κιτ μπορείτε να το βρείτε εδώ:
PhidgetAdvancedServo Kit 4-Motor
Λογισμικό
Για τον προγραμματισμό και την ανάπτυξη του αλγόριθμου παρακολούθησης χρησιμοποιήθηκε το LABVIEW σε συνδυασμό με το NI Vision Development Module. Καθώς και οι βιβλιοθήκες (API's) που παρέχονται δωρεάν μαζί με τα υλικά.
Υλοποίηση
Η υλοποίηση έγινε ως εξής:
Κατασκευάστηκαν από λεπτή λαμαρίνα 2 τμήματα που σχηματίζουν το πλαίσιο της κατασκευής. Το πρώτο τμήμα στο οποίο και προσαρμόστηκε ο κινητήρας για την οριζόντια κίνηση (ο κινητήρας στα δεξιά) είναι το παρακάτω. Επίσης πάνω στο πλαίσιο αυτό ενσωματώθηκε ο δεύτερος κινητήρας(αριστερά) για την κίνηση στον κάθετο άξονα.
και πάνω στον δεύτερο κινητήρα προσαρμόστηκε το δεύτερο τμήμα στο οποίο βρίσκεται και η κάμερα.
Χωρίς τον κινητήρα για την οριζόντια κίνηση:
Ολοκληρη η κατασκευη:
Οι δυο αυτοί άξονες περιστροφής μας επιτρέπουν να κινηθούμε (και με βάσει τα χαρακτηριστικά των κινητήρων +/-180 μοίρες στο κάθε επίπεδο.
Προγραμματισμός
Στη συνέχεια περνάμε στο κομμάτι του προγραμματισμού.
Στο Site της futurehouse.gr (και στης phidget.com φυσικά) θα βρείτε έτοιμες βιβλιοθήκες και παραδείγματα για να τα χρησιμοποιήσετε σχεδόν σε ότι γλώσσα και αναπτυξιακό θέλετε. Πχ C# (Windows), C/C++, Cocoa, Delphi, Java, LabVIEW, Max/MSP (Mac OSX), Max/MSP (Windows), Python, Visual Basic .NET, Visual Basic 6.0.
Δεδομένου του πολύ εύκολου στη χρήση API της phidget και στο πολύ δυνατό αναπτυξιακό της National Instruments. Μένει μόνο ο τρόπος με το οποίο θα πετύχουμε ομαλή κίνηση και σωστή αναγνώριση της εικόνας.
Η αναγνώριση γίνεται με βάση το χρώμα του αντικειμένου. Αυτό επιτυγχάνεται με την εφαρμογή των παρακάτω φίλτρων:
Binary conversion (color threshold): Η εικόνα μετατρέπεται σε Binary με βάση ένα όριο στην απόχρωση έτσι χοντρικά μπορούμε να πούμε ότι όποιο pixel είναι στα επιθυμητα ορια κάντο “1” αλλιώς “0”.
Η αναλυση των χρωματων γινεται με βαση το HSL (Hue Saturation Luminance) και οχι RGB.
Η διαφορά στην απόδοση (μείωση θορύβου) είναι πολύ μεγάλη!!
FT: Εφαρμογή φίλτρου Fourier. Το φίλτρο Fourier έχει χρησιμοποιηθεί με τέτοιο τρόπο ώστε τα σημεία που υπάρχει υψηλή συγκέντρωση “1” άσσων να εμφανίζονται σαν μια μονοκόμματη περιοχή ενώ μεμονωμένα Pixel ή πολύ μικρές ομάδες “μπλέ” pixel να αγνοούνται.
Centroid το φίλτρο αυτό με βάση όλα τα σημεία της εικόνας μας δίνει το “κέντρο βάρους” της εικόνας αν δηλαδή υπάρχει μόνο μια περιοχή “άσσων” μας δίνει το κέντρο της. Αν υπάρξουν δυο ολόιδιες περιοχές το κέντρο θα βρίσκεται ακριβώς ανάμεσα τους κτλ.
Περνώντας λοιπόν από τα παραπάνω φίλτρα κάθε ένα frame ξεχωριστά έχουμε μια εκτίμηση του “κέντρου βάρους” του αντικειμένου προς αναγνώριση. Λόγο όμως του ότι η αναγνώριση με βάση το χρώμα περιορίζεται από τις συνθήκες φωτισμού τη γωνία λήψης κτλ τα αποτελέσματα μπορεί να διαφέρουν πολύ κατά την χρήση σε κάθε frame. Έτσι το “κέντρο βάρους” θα αλλάζει συνεχώς και γρήγορα θέση ενώ μπορεί σε κάποια frame να μην αναγνωριστεί καν το αντικείμενο για το λόγο αυτό χρησιμοποιήθηκε ένα φίλτρο kalman.
Το φίλτρο kalman λαμβάνει υπ’ όψιν προηγούμενες μετρήσεις καθώς και φυσικά μεγέθη όπως η ταχύτητα “προβλέποντας” έτσι την επιθυμητή τιμή σε περιβάλλον που υπάρχει θόρυβος και λανθασμένες μετρήσεις.
Περισσότερα για το φίλτρο kalman εδώ. (link)
Αν θέλετε και εσείς να δώσετε «όραση» στην επόμενη κατασκευή σας, η πλατφόρμα του LABVIEW είναι ότι πιο εύκολο για να δοκιμάσετε. Αν από την άλλη είστε λάτρης του open source ή θέλετε κάτι που να μην διέπεται από άδειες λογισμικού τότε πρέπει να δείτε το openCV (Open Source Computer Vision). Είναι λίγο πιο δύσκολο για να ξεκινήσετε αλλά αφού μάθετε να χειρίζεστε το API του, ανοίγει μπροστά σας ένας τεράστιος δρόμος νέων δυνατοτήτων και μάλιστα με BSD license (δωρεάν για ακαδημαϊκή αλλά και εμπορική χρήση.)
Θα ακολουθήσει επόμενο άρθρο με εφαρμογή της "όρασης" σε ένα αυτόνομο ρομποτικό όχημα για το Athens Digital Week 2010 όπου θα φαίνεται η πολύ καλή του απόκριση όταν ακολουθεί ένα τηλεκατευθυνόμενο ελικοπτεράκι μοντελισμού.