Tech Sketch Bucket of Technical Chips by TIS Inc.

インターンシップで機械学習を使ったWebアプリを作りました!

Pocket

今回TISのインターンシップに参加した、修士1年の杉山です。 3月25日から31日まで平日5日間のインターンシップを体験し、機械学習を使ったWebアプリを開発しました!!

OpenCVによる画像認識アプリケーション with Google Glass(3)

Pocket

前回はGoogleGlassで画像認識を行うアプリケーションの基本的な実装を行いましたが、実行速度が低速であるという結果に終わりました。第三回はその部分のチューニングを行った内容を書きたいと思います。

OpenCVによる画像認識アプリケーション with Google Glass(2)

Pocket

前回はOpenCVを利用したGlassでのカメラプレビューの表示に関して説明しました。第二回はORBアルゴリズムによる画像認識の実装について記します。ORB(Oriented FAST and Rotated BRIEF)はパテントフリーで高速な特徴量記述のアルゴリズムとして知られています。FAST(Features from Accelerated Segment Test)とBRIEF(Binary Robust Independent Elementary Features) というコーナー検出と特徴量記述のアルゴリズムを基礎に開発されたものです。

OpenCVによる画像認識アプリケーション with Google Glass(1)

Pocket

OpenCV(Open Source Computer Vision Library)は、Intel Russia Research Centerによって開発され、現在はWillow Garageに開発が引き継がれているコンピュータビジョンライブラリです。応用分野は多岐に渡りますが、ここではGoogle Glass上でリアルタイムな画像認識を行うアプリケーション作成のためにOpenCVライブラリを利用しました。本投稿を通じて、Glassでの画像認識アプリケーションの開発とパフォーマンスの検証結果について3回に分けて書いていきたいと思います。第一回はアプリケーションの全体像とOpenCVライブラリを静的ビルドによりGoogle Glassのアプリケーションに組み込み、カメラプレビューを表示するための実装するまでを記します。

opencv_logo
ocv_withglass_link

AlchemyAPIのAlchemyVisionを使ってみる

Pocket

AlchemyAPIを知っていますか?

 最近何かと機械学習系のサービスやプロダクトについての話題を聞くことが多くなったと思います。お馴染みのGoogleやIBMといった巨人たちもさることながら、それ以外にも機械学習やそれに類する技術を軸としたサービスを展開するスタートアップ企業なども徐々に市場でのプレゼンスを高めつつあります。 AlchemyAPI もそんな企業の一つです。

OpenCVからLabeling.hを使ってラベリング

Pocket

ラベリングって?

ラベリングとは画像の中で連結している画素の固まりをその集合単位で抽出するものです。
具体的な例でいうと以下のような画像があるものとします。

入力画像

図1:入力画像

これに対してラベリングを実施することで、ひとつの画素の固まりに対して同じ色(ラベル)を割り当てたものが以下の画像です。

ラベリングされた画像

図2:ラベリングされた画像

このようにラベリングによってひと固まりになっているものが抽出され、その単位で他の処理を実行することができます。

また、ラベリングに関しては英語ですが以下のWikipediaの項目が参考になります。
Connected-component labeling(Wikipedia)

OpenCVでラベリング

OpenCVでラベリングを試みたところ、OpenCVには標準でラベリングをするクラスが用意されていません。
【OpenCV】輪郭処理(cvFindContours)を使ったラベリング処理 があるようですが、本記事ではライブラリを利用する方向で検討しました。

ざっくり調べてみたところ、OpenCVからラベリングが出来そうなものとして以下のものがあるようです。

上記のうち、cvBloblibとcvBlobは、Windows上のVC++から利用するにはビルドなどが難しそうだったので、ヘッダファイルだけで利用可能でライセンス上利用しやすそうなlabeling.hを利用してみました。