İçeriğe geç

CoreImage ile yüz tanımlama işlemi gerçekleştirmek

İOS

Merhabalar bu yazımda İOS ile merak edilen ve araştırılan önemli konulardan fotoğraf üzerindeki suratları nasıl algılarız bunun örneğini vereceğim.

Bu işlemi gerçekleştirmek için 0’dan alt seviye görüntü işleme yardımıyla yüzü algılamaya gerek yok. Bunun için İOS bize oldukça yararlı işlevsel ve hızlı sınıflar hazırlamış. Tabiki uğraşıp kendi Face Dedector sınıfınızı yazabilirsiniz.

Ben İOS’un bizlere sunduğu CoreImage Frameworkünde bulunan CIDedector sınıfı yardımıyla bu olayı gerçekleştireceğim.

Aşağıdaki verdiğim örneği inceleyebilirsiniz.

@IBOutlet weak var imgview: UIImageView!

UIImageView nesnemiz var ve içerisine bir fotoğraf ekliyoruz içerisinde surat olan denemek amacıyla.

imgview.image = UIImage(named: "f.jpg")
detectFaceInImg(imgview)

Daha sonra yazdığım fonksiyonu çağırıyoruz bu fonksiyon eğer resimde yüz var ise true döndürmekte yoksa false şeklinde yazdım ve resimdeki yüzleri boyutuna göre kare içine almakta, kodu inceleyebilirsiniz.

func detectFaceInImg(imgView:UIImageView) -> Bool? {
        
        if let faceImg = CIImage(image: imgView.image!) {
            
            let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyHigh]
            let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy)
            let faces = faceDetector.featuresInImage(faceImg)
            
            let ciImageSize = faceImg.extent.size
            var transform = CGAffineTransformMakeScale(1, -1)
            transform = CGAffineTransformTranslate(transform, 0, -ciImageSize.height)
            
            for face in faces as! [CIFaceFeature] {
                
                var faceViewBounds = CGRectApplyAffineTransform(face.bounds, transform)
                
                let viewSize = imgView.bounds.size
                let scale = min(viewSize.width / ciImageSize.width,
                                viewSize.height / ciImageSize.height)
                let offsetX = (viewSize.width - ciImageSize.width * scale) / 2
                let offsetY = (viewSize.height - ciImageSize.height * scale) / 2
                
                faceViewBounds = CGRectApplyAffineTransform(faceViewBounds, CGAffineTransformMakeScale(scale, scale))
                faceViewBounds.origin.x += offsetX
                faceViewBounds.origin.y += offsetY
                
                let faceBox = UIView(frame: faceViewBounds)
                
                faceBox.layer.borderWidth = 2
                faceBox.layer.borderColor = UIColor.whiteColor().CGColor
                faceBox.backgroundColor = UIColor.clearColor()
                
                imgview.addSubview(faceBox)

            }
            
            return !faces.isEmpty ? true : false
            
        }
        
        return nil
    }

Ek olarak yüz üzerinde göz,ağız,burun pozisyonları ve durumlarına erişebilir buna göre işlem yapabilirsiniz. Piyasada bulunan makyaj yapma uygulamaları’da bu sınıfı kullanmakta seçilen surat üzerindeki ağız kordinatları üzerine eklemeler yapmakta.

   if let mouthPos:CGPoint = face.mouthPosition {
                    print(mouthPos)
                }
                
   if let leftEyePos:CGPoint = face.leftEyePosition {
                    print(leftEyePos)
                }

Yorum atarak veya bana ulaşarak dilediğiniz soruyu sorabilirsiniz keyifli kodlu günler 🙂

 

 

Tarih:iOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca