CoreImage रीयल-टाइम इमेज और वीडियो प्रोसेसिंग के लिए Apple का फ्रेमवर्क है, जो रंग सुधार, ब्लर, टेक्सचर ओवरले और डिटेक्शन के लिए दर्जनों बिल्ट-इन CIFilter प्रदान करता है। Apple दस्तावेज़ीकरण के अनुसार, CoreImage iOS उपकरणों पर हाई-परफॉर्मेंस पिक्सल प्रोसेसिंग के लिए GPU का उपयोग करता है। फ्रेमवर्क CIImage को एक अपरिवर्तनीय इमेज ऑब्जेक्ट और गुणवत्ता हानि के बिना प्रभावों की रचना के लिए फ़िल्टर चेन के रूप में समर्थन करता है।
मुख्य बिंदु
CoreImage रास्टर इमेज और वीडियो प्रोसेसिंग के लिए Apple का फ्रेमवर्क है, जिसे पहली बार macOS 10.4 Tiger में पेश किया गया और iOS 5.0 पर पोर्ट किया गया। Core Graphics या UIKit के विपरीत, CoreImage पिक्सल शेडर स्तर पर काम करता है, समानांतर गणना के लिए GPU का उपयोग करता है। यह जटिल प्रभाव — ब्लर, रंग सुधार, मॉर्फिंग — को मेगापिक्सल रेज़ोल्यूशन की छवियों पर मिलीसेकंड में लागू करने की अनुमति देता है।
CoreImage आर्किटेक्चर आलसी मूल्यांकन (lazy evaluation) की अवधारणा पर बनाया गया है: CIFilter CIContext में रेंडर होने तक प्रोसेसिंग नहीं करता। डेवलपर कई CIFilter की एक चेन बनाता है, एक फ़िल्टर के आउटपुट को दूसरे के इनपुट से जोड़ता है, और केवल render कॉल पूरी GPU पाइपलाइन शुरू करता है। यह ग्राफिक्स कार्ड के माध्यम से पास की संख्या को कम करता है और प्रदर्शन बनाए रखता है।
CoreImage वाइड कलर गैमट (P3, sRGB, लीनियर sRGB), HDR इमेज और 16-बिट और 32-बिट पिक्सल फॉर्मेट के साथ काम करने का समर्थन करता है। Neural Engine वाले उपकरणों पर, CoreImage बुद्धिमान प्रोसेसिंग के लिए GPU शेडर्स को Core ML के साथ जोड़ सकता है — उदाहरण के लिए, मशीन लर्निंग पर आधारित स्वचालित रंग सुधार, जैसा कि iOS 17 पर फ़ोटो ऐप में लागू किया गया है।
तीन मुख्य क्लास CoreImage का कोर बनाती हैं: CIImage (डेटा), CIFilter (ऑपरेशन) और CIContext (निष्पादन वातावरण)। प्रत्येक क्लास अपने पाइपलाइन चरण के लिए जिम्मेदार है और जिम्मेदारियों को मिश्रित नहीं करती।
CIImage एक हल्का ऑब्जेक्ट है जो इमेज का वर्णन करता है लेकिन सीधे पिक्सल डेटा नहीं रखता। इसे UIImage, CGImage, Metal टेक्सचर, GL टेक्सचर या डिस्क पर फ़ाइल से बनाया जा सकता है। CIImage अपरिवर्तनीय है — कोई भी फ़िल्टर एप्लिकेशन मूल को संशोधित किए बिना एक नया CIImage बनाता है। यह चरणों के बीच डेटा कॉपी किए बिना परिवर्तन श्रृंखला बनाने की अनुमति देता है।
एक महत्वपूर्ण विशेषता: CIImage रेंडरिंग तक स्क्रीन रेज़ोल्यूशन या कलर स्पेस से बंधा नहीं है। उसी CIImage को स्क्रीन के लिए UIImage और विभिन्न पैरामीटर के साथ प्रिंटिंग के लिए TIFF फ़ाइल में रेंडर किया जा सकता है — CoreImage स्वचालित रूप से प्रोसेसिंग को लक्ष्य संदर्भ के अनुकूल बनाता है।
CIFilter प्रभाव लागू करने के लिए मुख्य क्लास है। प्रत्येक CIFilter इनपुट पैरामीटर (inputImage, inputIntensity, inputRadius, आदि) और एक आउटपुट इमेज वाला शेडर प्रोग्राम है। Apple 200 से अधिक बिल्ट-इन CIFilter भेजता है, जो श्रेणियों में समूहित हैं: CICategoryColorEffect (रंग सुधार), CICategoryBlur (ब्लर), CICategoryStylize (स्टाइलाइज़ेशन), CICategoryGeometryAdjust (ज्यामितीय परिवर्तन)।
कस्टम CIFilter बनाने के लिए, डेवलपर एक Metal शेडर (CIKernel) लिखता है — Metal Shading Language में एक फ़्रैगमेंट शेडर जो प्रत्येक पिक्सल को स्वतंत्र रूप से प्रोसेस करता है। संकलन के बाद, शेडर CIFilter उपवर्ग के रूप में पंजीकृत होता है और Apple के बिल्ट-इन फ़िल्टर के साथ चेन में उपयोग किया जा सकता है।
| श्रेणी | फ़िल्टर उदाहरण | उद्देश्य |
|---|---|---|
| ColorEffect | CIColorControls | चमक, कंट्रास्ट, संतृप्ति |
| Blur | CIGaussianBlur | समायोज्य त्रिज्या के साथ गाऊसी धुंधलापन |
| Stylize | CIPixellate | निर्दिष्ट पैमाने पर पिक्सलेशन |
| GeometryAdjust | CIAffineTransform | एफ़िन मैट्रिक्स के माध्यम से घूर्णन, स्केल, स्थानांतरण |
| Composite | CISourceOverCompositing | अल्फा चैनल के साथ इमेज कंपोज़िटिंग |
CIContext एक भारी ऑब्जेक्ट है जो GPU संसाधन आवंटन, शेडर संकलन और बफ़रिंग का प्रबंधन करता है। CIContext बनाना एक महंगा ऑपरेशन है, इसलिए Apple इसे एप्लिकेशन जीवनचक्र में एक बार बनाने और पुन: उपयोग करने की सलाह देता है। संदर्भ एक विशिष्ट GPU (Metal, OpenGL) या CPU से बंधा होता है और आउटपुट इमेज का कलर स्पेस निर्धारित करता है।
CIFilter लाइब्रेरी लगातार विस्तारित हो रही है: iOS 17 ने HDR प्रोसेसिंग और मशीन लर्निंग के लिए नए फ़िल्टर जोड़े। सभी बिल्ट-इन फ़िल्टर Apple डेवलपर दस्तावेज़ीकरण में प्रलेखित हैं और श्रेणियों या नामों द्वारा खोजे जा सकते हैं। डिवाइस पर उपलब्ध फ़िल्टर खोजने के लिए, CIFilter.filterNames(inCategory:) का उपयोग करें।
CoreImage की मुख्य क्षमता कई CIFilter को एक श्रृंखला में संयोजित करना है। एक फ़िल्टर का आउटपुट inputImage पैरामीटर के माध्यम से दूसरे के इनपुट को फीड किया जाता है। CoreImage रेंडरिंग चरण में श्रृंखला को अनुकूलित करता है: एक ही कलर स्पेस में काम करने वाले आसन्न फ़िल्टर एक ही GPU पास (kernel fusion) में संयुक्त हो जाते हैं। यह डेवलपर हस्तक्षेप के बिना प्रदर्शन लाभ प्रदान करता है।
कस्टम प्रभाव बनाने के लिए, डेवलपर [[kernel]] एनोटेशन के साथ एक Metal फ़ंक्शन लिखता है। फ़ंक्शन पिक्सल निर्देशांक प्राप्त करता है और एक रंग लौटाता है। CoreImage शेडर को GPU को भेजता है, जहाँ यह इमेज के सभी पिक्सल के लिए समानांतर रूप से निष्पादित होता है। कस्टम फ़िल्टर विशिष्ट दृश्य प्रभावों के लिए विशेष रूप से उपयोगी होते हैं: गैर-रैखिक वक्र के साथ सेपिया, फैलाव धुंधलापन, या फिल्म ग्रेन सिमुलेशन।
#include <CoreImage/CoreImage.h>
[[kernel]] float4 customFilter(sample_t s, float intensity) {
float4 result;
result.rgb = s.rgb * (1.0 - intensity) + s.r * intensity;
result.a = s.a;
return result;
}
CoreImage स्वचालित रूप से मध्यवर्ती परिणामों के कैश का प्रबंधन करता है। यदि एक ही फ़िल्टर श्रृंखला विभिन्न छवियों पर लागू की जाती है, तो CoreImage संकलित शेडर्स का पुन: उपयोग कर सकता है। अधिकतम प्रदर्शन के लिए, प्रत्येक फ्रेम के लिए CIContext बनाने से बचें — एक संदर्भ का उपयोग करें और फ़िल्टर के इनपुट पैरामीटर रीसेट करें।
CIDetector Vision या Core ML का उपयोग किए बिना इमेज में सिमैंटिक ऑब्जेक्ट का पता लगाने के लिए CoreImage उपप्रणाली है। CIDetector चार प्रकार की डिटेक्शन का समर्थन करता है: चेहरे (CIDetectorTypeFace), टेक्स्ट (CIDetectorTypeText), QR कोड (CIDetectorTypeQRCode) और आयत (CIDetectorTypeRectangle)। डिटेक्टर NEON निर्देशों के लिए अनुकूलन के साथ CPU पर काम करता है, जो शक्तिशाली GPU के बिना उपकरणों पर स्थिर गति सुनिश्चित करता है।
चेहरा डिटेक्टर CIDetectorTypeFace चेहरे की सीमा निर्देशांक, आँख और मुँह की स्थिति के साथ CIFaceFeature की एक सरणी लौटाता है। iOS 12 से, CIDetector मुस्कान (hasSmile) और बाएँ/दाएँ आँख की स्थिति (leftEyeClosed, rightEyeClosed) का भी पता लगाता है। डिटेक्शन सटीकता अधिकांश AR और फोटो अनुप्रयोगों के लिए पर्याप्त है, लेकिन महत्वपूर्ण परिदृश्यों के लिए Apple Vision.framework की सिफारिश करता है।
CIDetectorTypeRectangle इमेज में आयताकार क्षेत्रों को ढूँढता है — दस्तावेज़, व्यवसाय कार्ड, डिवाइस स्क्रीन। डिटेक्टर चार बिंदुओं के साथ CIRectangleFeature लौटाता है जो आयत की रूपरेखा बनाते हैं। WWDC 2024 के अनुसार, आयत डिटेक्टर Vision के समान न्यूरल नेटवर्क आर्किटेक्चर का उपयोग करता है, लेकिन कम मेमोरी खपत के साथ। यह इसे रीयल-टाइम फ्रेम स्ट्रीम प्रोसेसिंग के लिए पसंदीदा बनाता है, उदाहरण के लिए, दस्तावेज़ स्कैनर अनुप्रयोगों में।
व्यावहारिक उदाहरण CoreImage की समझ को मजबूत करने में मदद करेंगे। आइए दो विशिष्ट परिदृश्यों को देखें: फोटो पर रंग फ़िल्टर लागू करना और बाउंडिंग बॉक्स ड्राइंग के साथ चेहरे का पता लगाना।
CISepiaTone फ़िल्टर का एक मूल उदाहरण, जो रंगीन इमेज को सेपिया टोन में बदलता है। फ़िल्टर inputIntensity पैरामीटर को 0 (मूल) से 1 (अधिकतम प्रभाव) तक स्वीकार करता है। आलसी मूल्यांकन पर ध्यान दें: filter.outputImage द्वारा लौटाया गया CIImage पिक्सल नहीं रखता — रेंडरिंग केवल context.createCGImage कॉल करने पर होती है।
import CoreImage
guard let inputImage = CIImage(image: uiImage) else { return }
let filter = CIFilter(name: "CISepiaTone")
filter?.setValue(inputImage, forKey: kCIInputImageKey)
filter?.setValue(0.8, forKey: kCIInputIntensityKey)
let context = CIContext()
let outputImage = filter?.outputImage
let cgImage = context.createCGImage(outputImage!, from: inputImage.extent)
let resultImage = UIImage(cgImage: cgImage!)
निम्नलिखित उदाहरण इमेज में चेहरे खोजने और प्रत्येक पाए गए चेहरे के चारों ओर एक आयत बनाने के लिए CIDetector का उपयोग करता है। CIFaceFeature में इमेज कोऑर्डिनेट सिस्टम (मूल निचले-बाएँ कोने में) में निर्देशांक होते हैं, इसलिए UIKit पर ड्राइंग करते समय, एफ़िन ट्रांसफॉर्म के माध्यम से निर्देशांक परिवर्तन आवश्यक है।
let detector = CIDetector(
ofType: CIDetectorTypeFace,
context: context,
options: [CIDetectorAccuracy: CIDetectorAccuracyHigh]
)
let features = detector?.features(in: inputImage) as? [CIFaceFeature]
for face in features ?? [] {
print("Face bounds: \(face.bounds)")
if face.hasSmile {
print("व्यक्ति मुस्कुरा रहा है")
}
}
अंतिम उदाहरण तीन फ़िल्टर की श्रृंखला प्रदर्शित करता है: रंग सुधार, विगनेटिंग और टेक्सचर ओवरले। ध्यान दें कि पहले फ़िल्टर का outputImage बिना मध्यवर्ती रेंडरिंग के दूसरे को inputImage के रूप में पास किया जाता है। जब createCGImage कॉल किया जाता है, CoreImage सभी तीनों ऑपरेशनों को एक ही GPU पास में संयोजित करता है।
let colorFilter = CIFilter(name: "CIColorControls")
colorFilter?.setValue(inputImage, forKey: kCIInputImageKey)
colorFilter?.setValues([
kCIInputBrightnessKey: 0.1,
kCIInputContrastKey: 1.2
])
let vignetteFilter = CIFilter(name: "CIVignette")
vignetteFilter?.setValue(colorFilter?.outputImage, forKey: kCIInputImageKey)
vignetteFilter?.setValue(2.0, forKey: "inputRadius")
let finalImage = vignetteFilter?.outputImage
let result = context.createCGImage(finalImage!, from: inputImage.extent)
अक्सर पूछे जाने वाले प्रश्न
CoreImage GPU पर चलता है और पिक्सल ऑपरेशन (फ़िल्टर, रंग सुधार) के लिए अनुकूलित है, जबकि Core Graphics वेक्टर ड्राइंग और 2D संदर्भों के लिए CPU लाइब्रेरी है। CoreImage बैच इमेज प्रोसेसिंग के लिए तेज़ है, Core Graphics चरण-दर-चरण इंटरफ़ेस ड्राइंग के लिए अधिक सटीक है।
हाँ — CoreImage AVPlayerItemVideoOutput या AVCaptureOutput के माध्यम से व्यक्तिगत वीडियो फ्रेम की प्रोसेसिंग का समर्थन करता है। स्ट्रीमिंग प्रोसेसिंग के लिए, CIFilter के साथ AVVideoComposition का उपयोग करें, जो CPU और GPU के बीच फ्रेम कॉपी किए बिना प्रभाव लागू करने की अनुमति देता है।
CoreImage डिफ़ॉल्ट रूप से sRGB कार्य कलर स्पेस (kCGColorSpaceSRGB) में काम करता है। CIContext बनाते समय, आप एक वैकल्पिक स्पेस निर्दिष्ट कर सकते हैं — HDR के लिए विस्तारित लीनियर sRGB या वाइड-गैमट डिस्प्ले के लिए Display P3।
कोई सीमा नहीं है श्रृंखला में फ़िल्टर की संख्या पर, लेकिन प्रत्येक 5–7 लगातार फ़िल्टर एक अतिरिक्त GPU पास बनाते हैं। 10 से अधिक फ़िल्टर के लिए, श्रृंखला को समूहों में विभाजित करने और मध्यवर्ती परिणामों को रेंडर करने की सिफारिश की जाती है ताकि शेडर रजिस्टर सीमा से अधिक न हो।
हाँ — CIDetector iOS 5.0 और उससे ऊपर के सभी उपकरणों पर NEON निर्देशों का उपयोग करके CPU पर काम करता है। डिटेक्शन सटीकता सभी उपकरणों पर समान है, लेकिन Apple A12+ चिप्स पर हार्डवेयर-त्वरित न्यूरल नेटवर्क के कारण गति अधिक है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें