Как исправить ошибки графического процессора кода IOAF при использовании ARKit2 & Vision (VNDetectFaceRectanglesRequest) на iPhone XS - PullRequest
0 голосов
/ 04 января 2019

Во время работы ARKit на iPhone XS (с iOS 12.1.2 и Xcode 10.1) я получаю ошибки и сбои / зависания при запуске кода Vision для обнаружения границ лица.

Я получаю следующие ошибки:

2019-01-04 03:03:03.155867-0800 ARKit Vision Demo[12969:3307770] Execution of the command buffer was aborted due to an error during execution. Caused GPU Timeout Error (IOAF code 2)
2019-01-04 03:03:03.155786-0800 ARKit Vision Demo[12969:3307850] Execution of the command buffer was aborted due to an error during execution. Discarded (victim of GPU error/recovery) (IOAF code 5)
[SceneKit] Error: display link thread seems stuck

Это происходит на iPhone XS при выполнении следующего контрольного кода концепции для воспроизведения ошибки (всегда происходит в течение нескольких секунд после запуска приложения) - https://github.com/xta/ARKit-Vision-Demo

Соответствующий ViewController.swift содержит проблемные методы:

func classifyCurrentImage() {
    guard let buffer = currentBuffer else { return }

    let image = CIImage(cvPixelBuffer: buffer)
    let options: [VNImageOption: Any] = [:]
    let imageRequestHandler = VNImageRequestHandler(ciImage: image, orientation: self.imageOrientation, options: options)

    do {
        try imageRequestHandler.perform(self.requests)
    } catch {
        print(error)
    }
}

func handleFaces(request: VNRequest, error: Error?) {
    DispatchQueue.main.async {
        guard let results = request.results as? [VNFaceObservation] else { return }
        // TODO - something here with results
        print(results)

        self.currentBuffer = nil
    }
}

Как правильно использовать Apple ARKit + Vision с VNDetectFaceRectanglesRequest? Неправильное получение таинственных ошибок кода IOAF.

В идеале я также хотел бы использовать VNTrackObjectRequest и VNSequenceRequestHandler для отслеживания запросов.

Приличная онлайн-документация для использования VNDetectFaceRectanglesRequest с Vision (и без ARKit). У Apple есть страница здесь (https://developer.apple.com/documentation/arkit/using_vision_in_real_time_with_arkit), за которой я следовал, но я все еще получаю ошибки / сбои.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Обновление: насколько я могу судить, проблема заключалась в сохранении циклов (или отсутствии [weak self]) в моем демо-репо. В примере проекта от Apple они правильно используют [weak self], чтобы избежать циклов сохранения, а приложение ARKit + Vision работает на iPhone XS.

0 голосов
/ 04 января 2019

Вам нужно вызвать perform метод async, как это делается в ссылке, которой вы поделились. Попробуйте следующий код:

func classifyCurrentImage() {
    guard let buffer = currentBuffer else { return }

    let image = CIImage(cvPixelBuffer: buffer)
    let options: [VNImageOption: Any] = [:]
    let imageRequestHandler = VNImageRequestHandler(ciImage: image, orientation: self.imageOrientation, options: options)

    DispatchQueue.global(qos: .userInteractive).async {
        do {
            try imageRequestHandler.perform(self.requests)
        } catch {
            print(error)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...