読者です 読者をやめる 読者になる 読者になる

凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

Open JTalk を組み込んでみた

はじめに Open JTalk はバイナリでは配布されているのですが、自分のコードへ組み込むにはどうしたら良いかいまいち分かりませんでした。が、色々試してみてなんとか組み込めたので、その方法を紹介します。 環境 Ubuntu 10.04 LTS gcc version 4.4.3 (Ubunt…

Juliusの認識結果をOLLでオンライン学習させてみたら結構良かった

はじめに 前回のエントリでは、OLLによるオンライン学習を試してみました。そこで今回は、Juliusによる認識結果を実際にこのオンライン学習を用いるとどれほど成果が上がるのか試してみた結果を報告します。 データ Juliusの認識結果は@super_rtiさんがgithu…

OLL によるオンライン学習を試してみた

はじめに 音声家電制御に用いている音声認識エンジン Julius の認識結果の精度を高めるために、機械学習を取り入れようと思います。機械学習を Julius に取り込んだ例としては、ルールベースjuliusの誤認識対策にSVMを利用してみよう - お前の血は何色だ!! 4…

非公式 GoogleTTS API から音声ファイルを取得する

C++

背景 Ubuntu 11.10 環境で Open JTalk で TTS(Text to Speech)させようとしたら 10.04 の時のように簡単に導入できなかったので、他の TTS 手段を探していて行き着きました。 はじめに Google TTS は Google 翻訳で結果を喋らせたりするときに使われていま…

Juliusの音声認識結果の信頼性を名詞/動詞のスコアを利用して上げる

はじめに Juliusで音声認識した結果をそのまま利用してしまうと、周りの環境音(ドアを開いた音やテレビの音)に反応してちょっと不便です。しかし、認識結果に含まれている種々のスコアを用いればある程度処理結果の信頼性を高めることができます。そこで本…

Juliusを途中で終了させる

はじめに Julius は j_recognize_stream を実行するとぐるぐるとループに入ってしまって処理が戻って来ません。なので普通に実行してしまうと Ctrl + C で終了させなければならなくなります。しかし Boost.Thread を使ってマルチスレッドで実行すればそんな…

Juliusで認識結果の取り出し方を調べてみた

はじめに 前のエントリでは CALLBACK_RESULT で登録できるコールバック関数の中身で何をやっているのやら…、という感じだったので、Juliusのコードを追っかけてざっと調べてみました備忘録です。何の知識もない人が追いかけたのでかなりの間違いを含んでいる…

Juliusを実行ファイルに組み込む

はじめに 過去のエントリでは Julius をサーバモードとして動かして結果を取ってきていました。今回からは JuliusLib を利用して直接 Julius を突っ込んでみました。 環境 Ubuntu 10.04 gcc version 4.6.1 20110617 (prerelease) (GCC) Juliusの用意 最新版…

Open JTalk で作った wav を OpenAL で再生する

はじめに 前回、Open JTalk で wav ファイルを作成するところまで出来ました。今回はそれを OpenAL を使って喋らせてみます。 環境 Ubuntu 10.04 gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) boost 1.48.0 Open JTalk version 1.04 OpenAL と alut のバージ…

ICU + Mecab で文章をローマ字の読みに変換

はじめに 要は「今日は良い天気ですなぁ。」という文章を「ky o: w a y o i t e n k i d e s u n a:」にして欲しい訳です。音声認識エンジン Julius での言葉の音の定義を行う voca ファイルを自動生成する目的で作りました。 MeCabで文章をカタカナに変換 T…

ICU でカタカナ → ローマ字変換をしてみた

C++

はじめに ちょっと日本語文章からローマ字を生成したかったのでやってみました。 ちなみに ICU とは International Components for Unicode の略です(ICU - International Components for Unicode)。これを利用してみます。 参考サイト ICU4C C++ ローマ字…

変態と名高い Boost.Spirit.Qi を使って Julius の設定ファイルもどきを自動生成してみ…てる途中

はじめに リモコンはオワコン。音声認識でお部屋の家電を操作してみた。 - 凹みTips の設定ファイルたちの記述を楽にしようと現在取り組んでいます。 現在は、IR 信号と言葉の対応付け用の XML、音声解析エンジンの Julius の設定ファイル(grammar ファイル…

リモコンはオワコン。音声認識でお部屋の家電を操作してみた。

はじめに 本エントリは未来のお部屋シリーズの第4弾です。 本シリーズでは、音声認識システムの Julius と TCP/IP 通信で制御できる赤外線学習リモコン iRemocon を繋いで音声認識による家電操作の実現を目指しています。 ついに!音声認識でお部屋の家電を…

Julius で音声認識させてみた

はじめに 前回、iRemocon を操作するところまでやりました(中身はただの telnet みたいなもんですが…)。 次はマイクで喋った言葉を拾ってそれに従って操作を出来るようにしようと思います。このエントリでは音声認識した結果を C++ で取ってくるところまで…

未来なお部屋へ向けての第一歩: Boost.Asio + iRemocon でテレビを操作してみた

はじめに こんな記事をご存知でしょうか。 引越ししたので未来なお部屋を作ってみた。 - お前の血は何色だ!! 4 すげぇぇぇええええ!!!!! 特に、この音声認識システム。だって「テレビ付けて」とか「エアコン付けて」とかいうだけで家電操作できちゃうん…

Boost.Flyweightのお勉強

C++

はじめに 友達とゲームをつくろう! みたいな話が持ち上がってきたりしたので、取りあえずのところのツールとして使えるように、広く浅く Boost のお勉強をしていこうと思い立ちました。まずはリソース管理周りに使えそうな Boost.Flyweight から。 Boost.Fl…

型の名前を静的に調べる

C++

はじめに 正直,何の役にも立たない内容ですが,Boost.Preprocessor の凄さは分かると思います. イントロ 型を調べる!と言ったら RTTI(Run-Time Type Information: 実行時型情報)ですね.RTTIを得るためには typeid 演算子を使えば OK です. #include <iostream> </iostream>…

コマンドライン引数をboost::program_optionsで格納

C++

d:id:hecomi:20110119にてコマンドライン引数をstd::mapに格納する手段を紹介しましたが,boost::program_optionsを使うともっと簡単にできます.またboost::program_optionsを使えばコマンドラインオプションの解析も容易に行うことができます. はじめに M…

コマンドライン引数をstd::mapに格納

C++

バッチファイルからコマンドライン引数をプログラムに渡して,データを大量に得たい!って状況がある際に,コマンドライン引数をいちいち展開するのは面倒です.argv[1] は a に渡して,argv[2] は b に渡して…なんてやってたら,渡したいパラメータが増えた…

boost::timerを使ってブロック内を時間計測

C++

d:id:hecomi:20100715にて「boost::timerを使って1行コードを挟むだけで経過時間計測」という記事を書きました.その続きのおはなしです.前回のエントリでは, CTimer t; ... // 長い処理1 t("process 1"); // 1の処理にかかった時間を書き出す ... // 長い…

C++でgnuplotを扱う

はじめに (※windows向けのエントリです) これまで,C++でgnuplotを使う,ということで幾つかエントリを経てgnuplotを便利に使えるクラスを作成してきました. C++(C)でgnuplotにパイプを繋げてグラフを簡単に描画Comments 其の一 (id:hecomi:20100707) C…

BMPファイルから弾幕を生成する(準備)

前回(d:id:hecomi:20100727),画像の2値化を行ないました.次にこれを継承して,画像を弾幕の素へと変換するクラスを作りたいと思います.前回同様,中身は「龍神録プログラミングの館(http://dixq.net/rp/)」の第55章(http://dixq.net/rp/55.html)の…

BMPファイルから弾幕を生成する(完成版)

前回(d:id:hecomi:20100728:1280296153),BMPファイルを読み込んで2値化し,弾を等間隔に配置していくプログラムを組みました.今回は,龍神録プログラミングの館(http://dixq.net/rp/)の第56章(http://dixq.net/rp/56.html)の内容を扱い,実際に弾幕に…

目的の数字が現れるフィボナッチ数列の最小の初項・第2項をC++で求める

C++

かってぃさん(@katty0324)の次のポストを参考に,目的の数字が現れるフィボナッチ数列の最初の2項を求めるプログラムを書いてみました. フィボナッチの問題やっと解けたけど、あんまり意味もないよね。Cだったら10行くらい。 URL2010-07-15 06:08:06 via …

C++で2次元ポアソン方程式を解く

前回のエントリ(d:id:hecomi:20100717:1279390033)では1次元のポアソン方程式を解いたので2次元を解いてみようと思います.理論は2次元になっただけでほぼ同じです. 使用プログラム ベクトルセット等: calc.h 3次元プロットに対応したCGnuplot: gnuplot.…

C++で1次元ポアソン方程式を解く

理論 シンプルなタイトルですが,やってることもシンプルです.まずは1次元ポアソン方程式を見てみましょう. ここでVはポテンシャル,xは位置,ρは電荷密度,εは誘電率です.式を見ると微分が含まれていますね.コンピュータで微分を解くためには種々の方法…

boost::timerを使って1行コードを挟むだけで経過時間計測

C++

boost::timerはCの標準ライブラリのclock()を使って簡単に時間計測をしてくれる便利なクラスです.基本的な使い方は,以下のようになります. #include <iostream> #include <boost/timer.hpp> #include <windows.h> // Sleep用 int main() { boost::timer t; // タイマーの開始 Sleep(1234); std::</windows.h></boost/timer.hpp></iostream>…

C++からgnuplotを使って複数グラフをプロット

(追記: 11/1/19) 最新版はこちらになります:d:id:hecomi:20101209:1291888423 - C++からgnuplotをパイプをつなげて使用するクラス,CGnuplotを作成しましたが(id:hecomi:20100709:1278686045),マルチプロットも出来るようにしたのでご紹介します. gn…

boost::lambdaを使って2行で方程式の解を求める

方程式の答え簡単に出ないかなー…,と考えてるあなた.boost::lambdaを使えば「2行」で解けます. boost::function<double(double)> f = _1*_1 - 3*_1 + 2; // f(x) = (x-1)(x-2) std::cout << root(0.6, 1.3, f) << std::endl; // 1 /* std::cout << root(1.3, 2.4, f) << s</double(double)>…

boost::lambdaで積分計算 其の二

前のエントリ(d:id:hecomi:20100712)で,「boost::lambdaで積分計算」というソレらしい題名を付けたにも関わらず,sinやcosにバインドしただけ.というお粗末な内容になっていたので,今回はもっとガッチリとやってみます. 関係の無い人は聞き流して欲しい…

boost::lambdaで積分計算

boost::lambdaについて boost::lambdaはC++でlambda expressionを可能にしてくれる,なんというか非常に気持ち悪いながら,強力且つ便利なものです. 記法については,boostのページ(http://www.boost.org/doc/libs/1_35_0/doc/html/lambda.html(自分は余…

C++による線形補間

MathcadをC++に翻訳しよう,という試みをしているので,積分やら挟み打ち法によるroot計算やらを実装したいのですが,その一貫として線形補間クラスを作成しました. 中身は至ってシンプルで, x, y配列(vectorなど)を与える それぞれの配列が2個以上デー…

C++(C)でgnuplotにパイプを繋げてグラフを簡単に描画Comments 其の三

前回(d:id:hecomi:20100708),前々回(d:id:hecomi:20100707)に引き続き,gnuplotをプロットするクラスのお話です. 追加機能 / 変更箇所 大したものは追加してませんが,追加機能は以下の通りです. 現在プロットしているデータをファイルに保存 現在プ…

C++(C)でgnuplotにパイプを繋げてグラフを簡単に描画Comments 其の二

昨日の記事 d:id:hecomi:20100707 の追加です. コードのシンプル化 昨日のコードは,コンテナ版,配列版でほぼ同じコードを実行するという冗長なものでしたので,別にプロットするプライベートな関数plotX, plotXY, plotXYZへ投げるように変更しました. ま…

C++(C)でgnuplotにパイプを繋げてグラフを簡単に描画

数値計算をして,結果を吐き出して,Excelに貼りつけて,グラフ化して…. なんて手順をたどってると時間が勿体無いですよね. そこでgnuplotを使うと,プログラム上から簡単にグラフを描画することが出来ます. wgnuplotの導入 まずはwindows版gnuplotである…