-
[iOS] 얼굴인식을 위한 CIDetect를 알아보자.앱등이에게 살충제를 뿌린다./iOS 2017. 4. 10. 13:00
<Apple에서 제공하는 Face Detect>
UIImage에 사람의 얼굴이 있다면 이를 Detect하는 것이 가능합니다.
다른 오픈 소스나 엔진을 통한 것이 아닌 Apple의 SDK에서 제공하고 있습니다.
바로 CIDetect라는 클래스를 통해서 제공하고 있는데요. 사용법은 간단합니다.
CIDetect클래스를 만들어서 이미지 객체를 전달하면 이미지상에 있는 얼굴의 좌표를 리턴해줍니다.
예제 소스만 첨부하고 총총총~
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characterslet faceDetector = FaceDetector() let rect = faceDetector.getFaceRect(from: imageView.image!, imageView: imageView) faceIndicatingView.frame = rect This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersclass FaceDetector { let context = CIContext() let opt = [CIDetectorAccuracy: CIDetectorAccuracyHigh] var detector: CIDetector! init() { detector = CIDetector(ofType: CIDetectorTypeFace, context: context, options: opt) } func getFaceRect(from image: UIImage, imageView: UIImageView) -> CGRect { guard let ciimage = CIImage(image: image) else { return CGRect.zero } let ciImageSize = ciimage.extent.size var transform = CGAffineTransform(scaleX: 1, y: -1) transform = transform.translatedBy(x: 0, y: -ciImageSize.height) let features = detector.features(in: ciimage) // Apply the transform to convert the coordinates var faceViewBounds = features[0].bounds.applying(transform) // Calculate the actual position and size of the rectangle in the image view let viewSize = imageView.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 = faceViewBounds.applying(CGAffineTransform(scaleX: scale, y: scale)) faceViewBounds.origin.x += offsetX faceViewBounds.origin.y += offsetY return faceViewBounds } } 이 코드를 사용한 앱 (feat. 아이린)
'앱등이에게 살충제를 뿌린다. > iOS' 카테고리의 다른 글
[CAShapeLayer] CAShapeLayer에 CAAnimation 추가하기 (1) 2017.05.25 [UICollectionView] UICollectionViewFlowLayout 그리고 UICollectionViewDelegateFlowLayout (0) 2017.04.14 Photos Framework를 이용하여 사진을 가져오자. 샘플코드 (2) 2017.03.11 [iOS] Photos Framework를 알아보자. (간단히) (3) 2017.03.11 [XCode] Xcode 템플릿(Template)을 만들어보자. (0) 2017.03.10