2016-09-22 14 views
4

У меня есть приложение, которое принимает все изображения пользователя (все Активы из приложения «Фото»). После этого приложение должно запускать все изображения и обнаруживать лица и возвращать их лицевые ориентиры, а затем смотреть в базе данных, чтобы увидеть, есть ли какой-нибудь друг с тем же ориентиром (признающий лицо знакомых), подобно тому, как делает Facebook в моменты приложения и в Интернете. Затем приложение отобразит все фотографии, которые в них отображаются друг. Важной частью моего приложения является конфиденциальность пользователя, поэтому я хотел бы сохранить весь процесс на устройстве и не отправлять его в онлайн-службу. Еще одно преимущество его хранения на устройстве состоит в том, что каждый пользователь в моем приложении может иметь тысячи изображений, а работа с внешним сервисом будет обширной и может снизить производительность (если каждое изображение нужно отправить на сервер).на распознавание лиц - Swift

Из исследования, которое я сделал, существует множество онлайн-сервисов (но они не соответствуют моим требованиям - сохранение процесса в автономном режиме). Существует также CIDector, который обнаруживает лица, а затем вы можете вернуть несколько функций, таких как расположение глаз и расположение рта (что я не считаю, что это достаточно хорошо для надежного распознавания). Я также слышал о Luxand, openCV и openFace, которые все относятся к распознаванию устройств, но являются классом C++, что затрудняет интеграцию с быстрым проектом (документация не очень хороша и не объясняет, как интегрировать его в ваш проект и как быстро распознать лицо).

Итак, мой вопрос в том, есть ли способ выполнить распознавание лиц, которые возвращают лицевые ориентиры на устройстве?

  • Если нет, есть другой способ или услуга, которые я мог бы использовать.

Также, если есть эффективный и быстрый способ распознавания и распознавания лиц, если у пользователя может быть тысячи изображений.

Кстати, я нахожусь на ранней стадии разработки, и я ищу бесплатные услуги, которые я мог бы использовать для стадии разработки.

+0

Звуки немного тяжелым для мобильного устройства. Я бы просто пошел с библиотекой C++ и посмотрел, насколько хорошо он работает на устройстве. Ничего не стоит делать легко:) – boidkan

+1

Не эта функция уже включена в приложение Photos iOS10? –

+0

Да, @KevinGoedecke. Я считаю, что они назвали это Классикой Сцены. Он работает для лиц, а также для обычных основных предметов, таких как собаки, горы и реки. – Sean

ответ

2

iOS имеют встроенное распознавание лиц в CoreImage рамки, которые работают довольно круто. Вы также можете обнаружить глаза и т. Д. Просто ознакомьтесь с этим кодом, покажите, как вы можете работать с ним.

func detect() { 

guard let personciImage = CIImage(image: personPic.image!) else { 
    return 
} 

let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyHigh] 
let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy) 
let faces = faceDetector.featuresInImage(personciImage) 

// converting to other coordinate system 
let ciImageSize = personciImage.extent.size 
var transform = CGAffineTransformMakeScale(1, -1) 
transform = CGAffineTransformTranslate(transform, 0, -ciImageSize.height) 

for face in faces as! [CIFaceFeature] { 

    print("Found bounds are \(face.bounds)") 

    // calculating place for faceBox 
    var faceViewBounds = CGRectApplyAffineTransform(face.bounds, transform) 

    let viewSize = personPic.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 = 3 
    faceBox.layer.borderColor = UIColor.redColor().CGColor 
    faceBox.backgroundColor = UIColor.clearColor() 
    personPic.addSubview(faceBox) 

    if face.hasLeftEyePosition { 
     print("Left eye bounds are \(face.leftEyePosition)") 
    } 

    if face.hasRightEyePosition { 
     print("Right eye bounds are \(face.rightEyePosition)") 
    } 
} 

}

+0

Спасибо за ответ, я знаю, что у IOS есть обнаружение лица.Но мне нужен способ распознать лицо, то есть я могу сказать, например, что лицо в изображении - это лицо Боба. И для этого я считаю, что мне нужно больше информации, чем то, что предоставляет CIFaceFeature. Вы знаете, как я могу это сделать со встроенным детектором. –

+0

ohhhh, вам нужно сравнить лицо. На самом деле я этого не делаю, никогда не делаю этого раньше. Надеюсь, вы найдете правильный ответ. Оцените свой вопрос. – Volodymyr

+0

@Volodymyr Как я могу использовать обнаружение через живую камеру вместо изображений в Assests.? –

 Смежные вопросы

  • Нет связанных вопросов^_^