カテゴリーアーカイブ AI

著者:杉浦

OCRのホワイトリストとTessaractのバグ

 OCR(光学文字認識)の際にはホワイトリスト――画像中に現れる文字の候補のリスト――を用いることによってより正確な文字認識を実現しています。現れる文字の候補が限定されることは誤認識の減少に大きく貢献します。例えば数字のみが表れるならば”1″と”I”と”i”を間違えずに”1″と認識できます。ロシア語のみならば”В”と”B”を間違える事も有りません。
 TesseractはOCRのエンジンです。素のコマンドラインで使うなり、PythonなどにつなげるなりしてOCRを行わせます。Tesseractの最新版の4.0.0はどこぞのディープラーニングの学習結果を持っており高精度とのふれこみです。
Tesseract (ソフトウェア) – Wikipedia
tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)
 困ったことにこの4.0.0版にはホワイトリスト設定が一切効かないという強烈なバグが残っています。
Blacklist and whitelist unsupported with LSTM (4.0) · Issue #751 · tesseract-ocr/tesseract
 残念ながら解決方法はなく、レガシー版を呼び出すオプションと組み合わせる回避方法しかない様です。

--oem 0 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • この記事いいね! (0)
著者:杉浦

二値化によるOCR(光学的文字認識)のための画像前処理

 OCR(光学的文字認識)とは画像から文字を認識する技術のことです。昨今のOCRはなかなかの高精度になってきましたが、適切な画像、設定でないとてんで的外れな回答を返すことがよくあります。二値化は適切な画像のための画像加工の一つです。
 ここでいう二値化とは白黒二色にするという意味です。次の2枚の画像が二値化による加工の例です。


 具体的にはグレースケールにして

 消しゴムの汚れが分かりにくくなるように少し明るくして

 コントラストを最大にしました。

 こうすると文字とそれ以外の境界がはっきりする、ノイズが消える、といった効果によって機械に文字を認識させることが容易になります。これは影の中にある白紙に書かれた黒文字のように、背景色に近い色の文字を解析する時に特に効果的です。
 例の図は調整が雑で少々文字がつぶれていますが、高解像度であったり、鮮明な画像であったりした場合は滅多につぶれません。

  • この記事いいね! (0)
takahashi 著者:takahashi

ついに来るか”フルAR”!? 最近のMicrosoftとAppleのARへの取り組みが気になる。

先日、いろいろ調べていたらこちらの記事を見つけました。

Microsoftが発表間近の第2世代のMRヘッドセット「HoloLens」ティザー動画を公開、新チップ搭載か? – Gigazine

MicrosoftがWindows10の登場とほぼ同時期に発表し、話題にもなったAR機器である”Hololens”ですが、なんとその後継機種が発表間近なのでは、という情報が上がってきているようです。

最近になって、ゲーム機やスマートフォンで利用できる”手軽なAR”を搭載したアプリなどは増えていますが、自分たちが”AR”と聞いてイメージするようなもの(たとえばアニメ「電脳コイル」の”電脳メガネ”のような)、いわゆる”フルAR”に近いものとしては、製品化された中では恐らくHololensが唯一なのではないかと思います。

そんなHololensの後継機種が出るとしたら…わくわくが止まりませんね。

一方、AppleもiPhoneの販売台数低下に伴い、今後AR方面に力を入れていくのではないか、という見方も出ているようです。

Apple、ARヘッドセットを2020年出荷を目標に研究中 – TeckCrunch

もし世界でトップクラスのIT企業であるこの2社が、ARのためにしのぎを削るほど力を入れ始めたら、(2社にとってはとんでもない戦争になりそうですが)一気にフルAR実現に近づくことになるかもしれませんね…!

今後の展開に要注目です。

  • この記事いいね! (0)
著者:杉浦

画像解析用オープンソフトウェアImageJの紹介

ImageJ
 ImageJはJavaで作られた画像解析用のオープンソフトウェアです。画像を読み込み、加工し、解析する事で様々なことができます。例えば数え上げです。
 次の画像中の細胞の数を数えようとして見ます。
 
 まず、Image->Typeから8bit画像に変換。次いでImage->Adjust->Thresholdから色の濃さで白黒の二色画像に変換。この時、一つ一つがばらけるような閾値にするとよいです。

 最後にAnalyze->Analysys Particlesで粒子解析。

 まだまだ雑ですが結構それっぽくなりました。白黒二色画像に至るまでの過程を工夫するともういくらか良い精度で解析できます。この白黒二色画像に変換するまでの過程で使う各処理の閾値等パラメータの最適化には機械学習が向いています。また深いニューラルネットワークの学習ではどの様な変換手法を用いるのが良いかまでいい感じに決定することができます。

  • この記事いいね! (0)
takahashi 著者:takahashi

一つの画像から色ごとにレイヤーを分けてくれるサービス”Unbrending”

フォトエディタなどで、複数の色を混是ることは簡単ですが、その逆で、一つの画像から色ごとにレイヤーを分離する、というのは特殊な処理なようですが、それを行ってくれるWebサービスがあります。

Unblending Web App

実際に使ってみました。

自分の持っている画像をアップロードすることもできますが、今回はテストということで下の”サンプル画像を使ってUnbrendingを試す”でテストしてみます。

“サンプル画像を使ってUnbrendingを試す”
をクリックすると、上記のようにいくつかの設定が追加されます。

この状態で、”プレビュー”ボタンをクリック。

すると指定された色ごとにレイヤーを分離してくれます。

この状態で”ダウンロード”をクリックすると

しばらく処理を行った後、各色ごとに分離された画像をzip形式で入手することができます。

これができるとどのようなことに使えるのか、というのが公式サイトの動画で紹介されています。

より表現の幅が広がりそうですね…!

気になった方は是非試してみてはいかがでしょうか!

  • この記事いいね! (0)
takahashi 著者:takahashi

ポッキーでプログラミング!?グリコが開発したプログラミングの考え方が学習ができるアプリ”GLICODE”

ふと買ってきたポッキーのパッケージを開けようとしたところ、パッケージの側面に名に書かれているのを見つけました。

ポッキーで…プログラミング…???

どういうこっちゃと思いつつ調べたところ、公式のティザーサイトを発見。

GLICODE – グリコ

このサイトにあった動画を見たことで、”ポッキーでプログラミング”の意味が分かりました。

ポッキーを並べることでキャラクターの動きを”制御”してみよう!
ということのようです。なるほどなるほど…

どんなアプリなのか実際に確かめてみたくなったので、実際にインストールしてみました。

GLICODE®(グリコード)
GLICODE®(グリコード)
開発元:EZAKI GLICO CO.,LTD.
無料
posted withアプリーチ

ちなみに、”GLICODE”と検索してしまうと英語版がヒットしてしまうので、日本語で”グリコード”と検索するのがおすすめです。

タイトル画面。

Level 1

このアプリではプログラム言語を覚えておく必要は一切ありません。

すべてポッキーの並びだけでコーディング(?)します。

このキャラクターの名前は”ハグハグ”というのか…

ポッキーの向きで、”ハグハグ”に動きを指示するようです。

左下のカメラアイコンをタップするとアプリ内でカメラが起動。

おてほんどおりにポッキーを並べてみます。

なんとポッキーが画像認識されているではありませんかwww

ポッキーの向きを元に”右にうごく”という命令が入力されました。

この命令でOKな場合は右下の”めいれいをけっていしよう”と出ているボタンをタップすることで、入力した命令が確定される、という流れのようです。

確定したらステージに戻ります。

再生ボタン(?)をタップすると、確定した命令が実際に実行されます。

動き出すハグハグ…

女の子のもとへ到着。

ギュッ…

それとなくホラー感を感じる流れな気がしなくもないですが、なるほど確かにポッキーでキャラクターを制御できました。

Level 2

今度は横移動に加えて縦移動が必要になるようです。

Level 1ではポッキーを使ってハグハグを横に動かすことができました。

では縦に動かすにはどうすればいいのでしょう…?

そうです。ポッキーを使います…!

グリコードでは、おなじ平面上に複数本のポッキーを並べることで、ハグハグに続けて複数の動作をさせることができます。

今度は右に1マス動かした後、下に2マス動かす必要があるので、ポッキーを3本用意して

→ ↓ ↓

とすると目的の動作になるはずです。

早速入力して…

実行!

ハグハグが指示された通りに動き…

ギュッ…

ステージクリアです。

ポッキーで与えた命令は、必ず順番通りに実行されます。

これは与えた命令は必ず順番に実行されるというシーケンス(=じゅんばんにじっこう)というものですと説明。

そう、ポッキーでプログラムの基本的な要素の一つである”逐次(順次)実行”をわかりやすく説明してしまいました。

グリコード…恐るべし…

とまぁこんな感じで、プログラミングをする前に学んでおくべき考え方を、ポッキーを使って学習することができるという、かなり画期的な内容になっています。

このアプリでは、プログラムの

・処理の逐次実行

・処理の繰り返し

・処理の場合分け

の三つの考え方をポッキーを使って学習することができるようです。

子供向けの教材といえば、LEGO社が出しているMindStormという製品があります。

こちらも(普通のものと形状が違うが)おもちゃのブロックという子供が親しみやすいものと、プログラムの要素をブロックパーツにしたものをくっつけていく、という視覚的にコーディングができる開発環境になっているので、初めてプログラムを触る子供にとっても入門しやすい内容になっています。

しかしながら、ロボットを扱うという部分がある以上、ちょっと難易度は高め(ある程度の難易度があるので、MindStormを使ったロボットコンテストが開催されています)で、思い通りに触れるようになるまでに少し時間がかかるかもしれません。

一方、今回のグリコードは内容としてもMindStormよりもシンプルかつ基本的な部分ですが、ブロックよりもより慣れ親しみやすい”お菓子”を使ってプログラムの基礎を学ぶことができる、というのはとても画期的なアイデアではないかな、と思いました。

…ちなみに、今回の記事を書くにあたって、実際に会社のオフィスで
一人ポッキーを並べてスマホをかざす…ということをしていたのですが…

周りの人の目にはどのように映っていたのか。
考えかけてやめました。ええ。

  • この記事いいね! (0)
著者:杉浦

機械学習によるクラスタリングの一手法であるk-means法

 k-means法は任意のデータをk種類のクラスタに分割する手法です。クラスタは集まりを意味する語でクラスやグループと同じようなものです。k-means法によってクラスタリングを行った際、グループは距離で分割されます。k-means法のアルゴリズムは次です。
1.ランダムにk個のクラスタ中心を振り分ける。
2.各データと各クラスタ中心の距離を求めて、データを最も中心の近いクラスタに振り分ける。
3.振り分け直されたデータによるクラスタ毎の中心を求める。
4.2,3を繰り返す。繰り返しをやめる時は変化がなくなるか、あらかじめ定めた閾値以下の微小な変化しかしなくなった時。
数式にすれば

x:各データ V:各クラスタ中心
です。具体的に画像で見てみると次です。
1.ランダムにk個のクラスタ中心を振り分けます。

2.各データと各クラスタ中心の距離を求めて、データを最も中心の近いクラスタに振り分ける。

3.振り分け直されたデータによるクラスタ毎の中心を求める。

2.各データと各クラスタ中心の距離を求めて、データを最も中心の近いクラスタに振り分ける。

3.振り分け直されたデータによるクラスタ毎の中心を求める。

2.各データと各クラスタ中心の距離を求めて、データを最も中心の近いクラスタに振り分ける。

3.振り分け直されたデータによるクラスタ毎の中心を求める。

4.繰り返しをやめる。
まとめて

 k-means法はクラスタに所属するデータとクラスタ中心の最大距離の近いk個のクラスタを自動生成する手法です。kは任意であり、k-mean法の使用者が任意に決定します。kを自動決定するように拡張されたx-means法という手法もあります。

  • この記事いいね! (0)
著者:杉浦

機械学習に用いる学習データの選定

 機械学習において学習、評価に用いられる学習データは出力結果の正しさ、出力までの計算時間に大きく関わります。学習データが小さすぎれば十分な正確さを持てず、大きすぎれば無用な計算時間が大量に増え、偏れば偏った結果しか出ません。
 学習データ数が増えるにつれて出力の正確さは増えます。増え方は対数に近く飽和が起きます。

 飽和している状態でさらに学習を行うのは時間の無駄です。正確さの増加量、飽和点は変数の数などのモデルの柔軟性によって大きく変わります。ディープラーニングの様な柔軟性が高いモデルを用いる場合、特に大量の学習データを用意する必要があります。近年はデータに対して自然にありえるであろう微細な加工を施すことで少ない学習データを大量の学習データをの様に扱う技術が生まれ始めています。
 機械学習の実行にかかる計算時間は学習データの数と項目数に大きく左右されます。計算量はデータ数と項目数の積になりがちです。これにより組み合わせ爆発同様の事態に陥ります。単純な繰り返しによる網羅はあっという間に破綻します。
 学習データの偏り方は学習データの母集団と目的の母集団のずれがバイアスとして現れます。通年の天気のデータを予測するために、夏の天気のデータのみを用いる様なものです。以前書いたアンケートのバイアスの話と同じです。

  • この記事いいね! (0)
著者:杉浦

機械学習の各手法やディープラーニングの共通部分

 この記事では機械学習の各種手法のアルゴリズムに共通する部分を述べます。この記事において、ディープラーニングは機械学習の一手法と扱います。アルゴリズムや処理の仕方という手法の面においてディープラーニングは機械学習の枠組みに収まっています。
 ディープラーニングの技術の成立の流れは、閾値判定、閾値判定のネットワークであるパーセプトロン、滑らかな閾値判定を行うロジスティック回帰、パーセプトロンとロジスティック回帰を合成したニューラルネットワーク、ニューラルネットワークを巨大で複雑にしたディープラーニング、というものに沿っています。これまで用いられてきた機械学習の手法がディープラーニングにつながってきているわけです。ディープラーニングが機械学習と別者の様に注目される理由はディープラーニングがこれまでの機械学習手法とは格別のパフォーマンスを持っているためです。ディープラーニングは性能面では今までの機械学習と別物扱いできますが、技術的な面では機械学習の一手法です。
 機械学習のアルゴリズムの概略図が下図です。

 それぞれのパーツの説明が次です。パーツ単位でまとめていますが、図中の観測データからの流れに沿って読むと気持ち少しわかりやすいはずです。

予測部 予測部はその名の通り観測されたデータから何かを予測する部分です。予測部のみで、入力された画像からその画像が何を表した画像か予測する、盤面から次の一手を予測する、身長から体重を予測する、といったことができます。任意の係数を定数として予測部のみを用いることによって、わずかな計算時間で値の予測ができます。
学習部 学習部はより良い評価値を出力できるように任意の係数を最適に近づけます。予測し、最適に近づけ、を繰り返すループを形成します。このループが学習に見立てられ余す。ループを重ねる程より最適化された任意の係数がわかります。ループを重ねる程より良い結果になる、多量にループを重ねたい、というのが機械学習において計算量が重要視される要因の一つです。

関数

カーネル関数 カーネル関数は観測データを使いやすく加工する関数です。この関数を通すことで計算量を削減したり、素の観測データそのものでは得にくいものを得たりします。
モデル関数 モデル関数は観測データと任意の係数を入力として、予測値と評価値の元になるパラメータを出力します。この関数は機械学習の手法によって中身が大きく変わります。
評価関数 評価関数はモデル関数の出力を入力として評価値を出力します。複数の項目にわたる予測値をまとめたり、値の正規化を行うことが多いです。
学習関数 学習関数は任意の係数と評価値を入力とする関数です。評価値と前状態の任意の係数を元により良い評価値を得られそうな方向に任意の係数を変化させます。

観測データ 観測データは主に実世界から得たデータです。画像識別でいえば入力画像、識別して欲しい画像達のことです。
予測値 予測値は観測データと任意の係数を入力としたモデル関数から出力される値です。画像識別では画像に付けられる銘になります。
任意の係数 任意の係数はモデル関数に与えられる値です。この任意の係数を最適化してより正確な予測をします。任意の係数の最適化を行う過程は人間の学習に似ています。
評価値 評価値は予測値が良い予測値なのか、悪い予測値なのかを評価した値です。任意の係数を変化させて、評価値を最大化ないし最小化しようとするアルゴリズムが機械学習です。

 いずれの機械学習も、モデルに沿った最高の評価を得る任意の係数を求める、という最適化問題を解こうとしています。機械学習は、何々から何々の最適な予測を行う、という言葉に落とし込める問題には全て挑めます。課題はどの様に入力、予測、評価を数値化するか、どの様なモデルを作成するか、どの様に入力データを得るか、です。また機械学習は応用できます。近年、注目されているディープラーニングを用いた自動画像生成アルゴリズムであるGANは、入力された画像からその画像が自動生成された画像であるか生の画像であるかの最適な予測を行う機械学習とノイズから生の画像に近づける変化の最適な予測を行う機械学習をつなげることで実現されます。

  • この記事いいね! (0)
村上 著者:村上

【アプリ】料理の写真を送るとカロリーや脂質などがわかる「カロミル」

先日、興味深いアプリを見つけたのでご紹介。
ライフログテクノロジー社が提供している「カロミル」という、食事や運動の記録・管理に対応したヘルスケアアプリです。

【カロミル】人工知能(AI)がダイエットと健康管理をサポート
https://calomeal.com/

読んだニュースによると、自社開発の食事画像解析AIを活用し、識別できる料理品目が約5200品目になったと発表されました。
これにより、食事を解析できる一般料理のカバー率が90%を超えたとのこと。
なお、今秋には、1万品目を達成する予定とのことでした。
ニュース記事についてはこちらから。

食事記録を手軽に–ダイエットアプリ「カロミル」、食事画像解析AIで5200品目を識別 – CNET Japan
https://japan.cnet.com/article/35122061/

 

実をいうと、平日は朝食を抜いてしまっているので、毎日の食事記録にはそこまで関心がないのですが、食べた料理がどのくらいのカロリーかがわかるというのは興味深いですね。
アプリ自体もインストールしてみましたが、LINEのアカウントでも、料理の画像を送ると料理名やカロリー、脂質などを認識してくれるというので、先に試してみました。

ちなみに送信したのは私が作ったカオマンガイ風のご飯です。
品目名は「海南チキンライス」なっていますが、鶏肉とご飯は識別できています。
カロリーは計算していないのでわかりません。

お手軽にどのくらいの精度かを知りたい場合は、LINEアカウントを友達追加するのがおすすめですね。
また、私のように毎日の食事の記録までは取らないけど、この料理はどのくらいのカロリーなのかを知りたいという場合には、LINEの機能を使うのが便利だと思います。

  • この記事いいね! (0)