iPhoneのカメラで機械学習モデルによる物体検出をします
スマホで物体検出できれば、色々つかえそう。でも、難しいそう
機械学習ってむずかしいのでは?
手軽に使えるCoreMLモデルで今すぐやってみれる
アップルはiPhoneでかんたんに使えるCoreMLという形式を用意してくれています。
手順
アップルの公式モデルズーやCoreML-Modelsなどから物体検出モデルをダウンロード。
モデル実行リクエストを初期化。
guard let vnModel = try? VNCoreMLModel(for: yolov5().model) else { fatalError("Model initialization failed.") }
self.request = VNCoreMLRequest(model: vnModel)
カメラのフレームを食わせるだけ。
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 results = self.coreMLRequest.results as? [VNRecognizedObjectObservation] else { return }
for result in results {
let label = observation.identifier
let confidence = observation.confidence
let boundingBox = observation.boundingBox
print(label,confidence,boundingBox)
}
} catch let error {
print(error)
return nil
}
}
フレーム毎に画像内で検出した物体のラベルと画像内座標を出力してくれます。
Optional("laptop") // 検出ラベル
0.6810466 // 信頼度
(0.002242632210254669, 0.002170730382204056, 0.21633444726467133, 0.09707524627447128) // 座標
視覚化はMLModelCameraといライブラリが便利です。
🐣
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com
Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。