LoginSignup
1
2

More than 1 year has passed since last update.

CoreML

Posted at

1, CoreML

squeeznetを使ってみる

2,プロジェクト作る

imageVIew
TextView
buttonの配置

3,カメラで写真を撮る

1,カメラの撮影を許可

info.plist

Supported Interface oritentations(iPhone)の中に
Privaccy - Camera Usage Descriptionを追加

2,カメラで写真を撮り画面に戻ってくる

delegateを付け足す

class ViewController: UINavigationControllerDelegate,UIImagePickerControllerDelegate {}

imagePickerの処理

   
    var ImagePicker:UIImagePickerController!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        ImagePicker = UIImagePickerController()
        //imagepickerのdelegate指定
        ImagePicker.delegate = self
        //アルバムから持ってくるのかカメラを使うのか
        ImagePicker.sourceType = .camera
        
        
        
        // Do any additional setup after loading the view.
    }

@IBAction func takePhoto(_ sender: Any) {
        //写真を撮るに移動
        present(ImagePicker,animated: true,completion: nil)
        
    }
 //カメラで写真を撮った後の処理
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        //写真を画面に表示 infoの中に入っている写真を表示
        photoDisplay.image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
        ImagePicker.dismiss(animated: true, completion: nil)
    }

実機で実行するとき
Target -> Singing & CapabilitiesのTeamを指定する必要あり

3,AIで学習する

1,モデルをドラッグあんどドロップ

2,フレームわくimport

import CoreML
import Vision//カメラ映像扱うためのライブラリ

3,写真を撮った後にすいてうする

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        //写真を画面に表示 infoの中に入っている写真を表示
        photoDisplay.image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
        ImagePicker.dismiss(animated: true, completion: nil)
//ここを追加
        imageInference(image:  (info[UIImagePickerController.InfoKey.originalImage] as? UIImage)!)
    }
    
    

モデルへリクエストをなげる

func imageInference(image:UIImage){
            //使うモデルの指定 モデルを読み込み。読み込み失敗したらError
        guard let model = try?VNCoreMLModel(for: SqueezeNet().model) else{
            fatalError("モデルをロードできません")
        }
        //リクエスト作成
        //モデルをベースにしたリクエストを使う
        let request = VNCoreMLRequest(model: model){
            [weak self] request, error in
            //VNClassificationObservationで結果が返ってくる
            guard let results = request.results as? [VNClassificationObservation],
                  let firstResult = results.first else{
                fatalError("判定できません")
            }
            
            //非同期の処理 dispatchQue()
            DispatchQueue.main.async{
                self?.photoInfoDisplay.text = "確率 = \(Int(firstResult.confidence * 100)), \n 詳細 \((firstResult.identifier))"
            }
                    
        }
        //画像データをなげる
        guard let ciImage = CIImage(image: image) else{
            fatalError("画像を変換できません")
        }
        //リクエストを処理するためのオブジェクト 画像なのでCNImageRequest
        //引数に判定したい画像
        //カメラから取得した画像をciimageに変換している
        let imageHandler = VNImageRequestHandler(ciImage: ciImage)
        //データをなげる非同期処理
        //
        DispatchQueue.global(qos: .userInteractive).async {
            do {//画像とモデルをマッチングさせる処理
                try imageHandler.perform([request])
            } catch{
                print("エラー\(error)")
            }
        }
                
                
                
    }

テキストを読み上げるプログラム

AVSpeechUItterance

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2