对于如何制作由机器学习模型文件标识的当前图像(从图库照片中选择),我仍然感到困惑。我想做的是,一旦轻按“相机”按钮,便可以从图库图片中选择一张图片(这是有效的代码部分)。但是,一旦显示了照片,它就不会触发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()
}
}
}