その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

API Diffsから見るiOS 13の新機能 - Vision #WWDC19

iOSエンジニア諸氏のツイートを見ているとSwiftUIが圧倒的インパクトっぽい今回のWWDCですが、そのへんは識者の方々にお任せして、「その他フレームワーク」で気になった新APIを見ていきたいと思います。

f:id:shu223:20190603103013j:plain

まずはVision。

人間検出

VNDetectHumanRectanglesRequest

人間を矩形で検出。

↓はOpenCV使ったやつですが、こういうのです。

f:id:shu223:20190604093836p:plain

ARKitのpeople segmentationがインパクトありすぎて「矩形で検出」というのは印象薄いですが、「こういうのもあったな」と頭の片隅に置いておくといつか用途があるかもしれません。

文字認識

VNRecognizeTextRequest

文字認識。今まであった文字領域検出じゃなくて、文字認識、いわゆるOCR的なやつです。

今まで無料で使えるやつだとtesseractとSwiftOCRぐらいしか選択肢がなかったのが、ついに標準でサポート・・・!感無量です。(対応言語は後で調べる)

qiita.com

github.com

対応言語はsupportedRecognitionLanguages(for:revision:)というメソッドをたたけば調べられそう。あとでやってみます。

動物検出

VNDetectAnimalRectanglesReques

VNAnimalDetectorのtype propertyとして今のところcatdogが用意されており、つまりイヌネコ認識が可能となります。ペットが写ってる写真とかを判別できるようになったわけですね。

画像の類似度を計算

  • VNGenerateImageFeaturePrintRequest
  • VNFeaturePrintObservation

"Analyzing Image Similarity with Feature Print"というサンプルが公開されており、画像間の類似度が計算できるようになったようです。後でコード読んでみます。

画像分類?

VNClassifyImageRequest

画像分類は前からできたはずだけど、この新クラスは何だろう?

Image Saliency

State of the Unionでも出てきたこのキーワード。"salient"は辞書によると「顕著な」(英英では"most noticeable or important.")の意味。

VNGenerateAttentionBasedSaliencyImageRequest

Generates a heat map that identifies the parts of an image most likely to draw attention.

画像内で、もっとも注意を引く部分を特定するヒートマップを生成・・・?"draw attention"な箇所ってのがよくわかりませんね。試してみます。

VNGenerateObjectnessBasedSaliencyImageRequest

Generates a heat map that identifies the parts of an image most likely to represent objects.

画像内で、もっともオブジェクトを表している部分を特定するヒートマップを生成する。ここでいう「オブジェクト」はこちらで指定できるのでしょうか。あとでもうちょっとAPIを見てみます。

VNSaliencyImageObservation

上2つのrequestの結果として得られるクラス。VNPixelBufferObservationを継承し、グレースケールのヒートマップデータを持つ。

var salientObjects: [VNRectangleObservation]? { get }

というプロパティを持っていて、salient Objectsの矩形を複数保持できるようになっています。

Saliencyのサンプルコードとドキュメント

この"Saliency"関連では、"Highlighting Areas of Interest in an Image Using Saliency"というサンプルコードと、"Cropping Images Using Saliency"というドキュメントがあります。