ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Appのキーボード入力のためのカメラの使用
テキストの認識表示をサポートし、カメラからテキストデータをインテリジェントに取り込んで、App内のフォームやテキストフィールドに入力する方法を確認しましょう。ユーザがカメラをキーボード代わりに使用してテキストを入力する際に、コンテンツフィルタリングを適用して正しい情報を抽出して、その情報を適切なUITextFieldに取り込む方法を紹介します。これにより、Appで電話番号、住所、フライト情報などのデータを入力できるようになります。カスタムインターフェイスを作成して、UIImageViewsのような他のコントロールを拡張してこの機能をサポートする方法なども検証します。 AppでAutofillをサポートする方法について詳しくは、WWDC20の「どこにでもAutofill」と、WWDC17の「The Keys to a Better Text Input Experience」をご確認いただくことをお勧めします。
リソース
関連ビデオ
WWDC23
WWDC21
WWDC20
-
ダウンロード
♪ (Appのキーボード入力のためのカメラの使用) 皆さんこんにちは ロンサントスです キーボードの業務を行っている ソフトウェアエンジニアです ここで紹介するのは新機能を最大限活用して テキスト入力を行う方法です ディクテーションで入力するのではなく カメラを使用します このニュースリリースに対して 一生懸命働いてきました WWDCがとうとう 開催されることになり やっと休暇がとれます 安全になったらすぐに 休暇をとり旅行したいと思います 旅行に関して気になるのは デジタル化されていない テキストの処理です 言っていることが おわかりでしょうか? 請求書 パンフレット 大きなバインダーなど ホテルの部屋にあるものです 幸いiOS 15には 新しい機能があり テキストをいろいろなものから キャプチャリングできます ここでお見せしましょう チェックしてみてください この旅行記のAppを作っています 旅行について 文書化するために使用します 最近行ったハワイのように 泊った場所も文書化します この一番上に画像ヘッダを 追加できます カメラロールの素敵な 風景写真がいいでしょう 次にホテルの情報の フィールドがあります 名前 電話番号 住所などです 実は書類にこれら全ての 情報があります 目の前にです
全てを入力したくありません 今はその必要もないのです 例えば電話番号の欄を 2回タップすると 編集メニューに新しい オプションが表示され カメラからのテキストを 使用できます 起動するとカメラは 瞬時に書類にあるテキストの グループを認識します フリーズして電話番号だけを 選択できあます 次にをタップして完了です これはかなりすばらしいと思います 百聞は一見に如かずという ことわざを思い出します しかし この機能では 何千語ものテキストを絵に 抽出できるのです いずれにせよ既にお伝えしたように この機能を最大限利用する 方法を紹介したいと思います 初めにコンテンツの フィルタついて話します 覚えているかもしれませんが 電話番号を大量のテキストから ドラッグして選択する 必要がありました 電話番号を探していることを Appが知っていれば このようなことは必要ないはずです 他のものを無視して番号だけを キャプチャできるはずです まずどれぐらい簡単に 必要なコンテンツを フィルタできるかをお見せします フィルタは TextConentTypeと keyboardTypeの プロパティにより行えます これはテキストフィールとや テキストビューにあります 事実このようなプロパティを おそらくは既に使用して AutoFillのようなものに 使用していると思います もしそうだとしたらすばらしいです カメラからの入力で 追加のメリットを得られます 使用したことがない場合は ここにいくつかの前の年の ビデオがあり これにより方法を確認できます TextContentTypeに 戻りましょう TextContentTypeは 様々な値のどれにもなる可能性が ありますがカメラはこれらの 全タイプをフィルタしません これら7つだけをフィルタ するだけです いくつか例を見てみましょう これが最初の4つです 電話番号 住所全体 URL Eメールで これら全て現在 iOSに事前に用意されています iOS 15では新たに3つのタイプが 追加されました フライト番号 出荷追跡番号 そして日付・時間・期間の コンビネーションです 旅行Appでフライト番号が どれぐらい役立つか想像できると 思います またパッケージ追跡Appで 追跡番号がどれぐらい役立つかも 想像できると思います これらのコンテンツタイプの 使用方法を説明します 非常にシンプルです Interface Builderを 使用している場合 ContentTypeと Keyboard TYpeを Attributesインスペクタ で探してください コードでこれを行う場合は 好きな値を割り当てるだけです この旅行記Appで 欄はphonePadの キーボードを使用し 欄には fullStreetAddressの textContentTypeが あります 電話番号の場合は autocorrectionTypeを に設定する ことに気づいてください 自動補正や 予測テキスト候補がないと iOSはカメラへのクイックアクセスを 促すボタンを表示します 私のAppに戻ってみましょう ホテルの電話番号を 再度キャプチャーできますが 今回は変化があります カメラを使うと 賢くなっていて電話番号以外の 他のテキストを すべて無視します 欄で再度試してみましょう
非常に高速です タッピングやスワイピングの回数が 大幅に減りました コンテンツのフィルタ方法は 以上です 次に別のことに挑戦してみましょう この機能の利用を促進して もっと発見して もらえるようにするには どうしたらよいのでしょうか? Appの開発者として 合理化されたユーザ インターフェースを好みます これはメニューやジェスチャーの 背後に追加の機能が潜んでいて ユーザが知らないことを 意味することがあります 例えば私のAppの欄を 使用する場合 ここの入力にカメラを使用できる ことはあまり知られていません 2回目のタップの際に編集メニュー のみが表示されます 予測テキストの候補のバーが 先ほどお見せしたボタンの代わりに 表示されます カメラの入力を求める画面上の ボタンが必要な場合 専用のランチャボタンを独自に 追加した方がいいでしょう これにはまずUIActionを 作成する必要があります iOS 15の captureTextFromCameraという 新しいFactory Methodを使用します アクションはカメラの起動方法を 把握していますが画像とラベルも ボタンやメニューと共に 使用されたときに提供します カメラからテキストを挿入する ためのアイテムのある 私のAppにメニューを 追加してみましょう さて ここで再度私の Appを確認します 欄の編集時に キーボードの上にこの ツールバーが表示されます カメラのアイコンのある2番目の アイテムがタップされるときに カメラ関連のアクションを多数表示する メニューが現れるようにしたいです カメラからのテキスト入力の 新機能のようにです ここではアクションを作成します オプションの識別子の他は Factory Medhodが レスポンダーにテキストの受け入れを 求めるだけであることに気づいてください 次に他のメニュー項目の アクションを作成します 最後にメニューをアセンブルして 作成します 今作成したアクションのそれぞれ に対してです textFromCamera アクションも含まれます タイトルや使用する画像を指定する 必要がないことを思い出して ください アクションによりこれは全て 提供されています タイトルはローカライズまで されます さあ試してみましょう Appに戻ります ここに欄があり カメラ メニューのあるツールバーが テキストを挿入してみましょう 目の前にあるパンフレットからです
完了です! 数行のコードだけのユーザが 検出できるランチャです しかし念頭に置くことが1つ あります カメラランチャを追加する前に canPerformActionwithSenderの 結果を まず確認した方がいいと いうことです captureTextFromCameraと 呼ばれる UIResponderオブジェクトに対して 新らしいメソッドを 呼び出すことにより UIActionが機能するためです 削除 コピー 貼り付けなどの標準的な 編集アクションに似た形で機能します これらのアクションは常に 利用できるわけではありません コンテキストによります 例えば何も選択していないと テキストを削除できませんが 同じことがここでも言えます captureTextFromCamera アクションには前提条件があり この1つのメソッドが 必ず全要件が満たされる事を保証します それぞれを見てみましょう その方がなぜそのメソッドがfalseを 返すことがあるのかよく分かります まずハードウェアの要件がいくつか あります iOS 15を実行している全ての デバイスがこの機能を サポートしているわけでは ありません デバイスは iPhoneである必要があります どのiPhoneでもいいわけではありません Neural Engine 非常に高い学習機能のあるマシンの iPhoneが必要なのです ハードウェアの他にも レスポンダーはテキスト挿入を 処理する必要があります これについては後で詳細を 説明します 次に 明らかかもしれませんが レスポンダーがテキストビューか テキストフィールドの場合 編集可能にする必要があります 最後に ユーザは7つのサポート している言語のうち少なくとも 1つを優先言語のリストに 用意する必要があります カメラの入力を処理する機能が 整いました しかし まとめに入る前に 私のAppに追加した楽しいものを お見せします ヘッダの写真を覚えていますか? すばらしいですが字幕を追加すると さらによくなると思います カメラから抽出される 字幕かもしれません そこでランチャボタンを ここに追加しました メニュー項目でやったようにです (紙のカサカサという音)
今はテキストをキャプチャして 画像の上に置くことができます しかしどのようにしたら いいのでしょうか? これはイメージビューで テキストコントロールではありません 少し戻ってテキストコントロールが 機能する方法を確認してみましょう そしてその後イメージビューに ついて話しましょう テキストコントロールは UIKeyInputという プロトコルに準拠しています これはレスポンダーがキーボード 入力を受け入れる方法の標準 セットを定義します プロトコルには3つのメソッドがあり そのうちの1つはinsertTextという メソッドです このメソッドはテキストをカメラから Appにトランスポートするために 使用されたメソッドと同一です したがってレスポンダーが カメラの入力をサポートするには このプロトコルに準拠する 必要があります テキストコントロールが UIKeyInputに準拠していることを 言ったばかりですが実際には UITextInputという プロトコルに実際は準拠しています これはUIKeyInputの extensionです UITextInputに準拠すると カメラの使用時に 追加の機能が提供されます 挿入するテキストのプレビューです setMarketTextメソッドの 説明はこれで終了です ただし プレビューは オプションです 使用する場合は UIKeyInputに準拠すれば いいだけです 最後にもう1つ説明すべき プロトコルがあります 数分前にすでに 確認したかもしれません UIKeyInputそのものは UITextInputTraitsを拡張し そのプロトコルはオプションの プロパティで構成されます keyboardTypeや textContentTypeのようにです 前から分かっていますが 特定のコンテントのためにカメラの入力を フィルタするために使用されます ですからカメラの 入力にはUIKeyInputに準拠し 求める機能レベルに応じて オプションで UITextInputTraitsや UITextInputに 準拠します さてImageViewに 戻りましょう HeadlineImageViewという 新しいクラスを作成します これはUIImageViewの サブクラスを作成し UIKeyInputに準拠します ここにコードの形であります これはUIImageViewの シンプルなサブクラスで UILabelのサブビューが あります 字幕を表示するのに使用されます UIKeyInputに準拠するには 3つの方法が必要であることを 思い出してください hasText deleteBackward insertText です レスポンダーは通常UIKeyInputに準拠して キーボードを呼び出します キーボード入力は必要なく カメラ入力しか必要ないため insertTextを実装すれば いいだけです hasTextはfalseを返す だけでよく deleteBackwardは 何もする必要がありません insertTextについては 実装が非常にシンプルです テキストをカメラから 抽出し ラベルに提供するだけです これですべて完了です! カメラからキャプチャした 字幕を表示する形で 画像を表示できています ご視聴いただき ありがとうございます! 覚えておいてほしいことを お伝えします テキストのコンテンツタイプを 活用してください 2つ以上の方法で役立ちます カメラからのテキストを フィルタすることも含まれます カメラ入力を本当に向上させたい場合は 自分のランチャを作成します 一貫した外見を保持するために ラベルや画像を提供しています これを使えば複数のAppで カメラ入力と連想できます しかし まず機能が 利用可能であるかを 必ず確認してください 最後にカメラ入力を テキストコントロールではない 自分のカスタムレスポンダーに 使用できます UIKeyInputプロトコルに 準拠する必要があるだけです 安全な旅行を!WWDC 2021 の残りの時間をお楽しみください! ♪
-
-
3:33 - Filtering text field input
phone.keyboardType = .phonePad phone.autocorrectionType = .no address.textContentType = .fullStreetAddress
-
5:07 - Custom action to capture text from camera
let textFromCamera = UIAction.captureTextFromCamera(responder: self.notes, identifier: nil)
-
5:41 - Adding custom UIAction for capture text to a menu
let textFromCamera = UIAction.captureTextFromCamera(responder: self.notes, identifier: nil) let choosePhotoOrVideo = UIAction(…) let takePhotoOrVideo = UIAction(…) let scanDocuments = UIAction(…) let cameraMenu = UIMenu(children: [choosePhotoOrVideo, takePhotoOrVideo, scanDocuments, textFromCamera]) let menuToolbarItem = UIBarButtonItem(title: nil, image: UIImage(systemName: "camera.badge.ellipsis"), primaryAction: nil, menu: cameraMenu)
-
9:59 - Implementing UIKeyInput on a custom image view
class HeadlineImageView: UIImageView, UIKeyInput { var headlineLabel: UILabel = UILabel() var hasText: Bool = false override init(image: UIImage?) { super.init(image: image) initializeLabel() } func insertText(_ text: String) { headlineLabel.text = text } func deleteBackward() { } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。