2017-07-21 13 views
6

Tôi đang sử dụng CoreImage trên IOS để phát hiện các khuôn mặt trong một hình ảnh. Nó hoạt động tốt khi có nhiều khuôn mặt, nhưng không làm việc cho khuôn mặt đơn giản như thế này:Phát hiện khuôn mặt IOS CoreImage tại tất cả các hướng

enter image description here

Khuôn mặt là thực sự lớn và rõ ràng, nhưng CoreImage không thể phát hiện nó. Tôi nghĩ rằng đó có thể là do số kCGImagePropertyOrientation của tôi.

Tôi đặt nó thành 5, đơn giản vì đó là những gì một hướng dẫn trực tuyến đã làm. Tuy nhiên, hình ảnh tôi đang xử lý là do người dùng tải lên, vì vậy tôi không biết định hướng khuôn mặt trước đó. Có cách nào để thử tất cả các hướng? Cách thích hợp để thực hiện phát hiện khuôn mặt CoreImage là những hình ảnh nào không biết trước bàn tay?

Đây là mã của tôi:

var imageOptions = Dictionary<String,Any>() 
imageOptions[CIDetectorImageOrientation] = 5 
imageOptions[CIDetectorSmile] = true 

let image = CIImage(cgImage: imageView.image!.cgImage!) 
let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyHigh] 

let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy) 
let faces = faceDetector?.features(in: image, options: imageOptions as? [String : AnyObject]) 
+0

Các nhận diện khuôn mặt sẽ chỉ làm việc cho các định hướng cụ thể, nếu bạn muốn cho phép bất kỳ loại định hướng đến được đã xử lý, bạn có thể phải đọc hướng từ chính siêu dữ liệu hình ảnh, sau đó chuyển hướng đó tới bộ lọc của bạn. – Pochi

Trả lời

3

Bạn có thể làm điều đó như thế này

var imageOrienttion = 0 
    switch (YourUIImage.imageOrientation) { 
    case UIImageOrientation.up: 
     imageOrienttion = 1 
     break; 
    case UIImageOrientation.down: 
     imageOrienttion = 3 
     break; 
    case UIImageOrientation.left: 
     imageOrienttion = 8 
     break; 
    case UIImageOrientation.right: 
     imageOrienttion = 6 
     break; 
    case UIImageOrientation.upMirrored: 
     imageOrienttion = 2 
     break; 
    case UIImageOrientation.downMirrored: 
     imageOrienttion = 4 
     break; 
    case UIImageOrientation.leftMirrored: 
     imageOrienttion = 5 
     break; 
    case UIImageOrientation.rightMirrored: 
     imageOrienttion = 7 
     break; 
    } 
    imageOptions[CIDetectorImageOrientation] = imageOrienttion 
+0

Hình ảnh được người dùng tải lên. Mã này có vẻ như đang đọc siêu dữ liệu hình ảnh. Câu hỏi của tôi là, IOS có thể nhận được UIImageOrientation cho mỗi hình ảnh không? Ngay cả những người dùng tải lên? –

+0

iOS sẽ có thể xác định hướng. Bạn chỉ có thể thử mã này và xem nó có hoạt động hay không. Hoặc bạn chỉ có thể lặp qua tất cả các giá trị cho đến khi bạn có thể tìm thấy khuôn mặt. –

Các vấn đề liên quan