【发布时间】:2020-12-22 16:11:12
【问题描述】:
我创建了一个应用程序来识别照片中的花朵。照片可以来自画廊或用相机拍摄。我有功能:
func detectFlower(image: CIImage,completion: @escaping (_ getString:String?,_ error:Error?,_ getDouble:Double?,_ getArray:Array<VNConfidence>?,_ getArray:Array<String>?)-> Void) {
guard let model = try? VNCoreMLModel(for: NewFlowersModel().model) else {
fatalError("Cannot import a model.")
}
let methodStart = Date()
let request = VNCoreMLRequest(model: model) { (request, error) in
let classifiedNameOfFlower = request.results?.first as? VNClassificationObservation
let classifiedValues = request.results as? [VNClassificationObservation]
let methodFinish = Date()
let nameOfFlower = String(classifiedNameOfFlower?.identifier ?? "Unexpected type")
let executionTime = methodFinish.timeIntervalSince(methodStart)
let classificationConfidences = classifiedValues?.prefix(10).map {
($0.confidence)
}
let classificationIdentifiers = classifiedValues?.prefix(10).map {
($0.identifier)
}
completion(nameOfFlower,nil,executionTime, classificationConfidences, classificationIdentifiers)
}
let handler = VNImageRequestHandler(ciImage: image)
do {
try handler.perform([request])
} catch {
print(error)
completion(nil, error, nil, nil, nil)
}
}
用于识别。其中有两个常数let methodStart = Date() 和let methodFinish = Date() 用于测量时间。后面的代码中有一个常数可以计算差值let executionTime = methodFinish.timeIntervalSince(methodStart)。
我注意到一个奇怪的依赖关系——当我运行应用程序时,第一次扫描会返回一个时间差,例如0.395959 秒。下一次扫描返回的时间要短得多,例如 0.033615 秒。这可能是什么结果?是什么造成了时差,而且第一次扫描,这个时间总是最长的?
【问题讨论】: