MLModel如何分析ImagePicker?

对于如何制作由机器学习模型文件标识的当前图像(从图库照片中选择),我仍然感到困惑。我想做的是,一旦轻按“相机”按钮,便可以从图库图片中选择一张图片(这是有效的代码部分)。但是,一旦显示了照片,它就不会触发ml模型,也不会识别出照片,而只是照原样显示。有人可以帮我吗?这是我的代码:

import SwiftUI


struct ContentView: View {

    @State private var isShowPicker: Bool = false
    @State private var image: Image? = Image("")
    @State private var classificationLabel: String = ""
    
    let model = MobileNetV2()
    
     private func performImageclassification() {
         
        let currentImageName = ImagePicker(image: self.$image)
        guard let img = UIImage(named: "\(String(describing: currentImageName))"),let resizedImage = img.resizeTo(size: CGSize(width: 224,height: 224)),let pixelBuffer = resizedImage.toCVPixelBuffer() else {
            return
            
        }
        let output = try? model.prediction(image: pixelBuffer)
        if let output = output {
            self.classificationLabel = output.classLabel
        }
    }

    var body: some View {
        NavigationView {
            ZStack {
                VStack {
                    image?
                        .resizable()
                    .navigationBarItems(trailing:
                        Button(action: {
                        
                            self.performImageclassification()
                            self.isShowPicker.toggle()
                            
                    
                    })
                    {
                        Image(systemName: "camera.fill")
                    .font(.largeTitle)
                    }.foregroundColor(.blue)
                        ).navigationBarBackButtonHidden(false)
                    .navigationBarTitle("\(classificationLabel)")
                    Text(classificationLabel)
                   
                    Spacer()
                }
            }
            .sheet(isPresented: $isShowPicker) {
                ImagePicker(image: self.$image)
                 

            }
            
               
            .navigationBarTitle(Text(classificationLabel))
           
        }
    }
}

struct ImagePicker: UIViewControllerRepresentable {

    @Environment(\.presentationmode)
    var presentationmode

    @Binding var image: Image?
    

    class Coordinator: NSObject,UINavigationControllerDelegate,UIImagePickerControllerDelegate {

        @Binding var presentationmode: Presentationmode
        @Binding var image: Image?

        init(presentationmode: Binding<Presentationmode>,image: Binding<Image?>) {
            _presentationmode = presentationmode
            _image = image
        }

        func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
            let uiImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
            image = Image(uiImage: uiImage)
            presentationmode.dismiss()
            

        }

        func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
            presentationmode.dismiss()
        }

    }

    func makeCoordinator() -> Coordinator {
        return Coordinator(presentationmode: presentationmode,image: $image)
    }

    func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
        let picker = UIImagePickerController()
        picker.delegate = context.coordinator
        return picker
    }

    func updateUIViewController(_ uiViewController: UIImagePickerController,context: UIViewControllerRepresentableContext<ImagePicker>) {
        

    }

}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        NavigationView {
            ContentView()

        }
    }
}
iCMS 回答:MLModel如何分析ImagePicker?

这将起作用:

import SwiftUI

class ImagePickerCoordinator: NSObject,UINavigationControllerDelegate,UIImagePickerControllerDelegate {
    
    @Binding var image: UIImage?
    @Binding var isShown: Bool
    
    init(image: Binding<UIImage?>,isShown: Binding<Bool>) {
        _image = image
        _isShown = isShown
    }
    func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let uiImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            image = uiImage
            isShown = false
        }
    }
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        isShown = false
    }
}

struct ImagePicker: UIViewControllerRepresentable {
    
    typealias UIViewControllerType = UIImagePickerController
    typealias Coordinator = ImagePickerCoordinator
    
    @Binding var image: UIImage?
    @Binding var isShown: Bool
    var sourceType: UIImagePickerController.SourceType = .camera
    
    func updateUIViewController(_ uiViewController: UIImagePickerController,context: UIViewControllerRepresentableContext<ImagePicker>) {
    }
    
    func makeCoordinator() -> ImagePicker.Coordinator {
        ImagePickerCoordinator(image: $image,isShown: $isShown)
    }
    
    func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
        let picker = UIImagePickerController()
        picker.sourceType = sourceType
        picker.delegate = context.coordinator
        return picker
    }
}
本文链接:https://www.f2er.com/1728948.html

大家都在问