Не получение прогнозов вывода из пользовательской модели Remote Firebase Automl

В настоящее время я пытаюсь создать приложение, использующее функцию Google autoML. Я обучил модель и опубликовал ее в google firebase, а также интегрировал необходимый код в свое приложение в соответствии с документацией:

https://firebase.google.com/docs/ml-kit/ios/label-images-with-automl

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

Я также включил функцию отладки, но это не помогло мне исправить мою ошибку. Это код, который я запускаю в ViewController:

import UIKit
import CoreML
import Vision
import Firebase
import FirebaseMLCommon


var serverImage: UIImage? = nil
var topResult = ""
class ViewController: UIViewController {

@IBOutlet var skinDiseaseImageView: UIImageView!
@IBOutlet var result1Label: UILabel!
@IBOutlet var result1Confidence: UILabel!
@IBOutlet var result2Label: UILabel!
@IBOutlet var result2Confidence: UILabel!
@IBOutlet var result3Label: UILabel!
@IBOutlet var result3Confidence: UILabel!

override func viewDidLoad() {

    let initialConditions = ModelDownloadConditions(allowsCellularAccess: true,
                                                                             allowsBackgroundDownloading: true)
    let updateConditions = ModelDownloadConditions(allowsCellularAccess: false,
                                                   allowsBackgroundDownloading: true)
    let remoteModel = RemoteModel(
        name: "skinDiseaseModel",  // The name you assigned in the console.
        allowsModelUpdates: true,
        initialConditions: initialConditions,
        updateConditions: updateConditions
    )
    ModelManager.modelManager().register(remoteModel)

    super.viewDidLoad()


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

}


extension ViewController {

@IBAction func selectImage(_ sender: Any) {
    let pickerController = UIImagePickerController()
    pickerController.delegate = self
    pickerController.sourceType = .savedPhotosAlbum
    present(pickerController, animated: true)
}

}


extension ViewController: UIImagePickerControllerDelegate {

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    dismiss(animated: true)

    guard let skinImage = info[UIImagePickerControllerOriginalImage] as? UIImage else {
        fatalError("Error Retrieving Image Line 95")
    }

    var skinImageToDiagnose = VisionImage(image: skinImage)

    serverImage = skinImage
    skinDiseaseImageView.image = skinImage


    let labelerOptions = VisionOnDeviceAutoMLImageLabelerOptions(
        remoteModelName: "skinDiseaseModel",  // Or nil to not use a remote model
        localModelName: nil     // Or nil to not use a bundled model
    )
    labelerOptions.confidenceThreshold = 0  // Evaluate your model in the Firebase console
    // to determine an appropriate value.
    let labeler = Vision.vision().onDeviceAutoMLImageLabeler(options: labelerOptions)

    var topThreeResults = [String]()
    var topThreeConfidences = [String]()
    labeler.process(skinImageToDiagnose) { labels, error in
        guard error == nil, let labels = labels
            else {
                print(error)
                return
            }
        //task succeeded
        print("1")
        print(labels)
        var counter = 0
        for label in labels {
            topThreeResults.append(String(describing: label))
            topThreeConfidences.append(String(describing: label.confidence))
            counter = counter + 1
            print("counter")
            if counter == 3 {
                break
            }
        }

    }

    result1Label.text = topThreeResults[0]
    result1Confidence.text = (topThreeConfidences[0] + "%")

    result2Label.text = topThreeResults[1]
    result2Confidence.text = (topThreeConfidences[1] + "%")

    result3Label.text = topThreeResults[2]
    result3Confidence.text = (topThreeConfidences[2] + "%")





}

}

Это ошибка, которую я получил:

 Fatal error: Index out of range
2019-08-31 19:50:19.763469-0700 medicalAppFinal[13776:2281569]     Fatal error: Index out of range
(lldb) 

Я рассудил, что проблема индекса вне диапазона связана с тем, что список меток (выходные прогнозы) пуст после его печати. Таким образом, я понимаю, почему индекс выходит за пределы диапазона, но я не знаю, почему я получаю пустой список после передачи изображения в labeler.process(). Как решить эту ошибку? Скажите, если вам нужна дополнительная информация


person Nikhil Chandra    schedule 01.09.2019    source источник


Ответы (1)


Кажется, это дубликат следующего вопроса (на который ответил автор):

Не извлечение списка прогнозов вывода из удаленной Firebase Automl custom модель

person Dong Chen    schedule 23.09.2019