LoginSignup
4
6

More than 3 years have passed since last update.

公式YOLOv3物体検出モデルをiOSで使う手順。

Last updated at Posted at 2020-09-24

アップル公式配布モデルをダウンロードして、物体検出してみます。
image.png

以下のような「人間」「自転車」「車」「バイク」。。。という80個の物体を認識して画像内の位置を教えてくれます。
スクリーンショット 2020-09-24 19.41.02.png

手順

1、Visionで実行リクエストを作成

YOLOv3.mlmodelをXcodeプロジェクトにドラッグ&ドロップして、

lazy var detectRequest:VNCoreMLRequest = {
    let model = try! VNCoreMLModel(for: YOLOv3().model)
    let request = VNCoreMLRequest(model: model, completionHandler: nil)
    request.imageCropAndScaleOption = .scaleFit
    return request
}()

2、ImageRequestHandlerで画像を渡して実行

let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])

DispatchQueue.global(qos: .userInitiated).async { [self] in
    do {
       try handler.perform([detectRequest])
    } catch let error {
       print("\(error)")
}

3,結果(ラベル、信頼度、物体位置)を処理する

画像内で認識できた物体の数だけVNRecognizedObjectObservationが返ってきます。

guard let results = request.results as? [VNRecognizedObjectObservation] else { return }

一つ一つの物体について、ラベル、信頼度、物体位置が取れます。

for result in results {
    let label:String = result.labels.first!.identifier // ラベル名。「labels」の0番目(例えば”Car”の信頼度が一番高い。1番目(例えば”Truck”)の信頼度が次に高い。
    print(label)
    // "Car"

    let confidence = result.confidence // labelの信頼度
    print(confidence)
    // 0.8664

    let boundingBox = result.boundingBox // 認識された物体の境界ボックス
    print(boundingBox)
    // (0.4403754696249962, 0.3421999216079712, 0.12934787571430206, 0.38909912109375)    
    //* Core Imageと同じで右下が原点
}

🐣


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

Twitter
MLBoysチャンネル
Medium

相棒
note

4
6
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
4
6