人類即將進入人工智能時代,做爲一個普通程序員咱們除了增刪改查以外,還應接觸一下新的技術與事物。本文我將帶領你們作個小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