Skip to content

Latest commit

 

History

History
112 lines (65 loc) · 15.2 KB

File metadata and controls

112 lines (65 loc) · 15.2 KB

Εισαγωγή στην Υπολογιστική Όραση

Η Υπολογιστική Όραση είναι ένας τομέας που στοχεύει να επιτρέψει στους υπολογιστές να αποκτήσουν υψηλού επιπέδου κατανόηση ψηφιακών εικόνων. Αυτή είναι μια αρκετά ευρεία έννοια, καθώς η κατανόηση μπορεί να σημαίνει πολλά διαφορετικά πράγματα, όπως την εύρεση ενός αντικειμένου σε μια εικόνα (ανίχνευση αντικειμένου), την κατανόηση του τι συμβαίνει (ανίχνευση γεγονότων), την περιγραφή μιας εικόνας με κείμενο ή την ανακατασκευή μιας σκηνής σε 3D. Υπάρχουν επίσης ειδικές εργασίες που σχετίζονται με ανθρώπινες εικόνες: εκτίμηση ηλικίας και συναισθημάτων, ανίχνευση και αναγνώριση προσώπου, και εκτίμηση στάσης σε 3D, για να αναφέρουμε μερικές.

Μία από τις πιο απλές εργασίες της υπολογιστικής όρασης είναι η ταξινόμηση εικόνων.

Η υπολογιστική όραση συχνά θεωρείται κλάδος της Τεχνητής Νοημοσύνης. Σήμερα, οι περισσότερες εργασίες υπολογιστικής όρασης λύνονται χρησιμοποιώντας νευρωνικά δίκτυα. Θα μάθουμε περισσότερα για τον ειδικό τύπο νευρωνικών δικτύων που χρησιμοποιούνται στην υπολογιστική όραση, συνελικτικά νευρωνικά δίκτυα, σε αυτή την ενότητα.

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

Υπάρχουν αρκετές βιβλιοθήκες Python διαθέσιμες για επεξεργασία εικόνων:

  • imageio μπορεί να χρησιμοποιηθεί για ανάγνωση/εγγραφή διαφορετικών μορφών εικόνας. Υποστηρίζει επίσης το ffmpeg, ένα χρήσιμο εργαλείο για τη μετατροπή καρέ βίντεο σε εικόνες.
  • Pillow (γνωστό και ως PIL) είναι λίγο πιο ισχυρό και υποστηρίζει επίσης κάποιες επεξεργασίες εικόνας όπως μορφοποίηση, προσαρμογές παλέτας και άλλα.
  • OpenCV είναι μια ισχυρή βιβλιοθήκη επεξεργασίας εικόνας γραμμένη σε C++, η οποία έχει γίνει το de facto πρότυπο για επεξεργασία εικόνας. Διαθέτει μια βολική διεπαφή Python.
  • dlib είναι μια βιβλιοθήκη C++ που υλοποιεί πολλούς αλγορίθμους μηχανικής μάθησης, συμπεριλαμβανομένων κάποιων αλγορίθμων υπολογιστικής όρασης. Διαθέτει επίσης διεπαφή 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 για περαιτέρω ταξινόμηση από ένα νευρωνικό δίκτυο.
Εικόνα Braille Προεπεξεργασμένη Εικόνα Braille Σύμβολα Braille

Εικόνα από OpenCV.ipynb

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

Εικόνα καρέ βίντεο και διαφορές καρέ

Εικόνα από OpenCV.ipynb

  • Ανίχνευση κίνησης χρησιμοποιώντας Οπτική Ροή. Η οπτική ροή μας επιτρέπει να κατανοήσουμε πώς κινούνται μεμονωμένα pixels στα καρέ βίντεο. Υπάρχουν δύο τύποι οπτικής ροής:

    • Πυκνή Οπτική Ροή υπολογίζει το πεδίο διανυσμάτων που δείχνει για κάθε pixel πού κινείται
    • Αραιή Οπτική Ροή βασίζεται στη λήψη κάποιων χαρακτηριστικών στην εικόνα (π.χ. άκρες) και στην κατασκευή της τροχιάς τους από καρέ σε καρέ.

Εικόνα Οπτικής Ροής

Εικόνα από OpenCV.ipynb

✍️ Παράδειγμα Σημειωματάρια: OpenCV δοκιμάστε το OpenCV σε δράση

Ας κάνουμε μερικά πειράματα με το OpenCV εξερευνώντας το OpenCV Notebook

Συμπέρασμα

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

🚀 Πρόκληση

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

Ανασκόπηση & Αυτομελέτη

Διαβάστε περισσότερα για την οπτική ροή σε αυτό το εξαιρετικό σεμινάριο.

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

Καρέ Κίνησης Παλάμης