VNRequest — یہ کیا ہے، iOS میں Vision درخواشتوں کا عمل

مصنف: IT Sectr اشاعت: 2026-07-20 مطالعے کا وقت: 8 منٹ

VNRequest Vision فریم ورک کا ایک تجریدی بنیادی کلاس ہے جو تصویر یا ویڈیو سٹریم تجزیہ کی ایک اکائی کی نمائندگی کرتا ہے۔ تجزیہ کی ہر قسم — چہرے کا پتا لگانا، متن کی پہچان، بارکوڈ کی تلاش، درجہ بندی — VNRequest کے ایک تھوس ذیل زمرے کے طور پر نفذ کیا جاتا ہے۔ Apple ڈیویلپر ڈاکیومینٹیشن (2024) کے مطابق، ایک ڈیویلپر ایک درخواشت انسٹنس بناتا ہے، اسکے پیرامیٹرز ترتیب دیتا ہے، VNImageRequestHandler کے ذریعے ایک تصویر منتقل کرتا ہے اور نتائج کو VNObservation کی ایک ارے کے طور پر وصول کرتا ہے۔

اہم نکات

  • VNRequest — تمام Vision درخواشتوں کے لیے بنیادی کلاس: تصویر کا تجزیہ، ویڈیو اور ML موڈلز۔
  • ایک درخواشت VNImageRequestHandler (تصویر) یا VNSequenceRequestHandler (ویڈیو) کے ذریعے پر عمل کی جاتی ہے۔
  • نتائج VNObservation کی ایک ارے کے طور پر واپس کیے جاتے ہیں — ہر ذیل زمرہ میں مختص ڈیٹا ہوتا ہے۔
  • Completion handler تجزیہ مکمل ہونے کے بعد نتائج کو غیر ہم زمان طریقے سے کارروائی کرنے کی اجازت دیتا ہے۔
  • ایک تصویر کے لیے handler.perform() کے ایک کال سے کئی درخواشتیں پر عمل کی جا سکتی ہیں۔

Vision میں VNRequest کیا ہے؟

VNRequest Vision آرکیٹیکچر کا ایک بنیادی عنصر ہے، جو تصویر اور ویڈیو تجزیہ کے لیے درخواشت-جواب پیٹرن لاگو کرتا ہے۔ VNRequest کا ہر ذیل زمرہ کمپیوٹر ویژن کے ایک مختص کام کا ذمہ دار ہے: چہرے کا پتا لگانا، متن کی پہچان، مواد کی درجہ بندی۔

VNRequest آرکیٹیکچر «کیا تجزیہ کرنا ہے» (درخواشت) کو «کیسے کارروائی کرنا ہے» (ہینڈلر) سے علاحدہ کرتا ہے۔ ڈیویلپر درخواشت (تجزیہ کی قسم، اضافی پیرامیٹرز) ترتیب دیتا ہے اور اسے تصویر کے ساتھ ہینڈلر کو بھیجتا ہے۔ ہینڈلر درخواشت پر عمل کرتا ہے اور نتائج واپس کرتا ہے، اس کے لیے ڈیویلپر کو اندرونی ML الگورتھمز کو سمجھنے کی ضرورت نہیں ہے۔

VNRequest کے تمام ذیل زمرے ایک متحدہ ساخت کی پیروی کرتے ہیں: اختیاری completion handler کے ساتھ آغاز، خواص کی ترتیب (دلچسپی کا علاقہ، درستی کی سطح) اور ہینڈلر کو منتقل۔ یہ API کو پیش بینی قابل اور آسانی سے قابل توسیع بناتا ہے — تجزیہ کی ایک نئی قسم کو شامل کرنے کا مطلب VNRequest کا ایک نئا ذیل زمرہ بنانا ہے۔

swift
import Vision

// 1. درخواشت بنائیں
let request = VNDetectFaceRectanglesRequest { req, _ in
    // 3. نتائج پر کارروائی کریں
    guard let faces = req.results as? [VNFaceObservation]
    else { return }
    print("Found \\(faces.count) faces")
}

// 2. ہینڈلر کے ذریعے عمل کریں
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([request])

VNRequest کی اہم خواص: regionOfInterest (تجزیہ تیز کرنے کے لیے تصویر پر دلچسپی کا علاقہ)، preferBackgroundProcessing (پس منزر موڈ)، revision (الگورتھم کا ورژن) اور cancellationSupport۔ ان خواص کی مناسب ترتیب ایک مختص کام کے لیے کارکردگی کو بہتر بنانے کی اجازت دیتی ہے۔

Apple WWDC 2024 کے مطابق، Vision کے وجود کے 7 سالوں میں، دستیاب VNRequest ذیل زمروں کی تعداد 8 (iOS 11) سے بڑھ کر 25+ (iOS 18) ہو گئی، جو موبائل آلات پر کمپیوٹر ویژن کے تمام اہم کاموں کو کورش کرتا ہے۔

تجزیہ کے لیے VNRequest کی اہم اقسام

Vision میں 25+ VNRequest ذیل زمرے شامل ہیں جو زمروں میں تقسیم ہیں: پتا لگانا، پہچان، ٹریکنگ اور درجہ بندی۔ ہر ذیل زمرہ VNRequest سے وراثت پاتا ہے اور کام کے لیے مختص خواص کا اضافہ کرتا ہے۔

پتا لگانا اور پہچان

VNDetectFaceRectanglesRequest — تصویروں میں چہروں کا پتا لگانا۔ باؤنڈنگ باکس مکانات اور اعتماد کے ساتھ VNFaceObservation واپس کرتا ہے۔ VNDetectHumanRectanglesRequest — لوگوں کے لیے ایسا ہی۔ VNDetectHumanBodyPoseRequest — انسانی کیفیت کا تخمینہ (کنکال نکات)۔

متن کا تجزیہ

VNRecognizeTextRequest — 13 زبانوں اور دو درستی کی سطحوں کے ساتھ متن کی پہچان۔ VNReadCodeRequest — مختص کوڈز کے لیے۔ VNDetectTextRectanglesRequest — پہچان کے بغیر متن کے علاقوں کی تلاش (تیز، لیکن صرف مستطیلات)۔

درجہ بندی اور تجزیہ

VNClassifyImageRequest — 1,000 ImageNet زمروں میں تصویروں کی درجہ بندی۔ VNGenerateImageFeaturePrintRequest — تصویر موازنے کے لیے فیچر ویکٹر نکالنا۔ VNDetectContoursRequest — اشیاء کے خاکہ کا پتا لگانا۔

زمرہمثال درخواشتنتیجہ
چہروں کا پتا لگاناVNDetectFaceRectanglesRequestVNFaceObservation
متن کی پہچانVNRecognizeTextRequestVNRecognizedTextObservation
بارکوڈVNDetectBarcodesRequestVNBarcodeObservation
درجہ بندیVNClassifyImageRequestVNClassificationObservation
ٹریکنگVNTrackObjectRequestVNDetectedObjectObservation
خاکہVNDetectContoursRequestVNContoursObservation

VNImageRequestHandler اور VNSequenceRequestHandler

VNImageRequestHandler — ساکن تصویروں کے لیے ایک ہینڈلر۔ یہ CGImage، CIImage یا Data (JPEG/PNG) کو قبول کرتا ہے اور ایک یا زائد VNRequest انسٹنسز پر عمل کرتا ہے۔ یہ فوٹو، سکرین شاٹ اور اپ لوڈ کی گئی تصویروں کے لیے Vision استعمال کرنے کا بنیادی طریقہ ہے۔

VNSequenceRequestHandler — تصویروں کے تسلسل (ویڈیو فریمز) کے لیے ایک ہینڈلر۔ یہ ایسے ہی تصویر کی اقسام کو قبول کرتا ہے لیکن فریموں کے درمیان حالت برقرار رکھتے ہوئے فریم بہ فریم کارروائی کے لیے تیار کیا گیا ہے (اشیاء کی ٹریکنگ کے لیے ضروری)۔

swift
// ایک تصویر کے لیے VNImageRequestHandler
let imageHandler = VNImageRequestHandler(
    cgImage: cgImage,
    orientation: orientation,
    options: [:])

// ویڈیو کے لیے VNSequenceRequestHandler
let sequenceHandler = VNSequenceRequestHandler()
try sequenceHandler.perform([trackingRequest],
    on: cgImage)

اہم فرق: VNSequenceRequestHandler بے ایک ساتھ کئی درخواشتوں کے متوازی عمل کو سپورٹ نہیں کرتا — ہر perform() کال ایک فریم کے لیے درخواشتوں کے ایک سیٹ پر کارروائی کرتا ہے۔ ملٹی تھریڈ ویڈیو کارروائی کے لیے، مختلف تھریڈز کے لیے علیحدہ ہینڈلر انسٹنسز بنائیں۔

VNImageRequestHandler پس منزر کی قطار میں چل سکتا ہے۔ Apple باتچیت کے مناظر کے لیے DispatchQueue.global(qos: .userInitiated) (صارف نتائج کا انتظار کرتا ہے) اور بیچ کارروائی (مثال کے طور پر، پوری فوٹو لائبری کا تجزیہ) کے لیے .background استعمال کرنے کی تجویز کرتا ہے۔

VNObservation: نتائج کی ساخت

VNObservation — تمام Vision درخواشت کے نتائج کے لیے بنیادی کلاس۔ VNObservation کا ہر ذیل زمرہ تجزیہ کی قسم کے لیے مختص ڈیٹا رکھتا ہے: باؤنڈنگ باکس مکانات، پہچانی گئی متن، اعتماد، منفرد شناختندہ (uuid) اور وقت کا ٹیگ (timeRange)۔

VNObservation کے اهم ذیل زمرے: VNFaceObservation (باؤنڈنگ باکس اور لینڈ مارکز کے ساتھ چہرے کا پتا لگانے کا نتیجہ)، VNRecognizedTextObservation (امیدواروں کے ساتھ پہچانی گئی متن)، VNBarcodeObservation (پی لوڈ اور سمبالوجی کے ساتھ ڈیکوڈ کیا گیا بارکوڈ)، VNClassificationObservation (اعتماد کے ساتھ درجہ بندی کا زمرہ)۔

swift
func handleTextResults(request: VNRequest) {
    guard let observations = request.results
        as? [VNRecognizedTextObservation]
    else { return }

    for observation in observations {
        let bbox = observation.boundingBox
        let text = observation.topCandidates(1).first ?? ""
        print("\\(text) at \\(bbox)")
    }
}

اعتماد کی خاصیت (0.0 سے 1.0 تک) تمام VNObservation انسٹنسز میں موجود ہیں اور نتیجے میں ماڈل کے اعتماد کو ظاہر کرتی ہے۔ Apple زیادہ تر کاموں کے لیے اعتماد < 0.5 والے مشاہدات کو مسترد کرنے کی تجویز کرتا ہے۔ نازک اٹپلیکیشنز (طب، سیکیورٹی) کے لیے، دہلیز کو 0.8–0.9 تک بڑھایا جانا چاہیے۔

VNObservation میں timeRange (ویڈیو درخواشتوں کے لیے) اور uuid (فریموں کے درمیان مطابقت کے لیے منفرد ID) بھی شامل ہے۔ یہ ویڈیو فریمز کے ایک تسلسل میں ایک ہی شے (مثال کے طور پر، چہرا) کو ٹریک کرنے کی اجازت دیتا ہے۔

بے ایک ساتھ کئی درخواشتوں پر عمل کرنا

VNRequest کے ایک اہم فائدے میں سے ایک ایک handler.perform() کال میں ایک ہی تصویر پر کئی مختلف درخواشتوں پر عمل کرنے کی صلاحیت ہے۔ Vision اندرونی طور پر عمل کے ترتیب کو بہتر بناتا ہے اور مشترک حسابوں (مثال کے طور پر، تصویر کی پیش از کارروائی) کو دوبارہ استعمال کرتا ہے۔

یہ ایک پاس میں ایک تصویر کے بارے میں ایک مکمل ڈیٹا سیٹ حاصل کرنے کی اجازت دیتا ہے: بے ایک ساتھ چہرے کا پتا لگانا، متن کی پہچان، بارکوڈ ڑونے اور مواد کی درجہ بندی۔ یہ طریقہ هر درخواشت کو الگ الگ بلانے کے مقابلے میں کافی زیادہ موثر ہے۔

swift
import Vision

// ایک ارے میں متعدد درخواشتیں
let faceRequest = VNDetectFaceRectanglesRequest()
let textRequest = VNRecognizeTextRequest()
let barcodeRequest = VNDetectBarcodesRequest()
let classifyRequest = VNClassifyImageRequest()

let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([
    faceRequest,
    textRequest,
    barcodeRequest,
    classifyRequest
])

// ہر درخواشت کے نتائج تک رسائی
print("Faces: \\(faceRequest.results?.count ?? 0)")
print("Text blocks: \\(textRequest.results?.count ?? 0)")

حدود: تمام درخواشتیں دوسروں کے ساتھ منسلک نہیں ہو سکتیں۔ مثال کے طور پر، VNGenerateImageFeaturePrintRequest کو علیحدہ عمل کرنا چاہیے۔ Apple درخواشتوں کو قسم (پتا لگانا، پہچان، درجہ بندی) کے اعتبار سے گروپ کرنے اور ہدف آلات پر مشترکات کی جانچ کرنے کی تجویز کرتا ہے۔

کارکردگی: ایک perform() میں 3–4 درخواشتوں کو مرکب کرنا تسلسلی عمل کی بھنسبت 30–40% تیز ہے کیونکہ Vision مشترک ML حسابوں اور تصویر کی پیش از کارروائی (پیمائش، رنگ درستی) کو دوبارہ استعمال کرتا ہے۔

VNCoreMLRequest کے ساتھ کسٹم درخواشتیں

VNCoreMLRequest Core ML اور Vision کے درمیان ایک پل ہے، جو کسی بھی Core ML ماڈل کو Vision درخواشت کے طور پر چلانے کی اجازت دیتا ہے۔ ماڈل کو VNCoreMLModel میں لپیٹا جاتا ہے، VNCoreMLRequest کو بھیجا جاتا ہے، اور Vision خود برد تصویر کی پیش از کارروائی (پیمائش، ماڈل کے انپٹ سائز میں کٹائی) کو سنبھالتا ہے۔

VNCoreMLRequest VNRequest سے وراثت پاتا ہے، لہذا یہ تمام معیاری خوبیوں کو سپورٹ کرتا ہے: regionOfInterest، completion handler، متعدد درخواشتیں۔ یہ ایک کسٹم ML ماڈل کو Vision کے مضمونی ڈیٹکٹرز کے ساتھ ایک پائپ لائن میں مرکب کرنے کی اجازت دیتا ہے۔

swift
import Vision
import CoreML

// Core ML ماڈل کو لپیطیں ہے
guard let mlModel = try VNCoreMLModel(
    for: MyCustomClassifier().model)
else { return }

// VNCoreMLRequest بنائیں
let coreMLRequest = VNCoreMLRequest(model: mlModel) { request, _ in
    guard let results = request.results
        as? [VNClassificationObservation]
    else { return }

    for result in results.prefix(5) {
        print("\\(result.identifier): \\(result.confidence)"
    }
}
coreMLRequest.imageCropAndScaleOption = .centerCrop
coreMLRequest.regionOfInterest = faceBoundingBox

imageCropAndScaleOption یہ طے کرتا ہے کہ Vision ماڈل کے انپٹ کے لیے تصویر کو کیسے پیمائش کرتا ہے: .centerCrop (مرکزی کٹائی)، .scaleFill (کھینچاو) یا .scaleFit (تناسب کے تناسب کو برقرار رکھتے ہوئے پیمائش)۔ انتخاب ماڈل کی قسم اور تصویر میں شے کے مقام پر منحصر ہے۔

عملی مثال: VNDetectFaceRectanglesRequest کے ذریعے چہروں کا پتا لگانا، پھر ایک کسٹم ماڈل (مثال کے طور پر، جنس یا عمر کا تخمینہ) کے ساتھ VNCoreMLRequest کے ذریعے ہر چہرے کی درجہ بندی۔ ایک perform() میں دو درخواشتوں کو مرکب کرکے، آپ ایک پاس میں ایک مکمل چہرے کے تجزیہ کا پائپ لائن حاصل کرتے ہیں۔

اکثر پوچے جانے والے سوالات

کیا چل رہے VNRequest کو منسوخ کیا جا سکتا ہے؟

ہاں، ہر VNRequest میں ایک cancel() خاصیت ہے جو درخواشت کے عمل کو منسوخ کرتی ہے۔ تاہم، منسوخی صرف کارروائی شروع ہونے سے پہلے کام کرتی ہے — اگر ML ماڈل پہلے ہی شروع ہو چکا ہے، تو منسوخی حساب کو منقطع نہیں کرے گی۔ قابل اعتماد منسوخی کے لیے، completion handler میں DispatchWorkItem.cancel() کو VNRequest.cancel() کے ساتھ استعمال کریں۔

VNDetectFaceRectanglesRequest اور VNDetectFaceLandmarksRequest — فرق کیا ہے؟

VNDetectFaceRectanglesRequest صرف چہروں کے حدودی مستطیلات کو ڑھونڈتا ہے۔ VNDetectFaceLandmarksRequest مزید 68 چہرے کے اہم نکات (آنکھیں، ابروئیں، ناک، منہ، خاکہ) کی شناخت کرتا ہے۔ VNDetectFaceLandmarksRequest آہستہ ہے لیکن اینیمیشن، ماسک اور AR افیکٹس کے لیے زیادہ ڈیٹا فراهم کرتا ہے۔ سادہ چہروں کی گنتری کے لیے، VNDetectFaceRectanglesRequest کافی ہے۔

بارکوڈ ڑونے کے لیے کون سی درخواشت ہے — VNDetectBarcodesRequest؟

ہاں، VNDetectBarcodesRequest تمام قسم کے بارکوڈ اور QR کوڈ کے لیے صحیح درخواشت ہے۔ یہ EAN، UPC، Code 39، Code 128، PDF417، Aztec، QR اور دیگر فارمیٹ کو سپورٹ کرتا ہے۔ نتیجہ پی لوڈ اور سمبالوجی کے ساتھ VNBarcodeObservation میں واپس کیا جاتا ہے۔ ویڈیو سٹریم کے لیے، AVCaptureMetadataOutput استعمال کریں — یہ براہ راست سکیننگ کے لیے تیز ہے۔

کیا VNRequest کو CGImage کے بجائے CIImage پر عمل کیا جا سکتا ہے؟

ہاں، VNImageRequestHandler init(ciImage:options:) انیشی الائزر کے ذریعے CIImage کو قبول کرتا ہے۔ یہ Data (JPEG/PNG) اور NSURL (فائل کا پاتھ) بھی سپورٹ کرتا ہے۔ CIImage اس وقت مفید ہے جب تصویر پہلے سے Core Image پائپ لائن کے ذریعے لوڈ کی گئی ہو — یہ میمری میں غیر ضروری ڈیٹا کاپی سے بچاتا ہے۔

ایک perform() میں کتنے VNRequest انسٹنسز پر عمل کیا جا سکتا ہے؟

تعداد کی کوئی حد نہیں ہے، لیکن عمل میں 3–5 درخواشتیں بہترین ہیں۔ 5 سے زائد درخواشتیں میمری کے استعمال میں اضافہ کا سبب بن سکتی ہیں، کیونکہ ہر درخواشت اپنا ML ماڈل لوڈ کرتی ہے۔ اگر آپ کو 10+ مختلف تجزیے چلانے کی ضرورت ہو، تو انہیں 2–3 گروپوں میں تقسیم کریں اور تسلسلی عمل کریں۔

خلاصہ

  • VNRequest — ایک متحدہ درخواشت-جواب آرکیٹیکچر کے ساتھ تمام قسم کی تصویر اور ویڈیو تجزیہ کے لیے Vision کا بنیادی کلاس۔
  • Vision میں چہروں کا پتا لگانا، OCR، بارکوڈ، درجہ بندی، خاکہ، ٹریکنگ اور ML ماڈل کے لیے 25+ VNRequest ذیل زمرے شامل ہیں۔
  • VNImageRequestHandler ساکن تصویروں پر درخواشتوں پر عمل کرتا ہے؛ VNSequenceRequestHandler ٹریکنگ کے لیے فریم سیکونسز کو سنبھالتا ہے۔
  • نتائج باؤنڈنگ باکس، اعتماد، uuid اور قسم کے مختص ڈیٹا کے ساتھ VNObservation کے طور پر واپس کیے جاتے ہیں۔
  • ایک perform() میں متعدد درخواشتیں ML حساب کے دوبارہ استعمال کے نتیجے میں تسلسلی کالوں سے 30–40% تیز ہیں۔
  • VNCoreMLRequest خود برد تصویر کی پیش از کارروائی کے ساتھ کسٹم Core ML ماڈل کو Vision پائپ لائن میں ضم کرتا ہے۔
  • تمام درخواشتیں سرور کو ڈیٹا بھیجے بغیر آلے پر عمل کرتی ہیں، رازداری اور آف لائن آپریشن کو یقینی بناتی ہیں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں