2017-01-01から1年間の記事一覧
混合正規分布モデル(Gaussian Mixture Model)のHMMを作成する。尚、単一正規分布のHMMモデル(single Gaussian models)のままでも認識エンジン「Julius」に渡すことはできる。混合数の増加には「HHEd」コマンドを使用する。 HHEd -H "HMMモデル" -w "出力…
トライフォンの初期モデルに対して学習を行う。 HERest -C "config名" -I "トライフォン用の音素MLF" -t 250.0 150.0 1000.0 -S "学習対象となるファイルのリスト"-s "統計ファイル" -H "トライフォンの初期モデル" -M "出力先" "トライフォンのリスト"イン…
モノフォン(monophone)での音響モデルを作ったら、続けて、トライフォン(triphone)の音響モデルを作成する。トライフォンというのは音素の3つ組のこと。 2つ組ならバイフォン(あるいはダイフォン) これらは、音素(phone)に「MONO」、「BI」、「TRI」を…
トランザクションの構造を確認する。 適当なトランザクションを選ぼうとしたが、testnetは、Generationトランザクション1つだけのブロックが続く。いくつか数字を飛ばして、 bitcoin-cli -testnet getblockhash 120002 bitcoin-cli -testnet getblock 000000…
testnetのデータをターゲットに、ブロックの構成をたどってみる。まずはchainの先頭(genesis)ブロックから。 getblockhash(ブロック高を指定してハッシュを取得する) bitcoin-cli -testnet getblockhash 0bitcoinにおけるブロックのハッシュ化は、ブロック…
フルノードがピアと通信する様子をtcpdumpで出力してみた。 sudo tcpdump -X -S -t -n -i wlan0 -s 2048 '(port 44253)' > /tmp/tcpdump.txt8つのコネクションの1つだけを指定。通信でやりとりするMessageの構造については以下。 Protocol documentation - B…
OpenSSL APIを使うクライアントプログラムを書いて、あるサイトにアクセスした時にエラーが出た。 ハマったのでメモしておく。 error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failureTLSを指定している(↓)のに何故SSLv3? ctx = SSL_C…
まずは、GitHubからCoreのソースを落とす(他の言語による代替実装もあるらしい)。Git リポジトリのコピー。 git clone https://github.com/bitcoin/bitcoin.gitリモートブランチを一覧表示。最新バージョンは「0.15」。 git branch -r origin/0.10 origin/…
「forward-backward」(またはalpha-beta)アルゴリズムの後ろ向き確率が求まったら、 続けて前向き確率を求める。t=2において、ラベル1の状態2にいる確率(下図の赤枠)は ①(t=1でラベル1の状態2にいる確率) * ②(遷移確率) * ③(出力確率)により求まる。 log…
HMMは2種類の確率を持つ。 遷移確率(transition probabilities) 出力確率(output probabilities) 出力確率は、HTK Bookの数式を見ていてもイメージがわきにくかったので、まとめてみた。パラメータを「NUMCEPS = 12」、「MFCC_D_A_0」で与えた時、HMMに…
音声データと、それが意味する音素や単語("ラベル"と表現する)の紐付けには、「音響モデル」を使用する。Juliusでは、音響モデルとして、HMM (Hidden Markov Model) を用いることができる。HMMは、HTK(HMM Tool Kit)を使って作成できる。モデルの学習には、…
フーリエ変換を用いることで、波形データを純音に分解できる。 結果、波形データの特徴を解析しやすくなる。 フーリエ変換の定義式 ω:角周波数/角速度[rad/s] t:時間[s] j:虚数単位 f(t):変換前の時間波形 F(ω):角周波数ωにおけるcos成分の大きさ、sin…
"もしもし"というWAVE音声データをプロットしてみると以下のとおりであった。 発声の時間は2秒間で、サンプリングレートは16kHz(出力結果として得られるサンプル数は32,000) 1サンプルは2バイト(C言語でのshort(−32,768〜 32,767))の範囲の値を取る 横軸が…
音声認識は音声データをそのまま扱うのではなく、MFCCという音響特徴データに変換する。MFCCは"Mel Frequency Cepstrum Coefficents"の略。音というのは波で、複数の純音が重なり合っている(ならば、純音に分離できるということ)。 音声データは"x軸が時間…
Juliusに渡す音響モデルを"HTK"(Hidden Markov Model Toolkit)で作成する。音声データは、"もしもし"という発声をWAVEファイルに保存したものを用意した。 サンプリングレートは [16000 Hz] チャンネル数は [1] (モノラル) 量子化深度 (サンプリングデータを…
前回の続き使用するJuliusのバージョンは"4.3.1"Juliusに渡すパラメータを簡略化して書くと以下のとおり。 julius "入力音声" "音響モデル" "言語モデル" 入力音声オプション例 HTKの特徴ベクトルを渡す -input mfcfileマイク入力 -input mic 音響モデルオプ…
画像や文字といった"パターン認識"技術の中でも、特に難しいとされる音声の認識。その仕組みを調べてみた。qiita.com 「Julius」は他と比べると見劣りする。 デフォルトですぐに使えるようにしてあるのは試しやすくていいけど、認識精度にガッカリしてしまう…
ブラウザ上で閲覧する1つのWEBページは、HTML、JavaScript、CSS等、複数のファイルから構成されることがほとんど。 ソケットプログラムを書くとなると、1ファイル=1要求として関数を書くことになると思われるが、 ソケットの作成は、毎回、行わなければなら…
sudo tcpdump -X -S -t -n -i wlan0 -s 1024 '(port 53)' > /tmp/hoge.txt IPヘッダ 2桁目がIPヘッダの長さ。4Byteの倍数で数える。 最小 5 : IPヘッダ長は20Byte(= 5 * 4Byte) 最大15 : IPヘッダ長は60Byte(= 15 * 4Byte)下の例では、「5」なので、IPヘッダ…
fgets(3)はwhileループの中でどう使えばいいのか、検証してみた。以下、ソース全文。 whileの部分を変えてみる。 #include <stdio.h> #include <string.h> void testfunc(char *buf){ printf("%s\n", buf); } /* end of testfunc */ void main(int argc, char *argv[]){ if(argc</string.h></stdio.h>…
以下のdeveloperworks記事を参考にOpenSSL APIを試してみた。www.ibm.com今回は"SSL_CTX_load_verify_locations"(証明書の検証)に関する部分のメモVerisignのサイトで試してみた。以下のコードに、エクスポートした各階層の証明書を入力して、 /* Load the t…
GitHubを更新しようとしたらワーニングが出た。 Please note that GitHub no longer supports old versions of Firefox. この時のUser-Agentは User-Agent Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:44.0) Gecko/20100101 Firefox/44.0 2017年8月8日にバー…
イーサネット上を流れる音声パケットの一例ここで、音声データはサンプリング周波数: 8kHz 1サンプルあたりのbit数: 8でデータ化されているものとしている。1秒あたりの情報量は64kbitで、 G.711(PCM方式、無圧縮)といったコーデック方式だと、 20ミリ秒ご…
純音(一つの正弦波だけで作られる音)を作る 1.ソース ピアノ鍵盤でいうところの「ラ」の音(周波数 880Hz) サンプリング周波数 : 16k(1秒間にいくつ区切るか、電話だと8k、今回は毎秒16000回サンプル) 1秒間鳴らす 値の範囲は「1〜255」(後ほどodコマン…