人类即将进入人工智能时代,做为一个普通程序员咱们除了增删改查以外,还应接触一下新的技术与事物。本文我将带领你们作个小demo,用SwiftUI和CoreML组件来制做一个识别物体的智能App
其实我开始想写机器学习,可是担忧把你们都吓跑了。请你们放心,本文保证毫不出现一个公式,也不讲深奥的理论,将经过一个实实在在的小例子让你们掌握制做智能应用的方法。程序员
我争取在300行代码之内,完成智能识别App的制做。数组
咱们在学以前先看看最终效果app
如你所见,咱们建立一个滚动视图,视图里面罗列待识别的照片。咱们找了一些牛、猫、狗、山的照片,用来测试App识别效果。机器学习
接下来,咱们来逐步实现这个app吧!学习
一、定义一个数组存储待识别照片名称测试
//定义一个数组存储待识别照片名称 let images = ["niu","cat1","dog","tree","mountains"]
二、人工智能
// VStack { ScrollView([.horizontal]) { HStack { ForEach(self.images,id: \.self) { name in Image(name) .resizable() .frame(width: 300, height: 300) .padding() .onTapGesture { self.selectedImage = name }.border(Color.orange, width: self.selectedImage == name ? 10 : 0) } } }
import SwiftUI struct ContentView: View { let images = ["niu","cat1","dog","tree","mountains"] @State private var selectedImage = "" @ObservedObject private var imageDetectionVM: ImageDetectionViewModel private var imageDetectionManager: ImageDetectionManager init() { self.imageDetectionManager = ImageDetectionManager() self.imageDetectionVM = ImageDetectionViewModel(manager: self.imageDetectionManager) } var body: some View { NavigationView { VStack{ HStack{ Text("识别结果:") .font(.system(size: 26)) .padding() Text(self.imageDetectionVM.predictionLabel) .font(.system(size: 26)) } VStack { ScrollView([.horizontal]) { HStack { ForEach(self.images,id: \.self) { name in Image(name) .resizable() .frame(width: 300, height: 300) .padding() .onTapGesture { self.selectedImage = name }.border(Color.orange, width: self.selectedImage == name ? 10 : 0) } } } Button("智能识别") { self.imageDetectionVM.detect(self.selectedImage) }.padding() .background(Color.orange) .foregroundColor(Color.white) .cornerRadius(10) .padding() Text(self.imageDetectionVM.predictionLabel) .font(.system(size: 26)) } } .navigationBarTitle("Core ML") } } }
import Foundation import SwiftUI import Combine class ImageDetectionViewModel: ObservableObject { var name: String = "" var manager: ImageDetectionManager @Published var predictionLabel: String = "" init(manager: ImageDetectionManager) { self.manager = manager } func detect(_ name: String) { let sourceImage = UIImage(named: name) guard let resizedImage = sourceImage?.resizeImage(targetSize: CGSize(width: 224, height: 224)) else { fatalError("Unable to resize the image!") } if let label = self.manager.detect(resizedImage) { self.predictionLabel = label } } }
import Foundation import CoreML import UIKit class ImageDetectionManager { let model = Resnet50() func detect(_ img: UIImage) -> String? { guard let pixelBuffer = img.toCVPixelBuffer(), let prediction = try? model.prediction(image: pixelBuffer) else { return nil } return prediction.classLabel } }
下载地址:
https://www.jianshu.com/p/f7c...spa
QQ:3365059189
SwiftUI技术交流QQ群:5186964703d