iOS SwiftUI整合人工智能制做照片识别App(2020教程)

人类即将进入人工智能时代,做为一个普通程序员咱们除了增删改查以外,还应接触一下新的技术与事物。本文我将带领你们作个小demo,用SwiftUI和CoreML组件来制做一个识别物体的智能App

人人都能学会人工智能

其实我开始想写机器学习,可是担忧把你们都吓跑了。请你们放心,本文保证毫不出现一个公式,也不讲深奥的理论,将经过一个实实在在的小例子让你们掌握制做智能应用的方法。程序员

我争取在300行代码之内,完成智能识别App的制做。数组

先看后学真把式

咱们在学以前先看看最终效果app

智能视图.gif

如你所见,咱们建立一个滚动视图,视图里面罗列待识别的照片。咱们找了一些牛、猫、狗、山的照片,用来测试App识别效果。机器学习

打铁还须自身硬

接下来,咱们来逐步实现这个app吧!学习

第一步:咱们首先来建立一个滚动视图,用于让用户选择识别的照片。

滚动.gif

一、定义一个数组存储待识别照片名称测试

//定义一个数组存储待识别照片名称
 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")
            
        }
    }
}

第三步 将MVVM进行到底,构建一个照片识别的model

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
        
    }
    
}

iOS人工智能项目完整代码

下载地址:
https://www.jianshu.com/p/f7c...spa

更多SwiftUI教程和代码关注专栏

QQ:3365059189
SwiftUI技术交流QQ群:5186964703d

https://www.jianshu.com/c/7b3...code

相关文章
相关标签/搜索