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]] اینوٹیشن کے ساتھ ایک 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں