アップル公式配布モデルをダウンロードして、物体検出してみます。
以下のような「人間」「自転車」「車」「バイク」。。。という80個の物体を認識して画像内の位置を教えてくれます。
#手順
###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チャンネル]
(https://www.youtube.com/channel/UCbHff-wfjTnB3rtXIP6y0xg)
Medium