Tech Sketch Bucket of Technical Chips by TIS Inc.

日本語連続音声認識エンジン"Julius"をAndroidで動作させる 1

Pocket

iPhone4SやiPhone5をお持ちのみなさん、 Apple Siri は活用していますか?NTT docomoのスマートフォンをお持ちの方は、 しゃべってコンシェル を使ってらっしゃいますか?

AndroidやiOSを搭載したスマートデバイスが花盛りの昨今、Apple Siriやしゃべってコンシェルのような スマートデバイスに話しかける」ことで何らかのアクションを起こさせるサービスが、特別な機器を揃えずとも使えるようになりました。
このようなサービスは一般消費者にとっても有用ですが、スマートデバイスを企業内で利用するシーンでは特に力を発揮します。
例えば両手がふさがった状態で機械の整備をしている時に、胸ポケットに入れたスマートデバイスに「次は何をするんだっけ?」と話しかけたら、「次は右の3番ボルトを10N.mのトルクで締めてください」とか答えてくれたら、すごく便利ですよね。

このようなサービスを実現するための入り口が、音声認識です。人が話した「音声データ」を解析してプログラムが理解できる「文字列」に変換する技術のことで、1960年代のコンピュータの黎明期から研究されている歴史の古い分野です。スマートデバイスとクラウドの普及に従い、音声認識技術はこの数年で一気に一般化しました。

残念ながらApple SiriのAPIはまだ公開されていませんが、Androidでは RecognizerIntent を用いることで簡単に音声認識アプリを作ることができます。ただしこのRecognizerIntentには、大きな問題が一つあります。インターネットへのアクセスが可能な状態(=オンライン)でなければ利用できないのです。しかし、例えば地下で配管工事をしている作業者の支援など、オフラインで音声認識ができれば役に立つシーンはたくさんあります。

そこで今回を含めた全3回で、オープンソースで公開されている 「日本語連続音声認識エンジン Julius」 をAndroid上に移植し、Androidでオフライン音声認識を行う方法について解説します。

動作するソースコードは、 githubに Julius for Android として公開しています。よければforkして動作を確認してください。

今回の連載もかなり濃いですが、ついてきてくださいネ!

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

Pocket

ラベリングって?

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

入力画像

図1:入力画像

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

ラベリングされた画像

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

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

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

OpenCVでラベリング

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

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

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

SugarCRMをお気軽にカスタマイズしてみた その3

Pocket

1回目2回目 はツールによる自動生成だけでどこまで作れるか?チャレンジと称して一回もソースコードを見ることなく済ましてきましたが、とうとう年貢の納め時。
3回目にしてようやくソースコードに手を入れます!
2回目で基本的な部分のソースは自動生成されているはずなので、足りない部分だけ補うことにして楽をしよう、という方針です。

PostgreSQLクラスタの可用性確保~pgpool-II並列実行型クラスタを作ってみよう~

Pocket

techsketch-banner-OSS+startingblock(700x65).jpg

PostgreSQLはVer9からストリーミング・レプリケーションの機能が実装され、複数台のサーバで分散して処理を行うクラスタシステムを構成することができるようになりました。ただ、実装するにあたっては幾つかのパターンが考えられます。また、PostgreSQLの負荷分散を行うpgpool-IIも単一障害点になってはいけませんので、これ自身も冗長化する必要があります。
今回は、執筆開始時点での正式バージョンであるpgpool-II Ver3.1.3、PostgreSQL Ver9.1.2を使って、以下のようにpgpool-II、 PostgreSQLを並列実行する形でのクラスタシステムを考えてみたいと思います。

pgpoolクラスタ3.PNG

CapstranoでAWSのAPIを使って実行時にroleを設定する

Pocket

この記事はeXcale Developer's Blogから移転されたものです。

eXcale開発チームの西谷です。

Capistranoを利用するときに実行時にroleを決めたいときってありませんか?
今回はそのあたりについてです。

Spring MVCでバリデーションを行う

Pocket

この記事はeXcale Developer's Blogから移転されたものです。

eXcale開発チームの西谷です。
今日はSpring MVCのバリデーションについてです。
Spring MVCではJSR303に対応したバリデーションが行えます。
JSR303とは簡単に言うとJavaBeans用のバリデーションの仕様です。詳細はこちらを参照ください。
これによりアノテーションによってバリデーションを行うことができます。
今回はSpring MVCで開発したWebアプリケーションのコントローラの入力値(フォームなど)に対してバリデーションを行う方法です。
JSR303の参照実装はいくつかありますが今回はHibernate Validatorを使用したいと思います。

初めてのSpring Roo

Pocket

この記事はeXcale Developer's Blogから移転されたものです。

eXcale開発チームの西谷です。
今回はJava開発者のためのRADツールであるSpring Rooを使った簡単なWebアプリ開発を紹介します。

Spring Rooとは

Spring RooはオープンソースのJavaフレームワークであるSpring Frameworkの開発元、Spring Sourceによって提供されているRAD(Rapid Application Development)ツールです。Spring Frameworkベースのアプリケーションをコマンドラインで簡単に自動生成できるRuby on Railsのようなツールです。

Spring Rooで行える代表的な操作は以下のようなものです。

  • Mavenプロジェクトの作成と依存関係の管理
  • DB関連のセットアップ(JPA、MongoDB)
  • エンティティクラスの自動生成(getter/setterの自動生成)
  • JUnitのセットアップ
  • Spring MVCベースのセットアップと自動生成(Scaffold)
  • setter&getter,toStirng()の自動メンテナンス
  • ロギングのセットアップ

その他にもいろいろありますが、今回はひとまずRooを使った簡単なWebアプリの作り方を紹介します。個々の項目の詳細などはSpring Rooのドキュメントなどを参照してください。

SugarCRMをお気軽にカスタマイズしてみた その2

Pocket

前回の記事 ではスタジオ機能を使った既存モジュールのカスタマイズについて触れました。
今回はもう一つの開発者向けツール「モジュールビルダー」を利用して、新機能の追加を行ってみます。