首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MLModel如何分析ImagePicker?

MLModel如何分析ImagePicker?
EN

Stack Overflow用户
提问于 2020-08-18 04:35:48
回答 1查看 85关注 0票数 0

我仍然对如何制作由机器学习模型文件识别的当前图像(从图库照片中选择)感到困惑。我想做的是,一旦相机按钮被点击,然后我就能够选择图片从画廊图片(这是代码的一部分,工作)。然而,一旦显示了照片,它就不会触发ml模型,并且照片不会被识别,而只是按原样显示。有谁能帮帮我吗?这是我的代码:

代码语言:javascript
复制
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()

        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-10-31 01:03:55

这将会起作用:

代码语言:javascript
复制
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
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63458277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档