2014年9月26日金曜日

Julius 孤立単語認識について 自分用メモ

自分で書いたJuliusに関するメモノートがあまりにも汚かったので、再確認を行うと同時にメモを残すためにここで書き直す。

認識の方法は孤立単語認識(「はい」など決められた単語の認識を行う)

使用したJuliusのバージョン4.3.1
OS Ubuntu 12.04

一部参考サイト
git:OpenQbo/qbo_listen
https://github.com/OpenQbo/qbo_listen/blob/master/src/julius.cpp

Juliusの解凍、インストールは公式参照

JuliusのメインのプログラムはSampleを基本としたソースコードを書けば問題がない。
また、MakeファイルやConfigurationファイルもサンプルや公式ドキュメントを参照しながら書けば問題はない。

問題は辞書ファイルの作成、辞書ファイルは文字コードがeuc-jpで書かないといけないので文字コードが違う場合、辞書ファイルは作られない。そこで文字コードを合わせるために以下のコマンドを実行した。

iconv -f utf8 -t eucjp ファイル名 | ./yomi2voca.pl > 辞書ファイル名

ファイル名、辞書ファイル名は各々が決める。
上のコマンドは、ファイルの文字コードをUTF-8からeucjpに変換するコマンドとのこと
これによって、辞書ファイルを作成することができた。

後、自分は実行の際、引数を渡すのがめんどくさかったのでgitで公開しているqbo_listenを参考にして自動で特定の場所のConfigurationファイルを読みこませるようにした。

(雑記)
時間があれば、参考サイトとか、ソースとか詳しく読み直してこのメモを詳しくしていきたいかなぁ・・・

2014年9月23日火曜日

ハッカソン終了 そのまとめ

土曜日、日曜日、月曜日の3日を使ってアイディアソン、ハッカソン、発表と行ってきました。
この3日間は自分の分野とは全く違うことをして、いろんな人と関わった。だからこそ見えてきたことや、やってみようと思う幅が広がった。結果としては最優秀賞を頂いたが正直、実装面やアイディアは他のチームの方がすごかったと思う。

参加チームのみなさん、運営のみなさん、情報提供企業のみなさん、本当にお疲れ様でしたと同時にありがとうございました。


ここからは自分的に思ったこととかを・・・
ハッカソンに関して時系列に自分の思ってたことを表すと以下の通り

ハッカソン始まるまで
・情報提供企業さん、ほとんど情報系やん!俺ら出る意味あるのかな・・・?

ハッカソン事前説明会
・html・・・JavaScript…

アイディアソン
・パルロかわええー

ハッカソン1日目
・え?ツイッターBOT・・・?PHP・・・・?

ハッカソン2日目
・Pythonスゲー、ラズパイおもれー

精神的な面
正直、始まるまではこれ...参加しなかったほうが...と思ってたのは事実です。ただ、始まって、ふたを開けてみると楽しんで頑張っていました。毛色が違うからか、今まで行わないことだったからか、それともチームで動いていたからか、多分理由はいろいろあると思うけど、いい経験になったし、参加してすごく良かったと思う。

技術的な面
ハッカソンでは普段と全く違う分野のこと(ツイッターのBOTを作ること)をした。使ったハードはRaspberry pi、一度起動のために触っただけで、それ以降は封印していた。その時の少ない知識と、拙いLinuxの知識を合わせて開発を頑張った。最初はネットにあったPHPのソースとかツイッターAPI情報とかを頼りにガリガリ書く→エラー→変更を繰り返していたけど、Pythonのモジュールを見つけてからはあっという間だった。
ほんと、Pythonさんすげーわ。

他学科との交流面
ハッカソンで他学科(特に情報系)の先生と交流があったのでいろいろと内情を聞いてみた。正直情報系の学科はWebアプリやWebページを専門にしているかと思ってたけど、Raspberry piやArduinoを使った組み込みを行ってたりする研究室が存在し、自分たちよりもロボットの知能に関しては詳しい人が多いのではないかという印象を持った。情報系の人たちに就職とかで勝つためにはそれ以上の知識か、ハードもできる万能屋になるしかないのかなぁ・・・という焦りを感じた。

最後に...今回のハッカソンで得たRaspberry piとPythonとPHPとかの技術使ってなんかやりたいなーという気持ちと得た知識を忘れないように勉強しようかなーという気持ちは高まった気がする。新しいことに足を踏み出すことはとってもいいことだと思う。







Python勉強するかなー!
なんかいいアイディア浮かばないかなー!!

2014年9月20日土曜日

アイディアソン参加 それについての個人フィードバック

アイディアソンを行ったのでそれについて思ったこととか

アイディアソンというのはアイディア出し+マラソンということ
ハッカソンだったりだとかそういう系のアイディア出しバージョン

このアイディアソン何が重要かというといい問題点を出すということらしい。
理由はアイディアソンの時点で開発の話になると開発できるかどうかだとかそういうことの掘り下げになっていくから。

アイディアソンというものを自分は思い違いをしていたのじゃないかなぁと振り返る。発表後、意見を頂いた時にこの問題点のことに対して厳しく言われ、問題点の細かい洗い出しとか必要かなと思ったが、自分たちが出した問題点が正しいかとかのフィードバックを得られることとかが重要なことなんだと思う。

明日からハッカソン、気合入れて頑張りたい。

一応まとめ
・アイディア出し難しい
・定量的なデータは問題提示時に役立つ(そういう資料をかき集める能力も必要)
・憶測だけのもの言いはよろしくない(ほんとなの?みたいに思われるとダメ)
・ちゃんとしたアイディアはちゃんとした裏付けから
・問題の掘り下げが不足していたか?
・情報系の人の発表がうまかった
・うまく情報を活用したい

2014年9月13日土曜日

クリエイティブ・マインドセット 読書記録

先日クリエイティブ・マインドセットを読み終えました。
この本は、クリエイティブになるための心構えなどを教えるために、著者らが始めた「dスクール」というクラスで教えてる内容、さらに詳しい事例や、どのようにクリエイティブ精神を鍛えるかなどの練習方法が書かれています。

クリエイティブになるには、「チャレンジ」と「失敗」が必要である。チャレンジしないと何も始まらないし、失敗しないと何も学ぶことができないから。

この2行が自分の感想です。印象に残ってるフレーズというよりも、自分が読んでてこういう印象を持ったという感じ。この「チャレンジ」と「失敗」というのは当たり前だけど、実際は後押しがないと出来ないことだと思う。そういう後押しが欲しい人は読んでみることをお勧め。

結構読んで面白かったです。自分は先ほど言った2行分のことが出来ないタイプの人なので、この本を読んでからはチャンスがあれば飛び込もう。何かしてみようと思う気持ちが強くなりました。
後、序盤は「視点を変えてみた」話だったりも面白かった。世では当たり前だけど、自分の中では気付いてなかったみたいなことも気づかせてくれます。

最後に、練習法とかは個人で出来るものから、数人で行うものまでさまざまで、クリエイティブ精神を付けようというワークショップを開催しようと思う人にとっても面白いかもしれません。

2014年9月7日日曜日

PCLチュートリアル「VoxelGrid」PCLPointCloud2を使用しない書き方

 近年Point Cloudを使用した環境認識技術が発展してきており、多くのロボットにこの技術が採用されています。自分もこの波に乗ろうと、去年卒業発表の時にPointCloudを使用したプログラムを書いたのを覚えています。(結果は・・・うん、まぁ・・・)

 PointCloudを扱うライブラリとして特に有名なのがPCL(Point Cloud Library)と呼ばれるものです。(http://pointclouds.org/)このサイトのチュートリアルは自分も去年、大変お世話になりました。
 
 昨日久しぶりに、PCLを勉強し直そうと、VoxelGridのチュートリアルを写して、Makeをかけてみたのですが・・・Makeが通らない。どうも自分のverでは使用できない型があったみたいです。

 PCLはver 1.7.xをリリースしており、それ以前のverでは使用できない機能も多く増えています。その1.7.xで採用されている「PCLPointCloud2」という型が自分の使用している1.6.0には存在しなかったのが原因みたいです。

 では、1.6.0でPCLだけを使用してこのVoxelGridを使うことはできないか、普通に出来ます。実際このVoxelGridは古いverでも使用されており、PCLPointCloud2を使用しなくても作ることは可能です。実際ほとんど変更しませんでした。

以下にソースコードを載せます。


#include<iostream>
#include<pcl/io/pcd_io.h>
#include<pcl/point_types.h>
#include<pcl/filters/voxel_grid.h>

int main(int argc, char **argv)
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ> ());
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ> ());

    pcl::PCDReader reader;
    reader.read("pcdファイル名", *cloud);
    std::cerr<<"PointCloud befor filtering: " << cloud->width * cloud->height << "data points ( " << pcl::getFieldsList (*cloud) << ").";

    pcl::VoxelGrid<pcl::PointXYZ> sor;
    sor.setInputCloud(cloud);
    sor.setLeafSize(0.1f, 0.1f, 0.1f);
    sor.filter(*cloud_filtered);

    std::cerr<<"PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height << "data points (" << pcl::getFieldsList(*cloud_filtered) <<").";

    pcl::PCDWriter writer;
    writer.write("保存ファイル名", *cloud_filtered, false);

    return(0);
}



 大まかな場所はチュートリアルと同様で、変更点は赤字で書いた部分です。この変更は、PCLPointCloud2の部分を1.6.0などで使用されていたpcl::PointCloud<pcl::PointXYZ>を使用している点。あとはPCDWriterを使用する際の引数がPointCloud<pcl::PointXYZ>で使用できるようなようにしている点だけです。

PCL ver 1.6.0でもPointCloud2を扱うことはできるようです。ただ、型がsensor_msgs::PointCloud2となっており、この型はROSのメッセージ型で、もしかしたらPCL単体では使用できない可能性があります。(未確認)

正直この問題は自分が以前のverを使用しているのが問題であり、最新のverに更新すれば問題ないと思うが・・・諸事情により乗り換えられないのが・・・・

これは、早めにその諸事情を解決して、1.7.xに乗り換えたほうが良さそうですね。

(何か問題、間違いがあれば変更しますー)