進捗(1/11)

プログラムが冗長化している部分を自分なりに組みなおしたり、削ったりしようと思います。

まず短いコードをモジュール化し過ぎて、import文が多くなってしまっているのが気になったので関連のあるものを合わせて数を減らしました。
あと、使わないのにimportしている部分があったので削除したりしました。


変更後に不備がないか調べるために実行すると、音声認識がうまくいかず、なかなか変更部分にたどり着けませんでした。
なので、未実装だった音声認識効率をあげる単語辞書を導入しようとすると、exeファイルではできたのにモジュールモードではエラーを吐いて実行できません。

以下スクリプト

(変更前)
start_julius.sh----

cd dictationkit
./bin/windows/julius.exe -C main.jconf -C am-gmm.jconf -module > /dev/null &
cd ../

---------------------------

(変更後)
start_julius.sh----

cd dictationkit
./bin/windows/julius.exe -C dictionary.jconf -module > /dev/nul &
cd ../

dictionary.jconf はジュリウスを起動させる際の設定ファイルで、以前単語辞書作成の際に作ったものです。
内容は変更していないので、上のコードでできるはずなんだけどナー。

変更前に戻して実行するとエラーは起きないので、スクリプトに問題があることは分かるのですが、どこらへんが悪いんでしょう・・・

変更後のコードを弄ったり、jconfファイルを弄ったりしながら解決方法を探してみます・・・

変更前 : julius.exe -C main.jconf -C am-gmm.jconf -module
変更後 : julius.exe -C dictionary.jconf -module

考えられるとすればこのあたりなんですよねー。
聞くところによると変更前の.jconfは全単語を網羅したもの。後者はピックアップしたものだそう。
C dictionary.jconfの中身の記法がミスっているのか、あるいは参照先が間違っているのか。。。わからぬ。

進捗

12/12

MySQLでデータベース構築の続き。

ポートについては、XAMPPのConfファイル内にある"httpd.conf"の内容を2か所書き換えるだけで接続できました!
"LISTEN 80"と"SereverName 80"みたいな構文があるので、"80"の部分を未使用のポート番号(自分は81)にしたら、"http://localhost:81"でXAMPPの画面が表示されました!
これで完了だと思うのですが、どうなんだろうね??

続いてテーブルを作成するためのデータベースを作成。
データベースを作成する方法は、
XAMPPコンパネからShellを開いて、"MySQL"を入力し接続する。
その後"CREATE DATABASE データベース名"を入力すれば、いいはずなのですが、エラー("構文エラー"と"接続できません")が出て作成できません。

理由として考えられるのが、
・ポートを変更したことによる不具合
・権限付与がされていない
・インストール時のエラー?
だと思います。

ポートを変更したので、いちいちローカルホスト:81を設定しなければならないのでは、というのが有力かな?
やり方がわからないので、CREATE文に"-u @localhost:81"を付けたりいろいろしてみます。

>>MySQLはわかんないです。勉強します。しません。もしかしたらします。

構文から推測するのはわたしもよくする手法で、.txt方式のコンフィグでよく使いますね。

 

12/13

ローカルホストでmysqlにアクセスすることができました!
(コマンドはあきらめ。)

方法として、こちら(https://techacademy.jp/magazine/4137)のサイトで表示されているURLを入力するだけです。(http://localhost/phpmyadmin/index.php)

自分の場合はポート番号を弄ってapacheを起動しているため、実際には"localhost"に":81"を付け加えて、http://localhost:81/phpmyadmin/index.phpにアクセスしています。

また、サイトにはパスワードを要求されると記述されていたのですが、自分は要求されずそのままphpMyAdminの画面(mysql_localhost.jpg)が表示されました。
パスワードの設定方法はまた調べようと思います。


で、実際にデータベースをつくってみました。

まず左上のデータベースタブをクリックするとデータベースページが開きます。その真ん中にデータベース名入力ボックスがあるので、任意のデータベース名を入力して作成を押します。(今回はsampledb)
すると、テーブル作成画面が開くので、テーブル名とカラム数(今回はsample、10個)を入力して作成を押します。
その後11、22、33、(省略)、99、1010の数値(適当です)を入力し、保存をクリックすると"sampledb内のsampleテーブル"が作成され、これで完成なはずです。

長かった。。。

さらにこのデータベースに、認識した文字を自動で格納し続けるプログラムを書こうと思っています!
PythonSQLiteというモジュールがあるそうなので、MySQLさえ設定できれば簡単に行えるとはおもいます。

 

>>MySQLは本当にわかりません。触ったこともありません。もはや助言もきついかな。

 

12/14

まずはSQLからテーブルを作成する、またカラムを追加する方法について調べました。

テーブルの追加方法は、以下の文を打ち込み実行します。
SQL----------------------

CREATE TABLE `データベース`.`テーブル名`
(カラム1 型, カラム2 型, カラム3 型, ...)

-------------------------

これで任意のデータベースにテーブルを追加できると思います。
むつかしい。


つぎは作成したテーブルにカラムを追加します。

SQL-----------------------

ALTER TABLE `データベース`.`テーブル名` ADD `追加するカラム` TEXT NOT NULL AFTER `追加するカラムの前のカラム`;

---------------------------

もし、"こんちゃ"、"ばんちゃ"、"おやすー"の3つのカラムが格納されているテーブルに、"おっはー"を追加したいとします。
追加するカラムに"おっはー"を、また例えば"こんちゃ"の後に追加する場合、AFTERの後に`こんちゃ`を入力することで指定できます。


わからなくなったときは、データベース>テーブル画面の、構造タブをクリックすると、テーブルの下に"1⃣個のカラムを追加する"という行があるのでそこから手動で追加することができます。


PHPMyAdmin上ですが、なんとか操作できるようになりました。
できるなら、シェル上でできるようにしたかった。。。。

明日はjuliusで受け取ったデータを作成したデータベースにぶちこめるようにしたいと思います。
ただ、XAMPPコンパネでデータベースを参照すると、PHPMyAdminで作成したデータベースが表示されないのが懸念事項。。。おたすけ。

とりあえず実装したことを固めつつ頑張りますぅ

 

>>むむむ。

 

12/15

データベースは事前に作成しておけば問題ないことに気づいたので、Pythonでレコードを追加する方法だけ調べたいと思います(`・ω・)

データベースの構成についてはdb_temp.xlsxにまとめた感じかな??
追加したほうがいいものはおいおい。実装できるかは別として必要事項を考えていきたいとおもいます。

あとデータベースに追加していく方法として、別にテキストファイルを作っておいて、発話された内容を随時ファイルに追記しておく。
"さようなら"と認識したらブレイクして終了するので、ブレイク前にデータベース追加モジュールに入ってデータベースに登録する。

という形にしようと思ってます!

他の方法とか思いついたら教えてくれさい・・・m(_)m

 

>>間違ったものも重複したらカウントで追加できると楽かな。とはいえ私にはできませぬ。言うだけなら簡単というやつですね。

 

12/18

Pythonでレコード追加することができました。

使ったものはMySQLdb。
cmdで"pip install MySQLdb"と打ち込めばインストールできます。

以下"レコード追加コード"
py----------------------
#インポート
import MySQLdb

#SQLにコネクト
#パスワード設定をしている場合、パスワードに任意の文字列を入力。しないと入れない。
connection = MySQLdb.connect(
    host = '127.0.0.1', user = 'root', password = 'password', db = 'test', charset = 'utf8')

#カーソルげと
cursor = connection.cursor()

#SQL文入力
cursor.execute("insert into sample values('3', 'apple')")

#コミットしないと実行結果が反映されない。
connection.commit()
connection.close()
-----------------------

あと、テーブルを作るときにAUTO_INCREMENTを指定してテーブルを作ると、勝手に指定の項目を連番にしてくれる。

SQL----------------------
 CREATE TABLE テーブル名(column1 INT AUTO_INCREMENT NOT NULL PRIMARY KEY, column2 VARCHAR(50), column3 INT);
-------------------------

アドミンでの指定の仕方はわからんかったので、SQLでやりました。

>>アドミン=Administratorのことかな。管理者のことです。そしておそらく権限について言ってます。

進捗状況(12/11)

今日はXAMPPにMySQLがついているのを教えてもらい、ゲットしました。
権限取得のためにCドライブ直下にインストールし、簡単に環境を整えられたました。
有効化は"XAMPP Control Panel"で行います。(XAMPP.jpg)

とりあえずMySQLを使ってデータベースを作成するので、Startする。
PIDとPortが表示されるので接続は成功している模様です。

次にApacheをStartするとブラウザが開いて、その上でデータベースの操作ができるそうなのですが、、、
ローカルホスト画面が開いて終了。
よく見るとコンパネにエラーメッセージが表示されるので読んでみると"This may be due to a blocked port,"という一文がありました。
ポートがブロック、もしくは使用されているようなので、このサイト(https://php1st.com/946/)を参考に以下の方法を試してみようと思います。

(1)Port80を使っているプロセスを停止、移動
(2)Apacheの起動ポート番号の変更(80から未使用のポートに)

やりかた事態は難しくなさそうなので、(2)の方法から試していきたいと思います!
もちろん、明日から!

ではでは
By イニシャルU

進捗状況(12/07)

今日は昨日あきらめた単語辞書作りのために、Perlを入れました。
"ActivePerl"の記事が多かったのでそちらをインストールし、"HelloWorld"と出力するプログラムを組みテストしました。

sample.pl--
print "HelloWorld!"
-----------
cmd--------
perl sample.pl
HelloWorld! #実行結果
-----------

無事成功。python時の環境構築と変わらんかったので、もうちょいはやくやればよかた。。。


あとは、grammer-kit内の"yomi2voca.pl"を用いて事前に作った"grammer.yomi"をyomi2voca.plと同ディレクトリに移動させ、コンパイルすれば完成です!!

cmd-------
cd grammer-kit/bin/win32
perl yomi2voca.pl grammer.yomi > grammer.voca
----------

無事コンパイル完了しました~(grammer.jpg)
単語数が少ないですが、grammer.yomiに単語を追加し再度コンパイルすればいいので保守変更の類は簡単に行えるとおもいます!

あとはこのファイルとjuliusのパスをつなげばよいので、また後日再調査!

 

進捗状況(12/06)

本当は単語辞書を作り認識率を上げようと思ったのですが、julius用の辞書を作るためにはPerl環境が必要なため、一旦断念。(認識は成功したし、また今度・・・)

で、調べてる途中にPyInstallerというexeファイルにできるソフトがあるっぽかったので、やってみることにしました。

ダウンロード方法は
cmd-------
pip install pyinstaller
-------。

そして、普段通りの実行ファイルを指定して(自分の場合は"メイン.py")、次のように実行するとdistファイル等が作成され、その中にexeファイルが生成されました。

cmd-------
pyinstaller メイン.py
----------

いざ実行!
MURIDESHITA!(pyinstaller(2).jpg)

シェルスクリプトが実行できないようです・・・
普通にプロンプトから実行するとできるので、問題はワカラナイ・・・
明日にもちこしで・・・_(:3 」)L

進捗状況(12/05(2))

以前できなかったTASKKILLの標準出力捨て、できました!
コード内のstart_julius.shと同じく、end_julius.shを作成し、"TASKKILL //IM julius.exe >nul"と入力することで、送ることができるようになりました。

ウィンドウがGitBASH画面とjulius起動画面のほかに、nulに捨てられる時cmd画面が一瞬開くのが気になりますが、現状問題なく動きます。
開かないようにするのが理想ですが、知識・技術不足により実現が難しいので、助言等お願いしたいです・・・(・ω・`)

進捗状況(12/05)

一応最低限のテストができました

以前"TASKKILL"コマンドができなかった原因のプロセスID取得は、一旦別のテキストファイルに入れて、python内の変数に格納すれば取得は問題なくできるようになりました。
しかし、その変数を用いてコマンドをうっても、"無効な引数です"とか出るのでイメージ(プロセス名)を入れてやってみました。

cmd-------
TASKKILL /IM julius.exe
----------

結果、普通に成功。
"成功: プロセス "julius.exe" (PID 9956) に強制終了のシグナルを送信しました。"というメッセージが出るものの正常にコマンドを実行することができました!

実際にメインコードを実行してみると、認識率は悪いものの、望んだ結果を出力してくれるようになりました。
(本当はTASKKILLの出力をnulに捨てたかったのですが、">"が無効なオプションと表示され、リダイレクトができないようなので断念・・・)

あとは、認識しなかった言葉をどこかに格納してくれるコードを書いたり(テキストかデータベースにしたいかな?)、以前の認識率向上のための辞書を作ったり、写真を表示できるようにしたいと思ってます!
山場は超えたと思うので、なんとかやっていこうね・・・_(:3」 )L