#iPhoneのカメラでリアルタイムで物体認識をする方法です
#スマホのカメラで物体認識をするのはかんたんなのか?
スマホのカメラにうつるものがリアルタイムで判別できれば、色々なアプリに応用できそう。
しかし、物体認識は機械学習でおこなうが、ちょっとややこしそうな気もする。
しかも、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
}
}
これで、リアルタイムで認識結果のラベル(クラス名)と信頼度が得られます。
高速にフレームごとに処理してくれます。
#さまざまな用途に
このような手法でスマホのカメラに映った任意のものをリアルタイムで判別できれば、コンシューマーだけでなく例えば監視カメラの映像を判別したり、工場のラインで物体認識したり、いろいろな用途に使えます。
🐣
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com
Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。