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

本日からはじまったWWDC 2019、SwiftUIをはじめ実にワクワクする新機能が盛りだくさんでした。iOS 13のドキュメントが公開されたので、明日からのセッションでどのへんを勉強するかの予習をかねて、気になった新APIをピックアップしておきます。

![IMG_3800 copy.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3180/3c577f63-7030-b1c2-4426-de8ceed4da02.jpeg)


## Vision

### 人間検出

- `VNDetectHumanRectanglesRequest`

人間を矩形で検出。

↓はOpenCVを使った結果ですが、こういうのです。

![pedestrian_detection_person_265.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3180/630a95d6-3d9d-9f77-7c12-021a3e4c1f29.jpeg)

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

### 文字認識

- `VNRecognizeTextRequest`

文字認識。<b>従来から備えていた文字領域検出ではなく、文字認識、いわゆるOCR的なやつ</b>です。

今まで無料で使えるやつだとtesseractとSwiftOCRぐらいしか選択肢がなかったのが、ついに標準でサポート・・・！感無量です。

- [Swiftで書かれたOCRライブラリ「SwiftOCR」をiOS実機で試してみた - Qiita](https://qiita.com/shu223/items/f9c82b0b4e7bdb4e3c96)
- https://github.com/tesseract-ocr/tesseract

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

#### 続報: 対応言語一覧

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">記事内に書いてある待望の標準OCR機能 VNRecognizeTextRequest ですが、supportedRecognitionLanguages〜を実行してfast/accurateそれぞれの対応言語一覧を出力してみました。結果は・・・<br><br>&quot;en-US&quot;<br><br>以上！解散😇<br><br>/ API Diffsから見るiOS 13の新機能 <a href="https://twitter.com/hashtag/WWDC19?src=hash&amp;ref_src=twsrc%5Etfw">#WWDC19</a> <a href="https://t.co/QPF61cnpy8">https://t.co/QPF61cnpy8</a></p>&mdash; Shuichi Tsutsumi (@shu223) <a href="https://twitter.com/shu223/status/1136056308983971841?ref_src=twsrc%5Etfw">June 4, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### 動物検出

- `VNDetectAnimalRectanglesRequest`

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

### 画像の類似度を計算
 
- `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`

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

`var salientObjects: [VNRectangleObservation]? { get }`

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

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

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


## Core ML公式配布モデル

以前の公式配布モデルと言えば、[imagenetベースの物体検出がほとんど](https://qiita.com/shu223/items/53f0dd423a9d5271bc2a)で、あまり新鮮味のあるモデルは配布されていませんでした。

なので、[自作する](https://note.mu/shu223/n/nd6320810785e)か、サードパーティ製のを探して使うことがほとんどでした。

- https://qiita.com/shu223/items/572cc6f100f9f5f30a68
- https://note.mu/shu223/n/ncf2b673201e4

・・・が、今日見てみると、[楽しそうなモデルがたくさん追加されている](https://developer.apple.com/machine-learning/models/)ではありませんか！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ひょっとして・・・と見てみたら、CoreMLの公式配布モデルも増えてる！<br>・デプス推定（単眼カメラでも、既存写真からでもデプスが取得可能に）<br>・セグメンテーション<br>・YOLO（「画像内のどこにあるか」までわかる物体検出）<a href="https://twitter.com/hashtag/WWDC19?src=hash&amp;ref_src=twsrc%5Etfw">#WWDC19</a> <a href="https://twitter.com/hashtag/iOS13?src=hash&amp;ref_src=twsrc%5Etfw">#iOS13</a> <a href="https://t.co/UfZvOIfckv">pic.twitter.com/UfZvOIfckv</a></p>&mdash; Shuichi Tsutsumi (@shu223) <a href="https://twitter.com/shu223/status/1135675372605861888?ref_src=twsrc%5Etfw">June 3, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


### デプス推定

- FCRN-DepthPrediction
  - Depth Estimation

> redict the depth from a single image.

画像からデプスを「推定」します。つまり、<b>単眼カメラでも、デプスデータを持っていない既存写真からも、デプスが取得できるようになる</b>、ということです。ここから`AVDepthData`を生成することもできるはずです。

・・・ということは<b>デプスを利用する機能が実質的にデバイスを限定する機能ではなくなる</b>といえるのではないでしょうか。今まではデプスを使う機能を提供しようにもiPhone X系とか7 Plus, 8 Plus系のハイエンドデバイスのユーザーしか使えなかったので、興味やアイデアはあってもなかなか採用しづらかったのではないかと思います。

これでついにデプス利用機能が多少は普及しそうですね。参考書籍を貼っておきます。

- [Depth in Depth - iOSデプス詳解 | 本 | iOS | Swift - shu223 - BOOTH](https://shu223.booth.pm/items/1313752)

（もちろん今回の発表をふまえてアップデート予定です）


### セグメンテーション（領域分割）

- DeeplabV3
  - Image Segmentation

> Segment the pixels of a camera frame or image into a predefined set of classes.

![Segmentation_2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3180/3b851096-fe41-7adb-5171-a11db4484d1a.png)

サムネイル画像によると人間のセグメンテーションのように見えますが、解説を読むと"predefined set of classes"とあり、複数のクラスに対応しているようです。

試しに`.mlmodel`ファイルをダウンロードして埋め込まれているdescriptionを読んでみると、

> person, dog, cat and so on

とあります。人の他に**犬や猫もセグメンテーションできる**ようです。

関連： http://shu223.hatenablog.com/entry/2018/08/22/200226


### 物体検出（YOLO）

- YOLOv3
  - Object Detection

- YOLOv3-Tiny
  - (Real-time) Object Detection

> Locate and classify 80 different types of objects present in a camera frame or image.

物体を「画像内のどこにあるか」の情報を含め検出してくれるモデル。リアルタイム検出用の"Tiny"版もあります。

<img width="507" alt="Screen Shot 2019-06-03 at 18.20.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3180/8efb9c01-2a5b-b4c9-2fcd-955ef12ff815.png">


### 質問への回答を生成

- BERT-SQuAD
  - Question Answering 

> Generate answers to questions about paragraphs of text.

公式配布モデルでは唯一の自然言語処理用。

指定したパラグラフ内のテキストに関して、**質問を与えると回答を生成**してくれるようです。

![AnsweringText_2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3180/a1453cbc-bc82-46db-c6de-5cbc08e331f1.png)

## セマンティック・セグメンテーション / 髪・肌・歯のマスク

- `AVSemanticSegmentationMatte`

[Portrait Matte](http://shu223.hatenablog.com/entry/2018/08/22/200226)の汎用版。Portrait Matteは人間の全身専用マスクを意味しますが、こちらはその他の領域分割用マスクを意味します。

`AVSemanticSegmentationMatte.MatteType`という構造体があり、今のところ次のような種類があるようです。

```swift
static let hair: AVSemanticSegmentationMatte.MatteType
```

> A matting image that segments the hair from all people in the visible field of view of an image.

```swift
static let skin: AVSemanticSegmentationMatte.MatteType
```

> A matting image that segments the skin from all people in the visible field of view of an image.

```swift
static let teeth: AVSemanticSegmentationMatte.MatteType
```

> A matting image that segments the teeth from all people in the visible field of view of an image.

iOS 12の"Portrait Matte"は全身セグメンテーション用のマスクだったのに対して、それの「髪・肌・歯」版が取れるようになったわけです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">auxiliarySemanticSegmentationHairMatte<br>auxiliarySemanticSegmentationSkinMatte <br>髪の色だけ変化させる、肌の色だけ変化させる、ってことができるようになるなこれ。（ちなみにTeethMatteもあったので白い歯にもなれる）<a href="https://twitter.com/hashtag/iOS13?src=hash&amp;ref_src=twsrc%5Etfw">#iOS13</a> <a href="https://twitter.com/hashtag/WWDC19?src=hash&amp;ref_src=twsrc%5Etfw">#WWDC19</a></p>&mdash; Shuichi Tsutsumi (@shu223) <a href="https://twitter.com/shu223/status/1135649548662034433?ref_src=twsrc%5Etfw">June 3, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

これに関連して、Core Imageでも`CIImageOption`に次のような種類が追加されています。 [^ciimageoption]

[^ciimageoption]:https://developer.apple.com/documentation/coreimage/ciimageoption?changes=latest_minor

```swift
static let auxiliarySemanticSegmentationHairMatte: CIImageOption
static let auxiliarySemanticSegmentationSkinMatte: CIImageOption
static let auxiliarySemanticSegmentationTeethMatte: CIImageOption
```

前述のCoreML公式配布モデルの「DeeplabV3」がMatte抽出にあたって<span style="color: #ff0000">内部で使われているのか、別の仕組みなのか</span>は気になります。

### AVCapturePhotoOutputの追加API

`AVCapturePhotoOutput`にセマンティック・セグメンテーション関連APIがいくつか追加されています。[^avcapturephotooutput]

[^avcapturephotooutput]:https://developer.apple.com/documentation/avfoundation/avcapturephotooutput?changes=latest_minor


```swift
var availableSemanticSegmentationMatteTypes: [AVSemanticSegmentationMatte.MatteType]
```

> An array of semantic segmentation matte types that may be captured and delivered along with the primary photo.

```swift
var enabledSemanticSegmentationMatteTypes: [AVSemanticSegmentationMatte.MatteType]
```

> The semantic segmentation matte types that the photo render pipeline delivers.

### AVCapturePhotoの追加API

`AVCapturePhoto`にも。

```swift
func semanticSegmentationMatte(for: AVSemanticSegmentationMatte.MatteType) -> AVSemanticSegmentationMatte?
```

> Retrieves the semantic segmentation matte associated with this photo.

### CIImageのAVSemanticSegmentationMatteからの初期化メソッド

AVSemanticSegmentationMatteはまだ紹介してませんが、名前からしてPortraitMatteの汎用版（Portrait Matteは人間の全身専用マスクだが、もうちょっと汎用的に領域分割するマスク）で、そこからCIImageを生成するメソッドが追加されています。

```swift
init?(semanticSegmentationMatte: AVSemanticSegmentationMatte)
init?(semanticSegmentationMatte: AVSemanticSegmentationMatte, options: [CIImageOption : Any]?)
```

パパッと既存の（≠オリジナルの）画像処理を適用するにはやっぱりCore Imageが簡単なので、これは必須ですね。

`CGImageSource`を渡すイニシャライザも追加されています（今までなかったんだっけ。。？）

```swift
init(cgImageSource: CGImageSource, index: Int, options: [CIImageOption : Any]?)
```

`AVSemanticSegmentationMatte`オブジェクトにはプロパティからアクセスできる（持っていれば）ようです。

```swift
var semanticSegmentationMatte: AVSemanticSegmentationMatte?
```

- 関連： "Portrait Matte"とは？: http://shu223.hatenablog.com/entry/2018/08/22/200226


## Core Image

### デプスブラー

`CIContext`にデプスブラーフィルタを生成するメソッドが追加。`disparityImage`（視差画像）、`portraitEffectsMatte`（全身セグメンテーション用マスク画像）、`hairSemanticSegmentation`（髪のセグメンテーション画像）を渡せて、出力として`CIFilter`オブジェクトが返ってきます。[^depthblureffectfilter]

[^depthblureffectfilter]:https://developer.apple.com/documentation/coreimage/cicontext/3228045-depthblureffectfilter?changes=latest_minor

```
func depthBlurEffectFilter(for image: CIImage, 
            disparityImage: CIImage, 
      portraitEffectsMatte: CIImage?, 
  hairSemanticSegmentation: CIImage?, 
               orientation: CGImagePropertyOrientation, 
                   options: [AnyHashable : Any]? = nil) -> CIFilter?
```

### allowLowPower

`CIContextOption`に以下の型プロパティが追加されていました。

```
static let allowLowPower: CIContextOption
```

ドキュメントには解説がありませんが、ヘッダになにか書いてあるかも知れません。パフォーマンスかなにかを犠牲にして消費電力を抑えるオプションでしょうか？


### CIFilterの各フィルタの初期化メソッド

今までは次のように文字列でフィルタ名を指定して初期化しないといけなかったのですが、

```swift
let filter = CIFilter(name: "CISepiaTone")!
```

iOS 13ではドーンと（たぶん）全フィルタの初期化メソッドが追加されました。

一覧は長いので本記事の末尾に載せますが、たとえば上に示したsepia toneフィルタは次のメソッドで初期化できます。

```
class func sepiaTone() -> CIFilter & CISepiaTone
```


### 一色のCIImageを生成する？

ドキュメントには解説がなかったのですが、CIImageに以下のような型プロパティが追加されています。一色塗りのCIImageオブジェクトを生成するのでしょうか？

```swift
class var black: CIImage
class var blue: CIImage
class var clear: CIImage
class var cyan: CIImage
class var gray: CIImage
class var green: CIImage
class var magenta: CIImage
class var red: CIImage
class var white: CIImage
class var yellow: CIImage
```

## [SoundAnalysis](https://developer.apple.com/documentation/soundanalysis?changes=latest_minor)

> Analyze streamed and file-based audio to classify it as a particular type.

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">うおお、SoundAnalysisめっちゃアツい！画像・動画まわりは機械学習ベースでどんどん進化してるのに音声処理は重要なのにあまり変わらないよなーと最近話してたところ。OCRといい「あったらいいな」がほとんど来てる <a href="https://twitter.com/hashtag/iOS13?src=hash&amp;ref_src=twsrc%5Etfw">#iOS13</a> <a href="https://twitter.com/hashtag/WWDC19?src=hash&amp;ref_src=twsrc%5Etfw">#WWDC19</a></p>&mdash; Shuichi Tsutsumi (@shu223) <a href="https://twitter.com/shu223/status/1135647952305680384?ref_src=twsrc%5Etfw">June 3, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

機械学習ベースで音を分類したりするらしい。何の音を分類してくれるのかAPIリファレンスからはわからなかったのだけど、[ドキュメント](https://developer.apple.com/documentation/soundanalysis/analyzing_audio_to_classify_sounds?changes=latest_minor)で、

> The SoundAnalysis framework operates on a model that you’ve trained using a Create ML MLSoundClassifier

と書いてあって、Create MLでつくったCore MLモデルを使って音を判別するようです。

ってことで、レイヤーとしては<b>Visionの音声処理版</b>（Visionは画像処理版）と解釈しとくとよさそう。



## [AVCaptureMultiCamSession](https://developer.apple.com/documentation/avfoundation/avcapturemulticamsession?changes=latest_minor)

> A subclass of AVCaptureSession that supports simultaneous capture from multiple inputs of the same media type. 

"AVMultiCamPiP: Capturing from Multiple Cameras"というサンプルがあるので、あとで実行してみる。


## [Core Haptics](https://developer.apple.com/documentation/corehaptics?changes=latest_minor)

> Compose and play haptic patterns to customize your iOS app's haptic feedback.

[サンプル](https://developer.apple.com/documentation/corehaptics/playing_collision-based_haptic_patterns?changes=latest_minor)もあります。

[このドキュメント](https://developer.apple.com/documentation/corehaptics/representing_haptic_patterns_in_ahap_files?changes=latest_minor)も興味深い。"Apple Haptic and Audio Pattern (AHAP)"なるファイルフォーマットがあるらしい。


## Audio Effects

そんなに新機能を期待してなかったAudioToolboxのリファレンスを見ていたら、iOS 13+なサンプルが2つもあった。

- https://developer.apple.com/documentation/audiotoolbox/creating_custom_audio_effects?changes=latest_minor
- https://developer.apple.com/documentation/audiotoolbox/incorporating_audio_effects_and_instruments?changes=latest_minor

どちらも"Audio Effects"関連。どのへんがiOS 13なのかまだちゃんと読んでないのですが、あとで見てみます。

## AVSpeechSynthesisVoiceGender

以前からある音声合成機能の、合成音声に男女の区別が追加されました。

```swift
case female
case male
case unspecified
```

これに伴い、`AVSpeechSynthesisVoice`には`gender`プロパティが追加されました。

```swift
var gender: AVSpeechSynthesisVoiceGender { get }
```


## AVSpeechSynthesizer

ちょこちょこと新APIがあります。

```swift
var mixToTelephonyUplink: Bool
var synthesizerAudioSession: AVAudioSession
```

```swift
func write(AVSpeechUtterance, toBufferCallback: AVSpeechSynthesizer.BufferCallback)
```

詳細はいずれ。

## MKPointOfInterestCategory

`MKMapView`に次のようなプロパティが追加されていて、

```swift
var pointOfInterestFilter: MKPointOfInterestFilter?
```

地図上の"Point of Interest"をフィルタできるようになっています。めちゃくちゃ多くの種類が定義されているので、ここでは触りだけ。

```swift
static let airport: MKPointOfInterestCategory
```

> The point of interest category for airports.

```swift
static let amusementPark: MKPointOfInterestCategory
```

> The point of interest category for amusement parks.

## MKMultiPolygon

MapKitの新クラス。WWDCキーノートを聞きながら

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">このストリートビューみたいなやつMapKitにAPI追加されてSceneKitやARKitと連携できるようになってたらアツいな</p>&mdash; Shuichi Tsutsumi (@shu223) <a href="https://twitter.com/shu223/status/1135602344836550656?ref_src=twsrc%5Etfw">June 3, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

こんな妄想をしてたのもあって、「ポリゴン」という字面からSceneKitと連携するなにかかと一瞬期待したのですが、よく考えたら`MKPolygon`というクラスは昔からあって、3Dメッシュ表現手法としてのポリゴンではなくて普通に本来の意味での「多角形」でした。（で、どういうものなのかはまだわかってない）

## Create ML

いずれ別記事で書きたいので省略しますが、つくれるモデルの種類が増えています。

Create MLって何だっけ？という方はこちらの記事をどうぞ：

- [ドラッグ＆ドロップで機械学習のモデルがつくれる「Create ML」の使い方 - その後のその後](http://shu223.hatenablog.com/entry/2018/06/06/071642)


## [VisionKit](https://developer.apple.com/documentation/visionkit?changes=latest_minor)

Visionとはまた別の新フレームワーク。ドキュメントスキャナ的なものをつくる機能を提供してくれている？

> VisionKit is a small framework that lets your app use the system's document scanner. Present the document camera as a view controller, which covers the entire screen like the camera function in Notes. Implement the VNDocumentCameraViewControllerDelegate in your own view controller to receive callbacks from the document camera, such as completed scans.

## watchOSのIndependent App

これめっちゃいいじゃないですか。今まで2つのApp Extensionで構成されてたのがどうなるのか気になる。とりあえずプロジェクト生成してみます。


## On-device speech recognition

オンデバイスで音声認識。`SFSpeechRecognitionRequest`に、以下のプロパティが追加されている。

```swift
var requiresOnDeviceRecognition: Bool { get set }
```


## その他もちろん気になるフレームワーク群

（SwiftUIとかCombineとかはもちろんキャッチアップするとして）

- ARKit 3
- RealityKit
- Reality
- Core ML 3
- Metal
- MetalKit
- Metal Performance Shaders
- Natural Language

etc...




### おまけ1: CIFilterに追加された初期化メソッド一覧

上で解説した、CIFilterを生成するメソッド一覧です。しれっと新たに追加されたフィルタもあるかもしれません。


```swift
class func accordionFoldTransition() -> CIFilter & CIAccordionFoldTransition
class func additionCompositing() -> CIFilter & CICompositeOperation
class func affineClamp() -> CIFilter & CIAffineClamp
class func affineTile() -> CIFilter & CIAffineTile
class func attributedTextImageGenerator() -> CIFilter & CIAttributedTextImageGenerator
class func aztecCodeGenerator() -> CIFilter & CIAztecCodeGenerator
class func barcodeGenerator() -> CIFilter & CIBarcodeGenerator
class func barsSwipeTransition() -> CIFilter & CIBarsSwipeTransition
class func bicubicScaleTransform() -> CIFilter & CIBicubicScaleTransform
class func blendWithAlphaMask() -> CIFilter & CIBlendWithMask
class func blendWithBlueMask() -> CIFilter & CIBlendWithMask
class func blendWithMask() -> CIFilter & CIBlendWithMask
class func blendWithRedMask() -> CIFilter & CIBlendWithMask
class func bloom() -> CIFilter & CIBloom
class func bokehBlur() -> CIFilter & CIBokehBlur
class func boxBlur() -> CIFilter & CIBoxBlur
class func checkerboardGenerator() -> CIFilter & CICheckerboardGenerator
class func circularScreen() -> CIFilter & CICircularScreen
class func cmykHalftone() -> CIFilter & CICMYKHalftone
class func code128BarcodeGenerator() -> CIFilter & CICode128BarcodeGenerator
class func colorBlendMode() -> CIFilter & CICompositeOperation
class func colorBurnBlendMode() -> CIFilter & CICompositeOperation
class func colorClamp() -> CIFilter & CIColorClamp
class func colorControls() -> CIFilter & CIColorControls
class func colorCrossPolynomial() -> CIFilter & CIColorCrossPolynomial
class func colorCube() -> CIFilter & CIColorCube
class func colorCubeWithColorSpace() -> CIFilter & CIColorCubeWithColorSpace
class func colorCubesMixedWithMask() -> CIFilter & CIColorCubesMixedWithMask
class func colorCurves() -> CIFilter & CIColorCurves
class func colorDodgeBlendMode() -> CIFilter & CICompositeOperation
class func colorInvert() -> CIFilter & CIColorInvert
class func colorMap() -> CIFilter & CIColorMap
class func colorMatrix() -> CIFilter & CIColorMatrix
class func colorMonochrome() -> CIFilter & CIColorMonochrome
class func colorPolynomial() -> CIFilter & CIColorPolynomial
class func colorPosterize() -> CIFilter & CIColorPosterize
class func comicEffect() -> CIFilter & CIComicEffect
class func convolution3X3() -> CIFilter & CIConvolution
class func convolution5X5() -> CIFilter & CIConvolution
class func convolution7X7() -> CIFilter & CIConvolution
class func convolution9Horizontal() -> CIFilter & CIConvolution
class func convolution9Vertical() -> CIFilter & CIConvolution
class func copyMachineTransition() -> CIFilter & CICopyMachineTransition
class func coreMLModel() -> CIFilter & CICoreMLModel
class func crystallize() -> CIFilter & CICrystallize
class func darkenBlendMode() -> CIFilter & CICompositeOperation
class func depthOfField() -> CIFilter & CIDepthOfField
class func depthToDisparity() -> CIFilter & CIDepthToDisparity
class func differenceBlendMode() -> CIFilter & CICompositeOperation
class func discBlur() -> CIFilter & CIDiscBlur
class func disintegrateWithMaskTransition() -> CIFilter & CIDisintegrateWithMaskTransition
class func disparityToDepth() -> CIFilter & CIDisparityToDepth
class func dissolveTransition() -> CIFilter & CIDissolveTransition
class func dither() -> CIFilter & CIDither
class func divideBlendMode() -> CIFilter & CICompositeOperation
class func documentEnhancer() -> CIFilter & CIDocumentEnhancer
class func dotScreen() -> CIFilter & CIDotScreen
class func edgePreserveUpsample() -> CIFilter & CIEdgePreserveUpsample
class func edgeWork() -> CIFilter & CIEdgeWork
class func edges() -> CIFilter & CIEdges
class func eightfoldReflectedTile() -> CIFilter & CIEightfoldReflectedTile
class func exclusionBlendMode() -> CIFilter & CICompositeOperation
class func exposureAdjust() -> CIFilter & CIExposureAdjust
class func falseColor() -> CIFilter & CIFalseColor
class func flashTransition() -> CIFilter & CIFlashTransition
class func fourfoldReflectedTile() -> CIFilter & CIFourfoldReflectedTile
class func fourfoldRotatedTile() -> CIFilter & CIFourfoldRotatedTile
class func fourfoldTranslatedTile() -> CIFilter & CIFourfoldTranslatedTile
class func gammaAdjust() -> CIFilter & CIGammaAdjust
class func gaussianBlur() -> CIFilter & CIGaussianBlur
class func gaussianGradient() -> CIFilter & CIGaussianGradient
class func glideReflectedTile() -> CIFilter & CIGlideReflectedTile
class func gloom() -> CIFilter & CIGloom
class func hardLightBlendMode() -> CIFilter & CICompositeOperation
class func hatchedScreen() -> CIFilter & CIHatchedScreen
class func heightFieldFromMask() -> CIFilter & CIHeightFieldFromMask
class func hexagonalPixellate() -> CIFilter & CIHexagonalPixellate
class func highlightShadowAdjust() -> CIFilter & CIHighlightShadowAdjust
class func hueAdjust() -> CIFilter & CIHueAdjust
class func hueBlendMode() -> CIFilter & CICompositeOperation
class func hueSaturationValueGradient() -> CIFilter & CIHueSaturationValueGradient
class func kaleidoscope() -> CIFilter & CIKaleidoscope
class func labDeltaE() -> CIFilter & CILabDeltaE
class func lanczosScaleTransform() -> CIFilter & CILanczosScaleTransform
class func lenticularHaloGenerator() -> CIFilter & CILenticularHaloGenerator
class func lightenBlendMode() -> CIFilter & CICompositeOperation
class func lineOverlay() -> CIFilter & CILineOverlay
class func lineScreen() -> CIFilter & CILineScreen
class func linearBurnBlendMode() -> CIFilter & CICompositeOperation
class func linearDodgeBlendMode() -> CIFilter & CICompositeOperation
class func linearGradient() -> CIFilter & CILinearGradient
class func linearToSRGBToneCurve() -> CIFilter & CILinearToSRGBToneCurve
class func luminosityBlendMode() -> CIFilter & CICompositeOperation
class func maskToAlpha() -> CIFilter & CIMaskToAlpha
class func maskedVariableBlur() -> CIFilter & CIMaskedVariableBlur
class func maximumComponent() -> CIFilter & CIMaximumComponent
class func maximumCompositing() -> CIFilter & CICompositeOperation
class func median() -> CIFilter & CIMedian
class func meshGenerator() -> CIFilter & CIMeshGenerator
class func minimumComponent() -> CIFilter & CIMinimumComponent
class func minimumCompositing() -> CIFilter & CICompositeOperation
class func mix() -> CIFilter & CIMix
class func modTransition() -> CIFilter & CIModTransition
class func morphologyGradient() -> CIFilter & CIMorphologyGradient
class func morphologyMaximum() -> CIFilter & CIMorphologyMaximum
class func morphologyMinimum() -> CIFilter & CIMorphologyMinimum
class func morphologyRectangleMaximum() -> CIFilter & CIMorphologyRectangleMaximum
class func morphologyRectangleMinimum() -> CIFilter & CIMorphologyRectangleMinimum
class func motionBlur() -> CIFilter & CIMotionBlur
class func multiplyBlendMode() -> CIFilter & CICompositeOperation
class func multiplyCompositing() -> CIFilter & CICompositeOperation
class func noiseReduction() -> CIFilter & CINoiseReduction
class func opTile() -> CIFilter & CIOpTile
class func overlayBlendMode() -> CIFilter & CICompositeOperation
class func pageCurlTransition() -> CIFilter & CIPageCurlTransition
class func pageCurlWithShadowTransition() -> CIFilter & CIPageCurlWithShadowTransition
class func paletteCentroid() -> CIFilter & CIPaletteCentroid
class func palettize() -> CIFilter & CIPalettize
class func parallelogramTile() -> CIFilter & CIParallelogramTile
class func pdf417BarcodeGenerator() -> CIFilter & CIPDF417BarcodeGenerator
class func perspectiveCorrection() -> CIFilter & CIPerspectiveCorrection
class func perspectiveTile() -> CIFilter & CIPerspectiveTile
class func perspectiveTransform() -> CIFilter & CIPerspectiveTransform
class func perspectiveTransformWithExtent() -> CIFilter & CIPerspectiveTransformWithExtent
class func photoEffectChrome() -> CIFilter & CIPhotoEffect
class func photoEffectFade() -> CIFilter & CIPhotoEffect
class func photoEffectInstant() -> CIFilter & CIPhotoEffect
class func photoEffectMono() -> CIFilter & CIPhotoEffect
class func photoEffectNoir() -> CIFilter & CIPhotoEffect
class func photoEffectProcess() -> CIFilter & CIPhotoEffect
class func photoEffectTonal() -> CIFilter & CIPhotoEffect
class func photoEffectTransfer() -> CIFilter & CIPhotoEffect
class func pinLightBlendMode() -> CIFilter & CICompositeOperation
class func pixellate() -> CIFilter & CIPixellate
class func pointillize() -> CIFilter & CIPointillize
class func qrCodeGenerator() -> CIFilter & CIQRCodeGenerator
class func radialGradient() -> CIFilter & CIRadialGradient
class func randomGenerator() -> CIFilter & CIRandomGenerator
class func rippleTransition() -> CIFilter & CIRippleTransition
class func sRGBToneCurveToLinear() -> CIFilter & CISRGBToneCurveToLinear
class func saliencyMap() -> CIFilter & CISaliencyMap
class func saturationBlendMode() -> CIFilter & CICompositeOperation
class func screenBlendMode() -> CIFilter & CICompositeOperation
class func sepiaTone() -> CIFilter & CISepiaTone
class func shadedMaterial() -> CIFilter & CIShadedMaterial
class func sharpenLuminance() -> CIFilter & CISharpenLuminance
class func sixfoldReflectedTile() -> CIFilter & CISixfoldReflectedTile
class func sixfoldRotatedTile() -> CIFilter & CISixfoldRotatedTile
class func smoothLinearGradient() -> CIFilter & CISmoothLinearGradient
class func softLightBlendMode() -> CIFilter & CICompositeOperation
class func sourceAtopCompositing() -> CIFilter & CICompositeOperation
class func sourceInCompositing() -> CIFilter & CICompositeOperation
class func sourceOutCompositing() -> CIFilter & CICompositeOperation
class func sourceOverCompositing() -> CIFilter & CICompositeOperation
class func spotColor() -> CIFilter & CISpotColor
class func spotLight() -> CIFilter & CISpotLight
class func starShineGenerator() -> CIFilter & CIStarShineGenerator
class func straighten() -> CIFilter & CIStraighten
class func stripesGenerator() -> CIFilter & CIStripesGenerator
class func subtractBlendMode() -> CIFilter & CICompositeOperation
class func sunbeamsGenerator() -> CIFilter & CISunbeamsGenerator
class func supportedRawCameraModels() -> [String]!
class func swipeTransition() -> CIFilter & CISwipeTransition
class func temperatureAndTint() -> CIFilter & CITemperatureAndTint
class func textImageGenerator() -> CIFilter & CITextImageGenerator
class func thermal() -> CIFilter & CIThermal
class func toneCurve() -> CIFilter & CIToneCurve
class func triangleKaleidoscope() -> CIFilter & CITriangleKaleidoscope
class func triangleTile() -> CIFilter & CITriangleTile
class func twelvefoldReflectedTile() -> CIFilter & CITwelvefoldReflectedTile
class func unsharpMask() -> CIFilter & CIUnsharpMask
class func vibrance() -> CIFilter & CIVibrance
class func vignette() -> CIFilter & CIVignette
class func vignetteEffect() -> CIFilter & CIVignetteEffect
class func whitePointAdjust() -> CIFilter & CIWhitePointAdjust
class func xRay() -> CIFilter & CIXRay
class func zoomBlur() -> CIFilter & CIZoomBlur
```

## おまけ2: MKPointOfInterestCategory一覧

```swift
static let airport: MKPointOfInterestCategory
static let amusementPark: MKPointOfInterestCategory
static let aquarium: MKPointOfInterestCategory
static let atm: MKPointOfInterestCategory
static let bakery: MKPointOfInterestCategory
static let bank: MKPointOfInterestCategory
static let beach: MKPointOfInterestCategory
static let brewery: MKPointOfInterestCategory
static let cafe: MKPointOfInterestCategory
static let campground: MKPointOfInterestCategory
static let carRental: MKPointOfInterestCategory
static let evCharger: MKPointOfInterestCategory
static let fireStation: MKPointOfInterestCategory
static let fitnessCenter: MKPointOfInterestCategory
static let foodMarket: MKPointOfInterestCategory
static let gasStation: MKPointOfInterestCategory
static let hospital: MKPointOfInterestCategory
static let hotel: MKPointOfInterestCategory
static let laundry: MKPointOfInterestCategory
static let library: MKPointOfInterestCategory
static let marina: MKPointOfInterestCategory
static let movieTheater: MKPointOfInterestCategory
static let museum: MKPointOfInterestCategory
static let nationalPark: MKPointOfInterestCategory
static let nightlife: MKPointOfInterestCategory
static let park: MKPointOfInterestCategory
static let parking: MKPointOfInterestCategory
static let pharmacy: MKPointOfInterestCategory
static let playground: MKPointOfInterestCategory
static let police: MKPointOfInterestCategory
static let postOffice: MKPointOfInterestCategory
static let publicTransport: MKPointOfInterestCategory
static let religiousSite: MKPointOfInterestCategory
static let restaurant: MKPointOfInterestCategory
static let restroom: MKPointOfInterestCategory
static let school: MKPointOfInterestCategory
static let stadium: MKPointOfInterestCategory
static let store: MKPointOfInterestCategory
static let theater: MKPointOfInterestCategory
static let university: MKPointOfInterestCategory
static let winery: MKPointOfInterestCategory
static let zoo: MKPointOfInterestCategory
```