regulaforensics / DocumentReader-iOS

iOS Framework for reading and validation of identification documents
56 stars 15 forks source link

recognizeImage problem #38

Closed nikolindima closed 3 years ago

nikolindima commented 3 years ago

Добрый день. Пытаюсь использовать вот этот метод. Захватываю изображение с камеры и передаю в ваш ридер

- (void)recognizeImage:(UIImage * _Nonnull)image
            cameraMode:(BOOL)cameraMode
            completion:(RGLDocumentReaderCompletion _Nonnull)completion;

Если поставить cameraMode - true. То результат очень долго не приходит и в итоге приходит всегда пустой

[GroupedAttributes(type: ".rawImage", items: [Cleverbase.Attribute(name: "Documentbeeld [0]", value: Optional(""), lcid: nil, valid: nil, source: Optional(__C.RGLResultType), image: Optional(<UIImage:0x283850000 anonymous {1080, 1920}>), equality: true, rfidStatus: nil, checkResult: nil)], comparisonLHS: nil, comparisonRHS: nil)]

Если использовать вот этот метод

- (void)recognizeImage:(UIImage * _Nonnull)image
            completion:(RGLDocumentReaderCompletion _Nonnull)completion;

результат возвращается без проблем на каждый фрейм с камеры. Но не понятно на сколько он лучше или хуже может быть чем с cameraMode: true.

vyakimchik commented 3 years ago

Добрый день!

Все верно, т.к. в таком случае ожидается обработка потока кадров.

Если поставить cameraMode - true. То результат очень долго не приходит и в итоге приходит всегда пустой

Отличие этих методов заключается в наличии атрибута cameraMode, установив который в true, этот метод начнет принимать серию кадров, а не один, т.е. если Вы вызовете recognizeImage с cameraMode = false, этот метод будет работать таким же образом, как и метод recognizeImage, в котором не фигурирует cameraMode.

nikolindima commented 3 years ago

Это я понял. но почему результат с cameraMode true пустой приходит?

vyakimchik commented 3 years ago

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

nikolindima commented 3 years ago

Я делаю так - получаю кадры с камеры и кладу в вашу библиотеку с включенным cameraMode

  public func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
        guard let  pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {return}

        guard let cgImage = pixelBuffer.cgImage else {
            return
        }

        let bigImage = UIImage(cgImage: cgImage)
DocReader.shared.recognizeImage(bigImage, cameraMode: true) { (action, results, error) in
                        if action == .complete {
                            guard let results = results else {
                                print("Completed without result")
                                return
                            }

Через какое-то время всегда приходит пустой результат [GroupedAttributes(type: ".rawImage", items: [Cleverbase.Attribute(name: "Documentbeeld [0]", value: Optional(""), lcid: nil, valid: nil, source: Optional(__C.RGLResultType), image: Optional(<UIImage:0x283850000 anonymous {1080, 1920}>), equality: true, rfidStatus: nil, checkResult: nil)], comparisonLHS: nil, comparisonRHS: nil)]

vyakimchik commented 3 years ago

У нас есть демо пример, где показано, как это можно реализовать, который можно найти здесь. Попробуйте повторить эту проблему там.

nikolindima commented 3 years ago

Я попробовал этот проект - результат такой же самое. 1 в 1. Пусто.

vyakimchik commented 3 years ago

Не могли бы Вы отправить нам изображение документа, который пытаетесь обработать? Email: support@regulaforensics.com

nikolindima commented 3 years ago

Отправил. Но похоже что проблема именно в паспорте. Попробовал сейчас сосканировать паспорт из гугла и всё получилось без проблем.

vyakimchik commented 3 years ago

Спасибо!

Проблема заключается в том детекции MRZ - не может найтись на кадре, отправляемом на обработку. Соответственно, по достижению тайм-аутов, установленных по умолчанию в нашем SDK, сканирование завершается и нету никаких результатов. Решить данную проблему можно следующим образом: нужно, чтобы MRZ занимало больше площади относительно кадра, отправляемого на обработку. Если вы попробуете обработать этот документ в сценарии Mrz поместив MRZ максимально близко в камеру, MRZ успешно распознается. Мы изучим данное поведение более подробно и попытаемся улучшить детекцию MRZ данного кейса.

nikolindima commented 3 years ago

Понял. спасибо