Vision: فریم‌ورک بینایی کامپیوتر در iOS

نویسنده: IT Sectr منتشر شده: 2026-07-19 زمان مطالعه: 9 دقیقه

Vision « فریم‌ورک بینایی کامپیوتر از Apple است که اولین بار در iOS 11 در سال 2017 معرفی شد. Vision الگوریتم‌های آماده برای تشخیص چهره، تشخیص متن (OCR)، شناسایی بارکد، ردیابی اشیاء، طبقه‌بندی تصاویر و تحلیل کانتورها را ارائه می‌دهد » همه با استفاده از Neural Engine روی دستگاه انجام می‌شود. طبق Apple WWDC 2023، Vision در برنامه استاندارد «Photos» برای تشخیص چهره و در «Camera» برای تشخیص متن در زمان واقعی در iPhone و iPad استفاده می‌شود.

نکات اصلی

  • Vision « فریم‌ورک بینایی کامپیوتر Apple با چرخه کامل تحلیل روی دستگاه.
  • پشتیبانی از تشخیص چهره، تشخیص متن (OCR)، بارکد، طبقه‌بندی و ردیابی اشیاء.
  • کار از طریق مکانیزم یکپارچه VNRequest » درخواست‌ها به تصویر یا جریان ویدیو.
  • ادغام با Core ML برای مدل‌های سفارشی از طریق VNCoreMLRequest.
  • فریم‌ورک برای Neural Engine روی تراشه‌های A12+ برای زمان واقعی بهینه‌سازی شده.

Vision در iOS چیست؟

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 استفاده کنید که نقاط کلیدی چهره را تعیین می‌کند: چشم‌ها، ابروها، بینی، دهان، خط فک. این داده‌ها برای اعمال ماسک، انیمیشن ایموجی و فیلترها در زمان واقعی (مانند FaceTime و Snapchat) استفاده می‌شود.

swift
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 پشتیبانی می‌کند که کیفیت تصویر چهره را ارزیابی می‌کند: نورپردازی، وضوح، زاویه چرخش. این برای انتخاب بهترین فریم هنگام ثبت‌نام کاربر یا ایجاد آواتار مفید است.

تشخیص متن (OCR) با Vision

VNRecognizeTextRequest « موتور OCR داخلی Apple است که در iOS 13 معرفی شد. متن چاپی را روی تصاویر با پشتیبانی از 13 زبان تشخیص می‌دهد: انگلیسی، روسی، چینی، ژاپنی، کره‌ای، ایتالیایی، آلمانی، اسپانیایی، پرتغالی، فرانسوی، عربی، ویتنامی و تایلندی.

VNRecognizeTextRequest از دو سطح دقت پشتیبانی می‌کند: .fast (سریع، برای متن ساده روی پس‌زمینه متضاد) و .accurate (دقیق، برای صحنه‌های پیچیده با فونت‌ها و زوایای مختلف). .fast 3 تا 5 برابر سریع‌تر کار می‌کند اما با متن دست نویس و فونت‌های غیراستاندارد بدتر عمل می‌کند.

swift
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سرعتدقت (انگلیسی)پشتیبانی روسی
.fast0.1»0.3 ثانیه~85%بله
.accurate0.3»1.0 ثانیه~96%بله

شناسایی بارکد و QR

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 کد را با دقت پیکسل تعیین می‌کند که برای انیمیشن قاب دور کد پیدا شده مفید است.

swift
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 می‌تواند چندین بارکد را روی یک تصویر پردازش کند » آرایه observations شامل یک شیء برای هر کد پیدا شده است. این برای اسکن بسته‌های کالا یا اسناد با چندین بارکد مفید است.

ردیابی اشیاء در جریان ویدیو

VNDetectObjectAtPointRequest و VNSequenceRequestHandler » ابزارهای Vision برای ردیابی اشیاء در جریان ویدیو. اولی شیء را با نقطه لمس کاربر تعیین می‌کند، دومی شیء را بین فریم‌های ویدیو ردیابی می‌کند.

VNSequenceRequestHandler دنباله‌ای از تصاویر (فریم‌های ویدیو) را دریافت می‌کند و برای هر فریم موقعیت به‌روزرسانی شده شیء ردیابی شده را بازمی‌گرداند. این در برنامه‌های واقعیت افزوده، ویرایشگرهای ویدیو و سیستم‌های نظارت تصویری استفاده می‌شود.

swift
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 توصیه می‌کند هر 10 تا 15 فریم تشخیص (VNDetectObjectAtPointRequest) را برای تصحیح ردیابی دوباره راه‌اندازی کنید.

طبقه‌بندی تصاویر و تحلیل کانتورها

VNClassifyImageRequest « مدل داخلی Vision برای طبقه‌بندی تصاویر در 1000 دسته (مدل ResNet-50 آموزش دیده روی ImageNet) است. درخواست آرایه‌ای از VNClassificationObservation با نام دسته و اطمینان بازمی‌گرداند.

VNDetectContoursRequest تحلیل کانتورهای تصویر را انجام می‌دهد » مرزهای اشیاء را جدا می‌کند که برای بخش‌بندی، کانتورگیری و پیش‌پردازش قبل از تشخیص مفید است. درخواست آرایه‌ای از نقاط توصیف‌کننده هر کانتور روی تصویر را بازمی‌گرداند.

swift
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تشخیص بارکد و QRiOS 11
VNClassifyImageRequestطبقه‌بندی تصاویرiOS 13
VNDetectContoursRequestتحلیل کانتورهاiOS 14
VNTrackObjectRequestردیابی اشیاءiOS 11

سوالات متداول

تفاوت بین Vision و Core ML برای بینایی کامپیوتر چیست؟

Vision الگوریتم‌های آماده (تشخیص چهره، OCR، بارکد) را بدون آموزش مدل ارائه می‌دهد. Core ML » موتور اجرای مدل‌های سفارشی است. Vision + VNCoreMLRequest اجازه اجرای مدل‌های Core ML را در پایپلاین Vision می‌دهد و بهترین هر دو جهان را ترکیب می‌کند: دیتکتورهای آماده Vision + طبقه‌بندی سفارشی Core ML.

آیا Vision در زمان واقعی روی ویدیو کار می‌کند؟

بله، Vision از پردازش جریان ویدیو در زمان واقعی از طریق VNSequenceRequestHandler برای ردیابی و از طریق AVCaptureVideoDataOutput برای پردازش فریم به فریم پشتیبانی می‌کند. در دستگاه‌های A12+ با Neural Engine، Vision تا 60 فریم در ثانیه را برای تشخیص چهره پردازش می‌کند. برای وظایف سنگین (OCR، طبقه‌بندی) توصیه می‌شود هر 5 تا 10 فریم پردازش شود.

VNRecognizeTextRequest از چه زبان‌هایی پشتیبانی می‌کند؟

VNRecognizeTextRequest از 13 زبان پشتیبانی می‌کند: انگلیسی، روسی، چینی (ساده و سنتی)، ژاپنی، کره‌ای، ایتالیایی، آلمانی، اسپانیایی، پرتغالی، فرانسوی، عربی، ویتنامی و تایلندی. برای تشخیص چندین زبان روی یک تصویر، آرایه‌ای در ویژگی recognitionLanguages مشخص کنید.

آیا می‌توان از Vision با مدل Core ML استفاده کرد؟

بله، از طریق VNCoreMLRequest. شما یک مدل Core ML ایجاد می‌کنید که در VNCoreMLModel پیچیده شده و آن را به VNCoreMLRequest ارسال می‌کنید. Vision به طور خودکار پیش‌پردازش تصویر (مقیاس‌بندی، برش) را مدیریت کرده و آن را به مدل Core ML ارسال می‌کند. نتیجه به صورت VNCoreMLFeatureValueObservation با داده‌های خروجی مدل بازگردانده می‌شود.

آیا Vision تصاویر را به سرور Apple ارسال می‌کند؟

خیر، Vision تمام تحلیل را کاملاً روی دستگاه انجام می‌دهد. تصاویر دستگاه کاربر را ترک نمی‌کنند. این معماری اساسی Apple است: تمام فریم‌ورک‌های ML (Vision، NaturalLanguage، Core ML، Speech) برای حفظ حریم خصوصی روی دستگاه کار می‌کنند. هیچ داده‌ای به سرورهای Apple ارسال نمی‌شود.

خلاصه

  • Vision « فریم‌ورک بینایی کامپیوتر روی دستگاه Apple با API مبتنی بر VNRequest، قابل دسترس از iOS 11 در تمام دستگاه‌های Apple.
  • VNDetectFaceRectanglesRequest و VNDetectFaceLandmarksRequest چهره‌ها و نقاط کلیدی را برای فیلترها، ماسک‌ها و انیمیشن تشخیص می‌دهند.
  • VNRecognizeTextRequest « OCR داخلی برای 13 زبان با سطوح .fast و .accurate و دقت تا 96% برای اسناد.
  • VNDetectBarcodesRequest تمام فرمت‌های محبوب بارکد و QR را هم روی عکس و هم در جریان ویدیو رمزگشایی می‌کند.
  • VNTrackObjectRequest اشیاء را بین فریم‌های ویدیو از طریق جریان نوری بدون آموزش مجدد دیتکتور ردیابی می‌کند.
  • ادغام با Core ML از طریق VNCoreMLRequest امکان اجرای مدل‌های سفارشی طبقه‌بندی و تشخیص را در پایپلاین Vision فراهم می‌کند.
  • تمام محاسبات روی دستگاه با استفاده از Neural Engine انجام می‌شود » هیچ تصویری به سرور ارسال نمی‌شود و محرمانگی کامل داده تضمین می‌شود.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید