CoreImage: bu nima, filtrlar va tasvirlar bilan ishlash

Muallif: IT Sectr Nashr etilgan: 2026-05-06 O'qish vaqti: 9 daq

CoreImage — bu Apple-ning tasvirlar va videolarni real vaqtda qayta ishlash freymvorki bo‘lib, ranglarni tuzatish, xiralashtirish, tekstura qo‘shish va aniqlash uchun o‘nlab o‘rnatilgan CIFilter-larni taqdim etadi. Apple Documentation ma’lumotlariga ko‘ra, CoreImage iOS qurilmalarida yuqori unumdorlik bilan piksel qayta ishlash uchun GPU dan foydalanadi. Freymvork CIImage ni o‘zgarmas tasvir obyekti va sifat yo‘qotilmasdan effektlar kompozitsiyasi uchun filtr zanjirlarini qo‘llab-quvvatlaydi.

Asosiy ma’lumotlar

  • CoreImage — iOS va macOS da GPU tezlashtirilgan tasvir va video qayta ishlash uchun Apple freymvorki
  • CIFilter — 200 dan ortiq o‘rnatilgan effektlar va maxsus Metal shaderlari qo‘llab-quvvatlanadigan asosiy qurilish bloki
  • CIImage — muayyan formatga bog‘lanmagan holda CoreImage quvuridagi tasvirni ifodalovchi o‘zgarmas obyekt
  • CIDetector — tasvirda yuzlar, matnlar, QR kodlar va to‘rtburchaklarni aniqlash uchun komponent
  • GPU qayta ishlash — CoreImage GPU da parallel hisoblashlar uchun avtomatik ravishda Metal yoki OpenGL dan foydalanadi

CoreImage nima

CoreImage bu Apple-ning rastrli tasvirlar va videolarni qayta ishlash freymvorki bo‘lib, birinchi marta macOS 10.4 Tiger da taqdim etilgan va iOS 5.0 ga ko‘chirilgan. Core Graphics yoki UIKit dan farqli o‘laroq, CoreImage piksel shaderlari darajasida ishlaydi va parallel hisoblashlar uchun GPU dan foydalanadi. Bu megapiksel o‘lchamidagi tasvirlarga millisekundlarda murakkab effektlar — xiralashtirish, rang tuzatish, morfing qo‘llash imkonini beradi.

CoreImage arxitekturasi dangasa hisoblash (lazy evaluation) kontseptsiyasiga asoslangan: CIFilter CIContext da renderlash vaqtigacha qayta ishlashni bajarmaydi. Dasturchi bir nechta CIFilter dan zanjir quradi, bir filtrning chiqishini ikkinchisining kirishiga ulaydi va faqat render chaqiruvi to‘liq GPU quvurini ishga tushiradi. Bu grafik karta orqali o‘tishlar sonini minimallashtiradi va unumdorlikni saqlaydi.

CoreImage keng rang gamutini (P3, sRGB, chiziqli sRGB), HDR tasvirlarini va 16-bitli va 32-bitli piksel formatlari bilan ishlashni qo‘llab-quvvatlaydi. Neural Engine ga ega qurilmalarda CoreImage GPU shaderlarini Core ML bilan birlashtirib, aqlli qayta ishlashni amalga oshirishi mumkin — masalan, iOS 17 dagi Foto ilovasida qo‘llanilganidek, mashina o‘rganishiga asoslangan avtomatik rang tuzatish.

CoreImage arxitekturasi: CIImage, CIFilter, CIContext

Uchta asosiy sinf CoreImage yadrosini tashkil qiladi: CIImage (ma’lumotlar), CIFilter (operatsiya) va CIContext (ijro muhiti). Har bir sinf quvurning o‘z fazasi uchun javobgardir va mas’uliyatlarni aralashtirmaydi.

CIImage — o‘zgarmas manba

CIImage bu tasvirni tavsiflovchi, ammo bevosita piksel ma’lumotlarini o‘z ichiga olmaydigan yengil obyektdir. UIImage, CGImage, Metal teksturasi, GL teksturasi yoki diskdagi fayldan yaratilishi mumkin. CIImage o‘zgarmasdir — filtrning har bir qo‘llanilishi asl nusxani o‘zgartirmasdan yangi CIImage yaratadi. Bu bosqichlar orasida ma’lumotlarni nusxalashsiz transformatsiya zanjirlarini qurish imkonini beradi.

Muhim xususiyat: CIImage renderlash vaqtigacha ekran o‘lchamiga yoki rang fazosiga bog‘liq emas. Xuddi shu CIImage ni turli parametrlar bilan ekran uchun UIImage ga va chop etish uchun TIFF fayliga renderlash mumkin — CoreImage avtomatik ravishda qayta ishlashni maqsadli kontekstga moslashtiradi.

CIFilter — qayta ishlash operatsiyasi

CIFilter effektlarni qo‘llash uchun asosiy sinfdir. Har bir CIFilter kirish parametrlari (inputImage, inputIntensity, inputRadius va h.k.) va bitta chiqish tasviri bilan shader dasturidir. Apple 200 dan ortiq o‘rnatilgan CIFilter ni yetkazib beradi, ular kategoriyalarga guruhlangan: CICategoryColorEffect (rang tuzatish), CICategoryBlur (xiralashtirish), CICategoryStylize (stilizatsiya), CICategoryGeometryAdjust (geometrik transformatsiyalar).

Maxsus CIFilter yaratish uchun dasturchi Metal shaderini (CIKernel) yozadi — Metal Shading Language da har bir pikselni mustaqil qayta ishlaydigan fragment shaderi. Kompilyatsiyadan so‘ng shader CIFilter ning kichik sinfi sifatida ro‘yxatga olinadi va Apple-ning o‘rnatilgan filtrlari bilan bir qatorda zanjirlarda ishlatilishi mumkin.

KategoriyaFiltr namunasiMaqsad
ColorEffectCIColorControlsYorqinlik, kontrast, to‘yinganlik
BlurCIGaussianBlurSozlanadigan radius bilan Gauss xiralashtirishi
StylizeCIPixellateBelgilangan masshtab bilan tasvirni piksellashtirish
GeometryAdjustCIAffineTransformAffin matritsasi orqali aylantirish, masshtablash, siljitish
CompositeCISourceOverCompositingAlfa kanali bilan tasvirlarni ustma-ust qo‘yish

CIContext — renderlash muhiti

CIContext — GPU resurslarini ajratish, shaderlarni kompilyatsiya qilish va buferlashtirishni boshqaradigan og‘ir obyektdir. CIContext yaratish qimmat operatsiyadir, shuning uchun Apple uni ilovaning butun hayotiy sikli uchun bir marta yaratish va qayta ishlatishni tavsiya qiladi. Kontekst ma’lum bir GPU (Metal, OpenGL) yoki CPU ga bog‘langan va chiqish tasvirining rang fazosini belgilaydi.

CIFilter: o‘rnatilgan filtrlar va maxsus Metal shaderlari

CIFilter kutubxonasi doimiy ravishda kengayib bormoqda: iOS 17 HDR qayta ishlash va mashina o‘rganishi uchun yangi filtrlarni qo‘shdi. Barcha o‘rnatilgan filtrlar Apple Developer Documentation da hujjatlashtirilgan, ularni kategoriyalar yoki nomlar bo‘yicha qidirish mumkin. Qurilmada mavjud filtrlarni aniqlash uchun CIFilter.filterNames(inCategory:) dan foydalaning.

Bir nechta filtrdan iborat zanjir

Asosiy imkoniyat CoreImage — bir nechta CIFilter ni zanjirda kompozitsiya qilish. Bir filtrning chiqishi inputImage parametri orqali keyingisining kirishiga beriladi. CoreImage renderlash bosqichida zanjirni optimallashtiradi: bir rang fazosida ishlaydigan qo‘shni filtrlari bitta GPU o‘tishida (kernel fusion) birlashtiriladi. Bu dasturchining aralashuvisiz unumdorlikni oshirishni ta’minlaydi.

CIKernel orqali maxsus filtrlar

O‘z effektini yaratish uchun dasturchi [[kernel]] annotatsiyasi bilan Metal funksiyasini yozadi. Funksiya piksel koordinatalarini qabul qiladi va rangni qaytaradi. CoreImage shaderni GPU ga yuboradi, u yerda tasvirning barcha piksellari uchun parallel ravishda bajariladi. Maxsus filtrlar, ayniqsa, noyob vizual effektlar uchun foydalidir: chiziqli bo‘lmagan egri chiziq bilan sepya, dispersiya xiralashtirishi yoki film donasini taqlid qilish.

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

Unumdorlik va keshlash

CoreImage oraliq natijalar keshlarini avtomatik boshqaradi. Agar bir xil filtr zanjiri turli tasvirlarga qo‘llanilsa, CoreImage kompilyatsiya qilingan shaderlarni qayta ishlatishi mumkin. Maksimal unumdorlik uchun har bir kadr uchun CIContext yaratishdan saqlaning — bitta kontekstdan foydalaning va filtrning kirish parametrlarini qayta o‘rnating.

CIDetector: yuzlar, matn va obyektlarni aniqlash

CIDetector — Vision yoki Core ML dan foydalanmasdan tasvirda semantik obyektlarni aniqlash uchun CoreImage quyi tizimi. CIDetector to‘rt turdagi deteksiyani qo‘llab-quvvatlaydi: yuz (CIDetectorTypeFace), matn (CIDetectorTypeText), QR kodlar (CIDetectorTypeQRCode) va to‘rtburchaklar (CIDetectorTypeRectangle). Detektor NEON ko‘rsatmalari uchun optimallashtirilgan CPU da ishlaydi, bu kuchli GPU ga ega bo‘lmagan qurilmalarda barqaror tezlikni ta’minlaydi.

Yuzni aniqlash

Yuz detektori CIDetectorTypeFace yuz chegaralari, ko‘zlar va og‘iz holati koordinatalari bilan CIFaceFeature massivini qaytaradi. iOS 12 dan boshlab CIDetector shuningdek tabassumni (hasSmile) va chap/o‘ng ko‘z holatini (leftEyeClosed, rightEyeClosed) aniqlaydi. Deteksiya aniqligi ko‘pgina AR va foto ilovalari uchun yetarli, ammo muhim stsenariylar uchun Apple Vision.framework ni tavsiya qiladi.

To‘rtburchakni aniqlash

CIDetectorTypeRectangle tasvirda to‘rtburchak maydonlarni — hujjatlar, tashrif qog‘ozlari, qurilma ekranlarini topadi. Detektor to‘rtburchak konturini tashkil etuvchi to‘rt nuqta bilan CIRectangleFeature qaytaradi. WWDC 2024 ga ko‘ra, to‘rtburchak detektori Vision bilan bir xil neyron tarmoq arxitekturasidan foydalanadi, ammo kamroq xotira iste’moli bilan. Bu uni real vaqt rejimida kadrlar oqimini qayta ishlash uchun, masalan, hujjat skaneri ilovalarida afzal qiladi.

Kod misollari: Swift da filtrlar va deteksiya

Amaliy misollar CoreImage tushunchasini mustahkamlashga yordam beradi. Ikkita odatiy stsenariyni ko‘rib chiqamiz: fotosuratga rang filtrini qo‘llash va ramka chizish bilan yuz deteksiyasi.

Tasvirga sepya qo‘llash

CISepiaTone filtrining asosiy misoli, rangli tasvirni sepya tonlariga aylantiradi. Filtr inputIntensity parametrini 0 (asl) dan 1 (maksimal effekt) gacha qabul qiladi. Dangasa baholashga e’tibor bering: filter.outputImage tomonidan qaytarilgan CIImage piksellarni o‘z ichiga olmaydi — renderlash faqat context.createCGImage chaqirilganda sodir bo‘ladi.

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

Ramka chizish bilan yuz deteksiyasi

Keyingi misol tasvirda yuzlarni topish va har bir topilgan yuz atrofida to‘rtburchak chizish uchun CIDetector dan foydalanadi. CIFaceFeature tasvir tizimidagi koordinatalarni o‘z ichiga oladi (boshlanish pastki chap burchakda), shuning uchun UIKit da chizishda affine transform orqali koordinatalarni o‘zgartirish talab qilinadi.

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("Shaxs tabassum qilmoqda")
    }
}

Bir nechta effekt kompozitsiyasi

Yakuniy misol uchta filtrdan iborat zanjirni namoyish etadi: rang tuzatish, vignetka va tekstura qo‘shish. E’tibor bering, birinchi filtrning outputImage si oraliq renderlashsiz ikkinchisiga inputImage sifatida uzatiladi. createCGImage chaqirilganda CoreImage barcha uch operatsiyani bitta GPU o‘tishida birlashtiradi.

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 beriladigan savollar

CoreImage Core Graphics dan qanday farq qiladi?

CoreImage GPU da ishlaydi va piksel operatsiyalari (filtrlar, rang tuzatish) uchun optimallashtirilgan, Core Graphics esa vektor chizish va 2D kontekstlar uchun CPU kutubxonasidir. CoreImage tasvirlarni ommaviy qayta ishlash uchun tezroq, Core Graphics interfeysni bosqichma-bosqich chizish uchun aniqroq.

CoreImage ni real vaqtda videoga qo‘llash mumkinmi?

Ha — CoreImage AVPlayerItemVideoOutput yoki AVCaptureOutput orqali alohida video kadrlarini qayta ishlashni qo‘llab-quvvatlaydi. Oqimli qayta ishlash uchun AVVideoComposition with CIFilter dan foydalaning, bu CPU va GPU o‘rtasida kadrlarni nusxalashsiz effektlarni qo‘llash imkonini beradi.

CoreImage sukut bo‘yicha qaysi rang profilidan foydalanadi?

CoreImage sukut bo‘yicha sRGB (kCGColorSpaceSRGB) ishchi rang fazosida ishlaydi. CIContext yaratishda muqobil fazo — HDR uchun extended linear sRGB yoki keng gamutli displeylar uchun Display P3 belgilanishi mumkin.

Zanjirda nechta CIFilter birlashtirilishi mumkin?

Zanjirdagi filtrlar sonida cheklov yo‘q, ammo har 5–7 ketma-ket filtr qo‘shimcha GPU o‘tishini yaratadi. 10 dan ortiq filtrlar uchun zanjirni guruhlarga bo‘lish va shader registrlari chegarasidan oshib ketmaslik uchun oraliq natijalarni renderlash tavsiya etiladi.

CIDetector Neural Engine bo‘lmagan qurilmalarda ishlaydimi?

Ha — CIDetector iOS 5.0 va undan yuqori versiyali barcha qurilmalarda NEON ko‘rsatmalaridan foydalangan holda CPU da ishlaydi. Deteksiya aniqligi barcha qurilmalarda bir xil, ammo Apple A12+ chiplarida neyron tarmoqlarning apparat tezlashuvi tufayli tezlik yuqoriroq.

Xulosa

  • CoreImage — iOS va macOS da tasvir va video qayta ishlash uchun GPU tezlashtirilgan Apple freymvorki
  • CIImage, CIFilter va CIContext dangasa hisoblash bilan uch qatlamli arxitekturani tashkil qiladi
  • 200 dan ortiq o‘rnatilgan CIFilter rang tuzatish, xiralashtirish va stilizatsiya vazifalarining ko‘pchiligini qamrab oladi
  • Maxsus filtrlar [[kernel]] annotatsiyasi bilan Metal CIKernel orqali yaratiladi
  • CIDetector Vision.framework ni ulamasdan yuzlar, matn, QR kodlar va to‘rtburchaklarni topadi
  • Filtr zanjirlari kernel fusion orqali bitta GPU o‘tishida avtomatik optimallashtiriladi
  • Real vaqtda video qayta ishlash uchun CIFilter bilan AVVideoComposition dan foydalaning

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing