iOS10で使えるようになるSiriKitじゃないSpeech.framworkについて

  • 46
    Like
  • 0
    Comment
More than 1 year has passed since last update.

このスライドは

WWDC16. Meetup@Wantedly with 日本経済新聞社
http://wantedly.connpass.com/event/33967/

@yimajo 発表資料です


おやくそく

  • Apple社とのNDAには最新の注意を払って誤解のないようにしたい
  • ここに集まっている人たちは皆AppleとのNDAを結んでいて私の話すことは既知の情報です
  • ただしスライドの写真を撮ってtweetするのはNDA警察に余計な心配をされるかもしれないので我慢しましょう
  • Apple Developer Agreement

祝: iOS10でSiriを開発者が自由に使えるようになった!!


ヽ(´∀`)八(´∀`)ノイエーイ


勘違い乙


Siriがあたかも自由に扱えるようになったような


メディアの報道だけだと勘違いしたままになるので整理します


まず概要から言うよ


1. Siri画面上からチャットでアプリと連携する機能



2. サードパーティアプリから音声認識が使えるAPI


Siriに関連しているのはこの2つ


これをごっちゃにして SiriKit と呼んでしまってる奴が多い


m9(^Д^)


siri.003.jpeg


まずSiriKitとは

Siriからエクステンションでアプリの機能を呼び出す機能


Intents.frameworkIntentsUI.frameworkからなる

連携できる限定的な用途

  • Audio or video calling
  • Messaging
  • Payments
  • Searching photos
  • Workouts
  • Ride booking

ちなみにSiriKitというフレームワークはない

UIKitUIKit.framework

しかしSiriKit.framworkなんてない


じゃあ既存の ~Kit はフレームワークか調べてみた


調べたら全ての~Kit~frameworkだった(iOS9)

  • UIKit.framework, WebKit.framework, MapKit.framework, HomeKit.framework, PassKit.framework, CallKit.framework, AVKit.framework, MetalKit.framework, GameKit.framework, GamePlayKit.framework, HealthKit.framework, ReplayKit.framework, SceneKit.framework, SpriteKit.framework, CloundKit.framework, CoreAudioKit.framework, WatchKit.framework, PushKit.framework, GLKit.framework, NewsstandKit.framework, EventKit.framework, EventKitUI.framework, StoreKit.framework, TVMLKit.framework

その逆にframeworkだけど ~Kitじゃないものはもちろん沢山ある


SiriKitは

  • Intents.framework, IntentsUI.framework

SiriKitという命名はマーケティング上の名前っぽい感じがあるんだなあ


┐(´ー`)┌


このモヤモヤ感を言葉にすると

  • Siriから呼び出すアプリ連携は設計/実装上はSiriに依存しないのでIntent.frameworkIntentUI.frameworkとなっている
    • ->いいね!
  • それらをSiriKitと呼ぶので~Kit は frameworkではなくなった
    • Kitって何...

本題


次にアプリから音声認識が使えるAPIについて


Speech.framework

  • 音声認識とテキストへの文字起こしをサポートするAPIが追加された
  • 音声をテキストにしてくれるだけではなく、文脈に応じて単語の変更、単語ごとにレスポンスを返す

APIのレスポンス


public class SFTranscription : 
        NSObject, NSCopying, NSSecureCoding {

    public var formattedString: String { get }

    public var segments:
        [SFTranscriptionSegment] { get }
}

例えば "こんにちは世界"と入力した場合
segments[0].substring = ["こんにちは"]
segments[1].substring = ["世界"]


使い方

  • 自分のアプリから import Speechで使える
  • PrivacyとSecurityの面から、パーミッション許可アラートが利用時に表示される
  • info.plistにパーミッション許可用にユーザに表示する文面を書き込む

SiriのおさらいとSpeech.frameworkの違いを図にしてみる


siri.001.jpeg


siri.002.jpeg


FAQ(俺はこう思ったっス)


なぜSiriKit.frameworkがなくIntents, IntentsUI, Speech.frameworkと分離してる?

  • Siriはインフラの一つだし
  • 開発者から見たら分離されたframworkのほうが正しい

もともとキーボードに音声入力あるよね?

  • UIとして入力欄UITextFieldとキーボードが必要
  • 入力されたテキストは単語ごとに分かれているわけではない

キーボード.png


音声認識で可能になるアプリって?

  • 音声で検索したり
  • 音声でページをめくったりする電子書籍
  • 議事録作成アプリ

(利用制限をUIなどでうまく回避したりできれば...)


音声認識アプリ作成時のTips?

  • デバッグ時に繰り返し喋るのが恥ずかしい
  • ユーザもオフィスや人が多い所で音声認識を利用するとは思えない
    • -> 電車の中では音声認識は使われないだろうな

まとめ

  • SiriKitというのはマーケティング用語臭が強い
  • 「それSiriKitで検索できるんでしょ?」みたいな方への返答にこの資料をお使い下さい

自己紹介


@yimajo
Yoshinori Imajo
https://stargzr.net を作っています


Stargzrでは

  • 昨日新しくPROエンジニアプランというのを実装したり
  • stargzr.fmをやっています

スクリーンショット 2016-06-30 0.50.00.png


参考URL