CoreImage: bu nədir, filtrlər və təsvirlərlə iş

Müəllif: IT Sectr Dərc olunub: 2026-05-06 Oxuma vaxtı: 9 dəq

CoreImage — Apple tərəfindən təsvirlərin və videoların real vaxt rejimində işlənməsi üçün çərçivədir, rəng korreksiyası, bulanıqlaşdırma, faktura əlavə etmə və aşkarlama üçün onlarla daxili CIFilter təqdim edir. Apple Documentation məlumatına görə, CoreImage iOS cihazlarında yüksək performanslı piksel emalı üçün GPU-dan istifadə edir. Çərçivə CIImage-i dəyişməz təsvir obyekti və keyfiyyət itkisi olmadan effektlərin kompozisiyası üçün filtr zəncirlərini dəstəkləyir.

Əsas məqamlar

  • CoreImage — iOS və macOS-da GPU sürətləndirməli təsvir və video emalı üçün Apple çərçivəsi
  • CIFilter — 200-dən çox daxili effekt və fərdi Metal şeyderləri dəstəkləyən əsas tikinti bloku
  • CIImage — konkret formata bağlı olmadan CoreImage boru kəmərində təsviri təmsil edən dəyişməz obyekt
  • CIDetector — təsvirdə üzləri, mətni, QR kodları və düzbucaqlıları aşkarlamaq üçün komponent
  • GPU emalı — CoreImage paralel hesablamalar üçün avtomatik olaraq Metal və ya OpenGL-dən istifadə edir

CoreImage nədir

CoreImage — Apple tərəfindən raster təsvirlərin və videoların emalı üçün çərçivədir, ilk dəfə macOS 10.4 Tiger-də təqdim edilmiş və iOS 5.0-a port edilmişdir. Core Graphics və ya UIKit-dən fərqli olaraq, CoreImage piksel şeyderləri səviyyəsində işləyir, paralel hesablamalar üçün GPU-dan istifadə edir. Bu, megapiksel təsvirlərə milisaniyələr ərzində mürəkkəb effektlər — bulanıqlaşdırma, rəng korreksiyası, morfing — tətbiq etməyə imkan verir.

CoreImage arxitekturası tənbəl hesablama (lazy evaluation) konsepsiyasına əsaslanır: CIFilter CIContext-də render anına qədər emalı yerinə yetirmir. Tərtibatçı bir neçə CIFilter-dən zəncir qurur, bir filtrin çıxışını digərinin girişinə birləşdirir və yalnız render çağırışı tam GPU boru kəmərini işə salır. Bu, video kart vasitəsilə keçidlərin sayını minimuma endirir və performansı qoruyur.

CoreImage geniş rəng gamutunu (P3, sRGB, xətti sRGB), HDR təsvirlərini və 16-bit və 32-bit piksel formatları ilə işi dəstəkləyir. Neural Engine olan cihazlarda CoreImage GPU şeyderlərini Core ML ilə birləşdirərək ağıllı emal edə bilər — məsələn, iOS 17-də Foto proqramında olduğu kimi maşın öyrənməsinə əsaslanan avtomatik rəng korreksiyası.

CoreImage arxitekturası: CIImage, CIFilter, CIContext

Üç əsas sinif CoreImage-in özəyini təşkil edir: CIImage (məlumat), CIFilter (əməliyyat) və CIContext (icra mühiti). Hər bir sinif boru kəmərinin öz fazasına cavabdehdir və məsuliyyətləri qarışdırmır.

CIImage — dəyişməz mənbə

CIImage — təsviri təsvir edən, lakin birbaşa piksel məlumatları ehtiva etməyən yüngül obyektdir. UIImage, CGImage, Metal teksturası, GL teksturası və ya diskdəki fayldan yaradıla bilər. CIImage dəyişməzdir — filtrin hər tətbiqi orijinalı dəyişdirmədən yeni CIImage yaradır. Bu, addımlar arasında məlumatların kopyalanması olmadan transformasiya zəncirləri qurmağa imkan verir.

Vacib xüsusiyyət: CIImage render anına qədər ekran təsvir ölçüsünə və ya rəng məkanına bağlı deyil. Eyni CIImage-i ekran üçün UIImage-ə və çap üçün TIFF faylına müxtəlif parametrlərlə render etmək olar — CoreImage avtomatik olaraq emalı hədəf kontekstə uyğunlaşdırır.

CIFilter — emal əməliyyatı

CIFilter — effektlərin tətbiqi üçün əsas sinifdir. Hər bir CIFilter giriş parametrləri (inputImage, inputIntensity, inputRadius və s.) və bir çıxış təsviri olan şeyder proqramıdır. Apple 200-dən çox daxili CIFilter təqdim edir, kateqoriyalar üzrə qruplaşdırılmışdır: CICategoryColorEffect (rəng korreksiyası), CICategoryBlur (bulanıqlaşdırma), CICategoryStylize (stilizasiya), CICategoryGeometryAdjust (həndəsi transformasiyalar).

Fərdi CIFilter yaratmaq üçün tərtibatçı Metal şeyderi (CIKernel) yazır — hər pikseli müstəqil emal edən Metal Shading Language dilində fraqment şeyderi. Kompilyasiyadan sonra şeyder CIFilter-in alt sinfi kimi qeydiyyatdan keçirilir və Apple-ın daxili filtrləri ilə bərabər zəncirlərdə istifadə edilə bilər.

KateqoriyaFiltrlər nümunəsiTəyinat
ColorEffectCIColorControlsParlaqlıq, kontrast, doyma
BlurCIGaussianBlurTənzimlənən radiusla Qauss bulanıqlaşdırması
StylizeCIPixellateMüəyyən miqyasla təsvirin pikselizasiyası
GeometryAdjustCIAffineTransformAffin matrisi vasitəsilə fırlanma, miqyas, sürüşmə
CompositeCISourceOverCompositingAlfa kanalı ilə təsvirlərin üst-üstə qoyulması

CIContext — render mühiti

CIContext — GPU resurslarının ayrılması, şeyderlərin kompilyasiyası və buferləşdirilməsini idarə edən ağır obyektdir. CIContext yaratmaq bahalı əməliyyatdır, buna görə Apple onu proqramın bütün həyat dövrü üçün bir dəfə yaratmağı və təkrar istifadə etməyi tövsiyə edir. Kontekst xüsusi GPU-ya (Metal, OpenGL) və ya CPU-ya bağlıdır və çıxış təsvirinin rəng məkanını müəyyən edir.

CIFilter: daxili filtrlər və fərdi Metal şeyderləri

CIFilter kitabxanası daim genişlənir: iOS 17 HDR emalı və maşın öyrənməsi üçün yeni filtrlər əlavə etmişdir. Bütün daxili filtrlər Apple Developer Documentation-da sənədləşdirilmişdir, onları kateqoriyalar və ya adlar üzrə axtarmaq olar. Cihazda mövcud filtrləri aşkar etmək üçün CIFilter.filterNames(inCategory:) istifadə edin.

Bir neçə filtrdən ibarət zəncir

Əsas imkan CoreImage — bir neçə CIFilter-in zəncirdə kompozisiyası. Bir filtrin çıxışı digərinin girişinə inputImage parametri vasitəsilə verilir. CoreImage render mərhələsində zənciri optimallaşdırır: eyni rəng məkanında işləyən qonşu filtrlər bir GPU keçidində (kernel fusion) birləşdirilir. Bu, tərtibatçının müdaxiləsi olmadan performans qazancı verir.

CIKernel vasitəsilə fərdi filtrlər

Öz effektini yaratmaq üçün tərtibatçı [[kernel]] annotasiyası ilə Metal funksiyası yazır. Funksiya piksel koordinatlarını qəbul edir və rəng qaytarır. CoreImage şeyderi GPU-ya ötürür, burada təsvirin bütün pikselləri üçün paralel olaraq icra olunur. Fərdi filtrlər xüsusi vizual effektlər üçün xüsusilə faydalıdır: qeyri-xətti əyri ilə sepiya, dispersiya bulanıqlaşdırması və ya film dənəsinin imitasiyası.

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;
}

Performans və keşləşdirmə

CoreImage aralıq nəticələrin keşini avtomatik idarə edir. Eyni filtr zənciri müxtəlif təsvirlərə tətbiq edilərsə, CoreImage kompilyasiya olunmuş şeyderləri təkrar istifadə edə bilər. Maksimum performans üçün hər kadr üçün CIContext yaratmaqdan çəkinin — bir kontekstdən istifadə edin və filtrin giriş parametrlərini yenidən qurun.

CIDetector: üzlərin, mətnin və obyektlərin aşkarlanması

CIDetector — Vision və ya Core ML istifadə etmədən təsvirdə semantik obyektlərin aşkarlanması üçün CoreImage alt sistemidir. CIDetector dörd növ deteksiyanı dəstəkləyir: üz (CIDetectorTypeFace), mətn (CIDetectorTypeText), QR kodlar (CIDetectorTypeQRCode) və düzbucaqlılar (CIDetectorTypeRectangle). Detektor NEON təlimatları üçün optimallaşdırma ilə CPU-da işləyir ki, bu da güclü GPU olmayan cihazlarda sabit sürəti təmin edir.

Üz deteksiyası

Üz detektoru CIDetectorTypeFace üz sərhədlərinin koordinatları, gözlərin və ağzın mövqeyi ilə CIFaceFeature massivi qaytarır. iOS 12-dən etibarən CIDetector həmçinin təbəssümü (hasSmile) və sol/sağ gözün vəziyyətini (leftEyeClosed, rightEyeClosed) müəyyən edir. Deteksiya dəqiqliyi əksər AR və foto proqramları üçün kifayətdir, lakin kritik ssenarilər üçün Apple Vision.framework-i tövsiyə edir.

Düzbucaqlı deteksiyası

CIDetectorTypeRectangle təsvirdə düzbucaqlı sahələri — sənədləri, vizit kartlarını, cihaz ekranlarını tapır. Detektor düzbucaqlının konturunu təşkil edən dörd nöqtə ilə CIRectangleFeature qaytarır. WWDC 2024-ə görə, düzbucaqlı detektoru Vision ilə eyni neyron şəbəkə arxitekturasından istifadə edir, lakin daha az yaddaş istehlakı ilə. Bu, onu real vaxt rejimində kadr axınının emalı üçün, məsələn, sənəd skaneri proqramlarında üstünlük təşkil edir.

Kod nümunələri: Swift-də filtrlər və deteksiya

Praktik nümunələr CoreImage-in dərk edilməsini möhkəmləndirməyə kömək edəcək. İki tipik ssenarini nəzərdən keçirək: fotoya rəng filtrinin tətbiqi və çərçivə çəkməklə üz deteksiyası.

Təsvirə sepiya tətbiqi

CISepiaTone filtrinin əsas nümunəsi, rəngli təsviri sepiya tonlarına çevirir. Filtr 0 (orijinal) ilə 1 (maksimum effekt) arasında inputIntensity parametrini qəbul edir. Tənbəl qiymətləndirməyə diqqət yetirin: filter.outputImage tərəfindən qaytarılan CIImage pikselləri ehtiva etmir — render yalnız context.createCGImage çağırışı zamanı baş verir.

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!)

Çərçivə çəkməklə üz deteksiyası

Növbəti nümunə təsvirdə üzləri tapmaq və hər tapılan üzün ətrafında düzbucaqlı çəkmək üçün CIDetector istifadə edir. CIFaceFeature təsvir sistemində koordinatları ehtiva edir (başlanğıc aşağı sol küncdə), buna görə UIKit-də çəkmə zamanı affine transform vasitəsilə koordinatların çevrilməsi tələb olunur.

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("Şəxs gülümsəyir")
    }
}

Bir neçə effektin kompozisiyası

Son nümunə üç filtrdən ibarət zənciri nümayiş etdirir: rəng korreksiyası, vinyetləşdirmə və faktura əlavə edilməsi. Diqqət yetirin ki, birinci filtrin outputImage-i aralıq render olmadan ikinciyə inputImage kimi ötürülür. createCGImage çağırışı zamanı CoreImage hər üç əməliyyatı bir GPU keçidində birləşdirir.

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)

Tez-tez verilən suallar

CoreImage Core Graphics-dən nə ilə fərqlənir?

CoreImage GPU-da işləyir və piksel əməliyyatları (filtrlər, rəng korreksiyası) üçün optimallaşdırılmışdır, Core Graphics isə vektor çəkmə və 2D kontekstləri üçün CPU kitabxanasıdır. CoreImage təsvirlərin kütləvi emalı üçün daha sürətli, Core Graphics interfeysin addım-addım çəkilməsi üçün daha dəqiqdir.

CoreImage-i real vaxt rejimində videoya tətbiq etmək olar?

Bəli — CoreImage AVPlayerItemVideoOutput və ya AVCaptureOutput vasitəsilə ayrı-ayrı video kadrlarının emalını dəstəkləyir. Axın emalı üçün AVVideoComposition with CIFilter istifadə edin ki, bu da CPU və GPU arasında kadrların kopyalanması olmadan effektlər tətbiq etməyə imkan verir.

CoreImage defolt olaraq hansı rəng profilindən istifadə edir?

CoreImage defolt olaraq sRGB (kCGColorSpaceSRGB) iş rəng məkanında işləyir. CIContext yaradarkən alternativ məkan — HDR üçün extended linear sRGB və ya geniş gamutlu displeylər üçün Display P3 təyin edilə bilər.

Zəncirdə neçə CIFilter birləşdirilə bilər?

Zəncirdə filtrlərin sayında məhdudiyyət yoxdur, lakin hər 5–7 ardıcıl filtr əlavə GPU keçidi yaradır. 10-dan çox filtr üçün zənciri qruplara bölmək və şeyder registrlərinin limitini aşmamaq üçün aralıq nəticələri render etmək tövsiyə olunur.

CIDetector Neural Engine olmayan cihazlarda işləyir?

Bəli — CIDetector iOS 5.0 və daha yuxarı versiyaları olan bütün cihazlarda NEON təlimatlarından istifadə edərək CPU-da işləyir. Deteksiya dəqiqliyi bütün cihazlarda eynidir, lakin Apple A12+ çiplərində neyron şəbəkələrin aparat sürətləndirilməsi səbəbindən sürət daha yüksəkdir.

Nəticə

  • CoreImage — iOS və macOS-da təsvir və video emalı üçün GPU sürətləndirməli Apple çərçivəsi
  • CIImage, CIFilterCIContext tənbəl hesablamalarla üç qatlı arxitektura təşkil edir
  • 200-dən çox daxili CIFilter rəng korreksiyası, bulanıqlaşdırma və stilizasiya tapşırıqlarının əksəriyyətini əhatə edir
  • Fərdi filtrlər [[kernel]] annotasiyası ilə Metal CIKernel vasitəsilə yaradılır
  • CIDetector Vision.framework-i birləşdirmədən üzləri, mətni, QR kodları və düzbucaqlıları tapır
  • Filtr zəncirləri kernel fusion vasitəsilə bir GPU keçidində avtomatik optimallaşdırılır
  • Real vaxt rejimində video emalı üçün CIFilter ilə AVVideoComposition istifadə edin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun