Vision هو إطار عمل للرؤية الحاسوبية من Apple، تم تقديمه لأول مرة في iOS 11 في عام 2017. يوفر Vision خوارزميات جاهزة لاكتشاف الوجوه والتعرف على النص (OCR) واكتشاف الرموز الشريطية وتتبع الأشياء وتصنيف الصور وتحليل المحيطات — وكلها تُنفذ على الجهاز باستخدام Neural Engine. وفقاً لـ Apple WWDC 2023، يُستخدم Vision في تطبيق الصور القياسي للتعرف على الوجوه وفي تطبيق الكاميرا لاكتشاف النص في الوقت الفعلي على iPhone و iPad.
النقاط الرئيسية
Vision هو إطار عمل عالي المستوى للرؤية الحاسوبية يُجرد الخوارزميات المعقدة للتعلم الآلي خلف واجهة برمجة تطبيقات بسيطة للطلبات (VNRequest). لا يحتاج المطور إلى فهم الشبكات العصبية التلافيفية — يكفي إنشاء طلب من النوع المناسب، تمرير صورة والحصول على النتيجة.
تعتمد بنية Vision على مبدأ طلب → معالج → نتيجة: يستقبل VNImageRequestHandler صورة، وينفذ VNRequest، ويعيد مصفوفة من VNObservation مع النتائج. يتيح ذلك دمج طلبات متعددة على صورة واحدة — على سبيل المثال، اكتشاف الوجوه والنص في صورة في وقت واحد.
يدعم Vision iOS 11+ و macOS 10.13+. يتطلب التسريع عبر Neural Engine شريحة A12 Bionic أو أحدث. على الأجهزة المزودة بـ A17 Pro وسلسلة M، يعالج Vision ما يصل إلى 60 إطاراً في الثانية للفيديو المتدفق.
الميزة الرئيسية لـ Vision هي الخصوصية الكاملة: جميع العمليات الحسابية تُنفذ على الجهاز، ولا تُرسل الصور إلى أي خادم. يتيح ذلك استخدام الإطار في التطبيقات التي تتعامل مع بيانات حساسة، مثل التطبيقات الطبية أو المصرفية.
VNDetectFaceRectanglesRequest هو الطلب الأساسي في Vision لاكتشاف الوجوه في صورة. يعيد إحداثيات المستطيلات المحيطة بكل وجه، دون تحديد هوية الشخص.
للتحليل الأكثر تفصيلاً، استخدم VNDetectFaceLandmarksRequest، الذي يُحدد النقاط الرئيسية للوجه: العيون والحاجبين والأنف والفم ومحيط الفك. تُستخدم هذه البيانات لتطبيق الأقنعة وتحريك الرموز التعبيرية والمرشحات في الوقت الفعلي (كما في 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. الثقة الأقل من 0.5 تشير عادةً إلى نتيجة إيجابية خاطئة — يُوصى بتجاهل هذه النتائج.
يدعم Vision أيضاً VNDetectFaceCaptureQualityRequest، الذي يُقيّم جودة صورة الوجه: الإضاءة والوضوح وزاوية الدوران. هذا مفيد لاختيار أفضل إطار أثناء تسجيل المستخدم أو إنشاء صورة رمزية.
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%.
| مستوى التعرف | السرعة | الدقة (الإنجليزية) | دعم الروسية |
|---|---|---|---|
| .fast | 0.1–0.3 ث | ~85% | نعم |
| .accurate | 0.3–1.0 ث | ~96% | نعم |
VNDetectBarcodesRequest — طلب Vision لاكتشاف وفك تشفير الرموز الشريطية ورموز QR في الصور. جميع التنسيقات الرئيسية مدعومة: EAN-8 و EAN-13 و UPC-A و UPC-E و Code 39 و Code 93 و Code 128 و PDF417 و Aztec و QR.
على عكس AVFoundation (AVCaptureMetadataOutput)، لا يعمل Vision مع تدفقات الفيديو فقط بل أيضاً مع الصور الثابتة — مما يسمح بمسح الرموز من الصور الموجودة أو لقطات الشاشة. يحدد Vision أيضاً boundingBox للرمز بدقة بكسل، مما يسهل تحريك إطار حول الرمز المكتشف.
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، يمكن أن يكون المحتوى عنوان URL أو نصاً أو JSON. لـ EAN/UPC، يتم إرجاع رمز منتج رقمي يمكن استخدامه للبحث عن العنصر في قاعدة بيانات.
يمكن لـ Vision معالجة رموز شريطية متعددة في صورة واحدة — مصفوفة observations تحتوي على كائن واحد لكل رمز مكتشف. هذا مفيد لمسح دفعات من المنتجات أو مستندات برموز شريطية متعددة.
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 | كشف الرموز الشريطية و QR | iOS 11 |
| VNClassifyImageRequest | تصنيف الصور | iOS 13 |
| VNDetectContoursRequest | تحليل المحيطات | iOS 14 |
| VNTrackObjectRequest | تتبع الأشياء | iOS 11 |
الأسئلة الشائعة
Vision يوفر خوارزميات جاهزة (اكتشاف الوجوه، OCR، الرموز الشريطية) دون تدريب نموذج. Core ML هو محرك لتنفيذ النماذج المخصصة. يسمح Vision + VNCoreMLRequest بتشغيل نماذج Core ML في خط أنابيب 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) تعمل على الجهاز لضمان الخصوصية. لا يتم إرسال أي بيانات إلى خوادم Apple.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.