CoreImage: فلٹرز اور امیج پروسیسنگ

مصنف: IT Sectr اشاعت: 2026-05-06 مطالعے کا وقت: 9 منٹ

CoreImage ریال ٹائم امیج اور ویڈیو پروسیسنگ کے لیے Apple کا فریم ورک ہے، جو رنگ درستی، دھندلاپن، بناورٹ اورلے اور پتا لگانے کے لیے درجنوں بہترین CIFilter فراہم کرتا ہے۔ Apple دستاویز کے مطابق، CoreImage iOS آلات پر اعلی کارکردگی پاکسل پروسیسنگ کے لیے GPU استعمال کرتا ہے۔ یہ فریم ورک CIImage کو ایک ناقابل تغییر امیج آبجیکٹ اور معیار کے نقصان کے بغیر افیکٹس کی ترتیب کے لیے فلٹر زنجیروں کی حمایت کرتا ہے۔

اہم نکات

  • CoreImage — iOS اور macOS پر GPU سے تیز شدہ امیج اور ویڈیو پروسیسنگ کے لیے Apple کا فریم ورک
  • CIFilter — 200 سے زائد بہترین افیکٹس اور کسٹم Metal شیڈرز کی حمایت کے ساتھ بنیادی بلڈنگ بلاک
  • CIImage — ناقابل تغییر آبجیکٹ جو کسی مخصوص فارمیٹ سے منسلک ہوئے بغیر CoreImage پائپ لائن میں امیج کی نمائندگی کرتا ہے
  • CIDetector — امیج میں چهرے، متن، QR کوڈ اور مستطیلات کا پتا لگانے کا جزو
  • GPU پروسیسنگ — CoreImage GPU پر متوازی حسابوں کے لیے خودکار طور پر Metal یا OpenGL استعمال کرتا ہے

CoreImage کیا ہے

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

تین اہم کلاسز CoreImage کا مرکزی حصہ بناتے ہیں: CIImage (ڈیٹا)، CIFilter (عمل) اور CIContext (عمل کا ماحول)۔ ہر کلاس پائپ لائن کے اپنے مرحلے کے لیے ذمہ دار ہے اور ذمہ داریوں کو مکس نہیں کرتا۔

CIImage — ناقابل تغییر وسیلہ

CIImage ایک ہلکا آبجیکٹ ہے جو امیج کی وضاحت کرتا ہے لیکن براہ راست پاکسل ڈیٹا نہیں رکھتا۔ یہ UIImage، CGImage، Metal ٹیکسچر، GL ٹیکسچر یا ڈائسک پر فائل سے بنایا جا سکتا ہے۔ CIImage ناقابل تغییر ہے — کوئی بھی فلٹر استعمال اصل میں ترمیم کیئے بغیر ایک نائیا CIImage بناتا ہے۔ یہ مراحل کے درمیان ڈیٹا کوپی کیئے بغیر تبدیل کی زنجیریں بنانے کی اجازت دیتا ہے۔

ایک اہم خوبی: CIImage رینڈر ہونے تک سکرین ریزولیشن یا رنگ کی جگہ سے منسلک نہیں ہے۔ ایک ہی CIImage کو سکرین کے لیے UIImage اور مختلف پیرامیٹرز کے ساتھ پرائنٹنگ کے لیے TIFF فائل میں رینڈر کیا جا سکتا ہے — CoreImage خودکار طور پر پروسیسنگ کو ہدف کے سیاق کے مطابق اپناتا ہے۔

CIFilter — پروسیسنگ کا عمل

CIFilter افیکٹس لاگو کرنے کی مرکزی کلاس ہے۔ ہر CIFilter ایک شیڈر پروگرام ہے جس میں انپٹ پیرامیٹرز (inputImage، inputIntensity، inputRadius وغیرہ) اور ایک آؤٹ پٹ امیج ہے۔ Apple 200 سے زائد بہترین CIFilter فراہم کرتا ہے، جو زمروں کے مطابق گروپ کیئے گئے ہیں: CICategoryColorEffect (رنگ درستی)، CICategoryBlur (دھندلاپن)، CICategoryStylize (اسٹائلائزیشن)، CICategoryGeometryAdjust (ہندسی تبدیلات)۔

کسٹم CIFilter بنانے کے لیے، ڈیولپر ایک Metal شیڈر (CIKernel) لکھتا ہے — Metal Shading Language میں ایک فرگمنٹ شیڈر جو ہر پاکسل کو آزادانہ پروسیس کرتا ہے۔ ترتیب کے بعد، شیڈر CIFilter کے ذیلی طبقے کے طور پر رجسٹر ہو جاتا ہے اور Apple کے بہترین فلٹرز کے ساتھ زنجیروں میں استعمال کیا جا سکتا ہے۔

زمرہفلٹر کی مثالمقصد
ColorEffectCIColorControlsچمکی، کنٹراسٹ، سیچوریشن
BlurCIGaussianBlurمطبق کرنے کا نیصف قطر کے ساتھ گاوسیائی دھندلاپن
StylizeCIPixellateمتعین پیمانے پر پاکسلیشن
GeometryAdjustCIAffineTransformافین میٹرکس کے ذریعے گھماو، پیمانہ، منتقلی
CompositeCISourceOverCompositingالفا چینل کے ساتھ امیج کا اجتماع

CIContext — رینڈر کا ماحول

CIContext ایک بھاری آبجیکٹ ہے جو GPU وسائل کی تقسیم، شیڈر ترتیب اور بفرنگ کا انتظام کرتا ہے۔ CIContext بنانا ایک مہنگا عمل ہے، لہذا Apple ایپ کے لائف سائکل میں ایک بار بنانے اور دوبارہ استعمال کرنے کی سفارش کرتا ہے۔ سیاق ایک مخصوص GPU (Metal، OpenGL) یا CPU سے منسلک ہوتا ہے اور آؤٹ پٹ امیج کی رنگ جگہ کا تعین کرتا ہے۔

CIFilter: بہترین فلٹرز اور کسٹم Metal شیڈرز

CIFilter لائبریری مسلسل پھیل رہی ہے: iOS 17 نے HDR پروسیسنگ اور مشین لرننگ کے لیے نئے فلٹر شامل کیئے ہیں۔ تمام بہترین فلٹرز Apple ڈیولپر ڈاکیومینٹیشن میں دستاویز ہیں اور زمروں یا ناموں سے چھانے جا سکتے ہیں۔ آلہ پر دستیاب فلٹرز کو دریافت کرنے کے لیے CIFilter.filterNames(inCategory:) استعمال کریں۔

کئے فلٹرز کی زنجیر

CoreImage کی اهم صلاحیت کئے CIFilter کو ایک زنجیر میں ترتیب دینا ہے۔ ایک فلٹر کا آؤٹ پٹ inputImage پیرامیٹر کے ذریعے دوسرے کے انپٹ میں کھلایا جاتا ہے۔ CoreImage رینڈرنگ کے مرحلے پر زنجیر کو بہتر کرتا ہے: ایک ہی رنگ کی جگہ میں کام کرنے والے متصل فلٹر ایک ہی GPU پاس (کرنل فیوژن) میں ملا دیئے جاتے ہیں۔ یہ ڈیولپر کی مدخلت کے بغیر کارکردگی میں بہتری لاتا ہے۔

CIKernel کے ذریعے کسٹم فلٹر

کسٹم افیکٹ بنانے کے لیے، ڈیولپر [[kernel]] اینوٹیشن کے ساتھ ایک Metal فنکشن لکھتا ہے۔ فنکشن پاکسل کوئارڈینیٹس وصول کرتا ہے اور ایک رنگ واپس کرتا ہے۔ CoreImage شیڈر کو GPU پر بھیجتا ہے، جہاں یہ تصویر کے تمام پاکسلز کے لیے متوازی طور پر عمل کرتا ہے۔ کسٹم فلٹر منفرد بصری افیکٹس کے لیے مفید ہیں: غیر لینیر وکر کے ساتھ سیپیا، پراگیندگی دھندلاپن یا فلم گرین سیمیولیشن۔

metal
#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: چہرے، متن اور آبجیکٹس کا پتا لگانا

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 کے جیسی نیورل نیٹورک آرکیٹیکچر استعمال کرتا ہے، لیکن کم میمری استعمال کے ساتھ۔ یہ اسے ریال ٹائم فریم سٹریم پروسیسنگ کے لیے ترجیح دیتا ہے، مثال کے طور پر، دستاویز سکینر ایپلیکیشنز میں۔

کوڈ کی مثالیں: Swift میں فلٹرز اور پتا لگانا

عملی مثالیں CoreImage کی سمجھ کو مضبوط کرنے میں مدد کریں گی، آئے دو عام مناظر پر نظر ڈالیں: فوٹو پر رنگ کا فلٹر لاگو کرنا اور حدود کا باکس بنانے کے ساتھ چہرے کا پتا لگانا۔

تصویر پر سیپیا لاگو کرنا

CISepiaTone فلٹر کی ایک بنیادی مثال، جو رنگین تصویر کو سیپیا ٹون میں تبدیل کرتا ہے۔ فلٹر inputIntensity پیرامیٹر کو 0 (اصل) سے 1 (زیادہ سے زیادہ افیکٹ) تک قبول کرتا ہے۔ سسٹ درجہ بندی پر توجہ دیں: filter.outputImage کے ذریعے واپس کیا گیا CIImage پاکسل نہیں رکھتا — رینڈرنگ صرف context.createCGImage کۇ بولانے پر ہوتا ہے۔

swift
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 پر کذیرے کے وقت، افین تبدیل کے ذریعے کوآرڈینیٹ تبدیل درکار ہے۔

swift
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 پاس میں ملا دیتا ہے۔

swift
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 Core Graphics سے کیسے مختلف ہے

CoreImage GPU پر چلتا ہے اور پاکسل آپریشنز (فلٹرز، رنگ درستی) کے لیے متاثر ہے، جبکہ Core Graphics ویکٹر ڈرائنگ اور 2D کانٹیکسٹ کے لیے ایک CPU لائبریری ہے۔ CoreImage بیچ امیج پروسیسنگ کے لیے تیز ہے، Core Graphics مرحلہ بہ مرحلہ انٹرفیس کذیرے کے لیے زیادہ درست ہے۔

کیا CoreImage کو ریال ٹائم ویڈیو پر لاگو کیا جا سکتا ہے

ہاں — CoreImage AVPlayerItemVideoOutput یا AVCaptureOutput کے ذریعے انفرادی ویڈیو فریمز کی پروسیسنگ کی حمایت کرتا ہے۔ سٹریمنگ پروسیسنگ کے لیے CIFilter کے ساتھ AVVideoComposition استعمال کریں، جو CPU اور GPU کے درمیان فریمز کوپی کیئے بغیر افیکٹس لاگو کرنے کی اجازت دیتا ہے۔

CoreImage دیفالٹ طور پر کون سا رنگ پروفائل استعمال کرتا ہے

CoreImage دیفالٹ طور پر sRGB ورکنگ رنگ جگہ (kCGColorSpaceSRGB) میں کام کرتا ہے۔ CIContext بناتے وقت، آپ ایک متبادل جگہ متعین کر سکتے ہیں — HDR کے لیے وسیع لینیر sRGB یا وسیع گیمٹ ڈسپلے کے لیے Display P3۔

ایک زنجیر میں کتنے CIFilter فلٹر جوڑے جا سکتے ہیں

زنجیر میں فلٹرز کی تعداد پر کوئی حد نہیں ہے، لیکن ہر 5–7 لگاتار فلٹر ایک اضافی GPU پاس بناتے ہیں۔ 10 سے زائد فلٹرز کے لیے، شیڈر رجسٹر کی حد سے تجاوز سے بچنے کے لیے زنجیر کو گروپوں میں تقسیم کرنے اور درمیانی نتائج کو رینڈر کرنے کی سفارش کی جاتی ہے۔

کیا CIDetector Neural Engine کے بغیر آلات پر کام کرتا ہے

ہاں — CIDetector iOS 5.0 اور اس سے بالا سب آلات پر NEON ہدایات استعمال کرتے ہوئے CPU پر کام کرتا ہے۔ ڈیٹیکشن کی درستی سب آلات پر ایک جیسی ہے، لیکن Apple A12+ چیپس پر ہارڈویئر سے تیز کیئے گئے نیورل نیٹورکس کی وجہ سے رفتار زیادہ ہہتی ہے۔

خلاصہ

  • CoreImage — iOS اور macOS پر GPU سے تیز شدہ امیج اور ویڈیو پروسیسنگ کے لیے Apple کا فریم ورک
  • CIImage، CIFilter اور CIContext سسٹ درجہ بندی کے ساتھ تین ٹائر کا آرکیٹیکچر بناتے ہیں
  • 200 سے زائد بہترین CIFilter زیادہ تر رنگ درستی، دھندلاپن اور اسٹائلائزیشن کے کاموں کو شامل کرتے ہیں
  • کسٹم فلٹر [[kernel]] اینوٹیشن کے ساتھ Metal CIKernel کے ذریعے بنائے جاتے ہیں
  • CIDetector Vision.framework کے بغیر چہرے، متن، QR کوڈ اور مستطیلات چھونتا ہے
  • فلٹر زنجیروں کو کرنل فیوژن کے ذریعے ایک GPU پاس میں خودکار طور پر بہتر کیا جاتا ہے
  • ریال ٹائم ویڈیو پروسیسنگ کے لیے CIFilter کے ساتھ AVVideoComposition استعمال کریں

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

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

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

مزید پڑھیں