CoreImage: الفلاتر ومعالجة الصور

المؤلف: IT Sectr نُشر: 2026-05-06 وقت القراءة: 9 دق

CoreImage هو إطار عمل من Apple لمعالجة الصور والفيديو في الوقت الفعلي، ويوفر العشرات من CIFilter المدمجة لتصحيح الألوان والتمويه وتراكب القوام والكشف. وفقاً لـ توثيق Apple، يستخدم CoreImage وحدة معالجة الرسومات GPU للمعالجة عالية الأداء للبكسل على أجهزة iOS. الإطار يدعم CIImage ككائن صورة غير قابل للتغيير وسلاسل فلاتر لتأليف التأثيرات دون فقدان الجودة.

الخلاصة

  • CoreImage — إطار عمل من Apple لمعالجة الصور والفيديو المُسرّعة بواسطة GPU على iOS وmacOS
  • CIFilter — لبنة البناء الأساسية مع أكثر من 200 تأثير مدمج ودعم لـ Metal shaders المخصصة
  • CIImage — كائن غير قابل للتغيير يمثل صورة في خط أنابيب CoreImage دون الارتباط بتنسيق محدد
  • CIDetector — مكون لكشف الوجوه والنص ورموز QR والمستطيلات في الصورة
  • معالجة GPU — يستخدم CoreImage تلقائياً Metal أو OpenGL للحسابات المتوازية على GPU

ما هو CoreImage

CoreImage هو إطار عمل من Apple لمعالجة الصور النقطية والفيديو، تم تقديمه لأول مرة في macOS 10.4 Tiger وتم نقله إلى iOS 5.0. على عكس Core Graphics أو UIKit، يعمل CoreImage على مستوى shaders البكسل، باستخدام GPU للحسابات المتوازية. هذا يسمح بتطبيق تأثيرات معقدة — التمويه، تصحيح الألوان، التحول — على صور بدقة ميغابكسل في ميلي ثانية.

بنية CoreImage مبنية على مفهوم التقييم الكسول (lazy evaluation): CIFilter لا يقوم بالمعالجة حتى التقديم في CIContext. يبني المطور سلسلة من عدة CIFilter، واصلاً مخرج مرشح واحد إلى مدخل آخر، وفقط استدعاء render يطلق خط أنابيب GPU الكامل. هذا يقلل من عدد التمريرات عبر بطاقة الرسومات ويحافظ على الأداء.

يدعم CoreImage نطاق ألوان واسع (P3، sRGB، sRGB الخطي)، وصور HDR والعمل بتنسيقات بكسل 16 و32 بت. على الأجهزة المزودة بـ Neural Engine، يمكن لـ CoreImage الجمع بين shaders 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 هو برنامج shader مع معاملات إدخال (inputImage، inputIntensity، inputRadius، إلخ) وصورة إخراج واحدة. توفر Apple أكثر من 200 CIFilter مدمجة، مجمعة حسب الفئات: CICategoryColorEffect (تصحيح الألوان)، CICategoryBlur (التمويه)، CICategoryStylize (التنميق)، CICategoryGeometryAdjust (التحويلات الهندسية).

لإنشاء CIFilter مخصص، يكتب المطور shader Metal (CIKernel) — shader أجزاء بلغة Metal Shading Language يعالج كل بكسل بشكل مستقل. بعد التجميع، يتم تسجيل shader كفئة فرعية من CIFilter ويمكن استخدامه في السلاسل جنباً إلى جنب مع فلاتر Apple المدمجة.

الفئةمثال فلترالغرض
ColorEffectCIColorControlsالسطوع، التباين، التشبع
BlurCIGaussianBlurتمويه غاوسي مع نصف قطر قابل للتعديل
StylizeCIPixellateتقسيم الصورة إلى بكسلات بمقياس محدد
GeometryAdjustCIAffineTransformتدوير، تحجيم، إزاحة عبر مصفوفة أفين
CompositeCISourceOverCompositingتأليف الصور مع قناة ألفا

CIContext — بيئة التقديم

CIContext هو كائن ثقيل يدير تخصيص موارد GPU وتجميع shaders والتخزين المؤقت. إنشاء CIContext هو عملية مكلفة، لذلك توصي Apple بإنشائه مرة واحدة طوال دورة حياة التطبيق وإعادة استخدامه. السياق مرتبط بـ GPU محدد (Metal، OpenGL) أو CPU ويحدد فضاء الألوان للصورة الناتجة.

CIFilter: الفلاتر المدمجة و Metal shaders المخصصة

مكتبة CIFilter تتوسع باستمرار: iOS 17 أضافت فلاتر جديدة لمعالجة HDR والتعلم الآلي. جميع الفلاتر المدمجة موثقة في توثيق مطوري Apple ويمكن البحث عنها حسب الفئات أو الأسماء. لاكتشاف الفلاتر المتاحة على الجهاز، استخدم CIFilter.filterNames(inCategory:).

سلسلة من عدة فلاتر

القدرة الرئيسية لـ CoreImage هي تأليف عدة CIFilter في سلسلة. يتم تغذية مخرج فلتر واحد إلى مدخل آخر عبر معامل inputImage. يقوم CoreImage بتحسين السلسلة في مرحلة التقديم: يتم دمج الفلاتر المتجاورة التي تعمل في نفس فضاء الألوان في تمريرة GPU واحدة (kernel fusion). هذا يوفر كسباً في الأداء دون تدخل المطور.

فلاتر مخصصة عبر CIKernel

لإنشاء تأثير مخصص، يكتب المطور دالة Metal بإضافة [[kernel]]. تستقبل الدالة إحداثيات البكسل وتعيد لوناً. يمرر CoreImage shader إلى 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 إعادة استخدام shaders المترجمة. لأقصى أداء، تجنب إنشاء CIContext لكل إطار — استخدم سياقاً واحداً وأعد تعيين معاملات إدخال الفلتر.

CIDetector: كشف الوجوه والنص والأشياء

CIDetector هو نظام فرعي من CoreImage لكشف الأشياء الدلالية في الصورة دون استخدام Vision أو Core ML. يدعم CIDetector أربعة أنواع من الكشف: الوجوه (CIDetectorTypeFace)، النص (CIDetectorTypeText)، رموز QR (CIDetectorTypeQRCode)، والمستطيلات (CIDetectorTypeRectangle). يعمل المكتشف على CPU مع تحسين لتعليمات NEON، مما يضمن سرعة ثابتة على الأجهزة بدون GPU قوي.

كشف الوجوه

مكتشف الوجوه CIDetectorTypeFace يعيد مصفوفة من CIFaceFeature مع إحداثيات حدود الوجه ومواضع العينين والفم. منذ iOS 12، يكتشف CIDetector أيضاً الابتسامة (hasSmile) وموضع العين اليسرى/اليمنى (leftEyeClosed، rightEyeClosed). دقة الكشف كافية لمعظم تطبيقات AR والصور، ولكن للسيناريوهات الحرجة توصي Apple بـ Vision.framework.

كشف المستطيلات

CIDetectorTypeRectangle يجد المناطق المستطيلة في الصورة — المستندات، بطاقات العمل، شاشات الأجهزة. يعيد المكتشف CIRectangleFeature بأربع نقاط تشكل محيط المستطيل. وفقاً لـ WWDC 2024، يستخدم مكتشف المستطيلات نفس بنية الشبكة العصبية مثل Vision، ولكن باستهلاك ذاكرة أقل. وهذا يجعله مفضلاً لمعالجة تدفق الإطارات في الوقت الفعلي، على سبيل المثال، في تطبيقات ماسح المستندات.

أمثلة كود: الفلاتر والكشف في Swift

أمثلة عملية ستساعد في ترسيخ فهم CoreImage. دعنا نلقي نظرة على سيناريوهين نموذجيين: تطبيق فلتر ألوان على صورة وكشف الوجوه مع رسم إطار محيط.

تطبيق تأثير بني على الصورة

مثال أساسي لفلتر CISepiaTone، الذي يحول الصورة الملونة إلى درجات بنية. يقبل الفلتر معامل inputIntensity من 0 (أصلي) إلى 1 (أقصى تأثير). لاحظ التقييم الكسول: CIImage الذي يعيده filter.outputImage لا يحتوي على بكسلات — التقديم يحدث فقط عند استدعاء 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 هي مكتبة CPU للرسم المتجهي وسياقات 2D. CoreImage أسرع للمعالجة الجماعية للصور، Core Graphics أكثر دقة للرسم التدريجي للواجهة.

هل يمكن تطبيق CoreImage على الفيديو في الوقت الفعلي

نعم — يدعم CoreImage معالجة إطارات الفيديو الفردية عبر AVPlayerItemVideoOutput أو AVCaptureOutput. للمعالجة التدفقية، استخدم AVVideoComposition مع CIFilter، مما يسمح بتطبيق التأثيرات دون نسخ الإطارات بين CPU وGPU.

ما ملف الألوان الذي يستخدمه CoreImage افتراضياً

CoreImage افتراضياً يعمل في فضاء الألوان العامل sRGB (kCGColorSpaceSRGB). عند إنشاء CIContext، يمكن تحديد فضاء بديل — sRGB خطي ممتد لـ HDR أو Display P3 للشاشات ذات النطاق الواسع.

كم عدد فلاتر CIFilter التي يمكن دمجها في سلسلة

لا يوجد حد لعدد الفلاتر في السلسلة، لكن كل 5–7 فلاتر متتالية تنشئ تمريرة GPU إضافية. لأكثر من 10 فلاتر، يُنصح بتقسيم السلسلة إلى مجموعات وتقديم نتائج وسيطة لتجنب تجاوز حد سجلات shader.

هل يعمل CIDetector على الأجهزة بدون Neural Engine

نعم — يعمل CIDetector على CPU باستخدام تعليمات NEON على جميع الأجهزة التي تعمل بـ iOS 5.0 وما فوق. دقة الكشف هي نفسها على جميع الأجهزة، لكن السرعة أعلى على رقاقات Apple A12+ بسبب التسريع المادي للشبكات العصبية.

الملخص

  • CoreImage — إطار عمل من Apple مسرّع بـ GPU لمعالجة الصور والفيديو على iOS وmacOS
  • CIImage وCIFilter وCIContext تشكل بنية ثلاثية المستويات مع تقييم كسول
  • أكثر من 200 CIFilter مدمج تغطي معظم مهام تصحيح الألوان والتمويه والتنميق
  • يتم إنشاء الفلاتر المخصصة عبر Metal CIKernel بإضافة [[kernel]]
  • CIDetector يجد الوجوه والنص ورموز QR والمستطيلات دون Vision.framework
  • سلاسل الفلاتر يتم تحسينها تلقائياً عبر kernel fusion في تمريرة GPU واحدة
  • لمعالجة الفيديو في الوقت الفعلي، استخدم AVVideoComposition مع CIFilter

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا