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 ट्रैकिंग के लिए फ्रेम अनुक्रमों को संभालता है।
  • परिणाम VNObservation के रूप में बाउंडिंग बॉक्स, कॉन्फिडेंस, uuid और प्रकार-विशिष्ट डेटा के साथ लौटाए जाते हैं।
  • कई अनुरोध एक perform() में ML गणना पुन: उपयोग के कारण अनुक्रमिक कॉल की तुलना में 30–40% तेज़ काम करते हैं।
  • VNCoreMLRequest स्वचालित इमेज प्रीप्रोसेसिंग के साथ कस्टम Core ML मॉडल को Vision पाइपलाइन में एकीकृत करता है।
  • सभी अनुरोध डिवाइस पर निष्पादित होते हैं बिना सर्वर को डेटा भेजे, गोपनीयता और ऑफ़लाइन संचालन सुनिश्चित करते हैं।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें