(WWDC17初日にブログに書いた記事を再編したものになります)
ついにiOSも10年目。だいぶ成熟してきて、今年は特に何も期待しないまま参加したのですが、開発者的には非常にワクワクする発表がたくさんありました。
基調講演の内容からではなく、ベータ公開されたiOS Dev CenterのAPIリファレンスを見て、個人的に/開発者目線から気になった新APIを挙げていきます。
##Core ML
iOS 10からMetal Performance Shaders(以下MPS)に追加されたCNN関連機能、足りないものが色々とあり、ここらへんは拡充されたら嬉しいなとは思っていましたが、新フレームワークとして登場しました。
おいおい、さらに増えたら MPSCNN / BNNS / Core ML とどう使い分けるんだ、と思いましたが、ドキュメントの図で棲み分けがわかりました。
Keras や Caffe で学習したモデルを BNNS や MPSCNN で使えるようにするのが Core MLのようですね。
import coremltools
coreml_model = coremltools.converters.caffe.convert('my_caffe_model.caffemodel')
coreml_model.save('my_model.mlmodel')
実際、学習済みモデルを持ってくるところは扱いづらい仕様だったので、これは嬉しいです。
- iOSのMPSCNNに渡すモデルパラメータのフォーマット / TensorFlowからの書き出し - Qiita
- iOSのMetalで畳み込みニューラルネットワーク - MPSCNNを用いた手書き数字認識の実装 - Qiita
##Metal Performance Shader
上でMPSという略語を何度かもう出しましたが、MPS自体にもいくつか新規追加APIがあります。その中でも目を引くのが Recurrent Neural Networks(RNN / 再帰型ニューラルネットワーク)関連のAPI群。
- MPSRNNImageInferenceLayer
- MPSRNNMatrixInferenceLayer
- MPSRNNSingleGateDescriptor
- MPSGRUDescriptor
- MPSLSTMDescriptor
- MPSRNNSequenceDirection
RNNは、文書解析に向いていて、自然言語処理の分野で成果を挙げているとか。勉強します。
##Vision
これも新フレームワーク。画像解析・コンピュータビジョンで顔を識別したり、シーンを分類したりするフレームワークのようです。APIを見てると Core Image の CIDetector の下回りがこれなのかなぁという品揃えです。
- Face Detection and Recognition
- Machine Learning Image Analysis
- Barcode Detection
- Image Alignment Analysis
- Text Detection
- Horizon Detection
- Object Detection and Tracking
ちなみにドキュメント冒頭で "detect faces" ではなく "identify faces" という言い方をしてるのと、"Face Detection and Recognition" とわざわざ書いてあるので、顔検出ではなく、「これは誰々だ」という顔の認識までしてくれるのかなと期待しましたが、今のAPIを見た限りだと従来の顔の矩形検出っぽいです。今のところは。
いや、それにしてもこれは嬉しいです。もっとAPI掘ってみます。
##ARKit
これは基調講演でも盛り上がってましたねー
私事ですが、勤めている会社のアプリ Fyuse でこういうものを実装しました。
Fyuseというアプリはスマホで3D的な写真を取るアプリなのですが、実装した機能というのが、タップして選んだ対象の周囲に3Dの「ARガイド」を表示して、撮影を補助するものです。
で、これがiOSの実装的に言うと、
- カメラからの入力画像を解析してリアルタイムに物体追跡
- カメラの姿勢と対象物体の位置・角度からARガイドを表示する
というところで、AVFoundation、Metal、SceneKit(+コアとなる画像処理:弊社リサーチチームによる実装)が要素技術になってきます。
僕は3Dの取り扱いにまだ慣れてなくて、カメラからの入力・iPhoneのスクリーンという2Dの世界と、デバイスの姿勢・SceneKitで構築する3Dの世界とを行き来するのに苦労しました。
こういうのをARKitはやりやすくしてくれるものなのかなと思います。具体的なAPIはまた後ほど見たいと思います。
##Depth API
基調講演で「Depth API」って言ってて、「きたー!」と思いましたが、
Depth API! #WWDC17 pic.twitter.com/VEp1wLIeNw
— Shuichi Tsutsumi (@shu223) 2017年6月5日
AVFoundationを見るも、新規追加APIはなし。
どこにあるのか・・・と思ったらFacebookやTwitterで @hkato193 さん、@Gemmbu に教えていただいて、 AVCaptureDepthDataOutput
という新規APIがあることがわかりました。(新しいドキュメントのdiffの見方を間違ってました)
##Core Bluetooth on watchOS
Core Bluetooth が watchOS でも使えるようになったようです。
Core Bluetooth on watchOS! #WWDC17
— Shuichi Tsutsumi (@shu223) 2017年6月5日
ドキュメント見ると、核となるクラスである CBCentralManager や CBPeripheralManager が "watchOS 2 +" となっていて、"4.0+" の間違いなのかほんとなのか謎ですが、いずれにせよ、時計から外部デバイスを操作できるって、ワクワクしませんか・・・?僕はします。またウォッチいじりたくなりました。
Core Bluetoothについて新たに勉強したくなった方にはこちらの書籍がおすすめです。
-『iOS×BLE Core Bluetooth プログラミング』の紹介 - Qiita
##Core NFC
基調講演でチラッとNFCの文字が見えましたが、新フレームワークが追加されてました。何ができるようになったのか、あとでAPIを見ます。
→ その後FacebookでNoriaki Misawaさんより、以下のように情報いただきました。
CoreNFCはType1-5までのNDEFが読めるようになりました。それだけみたいです。コード書いて試そうとしたら、7じゃないとダメだそうで、それ知る前に6sをiOS11にしてしまったので焼き直しです。。
##SiriKit
開発者ドキュメントでは"Lists and Notes"という、NotesやToDoリストを作成・管理するものが追加されてますが、基調講演では他にももっとたくさんできることが増えたって言ってたような。
##その他
###MusicKit
基調講演でチラッと行ってた気がするけどAPIリファレンスに見当たらないような。。。
いや、Musicライブラリまわりの連携って、実は結構苦しいこと多くないですか?なので、何が新たにできるようになったのかは知っておきたいなと。
→ FacebookでIkuya Omatsuさんより以下のように情報いただきました。
AppleMusicAPI Refならありました
(今日のWWDCのMusicKitのセッションのResourceリンクにもこれが貼られてました)
###RPScreenRecorder(ReplayKit)
ReplayKitに追加された、アプリのスクリーンビデオを撮るためのクラス。そもそもReplayKitってそういうものじゃなかったでしたっけ?たまに画面を録画する機能をサクッとつくりたいケースはあるので、以前のと何が違うのか、見ておきたいなと。
→ ブログに @k_katsumi さんより以下のようにコメントをいただきました。
ReplayKitのRPScreenRecorderは録画した結果をファイルなどで取得することはできなかったのですが、それが新しいメソッドが追加されてサンプルバッファを取得できるようになってるので、デバッグ用途とか使いどころが増えますね。
###SCNCameraController(SceneKit)
何をするものでしょうか?あとで見る。
###NEHotspotConfiguration
WiFi関連のAPIが今更新たに公開されるのって、どういう文脈に沿ってるんでしょうか?何にせよ外の物理的な何かと連携するAPIは好物なので、見ておきたいです。
###Xcode 9
いろいろ劇的に改善されましたね。
##関連