|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OpenCV.ipynb | ||
| README.md | ||
README.md
Εισαγωγή στην Υπολογιστική Όραση
Η Υπολογιστική Όραση είναι ένας κλάδος που στοχεύει να επιτρέψει στους υπολογιστές να αποκτήσουν υψηλού επιπέδου κατανόηση ψηφιακών εικόνων. Αυτή είναι μια αρκετά ευρεία έννοια, καθώς η κατανόηση μπορεί να σημαίνει πολλά πράγματα, όπως τον εντοπισμό ενός αντικειμένου σε μια εικόνα (ανίχνευση αντικειμένων), την κατανόηση του τι συμβαίνει (ανίχνευση γεγονότων), την περιγραφή μιας εικόνας με κείμενο ή την ανακατασκευή μιας σκηνής σε 3D. Υπάρχουν επίσης ειδικές εργασίες που σχετίζονται με ανθρώπινες εικόνες: εκτίμηση ηλικίας και συναισθημάτων, ανίχνευση και αναγνώριση προσώπων, και εκτίμηση στάσης σε 3D, για να αναφέρουμε μερικές.
Κουίζ πριν τη διάλεξη
Μία από τις πιο απλές εργασίες της υπολογιστικής όρασης είναι η ταξινόμηση εικόνων.
Η υπολογιστική όραση συχνά θεωρείται κλάδος της Τεχνητής Νοημοσύνης. Σήμερα, οι περισσότερες εργασίες υπολογιστικής όρασης λύνονται χρησιμοποιώντας νευρωνικά δίκτυα. Θα μάθουμε περισσότερα για τον ειδικό τύπο νευρωνικών δικτύων που χρησιμοποιούνται στην υπολογιστική όραση, τα συνελικτικά νευρωνικά δίκτυα, σε αυτή την ενότητα.
Ωστόσο, πριν περάσετε την εικόνα σε ένα νευρωνικό δίκτυο, σε πολλές περιπτώσεις έχει νόημα να χρησιμοποιήσετε κάποιες αλγοριθμικές τεχνικές για να βελτιώσετε την εικόνα.
Υπάρχουν αρκετές βιβλιοθήκες Python διαθέσιμες για επεξεργασία εικόνας:
- imageio μπορεί να χρησιμοποιηθεί για ανάγνωση/εγγραφή διαφορετικών μορφών εικόνας. Υποστηρίζει επίσης το ffmpeg, ένα χρήσιμο εργαλείο για τη μετατροπή καρέ βίντεο σε εικόνες.
- Pillow (γνωστό και ως PIL) είναι λίγο πιο ισχυρό και υποστηρίζει επίσης κάποιους χειρισμούς εικόνας, όπως μορφοποίηση, ρυθμίσεις παλέτας και άλλα.
- OpenCV είναι μια ισχυρή βιβλιοθήκη επεξεργασίας εικόνας γραμμένη σε C++, η οποία έχει γίνει το de facto πρότυπο για την επεξεργασία εικόνας. Διαθέτει ένα βολικό interface για Python.
- dlib είναι μια βιβλιοθήκη C++ που υλοποιεί πολλούς αλγορίθμους μηχανικής μάθησης, συμπεριλαμβανομένων κάποιων αλγορίθμων υπολογιστικής όρασης. Διαθέτει επίσης interface για Python και μπορεί να χρησιμοποιηθεί για απαιτητικές εργασίες όπως ανίχνευση προσώπων και χαρακτηριστικών προσώπου.
OpenCV
Το OpenCV θεωρείται το de facto πρότυπο για την επεξεργασία εικόνας. Περιέχει πολλούς χρήσιμους αλγορίθμους, υλοποιημένους σε C++. Μπορείτε να καλέσετε το OpenCV και από Python.
Ένα καλό σημείο για να μάθετε το OpenCV είναι αυτό το μάθημα Learn OpenCV. Στο πρόγραμμά μας, ο στόχος μας δεν είναι να μάθουμε το OpenCV, αλλά να σας δείξουμε μερικά παραδείγματα για το πότε μπορεί να χρησιμοποιηθεί και πώς.
Φόρτωση Εικόνων
Οι εικόνες στην Python μπορούν να αναπαρασταθούν εύκολα με πίνακες NumPy. Για παράδειγμα, οι ασπρόμαυρες εικόνες με μέγεθος 320x200 pixels αποθηκεύονται σε έναν πίνακα 200x320, ενώ οι έγχρωμες εικόνες των ίδιων διαστάσεων έχουν σχήμα 200x320x3 (για τα 3 κανάλια χρώματος). Για να φορτώσετε μια εικόνα, μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
Παραδοσιακά, το OpenCV χρησιμοποιεί την κωδικοποίηση BGR (Μπλε-Πράσινο-Κόκκινο) για έγχρωμες εικόνες, ενώ τα υπόλοιπα εργαλεία της Python χρησιμοποιούν την πιο παραδοσιακή RGB (Κόκκινο-Πράσινο-Μπλε). Για να εμφανιστεί σωστά η εικόνα, πρέπει να τη μετατρέψετε στον χρωματικό χώρο RGB, είτε αλλάζοντας τις διαστάσεις στον πίνακα NumPy είτε καλώντας μια συνάρτηση του OpenCV:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Η ίδια συνάρτηση cvtColor μπορεί να χρησιμοποιηθεί για να εκτελέσει άλλες μετατροπές χρωματικού χώρου, όπως η μετατροπή μιας εικόνας σε ασπρόμαυρη ή στον χρωματικό χώρο HSV (Απόχρωση-Κορεσμός-Φωτεινότητα).
Μπορείτε επίσης να χρησιμοποιήσετε το OpenCV για να φορτώσετε βίντεο καρέ-καρέ - ένα παράδειγμα δίνεται στην άσκηση OpenCV Notebook.
Επεξεργασία Εικόνων
Πριν δώσετε μια εικόνα σε ένα νευρωνικό δίκτυο, μπορεί να θέλετε να εφαρμόσετε κάποια βήματα προεπεξεργασίας. Το OpenCV μπορεί να κάνει πολλά πράγματα, όπως:
- Αλλαγή μεγέθους της εικόνας χρησιμοποιώντας
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Θόλωση της εικόνας χρησιμοποιώντας
im = cv2.medianBlur(im,3)ήim = cv2.GaussianBlur(im, (3,3), 0) - Αλλαγή της φωτεινότητας και της αντίθεσης της εικόνας μέσω χειρισμών πινάκων NumPy, όπως περιγράφεται σε αυτή τη σημείωση του Stackoverflow.
- Χρήση κατωφλίωσης καλώντας τις συναρτήσεις
cv2.threshold/cv2.adaptiveThreshold, που συχνά προτιμάται από την προσαρμογή φωτεινότητας ή αντίθεσης. - Εφαρμογή διαφορετικών μετασχηματισμών στην εικόνα:
- Μετασχηματισμοί Αφίνειας μπορούν να είναι χρήσιμοι αν χρειάζεται να συνδυάσετε περιστροφή, αλλαγή μεγέθους και παραμόρφωση στην εικόνα και γνωρίζετε τη θέση προέλευσης και προορισμού τριών σημείων στην εικόνα. Οι μετασχηματισμοί αφίνειας διατηρούν τις παράλληλες γραμμές παράλληλες.
- Μετασχηματισμοί Προοπτικής μπορούν να είναι χρήσιμοι όταν γνωρίζετε τις θέσεις προέλευσης και προορισμού τεσσάρων σημείων στην εικόνα. Για παράδειγμα, αν τραβήξετε μια φωτογραφία ενός ορθογώνιου εγγράφου μέσω κάμερας smartphone από κάποια γωνία και θέλετε να δημιουργήσετε μια ορθογώνια εικόνα του ίδιου του εγγράφου.
- Κατανόηση της κίνησης μέσα στην εικόνα χρησιμοποιώντας οπτική ροή.
Παραδείγματα χρήσης της Υπολογιστικής Όρασης
Στο OpenCV Notebook, δίνουμε μερικά παραδείγματα για το πότε μπορεί να χρησιμοποιηθεί η υπολογιστική όραση για την εκτέλεση συγκεκριμένων εργασιών:
- Προεπεξεργασία μιας φωτογραφίας ενός βιβλίου Braille. Εστιάζουμε στο πώς μπορούμε να χρησιμοποιήσουμε κατωφλίωση, ανίχνευση χαρακτηριστικών, μετασχηματισμό προοπτικής και χειρισμούς NumPy για να διαχωρίσουμε μεμονωμένα σύμβολα Braille για περαιτέρω ταξινόμηση από ένα νευρωνικό δίκτυο.
![]() |
![]() |
![]() |
|---|
Εικόνα από OpenCV.ipynb
- Ανίχνευση κίνησης σε βίντεο χρησιμοποιώντας διαφορά καρέ. Αν η κάμερα είναι σταθερή, τότε τα καρέ από τη ροή της κάμερας θα πρέπει να είναι αρκετά παρόμοια μεταξύ τους. Επειδή τα καρέ αναπαρίστανται ως πίνακες, απλώς αφαιρώντας αυτούς τους πίνακες για δύο διαδοχικά καρέ, θα πάρουμε τη διαφορά των pixels, η οποία θα είναι χαμηλή για στατικά καρέ και θα αυξάνεται όταν υπάρχει σημαντική κίνηση στην εικόνα.
Εικόνα από OpenCV.ipynb
-
Ανίχνευση κίνησης χρησιμοποιώντας Οπτική Ροή. Η οπτική ροή μας επιτρέπει να κατανοήσουμε πώς κινούνται μεμονωμένα pixels στα καρέ βίντεο. Υπάρχουν δύο τύποι οπτικής ροής:
- Πυκνή Οπτική Ροή υπολογίζει το πεδίο διανυσμάτων που δείχνει για κάθε pixel πού κινείται.
- Αραιή Οπτική Ροή βασίζεται στη λήψη κάποιων χαρακτηριστικών στην εικόνα (π.χ. άκρες) και στη δημιουργία της τροχιάς τους από καρέ σε καρέ.
Εικόνα από OpenCV.ipynb
✍️ Παράδειγμα Σημειωματάρια: OpenCV δοκιμάστε το OpenCV σε δράση
Ας κάνουμε μερικά πειράματα με το OpenCV εξερευνώντας το OpenCV Notebook.
Συμπέρασμα
Μερικές φορές, σχετικά σύνθετες εργασίες όπως η ανίχνευση κίνησης ή η ανίχνευση άκρων δακτύλων μπορούν να λυθούν αποκλειστικά με την υπολογιστική όραση. Επομένως, είναι πολύ χρήσιμο να γνωρίζετε τις βασικές τεχνικές της υπολογιστικής όρασης και τι μπορούν να κάνουν βιβλιοθήκες όπως το OpenCV.
🚀 Πρόκληση
Παρακολουθήστε αυτό το βίντεο από το AI Show για να μάθετε για το έργο Cortic Tigers και πώς δημιούργησαν μια λύση βασισμένη σε μπλοκ για να εκδημοκρατίσουν τις εργασίες υπολογιστικής όρασης μέσω ενός ρομπότ. Κάντε έρευνα για άλλα παρόμοια έργα που βοηθούν νέους μαθητές να εισέλθουν στον τομέα.
Κουίζ μετά τη διάλεξη
Ανασκόπηση & Αυτομελέτη
Διαβάστε περισσότερα για την οπτική ροή σε αυτό το εξαιρετικό σεμινάριο.
Εργασία
Σε αυτό το εργαστήριο, θα τραβήξετε ένα βίντεο με απλές χειρονομίες και ο στόχος σας είναι να εξάγετε κινήσεις πάνω/κάτω/αριστερά/δεξιά χρησιμοποιώντας οπτική ροή.
Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.




