3Dプリンターでオリジナルクッキースタンプ

お母さん入院から17日目。予定より早く、明日退院となりました。退院祝いにクッキーを焼きます。3Dプリンターで「おかあさん たいいん おめでとう」のクッキースタンプを作ることにしました。

文字入りクッキースタンプをモデリング

クッキースタンプは、子供向けのCADソフト「Tinkercad」でモデリングします。小2の次男が作ってくれました。

そして3Dプリンターで印刷します。

40分で出来上がり。

金のフィラメントを使っています。

衛生面を考えると、汚れが分かりやすい白の素材が良いでしょう。

今回のような「おかあさん たいいん おめでとう」は、1回しか使わない・・・何度も使わないことを願うので、何色で印刷しても問題ありません。

英語版のクッキースタンプも制作

日本語は形が少し複雑で、「あ」とか「め」が、しっかりスタンプされるか分かりません。

念のため英語版のクッキースタンプも作ります。

「Welcome home mom!」(おかえり、お母さん!)

磁石を埋め込む

視線操作のクッキースタンプ装置に脱着できるよう、裏側にペンチで磁石を埋め込みます。

あまり力を入れすぎると、スタンプの文字が破損してしまいます。

破損を極力防ぐため、文字側に雑誌を挟んで力を分散させます。

クッキースタンプ装置に装着

作ったスタンプを、磁石でパチッと取り付けます。

脱着簡単で、スタンプの種類を増やしていくのも簡単です。

クッキーは明後日の祝日に焼こうと思います。

追記:スタンプ作りで初歩的なミスをしました!

JavaScriptで笑顔を取得(face-api.js)

ブラウザだけで表情認識をできる「face-api.js」を使います。クラウドAPIサービスと違い、課金の心配はありません。今回は笑顔のスコアをメーターで表すWebアプリを作ってみます。

笑顔メーター

カメラ映像から顔を検出し、笑顔のスコアをメーターで表すWebアプリです。

上のサンプルでは、カメラではなくフリーの動画素材を使っています。pixabay.comに掲載されていた笑顔の少年を使いました。

少年は軽々、笑顔100%のスコアをたたき出しています。

カメラに向かって自分の顔で試したときは、けっこう頑張らないと笑顔100%のスコアは出ませんでした・・・。

よい、笑顔のトレニンーグになります。

face-api.jsを使うには?

face-api.js – ブラウザでの顔認識を行うJavaScript API」を参考にさせて頂きました。導入から顔認識モデルの説明に至るまで、詳細な情報が掲載されています。

私は、face-api.jsのファイルの中から、必要なものだけ自分の開発環境に移しました。下記の構成で配置しています。

main.jsとindex.htmlに、コードを書いていきます。

face/index.htmlのコード(HTMLとCSS)

face/js/main.jsのコード(JavaScript)

今さらながら、ES6のJavaScriptを初めて書きました。文法が怪しいのでご注意ください。

表情解析は、端末負担を軽減させるため、0.5秒おきに行います。

もし、顔の検出ができたら□で囲い、さらに笑顔のスコアを取得して、右の笑顔メーターに反映させます。

ブラウザで表情解析が完結するお手軽さが、素晴らしいです。

余談:笑顔でクッキーにスタンプを押したい

笑顔を認識したくなった経緯です。

昨日視線操作クッキースタンプというものを作りました。重度障害者が目で操作して、クッキーにスタンプを押す装置です。今度は目ではなく、表情で操作できるようにしました。

笑顔をトリガーにして、クッキーにスマイルスタンプを押します。

笑顔でクッキーを作れればと。

視線操作でクッキー作り(Tobii Eye Tracker 4C 他)

重度障害者がクッキー作りに参加できる仕組みを考えています。手は動かさず、視線だけで機械を操作し、クッキースタンプを押す仕組みを作りました。うまくいくか・・・自宅で子供たちと試します。

クッキースタンプを視線操作する動画

今回、作った装置です。

視線操作はTobii Eye Tracker 4C

WindowsPCに、視線入力装置「Tobii Eye Tracker 4C」を取り付けています。これでPCを目で操作できます。

クッキースタンプの操作画面は自分で作る必要があります。

「▲」「▼」でスタンプを上げる、下げるという簡単なものを作りました。

クッキースタンプは脱着式のものを3Dプリント

スマイルマークのスタンプ。モデリングも簡単。まずはこれで試してみます。

スタンプの裏側に穴を空け、磁石を埋め込みました。

磁石で脱着式にすることで、洗いやすく、他のスタンプへの取り換えも簡単になります。

サーボモーターがスタンプの動力。 Obnizで制御

スタンプが昇降する装置も3Dプリンターで作っています。動力のサーボモーターをObnizで制御しています。ネットを介して操作するため、離れた場所でも操作できます。

自宅からでも、病院からでも、世界の反対からでもスタンプを押せます。

なお、このスタンプ昇降装置は、前に作ったネコ型スパイカメラを分解して再構築しました。

このスタンプ装置は、カメラ用のアームに取り付けています。

クッキー焼き上がり

焼き上がりのクッキーには、しっかりとスマイルが刻まれました。

OKです!

次は、文字をスタンプしてみます。

Web Speech API はユーザー操作が必要(特にiOSが厳しい)

絵本の読み聞かせWebアプリを作っています。しかしiPhone対応でハマっています。読み上げてくれない・・・。どうやらiPhoneでは、ユーザーのボタン操作直後でなければ、Web Speech APIで読み上げてくれないようです。

撮影ボタン→OCR→読み上げはダメ

絵本を読み上げるために、カメラで撮影した画像をCloud Vision APIに渡し、戻ってきたOCRの結果を、Web Speech APIで読み上げます。

Windows10 Chromeや、Android9 Chromeでは問題なく読み上げましたが、iPhone7(iOS13) Safariでは、読み上げてくれません。

iPhoneの場合、ユーザーがボタン操作した後、他のAPIを挟まず、Web Speech APIを呼ばないといけないようです。

あきらめて読み上げ再生ボタンを作る

Webアプリの画面右下あたりに、再生ボタン「▶」を設置しました。

「●」でカメラを撮影し、「▶」で読み上げ。

とりあえず再生ボタンを作ることで、Web Speech APIで読み上げはできるようにはなりました。

ただし、iPhoneが消音モードになっているとしゃべりません。ご注意ください。

Web Speech API調査用のコード

デバッグ中に作ったコードを貼り付けます。

ボタンを押して話す命令と、タイマーで1秒後に話す命令だけを書いた、シンプルな検証用HTMLです。

Windows Chromeで開いて試してみると、ボタンを押した方だけ再生されます。

タイマーで1秒後に話す命令は、下記のようなエラーが出ています。

ユーザーのアクティブ化なしのspeechSynthesis.speak()は、2018年12月頃に許可されなくなりました。とのこと。

ユーザーのアクティブ化・・・クリック、タップ、キー入力など、何かユーザーが操作しない限り、Web Speech APIは使えないようです。

ユーザーの意図しない音を、突然鳴らさない配慮です。

iOSはWindowsやAndroidより、ユーザーアクティブ化の条件が厳しいのでしょう。ユーザー操作の後、別のAPIを挟んだりすると、アクティブ化が無効になるようでした。

絵本読み聞かせWebアプリα版

絵本読み聞かせWebアプリを試作し、さきほどテスト評価を行いました。スマホで使うとあまりに意味不明な読み上げになってしまい、散々な結果でした。PCでは精度高く読み上げるのに・・・。

絵本読み聞かせアプリ概要

私の代わりに絵本を読んでくれるWebアプリです。普通のWebサイトと同じでブラウザで動きます。

カメラで撮影した絵本の文字を読み上げます。(絵本以外も読めます。)

核となる技術は、Cloud Vision API(OCR)と、Web Speech API、あとはカメラを使えるgetUserMedia APIとなります。

Webアプリはスマホ対応が難しい

レスポンシブWebデザインで作っており、スマホでもタブレットでもPCでも操作はできます。しかし、大きな問題が2つ。

  • iPhoneでWeb Speech APIが機能しない(書き方が悪い?)
  • 小さいスマホでOCR精度が低い

OCR精度が低いのは、Cloud Vision APIに渡す画像の解像度が低くなっているからだと思います。

処理としては、カメラ映像表示 → canvas転写 → BASE64エンコード → Cloud Vision APIに渡す流れで、このどこかのコーディングに問題がありそうです。

PCでは比較的優秀

スマホはダメですが、PCでは比較的正しく読み上げてくれます。

ごんぎつねの一節を読ませてみると、「ごん」が「こん」になっているくらい。

良い精度です。

ブラウザ依存との戦い

Webアプリは着手が簡単なのですが、最終的にブラウザ、OS依存との戦いになります。

ここからの道のりが長い・・・。

幸い、変な読み上げをするWebアプリを、長男が喜んで使っており、本来目的とは違いますが好評です。

本来目的で使えるよう、引き続き頑張ります。

Web Speech APIで絵本を読み聞かせ

子供への絵本読み聞かせが大変で、AIに読んでもらうWebアプリを作っています。Cloud Vision APIのOCRで文字は読み取れました。次は合成音声で読み上げます。読み上げに一番手軽なWeb Speech APIを使うことにしました。

ブラウザだけで音声読み上げ「Web Speech API」

早くアプリを作りたいという理由で、クラウドを使った合成音声サービスを使わず、使用経験のある「Web Speech API」を採用しました。

数行のJavaScriptを書くだけで、ブラウザがテキストを合成音声でしゃべってくれます。

Web Speech APIを試してみよう

手元の絵本の表紙から読み取った「はしれ はしごしゃ 作絵間瀬なおかた」という文字を合成音声で読み上げてみます。

Google Chrome バージョン83での読み上げです。

まだまだ、カタコトかな。

OCR+読み上げのコード

現状のコードを掲載します。

Web Speech APIの記述は、VISION.SPEECH()の中にまとめています。

あとはカメラ機能を実装すれば、絵本読み聞かせWebアプリとなるでしょう。

相手への行動は跳ね返る[お母さんがいない生活11日目]

お母さん入院から11日目。かなり疲労が溜まっている感じもします。やはり、きつい。今日は次男が夜ご飯に弁当を作ってくれて助かりました。どうやら昨晩の出来事のお礼のようです。

良くも悪くも行いは返ってくる

次男が私に弁当を作ることは珍しいです。

少し冷静になって、何でかな?と、理由を考えました。

・・・心当たりがあります。

昨夜、次男が急に「算数ノートが明日までに必要」と言って、仕方なく車で買いに行きました。たぶん、そのお礼でしょう。

子供のピンチへの助けが、返ってきたようです。

逆に気を付けないといけないのが、子供に対して悪い行いもそのまま返ってくること。安易に子供に怒りをぶつけたりすると、いつか怒りが返ってくるでしょう。

まあ、4人の息子たちに怒らないというのは、かなりの難易度だと思いますが。

デザート到着

四男が作ったチョコバナナ?

チョコレートに含まれるテオブロミンにはリラックス効果があると言われます。

これで心を落ち着かせましょう。

あと、こうやってブログを書くことも、客観的に頭を整理する時間になり、精神を落ち着かせる効果があるとか聞いたことがあります。

きつい時こそ、心安らかに。

Cloud Vision APIのOCRの誤認パターン

絵本の読み聞かせをAIにお願いしたく、Cloud Vision APIのOCRを使うことにしました。想像以上に精度がよいものの、やはり誤認するパターンがあります。

※これは2020年7月14日現在の情報で、OCRは日々進化していると思われます。

1行に言語が混在する文章は難しい

「横書きの文章を、
Cloud Vision API を使って読み取る。」

と、書かれた写真を、昨日作ったOCRのWebアプリで読み取ってみました。

結果、APIより後ろの文字を盛大に誤認します。

「横書きの文章を、
Cloud Vision API &EƆCAH3.」

文字の形状より、言語の判断を優先して認識しているようです。

API以降も英語(一部記号)として読み取られました。

 

念のため他のサンプルでも試してみましょう。

「MUFG 三菱UFJ銀行」の文字は、やはり誤認します。

けっこう身の回りに、英語と日本語の混在する文字が多く、日本で日常的にOCRを使えるのは、英語圏より1歩遅れそうな気がします。

行を変えれば言語影響も大丈夫

今度は、日本語と英語の行を変えてみました。

「横書きの文章を、
Cloud Vision API
を使って読み取る。」

問題なしです。

行単位か、または文字の距離で、言語がリセットされるのだと思います。

ちなみに背景に比較的ごちゃごちゃした写真を使っていますが、文字の識別には影響ないようです。

言語の混在はダメ。文字背景がごちゃごちゃしていてもOK。

直近の目的である、絵本の文字を読み取ることには支障なさそうです。

縦書きの文字も読み取れるがカタカナに弱い

絵本の文字は縦書きが多いです。

Cloud Vision APIのOCRは賢いことに、縦書きも理解してくれます。

ただ、カタカナで「クラウドビジョンエーピーアイ」と書かれているところは誤認しました。

著作権の関係で画像掲載を控えますが、絵本でも縦書きのカタカナを誤認します。

「ゴー」が「ロー」になったり。

カタカナの学習量が少ないのでしょうか?

絵本の読み聞かせアプリを使うときは、カタカナが苦手なことをあらかじめ子供に伝えたほうがよさそうです。

 

最後に、カタカナをやめて、漢字にしたパターンです。

「人工知能の光学文字認識」

しっかり認識できました。

OCRの認識・誤認のパターンを知ることで、どういう場面でOCRを活用できるか、判断基準にもなるでしょう。

Cloud Vision APIで絵本の文字を読み取る

絵本をAI(人工知能)に読んでもらいたい。今回はGoogleが提供するCloud Vision APIを使い、OCR(文字認識)を行ってみます。最終的には絵本読み聞かせWebアプリを作ります。

前段、絵本の読み聞かせがつらい

お母さんが長期入院中です。そんな状況もお構いなしで、三男と四男は図書館から40冊くらい絵本を借りてきます。読み聞かせ3冊目くらいで、もう嫌になりました。GoogleのAIに助けてもらいましょう。

絵本読み聞かせアプリの全体設計

Webの技術、HTML・CSS・JavaScriptで開発します。

処理の流れは、

  1. ブラウザでカメラを起動する
  2. 撮影ボタンが押して、絵本のページを写真で取り込む
  3. 写真をCloud Vison APIに渡す
  4. OCRの結果が、Cloud Vison APIから返ってくる
  5. OCRの結果をブラウザ上に表示する
  6. Cloud Text-to-SpeechでOCRの結果を読み上げる

Cloud Vison APIを使いこなせるか?OCRの精度はどれほどか?この2点を先に知りたかったため、3. 4. 5.を先行して開発します。

Cloud Vision APIのOCR準備

Googleの画像認識系AIが使えるサービス「Cloud Vision API」。私の場合は登録を昔行っていたため、すぐに使える状況でした。

Cloud Vision APIの導入部分の仕方は、Cloud Vision APIの使い方まとめ (サンプルコード付き)が分かりやすそうです。

最低限、APIキーを作成できればOKです。

念のためAPI キーを使えるWebサイトを制限します。

認証情報>APIキーの制限と名前変更>ウェブサイトの制限に「localhost/*」と自分のドメインを登録して、大量課金のリスクを減らします。

なお、利用料金はOCR(テキスト検出)だけなら1,000回/月まで無料。次の1,000回から1.5ドルとなります。

写真をアップしてOCRの結果を表示するコード

Cloud Vision APIを使って、まずはOCRの精度を確かめます。

下記のHTMLをlocalhostで動作させます。

このHTMLは、JavaScriptもCSSも1ページに含まれているため、単体で動作します。・・・旧時代のJavaScriptで書いており、IEでも動きます。

ブラウザでOCRのテスト

絵本の表紙を撮影して、動作を確認します。

現段階では、カメラ撮影機能は付けず、絵本の写真をアップロードして使う仕様です。

写真をアップすると、結果が返ってきました。

OCRの結果は、誤字なし。

文字を認識したところに、緑色の四角を描画しています。HTML5のcanvasを利用しています。

他のが写真でもいくつか試すと、誤認するパターンが見えてきました。

手書き文字の認識は、やっぱり難しそうです。

また、クモの絵を「美」と誤認しているため、出来るだけ文字だけを写真で撮ったほうが良さそうです。

それでは引き続き、Cloud Text-to-Speechで絵本を読み上げる機能を開発します。

AirPods Prodで野外勉強[お母さんがいない生活8日目]

公園に子供たちといると、何だか時間がもったいないと思ってしまいます。そこで、AmazonオーディブルをAirPods Proで聞きながら、勉強することにしました。

公園で過ごす時間がもったいない

日曜日はだいたい公園に行きます。長男が生まれてからで、もう10年くらい、この習慣が続いています。

四人兄弟が勝手に遊んでくれるので、私は見ているだけ。

ただ、この時間がもったいなく、勉強時間に使えないでしょうか?

子供を見ながら勉強できる条件

スマホを見ながら勉強していると、子供がどこかに行ってしまうリスクがあります。

特に、次男、三男、四男は自由なので、よく失踪します。

そのリスクを避けるため、音だけで勉強し、なおかつ、子供の声が聞こえるように、外部の音も聞こえることが条件です。

ビジネス書の朗読をしてくれるAmazonオーディブルというサービスはあるので、あとは良いイヤホンがあれば野外勉強を実現できるでしょう。

AirPods Proを買う

普段私はイヤホンを使わず、たまに100円のイヤホンを使うくらいです。

たまたまAirPods Proを見て、「イヤホンに3万円!?」と驚きつつ、外音取り込み機能があることと、アップルの使い勝手の良さを信じ、さっそく購入しました。

安くはないです。ただ、下手に安いものを買い、時間を失う方がもったいない。

朗読も子供の声もよく聞こえる

公園でAirPods Proを付け、Amazonオーディブルを聞いてみました。

ビジネス書の朗読も、子供の声もよく聞こえます。

試しに外音取り込みから、ノイズキャンセリングモードに切り替えます。

すると、無音の空間にいるかのように、世界が切り替わります。

これはすごい!さすが3万円。

子供がうるさいときは、わめき声もキャンセルしてしまいたいです。

集中して聞けないけど

やはり、子供が話しかけるたびに、朗読の話の内容が飛ぶので、集中して聞けません。

ただ、2、3周繰り返し聞けば、頭に入るでしょう。