本稿について
Vision.frameworkを通じて機械学習について触れる、くらいの簡単な内容になっているわ。
簡単にどんなことができるのかな?くらいのレベルなのでまったくのど素人だぜ!って人向けよ。
多分ググっていくらでも出てくる情報なので過度な期待はしちゃいやよ。
Vision.frameworkとは
画像を解析したりしてくれる便利なフレームワークだわ。
CoreML(機械学習)のお手軽インターフェースって感じかしら。。
もっと深入りしたい人はCoreMLの学習が必要そうね。
何ができるのかしら?
Apple のリファレンス(https://developer.apple.com/documentation/vision?language=objc)
によると、
名前 | 内容 |
---|---|
Object Tracking | カメラでオブジェクトをトラッキングする |
Rectangle Detection | 長方形検出 |
Face Detection | 顔検出 |
Barcode Detection | バーコード検出 |
Human and Animal Detection | 人間と動物の検出 |
Text Recognition | テキスト認識 |
Text Detection | テキスト検出 |
この辺がフレームワークに組み込まれている機械学習モデルを使ってできるようね。
もちろん、モデルをつくって独自に行うこともできるわ!
ちなみに
https://developer.apple.com/machine-learning/models/
こちらからモデルをダウンロードすることも可能となっているわ。
ぜひ使ってみてね☆
実装
今回は参考までに、顔検出のVNDetectFaceLandmarksのソースコードを貼っておくわね。
最低限な感じになっているから、この先にどんな実装をするかはあなた次第だわ。
@IBAction func leftEyebrow() {
let request = VNDetectFaceLandmarksRequest { (request, error) in
for observation in request.results as! [VNFaceObservation] {
let points = observation.landmarks?.leftEyebrow?.pointsInImage(imageSize: self.originalImageView.frame.size)
// points(CGPointの配列)で、imageViewに描画していくなどの処理を行う
}
}
if let cgImage = self.originalImageView.image?.cgImage {
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try? handler.perform([request])
}
}
超簡単に説明すると、適当なボタンを用意してタップすると、
- VNRequestのサブクラスのオブジェクトを作る(ここではVNDetectFaceLandmarksRequest)
- request発行
- 返却されたCGpointの配列を取得
- 描画など何かしらの処理
上記が行われます。
このサンプルではleftEyebrow(向かって左眉)の座標を取得することができます。
今回はself.originalImageViewというUIImageViewのプロパティをを使っていますが、
応用していろいろなことをやってみると面白いですね。
今後は...
今回はVNDetectFaceLandmarksRequestでしたが、上述の通りVNTrackObjectRequestなど色々な解析方法があります。
だいたい同じような感じでいけると思いますので、。ぜひ試してみてください。
個人的には早く日本語のテキストの検出ができたら色々なところで使えそうだなーって思っています。
お楽しみに。