VNCoreMLRequest — یہ کیا ہے، iOS میں Core ML کے لیے Vision درخواست

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

VNCoreMLRequest — VNRequest کا ایک ذیلی طبقہ ہے جو Vision پائپ لائن کے اندر Core ML ماڈلز چلانے کی اجازت دیتا ہے، Vision کے تیار ڈتیکٹرز (چہرے، متن، اشیاء) کے فوائد کو درجہ بندی اور ریگریشن کے لیے کسٹم ML ماڈلز کے ساتھ مضمون کرتا ہے۔ Apple Machine Learning Documentation (2024) کے مطابق، VNCoreMLRequest خودکار طور پر تصویر قبل از عمل کا عمل کرتا ہے — پیمائے کی تبدیلی، کٹائی اور رنگ خلا کی تبدیلی — Core ML ماڈل کی ضرورتوں کے مطابق۔

اہم نکات

  • VNCoreMLRequest — Core ML اور Vision کے درمیان پل: ML ماڈل Vision درخواست کے طور پر کام کرتا ہے۔
  • خودکار تصویر قبل از عمل: ماڈل کی ضرورتوں کے مطابق پیمائے کی تبدیلی، کٹائی اور رنگ درستی۔
  • پائپ لائن کی تعمیر کے لیے ایک perform() میں دوسرے VNRequest کے ساتھ مضمون ہوتا ہے۔
  • VNCoreMLModel کی حمایت کرتا ہے — تصاویر اور FeatureValue کے ساتھ کام کرنے کے لیے MLModel پر ایک ریپر۔
  • زیادہ سے زیادہ کارکردگی کے لیے Neural Engine اور GPU پر چلتا ہے۔

VNCoreMLRequest کیا ہے؟

VNCoreMLRequest VNRequest کا ایک ذیلی طبقہ ہے، جو iOS 11 میں Vision کے ساتھ شامل کیا گیا، جو Vision کے سیاق میں Core ML ماڈلز چلانے کی اجازت دیتا ہے۔ یہ Core ML ماڈل کے لیے درکار تمام تصویر قبل از عمل کا انتظام کرتا ہے: سائز تبدیلی، کٹائی، معمولیکرنال اور رنگ خلا کی تبدیلی۔

VNCoreMLRequest کے بغیر، ایک ڈیویلپر کو UIImage/CGImage کو مطلوبہ سائز کے MultiArray (MLMultiArray) یا PixelBuffer (CVPixelBuffer) میں دستی طور پر تبدیل کرنا پڑتا۔ VNCoreMLRequest اس عمل کو خودکار کرتا ہے: آپ VNImageRequestHandler کے ذریعے CGImage پیش کرتے ہیں، اور VNCoreMLRequest اسے ماڈل انپٹ میں خود پیمائے پر چڑھاتا ہے۔

VNCoreMLRequest تمام VNRequest صلاحیتوں کو وراثت میں لیتا ہے: اکمال ہینڈلر، regionOfInterest، بک ایک ساتھ ایک سے زیادہ درخواستیں پر عمل کرنے کی صلاحیت، VNImageRequestHandler اور VNSequenceRequestHandler کی حمایت۔

swift
import Vision
import CoreML

// 1. ماڈل لوڈ کریں اور لپیٹیں
guard let model = try VNCoreMLModel(
    for: MobileNetV2().model)
else { return }

// 2. VNCoreMLRequest بنائیں
let request = VNCoreMLRequest(model: model) { req, _ in
    guard let results = req.results
        as? [VNClassificationObservation]
    else { return }
    for r in results.prefix(3) {
        print("\\(r.identifier): \\(r.confidence)")
    }
}

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

VNCoreMLRequest مختلف انپٹ قسموں کے ماڈلز کی حمایت کرتا ہے: تصاویر (Image Feature)، MultiArray اور Double۔ تصاویر کے لیے، Vision خودکار طور پر CGImage کو مطلوبہ سائز اور رنگ خلا کے CVPixelBuffer میں تبدیل کرتا ہے۔ دوسرے انپٹ ڈیٹا قسموں کے لیے، Vision کے بغیر براہ راست Core ML استعمال کریں۔

Apple WWDC 2023 کے مطابق، VNCoreMLRequest تمام iOS ایپلیکیشنز کا 40% میں استعمال ہوتا ہے جو تصویر پر عمل کے لیے Core ML کا استعمال کرتے ہیں۔ یہ iOS ایپلیکیشنز میں ML ماڈلز کو مضمون کرنے کا سب سے مقبول طریقہ ہے۔

VNCoreMLModel: Core ML ماڈل پر ریپر

VNCoreMLModel ایک ریپر ہے جو Core ML ماڈل (MLModel) کو Vision میں استعمال کے لیے آہنگ کرتا ہے۔ یہ ماڈل کے انپٹ اور آؤٹپٹ ڈیٹا کو Vision کے لیے قابل فہم فارمیٹ میں تبدیل کرتا ہے: تصویر → CVPixelBuffer، نتیجہ → VNObservation۔

VNCoreMLModel کی ابتدائیت ماڈل کی Vision کے ساتھ مطابقت کی جانچ کرتی ہے: ماڈل کو انپٹ کے طور پر ایک تصویر (Image Feature) قبول کرنا چاہیے اور درجہ بندی (MLMultiArray یا Dictionary) واپس کرنی چاہیے۔ اگر ماڈل نا مطابق ہو، تو ابتدائیکار ایک غلطی پھینکتا ہے۔

swift
import Vision
import CoreML

// اختیار 1: .mlmodel سے (بیلڈ ٹائم پر کامپائل شدہ)
let model1 = try VNCoreMLModel(
    for: MyVisionModel().model)

// اختیار 2: .mlmodelc سے (آلہ پر کامپائل شدہ)
let compiledURL = Bundle.main.url(
    forResource: "MyVisionModel",
    withExtension: "mlmodelc")!
let model2 = try VNCoreMLModel(
    for: MLModel(contentsOf: compiledURL))

VNCoreMLModel پہلی لوڈ کے بعد ماڈل کو میمری میں کیش کرتا ہے۔ اسی ماڈل کو دوبارہ لوڈ کرنے سے کیشد انسٹنس واپس آتا ہے، جو بعد کی درخواستوں کو تیز کرتا ہے۔ تاہم، اگر ماڈل کا وزن 100 MB سے زیادہ ہو، تو iOS وسائل کی کمی کی صورت میں اسے میمری سے خارج کر سکتا ہے — اس صورت میں، VNCoreMLModel خودکار طور پر ماڈل کو دوبارہ لوڈ کرے گا۔

Create ML کے ذریعے تربیت یافتہ ماڈلز کے لیے، VNCoreMLModel بغیر کسی مزید ترتیب کے کام کرتا ہے۔ Create ML صحیح میٹا ڈیٹا کے ساتھ ماڈل ایکسپورٹ کرتا ہے جسے Vision خودکار طور پر شناخت کرتا ہے — بس ماڈل کو VNCoreMLModel(model:) میں پیش کریں۔

imageCropAndScaleOption کی ترتیب

imageCropAndScaleOption VNCoreMLRequest کی ایک کلیڈی خاصیت ہے جو یہ متعین کرتی ہے ک۔ Vision مبادئی تصویر کو Core ML ماڈل انپٹ سائز سے ملانے کے لیے کیسے تبدیل کرتا ہے۔ صحیح اختیار کا انتخاب براہ راست درجہ بندی کی سطحیت کو متاثر کرتا ہے۔

.centerCrop تصویر کو مرکز سے ایک مربع میں کاٹتا ہے، پھر اسے ماڈل انپٹ سائز پر پیمائے پر چڑھاتا ہے۔ مرکزی اشیاء پر تربیت یافتہ ماڈلز کے لیے موزوں (زیادہ تر ImageNet درجہ بند کرنے والے)۔ .scaleFill تناسب کو برقرار رکھے بغیر تصویر کو انپٹ سائز تک پھیلاتا ہے۔ تیز، لیکن جیامیٹری کو مسخ کردے ہے۔ .scaleFit تناسب کو برقرار رکھتے ہوئے پیمائے پر چڑھاتا ہے، کناروں پر letterbox (سیاہ پٹّیاں) شامل کرتا ہے۔

swift
import Vision

let request = VNCoreMLRequest(model: model)

// .centerCrop — مرکزی اشیاء کے لیے (طے طور پر)
request.imageCropAndScaleOption = .centerCrop

// .scaleFill — یکساں بناوٹ کے لیے (کوئی مسخی نہیں)
request.imageCropAndScaleOption = .scaleFill

// .scaleFit — جب شے کے تناسب اہم ہوں
request.imageCropAndScaleOption = .scaleFit

تجاویز: زیادہ تر درجہ بندی کے ماڈلز کے لیے .centerCrop استعمال کریں — یہ سطحیت اور کارکردگی کا بہترین توازن فراہم کرتا ہے۔ اگر ماڈل محفوظ تناسب والی تصاویر پر تربیت یافتہ ہے (مثلاں، دستاویز کی تصاویر پر بیترتی کا پتا لگانا)، تو letterbox کے ساتھ .scaleFit منتخب کریں۔

Apple Developer Documentation 2024 کے مطابق، imageCropAndScaleOption کا غلط انتخاب ماڈل کی سطحیت کو 15–25% تک کم کر سکتا ہے۔ مثال کے طور پر، فریم کے کنارے واقع چہرے کے لیے .scaleFill، .centerCrop کے ساتھ اس کا ایک حصہ کاٹ سکتا ہے یا .scaleFill کے ساتھ تناسب کو مسخ کر سکتا ہے۔

دوسرے VNRequest کے ساتھ مضمون

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

VNCoreMLRequest regionOfInterest کی بھی حمایت کرتا ہے — اگر آپ یہ علاقہ متعین کرتے ہیں، تو Vision Core ML ماڈل میں پیش کرنے سے پہلے تصویر کو متعین مستطیل میں کاٹ دے گا۔ یہ پائپ لائن کے لیے بہت اہم ہے: چہرے کا پتا لگانے کے بعد، آپ VNCoreMLRequest کے لیے regionOfInterest کے طور پر اس کا باؤنڈنگ باکس پیش کرتے ہیں۔

swift
import Vision

// 1. چہرے کا پتا لگانا
let faceRequest = VNDetectFaceRectanglesRequest()

// 2. Core ML کے ذریعے جذبات کی درجہ بندی
guard let emotionModel = try VNCoreMLModel(
    for: EmotionClassifier().model)
else { return }

let emotionRequest = VNCoreMLRequest(model: emotionModel)
try handler.perform([faceRequest, emotionRequest])

// 3. ہر چہرے کے لیے regionOfInterest مقرر کریں
for face in faceRequest.results as? [VNFaceObservation] ?? [] {
    emotionRequest.regionOfInterest = face.boundingBox
    try handler.perform([emotionRequest])
    // جذبات کی درجہ بندی کے نتیجے پر عمل کریں
}

حد: VNCoreMLRequest کے لیے regionOfInterest کا مطلب تب ہے جب ماڈل ایک ہی سائز اور تناسب کی تصاویر پر تربیت یافتہ ہو۔ اگر ماڈل سختی سے ایک مربع انپٹ (224x224) کی توقع کرتا ہے، تو regionOfInterest کے ساتھ .centerCrop بہترین نتیجہ دے گا۔

Apple ML Research کے مطابق، regionOfInterest کے ذریعے «پتا لگانا → درجہ بندی» پائپ لائن، مکمل تصویر کی درجہ بندی کے مقابلے میں 20–30% سطحیت بہتری فراہم کرتا ہے، کیونکہ ML ماڈل کو پس منظر کے شور کے بغیر صرف متعلقہ علاقہ ملتا ہے۔

پائپ لائن کی قسمدرخواست 1 (پتا لگانا)درخواست 2 (ML)مثال
چہرہ → جذباتVNDetectFaceRectanglesRequestVNCoreMLRequestمزاج کا پتا لگانا
شے → برانڈVNDetectObjectAtPointRequestVNCoreMLRequestلوگو کی شناخت
متن → زبانVNRecognizeTextRequestVNCoreMLRequestمتن زبان کی درجہ بندی
منظر → تفصیلVNClassifyImageRequestVNCoreMLRequestٹیگ تیار کرنا

VNCoreMLRequest کے نتائج پر عمل کرنا

VNCoreMLRequest نتائج کو VNClassificationObservation (درجہ بندی کے ماڈلز کے لیے) یا VNCoreMLFeatureValueObservation (ریگریشن اور دوسری قسموں کے لیے) کے طور پر واپس کرتا ہے۔ نتیجہ کی قسم Core ML ماڈل کے آؤٹپٹ ڈیٹا پر منحصر کرتی ہے۔

VNClassificationObservation میں identifier (طبقہ کا نام) اور confidence ہوتا ہے۔ softmax آؤٹپٹ والے ماڈل کم ہوتے ہوئے confidence کے اعتبار سے ترتیب شدہ ان مشاہدات کی ایک ارے واپس کرتے ہیں۔ VNCoreMLFeatureValueObservation میں ایک صوری MLFeatureValue ہوتا ہے — یہ MultiArray، Double، String یا Dictionary ہو سکتا ہے۔

swift
// درجہ بندی کے ماڈلز کے لیے
if let classificationResults = request.results
    as? [VNClassificationObservation] {
    for result in classificationResults
        where result.confidence > 0.5 {
        print("\\(result.identifier): \\(result.confidence)")
    }
}

// ریگریشن ماڈلز کے لیے (فیچر ویلیوز)
if let featureResults = request.results
    as? [VNCoreMLFeatureValueObservation] {
    for result in featureResults {
        let value = result.featureValue
        print("\\(result.featureName): \\(value)")
    }
}

Confidence کے مطابق فلٹرینگ: Apple عام درجہ بند کرنے والے کے لیے confidence < 0.3 اور اہم ایپلیکیشنز کے لیے < 0.7 والے نتائج کو مسترد کرنے کی تجویز کرتا ہے۔ متوازن ڈیٹا سیٹس پر تربیت یافتہ ماڈلز کے لیے، confidence صحیح جواب کے امکان کے ساتھ منسلک ہوتا ہے لیکن اس کی ضمانت نہیں دیتا۔

VNCoreMLFeatureValueObservation.featureName ماڈل کی آؤٹپٹ پرت کے نام (مثلاں، «classLabel» یا «features») سے مطابقت کرتا ہے۔ یہ ایک سے زیادہ آؤٹپٹ والے ماڈلز کو سنبھالنے کی اجازت دیتا ہے — ہر آؤٹپٹ کو ایک منفرد featureName کے ساتھ ایک علیحدہ مشاہدے سے پیش کیا جاتا ہے۔

بہترین طریقے اور کارکردگی

VNCoreMLRequest Neural Engine (A12+), GPU اور CPU پر کام کرنے کے لیے بہترین کیا گیا ہے۔ Vision ماڈل کی قسم اور سائز کے مطابق ماڈل پر عمل کرنے کے لیے خودکار طور پر بہترین آلات کا انتخاب کرتا ہے۔ تاہم، مناسب ترتیب کے ساتھ کارکردگی کو مزید بہتر بنایا جا سکتا ہے۔

میمری کا انتظام

Core ML ماڈلز پہلے VNCoreMLRequest پر میمری میں لوڈ ہوتے ہیں اور ایپلیکیشن کے خارج ہونے تک وہاں رہتے ہیں۔ 200 MB سے بڑے ماڈلز کے لیے، Apple ضرورت پر لوڈ کرنے اور MLModel.release() کے ذریعے خارج کرنے کی تجویز کرتا ہے۔ VNCoreMLModel خود کیشنگ کا انتظام کرتا ہے، لیکن آپ autoreleasepool کے ذریعے اسے کنٹرول کر سکتے ہیں۔

بیچ پر عمل

بیچ پر عمل کے لیے ایک VNCoreMLRequest بنائیں اور اسے مختلف VNImageRequestHandler کے ساتھ دوبارہ استعمال کریں۔ ہر تصویر کے لیے ایک نیا VNCoreMLRequest ن بنائیں — یہ بار بار ماڈل لوڈنگ کی وجہ سے پر عمل کو سست کر دے گا۔ 10+ تصاویر پر عمل کرتے وقت درخواست کا دوبارہ استعمال 40% تک کارکردگی کا فائدہ فراہم کرتا ہے۔

swift
// صحیح: تمام تصاویر کے لیے ایک درخواست
let batchSize = 20
let batchRequest = VNCoreMLRequest(model: model)

for i in 0..<batchSize {
    let handler = VNImageRequestHandler(
        cgImage: images[i],
        options: [:])
    try handler.perform([batchRequest])
    // ہر کال پر batchRequest.results اپ ڈیٹ
}

آلات کا انتخاب: پہلے سے طے طور پر، Vision A12+ آلات پر مطابق ماڈلز کے لیے Neural Engine کا انتخاب کرتا ہے۔ اگر ماڈل Neural Engine کی حمایت نہیں کرتا، تو Vision GPU یا CPU استعمال کرتا ہے۔ آپ MLModelConfiguration.computeUnits کے ذریعے زبردستی آلات کی وضاحت کر سکتے ہیں، لیکن Apple خودکار انتخاب چھوڑنے کی تجویز کرتا ہے۔

Apple Performance Benchmarks 2024 کے مطابق، Neural Engine (iPhone 15 Pro) پر VNCoreMLRequest MobileNetV2 درجہ بندی کو 3–5 ms میں پر عمل کرتا ہے، GPU پر — 8–12 ms، CPU پر — 20–30 ms۔ یہ فرق ریال ٹائم ایپلیکیشنز کے لیے اہم ہو جاتا ہے جو 30+ فریم فی سیکنڈ پر عمل کرتے ہیں۔

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

کیا VNCoreMLRequest Vision کے بغیر — براہ راست Core ML کے ساتھ استعمال کیا جا سکتا ہے؟

جی ہاں، Core ML کو Vision کے بغیر براہ راست MLModel.prediction() کے ذریعے استعمال کیا جا سکتا ہے۔ تاہم، VNCoreMLRequest تصویر قبل از عمل (پیمائے کی تبدیلی، کٹائی، CVPixelBuffer میں تبدیل)کو خودکار کرتا ہے۔ اگر ماڈل تصویر نہیں بلکہ MultiArray یا Double قبول کرتا ہے — براہ راست Core ML استعمال کریں۔ VNCoreMLRequest صرف ان ماڈلز کے لیے ہے جن کے پاس انپٹ کے طور پر Image Feature ہو۔

ماڈل کا نیا ورژن جاری ہونے پر VNCoreMLRequest کو کیسے اپ ڈیٹ کریں؟

اپ ڈیٹیڈ MLModel سے ایک نیا VNCoreMLModel اور ایک نیا VNCoreMLRequest بنائیں۔ پرانی درخواست ماڈل کے پرانے ورژن کا استعمال جاری رکھے گی۔ دوردست ماڈل اپ ڈیٹس کے لیے، سرور سے ڈاؤن لوڈ کی گئی .mlmodelc فائل سے آلہ پر ماڈل کو کامپائل کرنے کے لیے MLModel.compileModel(at:) استعمال کریں۔

کیا VNCoreMLRequest ایک سے زیادہ انپٹ والے ماڈلز کی حمایت کرتا ہے؟

VNCoreMLRequest صرف ایک Image Feature انپٹ والے ماڈلز کی حمایت کرتا ہے۔ اگر ماڈل میں ایک سے زیادہ انپٹ (مثلاں، تصویر + متن) ہوں، تو MLModel کے ذریعے براہ راست Core ML استعمال کریں۔ Vision تصویر کے علاوہ مزید پیرامیٹرز پیش نہیں کر سکتا۔

VNCoreMLRequest کے لیے حد اکثر تصویر کا سائز کیا ہے؟

VNImageRequestHandler میں پیش کیے گئے CGImage کی حد 8192 x 8192 پکسلز ہے۔ تاہم، Core ML ماڈلز عام طور پر 224x224، 299x299 یا 512x512 انپٹ کی توقع کرتے ہیں۔ Vision خودکار طور پر بڑی تصاویر کو انپٹ سائز پر پیمائے پر چڑھاتا ہے۔ اگر اصلی تصویر بہت بڑی ہے، تو میمری بچانے کے لیے اسے CGImage کے ذریعے پہلے سے چہوٹا کریں۔

کیا VNCoreMLRequest کو بیک گراؤنڈ میں چلایا جا سکتا ہے؟

جی ہاں، VNRequest پر preferBackgroundProcessing = true مقرر کریں۔ یہ Vision کو درخواست پر عمل کو ملتوی کرنے کی اجازت دیتا ہے اگر سیسٹم وسائل کی شدید متطلبہ موڈ میں ہو (مثلاں، مواد کی لوڈنگ)۔ اس کے علاوہ، handler.perform() کو کال کرنے کے لیے DispatchQueue.global(qos: .background) استعمال کرنا یقینی بنائیں۔

خلاصہ

  • VNCoreMLRequest — خودکار تصویر قبل از عمل کے ساتھ Vision پائپ لائن میں Core ML ماڈلز چلانے کے لیے VNRequest کا ایک ذیلی طبقہ۔
  • VNCoreMLModel Vision کے لیے MLModel کو لپیٹتا ہے، خودکار طور پر CGImage کو مطلوبہ سائز اور رنگ خلا کے CVPixelBuffer میں تبدیل کرتا ہے۔
  • imageCropAndScaleOption (centerCrop, scaleFill, scaleFit) پیمائے کی تبدیل کی حکمت عمل کا تعین کرتا ہے اور ماڈل کی سطحیت کو 15–25% تک متاثر کرتا ہے۔
  • VNDetectFaceRectanglesRequest اور دوسرے VNRequest کے ساتھ مضمون regionOfInterest کے ساتھ «پتا لگانا → درجہ بندی» پائپ لائن بنانے کی اجازت دیتا ہے۔
  • نتائج VNClassificationObservation (درجہ بندی کے لیے) یا VNCoreMLFeatureValueObservation (ریگریشن/دوسری قسموں کے لیے) کے طور پر واپس کیے جاتے ہیں۔
  • بیچ پر عمل کے لیے ایک VNCoreMLRequest کا دوبارہ استعمال ہر تصویر کے لیے نیا بنانے کے مقابلے میں 40% تک کارکردگی کا فائدہ دیتا ہے۔
  • Neural Engine (MobileNetV2 پر 3–5 ms) پر کارکردگی CPU کے مقابلے میں 4–6 گنا زیادہ ہے، جو ریال ٹائم ایپلیکیشنز کے لیے اہم ہے۔

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

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

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

مزید پڑھیں