【发布时间】:2019-08-11 15:14:41
【问题描述】:
我正在尝试使用 coreML 进行识别,该功能正常工作并正确显示结果。但是我想将该方法调用为一个按钮,就像我按下 catDog 按钮并运行该方法一样。但是由于 finalResult() 和 identifyCatOrDog() 是它自己的函数,所以我不能将它调用到按钮中。我试图将方法复制并粘贴到按钮内,但它没有显示任何内容。如何编辑代码,以便 findResult() 仅在我按下按钮时才起作用,而不是自动运行?
import UIKit
import CoreML
import Vision
import Photos
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet var loadImage: UIImageView!
@IBOutlet var Result: UILabel!
@IBAction func photoBtn(_ sender: UIButton) {
getPhoto()
}
@IBAction func cameraBtn(_ sender: UIButton) {
}
@IBAction func catDog(_ sender: UIButton) {
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func getPhoto() {
let picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .photoLibrary
present(picker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
picker.dismiss(animated: true, completion: nil)
guard let gotImage = info[.originalImage] as? UIImage else {
fatalError("No picture chosen")
}
loadImage.image = gotImage
identifyCatOrDog(image: gotImage)
}
func identifyCatOrDog(image: UIImage) {
let modelFile = ImageClassifier()
let model = try! VNCoreMLModel(for: modelFile.model)
let handler = VNImageRequestHandler(cgImage: image.cgImage!, options: [ : ])
let request = VNCoreMLRequest(model: model, completionHandler: findResults)
try! handler.perform([request])
}
func findResults(request: VNRequest, error: Error?) {
guard let results = request.results as? [VNClassificationObservation] else {
fatalError("Unable to get results")
}
var bestGuess = ""
var bestConfidence: VNConfidence = 0
for classification in results {
if (classification.confidence > bestConfidence) {
bestConfidence = classification.confidence
bestGuess = classification.identifier
}
}
Result.text = "Image is: \(bestGuess) with confidence \(bestConfidence) out of 1"
}
【问题讨论】:
标签: swift uiimagepickercontroller coreml