Vision — είναι ένα πλαίσιο υπολογιστικής όρασης από την Apple, που παρουσιάστηκε για πρώτη φορά στο iOS 11 το 2017. Το Vision παρέχει έτοιμους αλγόριθμους για ανίχνευση προσώπων, αναγνώριση κειμένου (OCR), ανίχνευση barcode, παρακολούθηση αντικειμένων, ταξινόμηση εικόνων και ανάλυση περιγραμμάτων — όλα εκτελούνται στη συσκευή χρησιμοποιώντας το Neural Engine. Σύμφωνα με το Apple WWDC 2023, το Vision χρησιμοποιείται στην τυπική εφαρμογή “Φωτογραφίες” για αναγνώριση προσώπων και στην “Κάμερα” για ανίχνευση κειμένου σε πραγματικό χρόνο σε iPhone και iPad.
Κύρια σημεία
Vision — είναι ένα υψηλού επιπέδου πλαίσιο υπολογιστικής όρασης που αφαιρεί την πολυπλοκότητα των αλγορίθμων μηχανικής μάθησης πίσω από ένα απλό API αιτημάτων (VNRequest). Ο προγραμματιστής δεν χρειάζεται να γνωρίζει συνελικτικά νευρωνικά δίκτυα — αρκεί να δημιουργήσει ένα αίτημα του κατάλληλου τύπου, να στείλει την εικόνα και να λάβει το αποτέλεσμα.
Η αρχιτεκτονική του Vision βασίζεται στην αρχή Request → Handler → Result: το VNImageRequestHandler λαμβάνει την εικόνα, εκτελεί το VNRequest και επιστρέφει μια συστοιχία VNObservation με αποτελέσματα. Αυτό επιτρέπει τον συνδυασμό πολλαπλών αιτημάτων σε μία εικόνα — για παράδειγμα, ταυτόχρονη ανίχνευση προσώπων και κειμένου σε μια φωτογραφία.
Το Vision υποστηρίζει iOS 11+ και macOS 10.13+. Για επιτάχυνση υλικού μέσω Neural Engine απαιτείται τσιπ A12 Bionic ή νεότερο. Σε συσκευές με A17 Pro και σειρά M, το Vision επεξεργάζεται έως 60 καρέ ανά δευτερόλεπτο για ροή βίντεο.
Βασικό πλεονέκτημα του Vision — πλήρης εμπιστευτικότητα: όλοι οι υπολογισμοί εκτελούνται στη συσκευή, οι εικόνες δεν αποστέλλονται στον διακομιστή. Αυτό επιτρέπει τη χρήση του πλαισίου σε εφαρμογές που εργάζονται με ευαίσθητα δεδομένα, για παράδειγμα σε ιατρικές ή τραπεζικές εφαρμογές.
VNDetectFaceRectanglesRequest — το βασικό αίτημα του Vision για ανίχνευση προσώπων σε μια εικόνα. Επιστρέφει τις συντεταγμένες των ορθογωνίων που περιορίζουν κάθε πρόσωπο, χωρίς ταυτοποίηση συγκεκριμένου ατόμου.
Για πιο λεπτομερή ανάλυση χρησιμοποιήστε το VNDetectFaceLandmarksRequest, το οποίο καθορίζει τα βασικά σημεία του προσώπου: μάτια, φρύδια, μύτη, στόμα, περίγραμμα γνάθου. Αυτά τα δεδομένα χρησιμοποιούνται για εφαρμογή μασκών, κινούμενων emoji και φίλτρων σε πραγματικό χρόνο (όπως στο FaceTime και Snapchat).
import Vision
import UIKit
guard let image = UIImage(named: "photo") else { return }
let request = VNDetectFaceRectanglesRequest()
let handler = VNImageRequestHandler(cgImage: image.cgImage!, options: [:])
try handler.perform([request])
for observation in request.results ?? [] {
let bbox = observation.boundingBox
print("Face at x=\\(bbox.origin.x), y=\\(bbox.origin.y)")
}
VNFaceObservation περιέχει όχι μόνο το boundingBox, αλλά και το confidence (εμπιστοσύνη από 0 έως 1) και τα landmarks — μια συστοιχία σημείων προσώπου, εάν το αίτημα ήταν VNDetectFaceLandmarksRequest. Confidence κάτω από 0.5 συνήθως σημαίνει ψευδή ανίχνευση — τέτοια αποτελέσματα συνιστάται να απορρίπτονται.
Το Vision υποστηρίζει επίσης το VNDetectFaceCaptureQualityRequest, το οποίο αξιολογεί την ποιότητα της εικόνας προσώπου: φωτισμός, ευκρίνεια, γωνία περιστροφής. Αυτό είναι χρήσιμο για την επιλογή του καλύτερου καρέ κατά την εγγραφή χρήστη ή τη δημιουργία avatar.
VNRecognizeTextRequest — είναι η ενσωματωμένη μηχανή OCR της Apple, που παρουσιάστηκε στο iOS 13. Αναγνωρίζει εκτυπωμένο κείμενο σε εικόνες με υποστήριξη 13 γλωσσών: Αγγλικά, Ρωσικά, Κινέζικα, Ιαπωνικά, Κορεάτικα, Ιταλικά, Γερμανικά, Ισπανικά, Πορτογαλικά, Γαλλικά, Αραβικά, Βιετναμέζικα και Ταϊλανδικά.
VNRecognizeTextRequest υποστηρίζει δύο επίπεδα ακρίβειας: .fast (γρήγορο, για απλό κείμενο σε φόντο αντίθεσης) και .accurate (ακριβές, για σύνθετες σκηνές με διαφορετικές γραμματοσειρές και γωνίες). Το .fast λειτουργεί 3–5 φορές ταχύτερα, αλλά αποδίδει χειρότερα με χειρόγραφο κείμενο και μη τυπικές γραμματοσειρές.
import Vision
let textRequest = VNRecognizeTextRequest { request, _ in
guard let observations = request.results as? [VNRecognizedTextObservation]
else { return }
for observation in observations {
let topCandidate = observation.topCandidates(1).first
print(topCandidate?.string ?? "")
}
}
textRequest.recognitionLevel = .accurate
textRequest.usesLanguageCorrection = true
Η ιδιότητα usesLanguageCorrection ενεργοποιεί τη διόρθωση του αναγνωρισμένου κειμένου χρησιμοποιώντας ένα γλωσσικό μοντέλο. Αυτό αυξάνει την ακρίβεια για τα Αγγλικά κατά 10–15%, αλλά παρατείνει τον χρόνο επεξεργασίας. Για τα Ρωσικά, η διόρθωση είναι επίσης διαθέσιμη εάν έχει καθοριστεί η αντίστοιχη αναγνώριση.
Σύμφωνα με το Apple ML Research 2022, η ακρίβεια του VNRecognizeTextRequest σε επίπεδο .accurate είναι 96% για καθαρές φωτογραφίες εγγράφων στα Αγγλικά και περίπου 88% για τα Ρωσικά. Για κείμενο σε συσκευασίες, πινακίδες και οθόνες, η ακρίβεια μειώνεται στο 75–85%.
| Recognition Level | Ταχύτητα | Ακρίβεια (Αγγλικά) | Υποστήριξη Ρωσικών |
|---|---|---|---|
| .fast | 0.1–0.3 δευτ | ~85% | Ναι |
| .accurate | 0.3–1.0 δευτ | ~96% | Ναι |
VNDetectBarcodesRequest — το αίτημα του Vision για ανίχνευση και αποκωδικοποίηση barcode και QR κωδικών σε εικόνα. Όλες οι κύριες μορφές υποστηρίζονται: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec και QR.
Σε αντίθεση με το AVFoundation (AVCaptureMetadataOutput), το Vision λειτουργεί όχι μόνο με ροή βίντεο, αλλά και με στατικές εικόνες — αυτό επιτρέπει τη σάρωση κωδικών από ήδη τραβηγμένες φωτογραφίες ή στιγμιότυπα οθόνης. Το Vision καθορίζει επίσης το boundingBox του κωδικού με ακρίβεια pixel, το οποίο είναι βολικό για κινούμενα σχέδια πλαισίου γύρω από τον κωδικό που βρέθηκε.
import Vision
let barcodeRequest = VNDetectBarcodesRequest { request, _ in
guard let observations = request.results as? [VNBarcodeObservation]
else { return }
for observation in observations {
let payload = observation.payloadStringValue ?? ""
print("Barcode: \\(payload), Symbology: \\(observation.symbology.rawValue)"
}
}
VNBarcodeObservation περιέχει το payloadStringValue (αποκωδικοποιημένο περιεχόμενο), το symbology (τύπος κωδικού) και το confidence. Για κωδικούς QR, το payload μπορεί να είναι URL, κείμενο ή JSON. Για EAN/UPC επιστρέφεται ο αριθμητικός κωδικός προϊόντος, ο οποίος μπορεί να χρησιμοποιηθεί για αναζήτηση του είδους στη βάση δεδομένων.
Το Vision μπορεί να επεξεργαστεί πολλαπλά barcode σε μία εικόνα — η συστοιχία observations περιέχει ένα αντικείμενο για κάθε κωδικό που βρέθηκε. Αυτό είναι χρήσιμο για σάρωση πακέτων προϊόντων ή εγγράφων με πολλαπλά barcode.
VNDetectObjectAtPointRequest και VNSequenceRequestHandler — εργαλεία του Vision για παρακολούθηση αντικειμένων σε ροή βίντεο. Το πρώτο καθορίζει το αντικείμενο με βάση το σημείο αφής του χρήστη, το δεύτερο παρακολουθεί το αντικείμενο μεταξύ των καρέ βίντεο.
VNSequenceRequestHandler λαμβάνει μια ακολουθία εικόνων (καρέ βίντεο) και για κάθε καρέ επιστρέφει την ενημερωμένη θέση του παρακολουθούμενου αντικειμένου. Αυτό χρησιμοποιείται σε εφαρμογές επαυξημένης πραγματικότητας, επεξεργαστές βίντεο και συστήματα παρακολούθησης βίντεο.
import Vision
let trackingRequest = VNTrackObjectRequest(detectedObjectObservation: initialObservation)
let sequenceHandler = VNSequenceRequestHandler()
for frame in videoFrames {
try sequenceHandler.perform([trackingRequest],
on: frame.cgImage!)
let newBBox = trackingRequest.results?.first?.boundingBox
// Ενημέρωση θέσης αντικειμένου στην οθόνη
}
VNTrackObjectRequest χρησιμοποιεί αλγόριθμο παρακολούθησης βασισμένο σε οπτική ροή — δεν επανεκπαιδεύει τον ανιχνευτή σε κάθε καρέ, αλλά υπολογίζει τη μετατόπιση του αντικειμένου σε σχέση με την προηγούμενη θέση. Αυτό επιτρέπει τη λειτουργία σε πραγματικό χρόνο ακόμη και σε συσκευές χωρίς Neural Engine.
Περιορισμός: η παρακολούθηση μπορεί να χάσει το αντικείμενο σε γρήγορη κίνηση, κάλυψη ή ξαφνική αλλαγή φωτισμού. Η Apple συνιστά την επανεκκίνηση της ανίχνευσης (VNDetectObjectAtPointRequest) κάθε 10–15 καρέ για διόρθωση της παρακολούθησης.
VNClassifyImageRequest — είναι το ενσωματωμένο μοντέλο του Vision για ταξινόμηση εικόνων σε 1000 κατηγορίες (μοντέλο ResNet-50, εκπαιδευμένο στο ImageNet). Το αίτημα επιστρέφει μια συστοιχία VNClassificationObservation με το όνομα της κατηγορίας και την εμπιστοσύνη.
VNDetectContoursRequest εκτελεί ανάλυση περιγραμμάτων της εικόνας — εξάγει τα όρια των αντικειμένων, το οποίο είναι χρήσιμο για τμηματοποίηση, περιγράμματα και προεπεξεργασία πριν από την αναγνώριση. Το αίτημα επιστρέφει μια συστοιχία σημείων που περιγράφουν κάθε περίγραμμα στην εικόνα.
import Vision
// Ταξινόμηση εικόνας
let classificationRequest = VNClassifyImageRequest { request, _ in
guard let results = request.results as? [VNClassificationObservation]
else { return }
let topMatch = results.prefix(3).filter { $0.confidence > 0.3 }
for match in topMatch {
print("\\(match.identifier): \\(match.confidence)"
}
}
VNClassifyImageRequest λειτουργεί καλά για γενικές κατηγορίες (γάτα, σκύλος, αυτοκίνητο, φαγητό), αλλά δεν είναι κατάλληλο για συγκεκριμένα αντικείμενα — για αυτά χρειάζεται εκπαίδευση προσαρμοσμένου μοντέλου Core ML και χρήση VNCoreMLRequest. Το μοντέλο της Apple είναι βελτιστοποιημένο για κινητές συσκευές και καταλαμβάνει μόνο 5 MB.
VNDetectContoursRequest επιστρέφει τα περιγράμματα ως συστοιχία σημείων με ένδειξη του τύπου περιγράμματος (εξωτερικό, εσωτερικό, τρύπα). Αυτό το αίτημα χρησιμοποιείται για προεπεξεργασία εικόνων πριν από OCR (βελτίωση αντίθεσης κειμένου), για σχεδίαση εφέ (περίγραμμα αντικειμένων) και για ανάλυση σχημάτων.
| Αίτημα Vision | Σκοπός | Έκδοση iOS |
|---|---|---|
| VNDetectFaceRectanglesRequest | Αναζήτηση προσώπων σε εικόνα | iOS 11 |
| VNRecognizeTextRequest | Αναγνώριση κειμένου (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Ανίχνευση barcode και QR | iOS 11 |
| VNClassifyImageRequest | Ταξινόμηση εικόνων | iOS 13 |
| VNDetectContoursRequest | Ανάλυση περιγραμμάτων | iOS 14 |
| VNTrackObjectRequest | Παρακολούθηση αντικειμένων | iOS 11 |
Συχνές Ερωτήσεις
Vision παρέχει έτοιμους αλγόριθμους (ανίχνευση προσώπων, OCR, barcode) χωρίς εκπαίδευση μοντέλου. Το Core ML — είναι η μηχανή για εκτέλεση προσαρμοσμένων μοντέλων. Το Vision + VNCoreMLRequest επιτρέπει την εκτέλεση μοντέλων Core ML στο pipeline του Vision, συνδυάζοντας τα καλύτερα και των δύο κόσμων: έτοιμους ανιχνευτές Vision + προσαρμοσμένη ταξινόμηση Core ML.
Ναι, το Vision υποστηρίζει επεξεργασία ροής βίντεο σε πραγματικό χρόνο μέσω VNSequenceRequestHandler για παρακολούθηση και μέσω AVCaptureVideoDataOutput για επεξεργασία καρέ-καρέ. Σε συσκευές με A12+ και Neural Engine, το Vision επεξεργάζεται έως 60 καρέ ανά δευτερόλεπτο για ανίχνευση προσώπων. Για βαριές εργασίες (OCR, ταξινόμηση) συνιστάται η επεξεργασία κάθε 5–10 καρέ.
VNRecognizeTextRequest υποστηρίζει 13 γλώσσες: Αγγλικά, Ρωσικά, Κινέζικα (απλοποιημένα και παραδοσιακά), Ιαπωνικά, Κορεάτικα, Ιταλικά, Γερμανικά, Ισπανικά, Πορτογαλικά, Γαλλικά, Αραβικά, Βιετναμέζικα και Ταϊλανδικά. Για αναγνώριση πολλαπλών γλωσσών σε μία εικόνα, καθορίστε μια συστοιχία στην ιδιότητα recognitionLanguages.
Ναι, μέσω VNCoreMLRequest. Δημιουργείτε ένα μοντέλο Core ML, τυλιγμένο σε VNCoreMLModel, και το μεταφέρετε στο VNCoreMLRequest. Το Vision διαχειρίζεται αυτόματα την προεπεξεργασία της εικόνας (κλιμάκωση, περικοπή) και τη μεταφέρει στο μοντέλο Core ML. Το αποτέλεσμα επιστρέφεται ως VNCoreMLFeatureValueObservation με δεδομένα εξόδου του μοντέλου.
Όχι, το Vision εκτελεί ολόκληρη την ανάλυση εξ ολοκλήρου στη συσκευή. Οι εικόνες δεν εγκαταλείπουν τη συσκευή του χρήστη. Αυτή είναι η θεμελιώδης αρχιτεκτονική της Apple: όλα τα πλαίσια ML (Vision, NaturalLanguage, Core ML, Speech) λειτουργούν on-device για την εξασφάλιση του απορρήτου. Κανένα δεδομένο δεν αποστέλλεται στους διακομιστές της Apple.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης