9
Help us understand the problem. What are the problem?

スマホでリアルタイムで物体を認識したいなら、CoreMLモデルにカメラフィードを食わせるだけでOK

iPhoneのカメラでリアルタイムで物体認識をする方法です

Jan-10-2022 13-44-52.gif

スマホのカメラで物体認識をするのはかんたんなのか?

スマホのカメラにうつるものがリアルタイムで判別できれば、色々なアプリに応用できそう。
しかし、物体認識は機械学習でおこなうが、ちょっとややこしそうな気もする。
しかも、1枚の画像ならまだしも、リアルタイムでカメラの映像を認識するのは設定が多そう。

CoreMLモデルにCaptureOutputを食わせるだけ

実は、それほどたくさんコードが必要なわけではない。
CoreMLモデルさえあれば、AVFoundationで取得したフレームをモデルに与えるだけで、リアルタイム物体認識ができる。

手法

まずはCoreMLの画像認識モデルを入手する。
ネット上から入手できるので、好みのものを使おう。
Appleが公式に配布しているものなど、画像認識モデルにはいろいろな種類があり精度もさまざまだが、
今回は、CoreMLモデル・ズーであるCoreML-Modelsから最新モデルであるRepVGGをダウンロードしてつかってみる。

モデルをSwiftで初期化する。

self.coreMLRequest = VNCoreMLRequest(model: try! VNCoreMLModel(for: try! RepVGG-A0(configuration:MLModelConfiguration()).model))

AVCaptureOutputのフレームをモデルに食わせる。

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {        
    guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }

    let handler = VNImageRequestHandler(cvPixelBuffer:buffer, orientation: .right, options: [:])
    do {
        try handler.perform([self.coreMLRequest])
        guard let result = self.coreMLRequest.results?.first as? VNClassificationObservation else { return }
        let label = observation.identifier
        let confidence = observation.confidence
    } catch let error {
        print(error)
        return nil
    }
}

これで、リアルタイムで認識結果のラベル(クラス名)と信頼度が得られます。
高速にフレームごとに処理してくれます。
Jan-10-2022 13-44-52.gif

さまざまな用途に

このような手法でスマホのカメラに映った任意のものをリアルタイムで判別できれば、コンシューマーだけでなく例えば監視カメラの映像を判別したり、工場のラインで物体認識したり、いろいろな用途に使えます。

🐣


フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。

Twitter
Medium

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
9
Help us understand the problem. What are the problem?