VNRequest Vision فریم ورک کا ایک تجریدی بنیادی کلاس ہے جو تصویر یا ویڈیو سٹریم تجزیہ کی ایک اکائی کی نمائندگی کرتا ہے۔ تجزیہ کی ہر قسم — چہرے کا پتا لگانا، متن کی پہچان، بارکوڈ کی تلاش، درجہ بندی — VNRequest کے ایک تھوس ذیل زمرے کے طور پر نفذ کیا جاتا ہے۔ Apple ڈیویلپر ڈاکیومینٹیشن (2024) کے مطابق، ایک ڈیویلپر ایک درخواشت انسٹنس بناتا ہے، اسکے پیرامیٹرز ترتیب دیتا ہے، VNImageRequestHandler کے ذریعے ایک تصویر منتقل کرتا ہے اور نتائج کو VNObservation کی ایک ارے کے طور پر وصول کرتا ہے۔
اہم نکات
VNRequest Vision آرکیٹیکچر کا ایک بنیادی عنصر ہے، جو تصویر اور ویڈیو تجزیہ کے لیے درخواشت-جواب پیٹرن لاگو کرتا ہے۔ VNRequest کا ہر ذیل زمرہ کمپیوٹر ویژن کے ایک مختص کام کا ذمہ دار ہے: چہرے کا پتا لگانا، متن کی پہچان، مواد کی درجہ بندی۔
VNRequest آرکیٹیکچر «کیا تجزیہ کرنا ہے» (درخواشت) کو «کیسے کارروائی کرنا ہے» (ہینڈلر) سے علاحدہ کرتا ہے۔ ڈیویلپر درخواشت (تجزیہ کی قسم، اضافی پیرامیٹرز) ترتیب دیتا ہے اور اسے تصویر کے ساتھ ہینڈلر کو بھیجتا ہے۔ ہینڈلر درخواشت پر عمل کرتا ہے اور نتائج واپس کرتا ہے، اس کے لیے ڈیویلپر کو اندرونی ML الگورتھمز کو سمجھنے کی ضرورت نہیں ہے۔
VNRequest کے تمام ذیل زمرے ایک متحدہ ساخت کی پیروی کرتے ہیں: اختیاری completion handler کے ساتھ آغاز، خواص کی ترتیب (دلچسپی کا علاقہ، درستی کی سطح) اور ہینڈلر کو منتقل۔ یہ API کو پیش بینی قابل اور آسانی سے قابل توسیع بناتا ہے — تجزیہ کی ایک نئی قسم کو شامل کرنے کا مطلب VNRequest کا ایک نئا ذیل زمرہ بنانا ہے۔
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) ہو گئی، جو موبائل آلات پر کمپیوٹر ویژن کے تمام اہم کاموں کو کورش کرتا ہے۔
Vision میں 25+ VNRequest ذیل زمرے شامل ہیں جو زمروں میں تقسیم ہیں: پتا لگانا، پہچان، ٹریکنگ اور درجہ بندی۔ ہر ذیل زمرہ VNRequest سے وراثت پاتا ہے اور کام کے لیے مختص خواص کا اضافہ کرتا ہے۔
VNDetectFaceRectanglesRequest — تصویروں میں چہروں کا پتا لگانا۔ باؤنڈنگ باکس مکانات اور اعتماد کے ساتھ VNFaceObservation واپس کرتا ہے۔ VNDetectHumanRectanglesRequest — لوگوں کے لیے ایسا ہی۔ VNDetectHumanBodyPoseRequest — انسانی کیفیت کا تخمینہ (کنکال نکات)۔
VNRecognizeTextRequest — 13 زبانوں اور دو درستی کی سطحوں کے ساتھ متن کی پہچان۔ VNReadCodeRequest — مختص کوڈز کے لیے۔ VNDetectTextRectanglesRequest — پہچان کے بغیر متن کے علاقوں کی تلاش (تیز، لیکن صرف مستطیلات)۔
VNClassifyImageRequest — 1,000 ImageNet زمروں میں تصویروں کی درجہ بندی۔ VNGenerateImageFeaturePrintRequest — تصویر موازنے کے لیے فیچر ویکٹر نکالنا۔ VNDetectContoursRequest — اشیاء کے خاکہ کا پتا لگانا۔
| زمرہ | مثال درخواشت | نتیجہ |
|---|---|---|
| چہروں کا پتا لگانا | VNDetectFaceRectanglesRequest | VNFaceObservation |
| متن کی پہچان | VNRecognizeTextRequest | VNRecognizedTextObservation |
| بارکوڈ | VNDetectBarcodesRequest | VNBarcodeObservation |
| درجہ بندی | VNClassifyImageRequest | VNClassificationObservation |
| ٹریکنگ | VNTrackObjectRequest | VNDetectedObjectObservation |
| خاکہ | VNDetectContoursRequest | VNContoursObservation |
VNImageRequestHandler — ساکن تصویروں کے لیے ایک ہینڈلر۔ یہ CGImage، CIImage یا Data (JPEG/PNG) کو قبول کرتا ہے اور ایک یا زائد VNRequest انسٹنسز پر عمل کرتا ہے۔ یہ فوٹو، سکرین شاٹ اور اپ لوڈ کی گئی تصویروں کے لیے Vision استعمال کرنے کا بنیادی طریقہ ہے۔
VNSequenceRequestHandler — تصویروں کے تسلسل (ویڈیو فریمز) کے لیے ایک ہینڈلر۔ یہ ایسے ہی تصویر کی اقسام کو قبول کرتا ہے لیکن فریموں کے درمیان حالت برقرار رکھتے ہوئے فریم بہ فریم کارروائی کے لیے تیار کیا گیا ہے (اشیاء کی ٹریکنگ کے لیے ضروری)۔
// ایک تصویر کے لیے 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 — تمام Vision درخواشت کے نتائج کے لیے بنیادی کلاس۔ VNObservation کا ہر ذیل زمرہ تجزیہ کی قسم کے لیے مختص ڈیٹا رکھتا ہے: باؤنڈنگ باکس مکانات، پہچانی گئی متن، اعتماد، منفرد شناختندہ (uuid) اور وقت کا ٹیگ (timeRange)۔
VNObservation کے اهم ذیل زمرے: VNFaceObservation (باؤنڈنگ باکس اور لینڈ مارکز کے ساتھ چہرے کا پتا لگانے کا نتیجہ)، VNRecognizedTextObservation (امیدواروں کے ساتھ پہچانی گئی متن)، VNBarcodeObservation (پی لوڈ اور سمبالوجی کے ساتھ ڈیکوڈ کیا گیا بارکوڈ)، VNClassificationObservation (اعتماد کے ساتھ درجہ بندی کا زمرہ)۔
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 اندرونی طور پر عمل کے ترتیب کو بہتر بناتا ہے اور مشترک حسابوں (مثال کے طور پر، تصویر کی پیش از کارروائی) کو دوبارہ استعمال کرتا ہے۔
یہ ایک پاس میں ایک تصویر کے بارے میں ایک مکمل ڈیٹا سیٹ حاصل کرنے کی اجازت دیتا ہے: بے ایک ساتھ چہرے کا پتا لگانا، متن کی پہچان، بارکوڈ ڑونے اور مواد کی درجہ بندی۔ یہ طریقہ هر درخواشت کو الگ الگ بلانے کے مقابلے میں کافی زیادہ موثر ہے۔
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 Core ML اور Vision کے درمیان ایک پل ہے، جو کسی بھی Core ML ماڈل کو Vision درخواشت کے طور پر چلانے کی اجازت دیتا ہے۔ ماڈل کو VNCoreMLModel میں لپیٹا جاتا ہے، VNCoreMLRequest کو بھیجا جاتا ہے، اور Vision خود برد تصویر کی پیش از کارروائی (پیمائش، ماڈل کے انپٹ سائز میں کٹائی) کو سنبھالتا ہے۔
VNCoreMLRequest VNRequest سے وراثت پاتا ہے، لہذا یہ تمام معیاری خوبیوں کو سپورٹ کرتا ہے: regionOfInterest، completion handler، متعدد درخواشتیں۔ یہ ایک کسٹم ML ماڈل کو Vision کے مضمونی ڈیٹکٹرز کے ساتھ ایک پائپ لائن میں مرکب کرنے کی اجازت دیتا ہے۔
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 میں ایک cancel() خاصیت ہے جو درخواشت کے عمل کو منسوخ کرتی ہے۔ تاہم، منسوخی صرف کارروائی شروع ہونے سے پہلے کام کرتی ہے — اگر ML ماڈل پہلے ہی شروع ہو چکا ہے، تو منسوخی حساب کو منقطع نہیں کرے گی۔ قابل اعتماد منسوخی کے لیے، completion handler میں DispatchWorkItem.cancel() کو VNRequest.cancel() کے ساتھ استعمال کریں۔
VNDetectFaceRectanglesRequest صرف چہروں کے حدودی مستطیلات کو ڑھونڈتا ہے۔ VNDetectFaceLandmarksRequest مزید 68 چہرے کے اہم نکات (آنکھیں، ابروئیں، ناک، منہ، خاکہ) کی شناخت کرتا ہے۔ VNDetectFaceLandmarksRequest آہستہ ہے لیکن اینیمیشن، ماسک اور AR افیکٹس کے لیے زیادہ ڈیٹا فراهم کرتا ہے۔ سادہ چہروں کی گنتری کے لیے، VNDetectFaceRectanglesRequest کافی ہے۔
ہاں، VNDetectBarcodesRequest تمام قسم کے بارکوڈ اور QR کوڈ کے لیے صحیح درخواشت ہے۔ یہ EAN، UPC، Code 39، Code 128، PDF417، Aztec، QR اور دیگر فارمیٹ کو سپورٹ کرتا ہے۔ نتیجہ پی لوڈ اور سمبالوجی کے ساتھ VNBarcodeObservation میں واپس کیا جاتا ہے۔ ویڈیو سٹریم کے لیے، AVCaptureMetadataOutput استعمال کریں — یہ براہ راست سکیننگ کے لیے تیز ہے۔
ہاں، VNImageRequestHandler init(ciImage:options:) انیشی الائزر کے ذریعے CIImage کو قبول کرتا ہے۔ یہ Data (JPEG/PNG) اور NSURL (فائل کا پاتھ) بھی سپورٹ کرتا ہے۔ CIImage اس وقت مفید ہے جب تصویر پہلے سے Core Image پائپ لائن کے ذریعے لوڈ کی گئی ہو — یہ میمری میں غیر ضروری ڈیٹا کاپی سے بچاتا ہے۔
تعداد کی کوئی حد نہیں ہے، لیکن عمل میں 3–5 درخواشتیں بہترین ہیں۔ 5 سے زائد درخواشتیں میمری کے استعمال میں اضافہ کا سبب بن سکتی ہیں، کیونکہ ہر درخواشت اپنا ML ماڈل لوڈ کرتی ہے۔ اگر آپ کو 10+ مختلف تجزیے چلانے کی ضرورت ہو، تو انہیں 2–3 گروپوں میں تقسیم کریں اور تسلسلی عمل کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں