Luceneによる動画検索システム の変更点
Top / Luceneによる動画検索システム
- 追加された行はこの色です。
- 削除された行はこの色です。
- Luceneによる動画検索システム へ行く。
- Luceneによる動画検索システム の差分を削除
#access #analog *講演音声検索システムの開発 [#y8668a8d] -CSJの講演音声の音声認識を行い、キーワード検索を行なうことのできるウェブアプリケーションを開発します((2009前期 菊池研B3実習課題))。 --音声認識は Julius を使用 --キーワード検索は Lucene を使用 --ウェブアプリサーバには tomcat を使用 ***Juliusのインストール [#g30b1c09] -[[JuliusとJulian]] を参考に、[[Linux版Juliusのバイナリファイル:http://sourceforge.jp/projects/julius/downloads/37582/julius-4.1.2-linuxbin.tar.gz]] と [[ディクテーション実行キット:http://sourceforge.jp/projects/julius/downloads/28977/dictation-kit-v3.2.tar.gz]] をダウンロードして、julius/ ディレクトリ以下に解凍します。 -&pgid(,JuliusとJulian/音響モデルと言語モデルを差し替える); を参考に、Juliusの言語・音響モデルをCSJのものに差し替えておきます。 ***動画(wmv)ファイルから音声を抽出してwavファイルを作り、検索対象にする場合 [#k68c1d0c] ※ 今回は shower の /home/CSJ/disc03/ にある講演の WAV ファイルを認識させるので、以下は行いません。 -[[ここ:http://www.pnkx.com/wp/?p=132]] を参考に... mplayer WMVファイル -vo yuv4mpeg -ao pcm --audiodump.wav が取り出した音声ファイル。 ***音声認識を実行する [#r5f47040] -julius の設定ファイルを書き換えます。 emacs julius/dictation-kit-v3.2/fast.jconf --222行目を「-input rawfile # 音声波形データファイル(フォーマット自動判別)」に変更 --226行目を「#-input mic # マイクから直接入力」に変更 --232行目を「-filelist filename # 認識対象ファイルのリスト」に変更 --273行目を「-smpFreq 16000 # サンプリング周波数(Hz)」に変更 -認識対象のWAVファイルのリストを作ります。 --[[SearchWavJulius.java:http://shower.human.waseda.ac.jp/~m-kouki/pg_public/lucene/SearchWavJulius.java.txt]] を実行 $ java SearchWavJulius /home/CSJ/disc03 result1 searchWavJulius.sh /home/m-kouki/julius/julius-4.1.2-linuxbin/bin/julius-4.1.2 /home/m-kouki/julius/dictation-kit-v3.2/fast.jconf --ディレクトリ result1 内に、ファイルリスト (ファイル名).eval.list ができます((一括してひとつのファイルリストに書き出した場合、後述する -cutsilence オプションをつけても認識エラーが出るWAVファイルがあり、そこでJuliusの処理が止まってしまうので、1音声=1ファイルで別々に認識を実行することにしました))。 --認識実行用シェルスクリプト searchWavJulius.sh ができます。 -認識してみる --Juliusのデフォルトでは1ファイル=1発話として扱うため、長い講演を最後まで認識できないので、 -cutsilence オプションをつけます(M君のレポートより、[[参考:http://julius.sourceforge.jp/juliusbook/ja/desc_adin.html#id2528030]]) $ chmod 777 /home/m-kouki/julius/julius-4.1.2-linuxbin/bin/* $ sh searchWavJulius.sh -認識結果を解析して、各音声ファイルごとに分ける --[[editResult.java:http://shower.human.waseda.ac.jp/~m-kouki/pg_public/lucene/editResult.java.txt]] を実行 $ java editResult result2 result1 .ofj log_editResult.txt ---result2 ディレクトリ内に認識結果のtxtファイルができます。 ---テキストファイルは Shift-JIS で書き出されます((SHIFT-JIS以外の文字コードでは検索に失敗するようです(参考:[[Lucene-ja:http://www.f.waseda.jp/kikuchi/tips/Lucene-ja.html]])))。 -認識失敗ファイルを削除する --0バイトのファイルは、luceneでインデックスを作るときにエラーになるので、ここで削除しておきます。 $ find result2 -size -1k -exec rm {} \; ---参考:[[ファイルサイズで検索:http://www.atmarkit.co.jp/flinux/rensai/linuxtips/039expsearch.html]] [[rmの指定方法:http://x68000.q-e-d.net/~68user/unix/pickup?find]] ***Tomcatのインストール [#o0a9443c] -[[tomcat導入メモ:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki/index.php?tomcat%E5%B0%8E%E5%85%A5%E3%83%A1%E3%83%A2]] を参照(([[Think IT 第4回 TomcatをLinuxへインストールしよう!:http://www.thinkit.co.jp/free/article/0708/2/4/]] による)) -[[tomcat導入メモ]] を参照 --上を参考にして、環境変数 $CATALINA_HOME(tomcatインストールディレクトリ)、クラスパスの設定まですませておきます。 ***Luceneのインストール [#sb44acc9] -[[Lucene導入メモ]] を参照 --上を参考にして、環境変数、クラスパスの設定まですませておきます。 -インデックスを作る $ sh $LUCENE_HOME/bin/mktextindex.sh -create -index result2 result3 --result3 ディレクトリ内にインデックスファイルができます。 ***Webアプリとして実装 [#cac802a5] -参考:[[卒論要旨検索システムの開発(2008年度ウェブ検索実習課題):http://www.f.waseda.jp/kikuchi/ThesisSearch2008.htm]] [[Lucene-ja:http://www.f.waseda.jp/kikuchi/tips/Lucene-ja.html]] [[講義音声検索システムの開発:http://bryan.human.waseda.ac.jp/~kikuchi/cgi-bin/pukiwiki/pukiwiki.php?%B9%D6%B5%C1%B2%BB%C0%BC%B8%A1%BA%F7%A5%B7%A5%B9%A5%C6%A5%E0%A4%CE%B3%AB%C8%AF]] --上記を参考にして、lucene-jaディレクトリにあるwebappディレクトリ以下をtomcatのwebappsディレクトリ以下にコピーします。 $ mkdir $CATALINA_HOME/webapps/lucene-ja $ cp -r $LUCENE_HOME/webapp/* $CATALINA_HOME/webapps/lucene-ja --tomcatを再起動 $ sh $CATALINA_HOME/bin/shutdown.sh $ sh $CATALINA_HOME/bin/startup.sh --[[http://shower.human.waseda.ac.jp:8080/lucene-ja/:http://shower.human.waseda.ac.jp:8080/lucene-ja/]] にアクセス ---「ようこそLuceneのテンプレートアプリケーションへ。 (これはヘッダです)」のページが出ることを確認します。 -テストページのメッセージに従って、各種ファイルの設定を変更する --lucene-ja設定ファイル $ emacs $CATALINA_HOME/webapps/lucene-ja/configuration.jsp ---configuration.jsp の以下を修正 /* indexLocationにIndexJHTMLで作成したインデックスを指定して下さい */ String indexLocation = "(インデックス出力先)"; /* senHome に Senをインストールしたディレクトリを指定し、そのディレクトリのdicディレクトリに辞書を作成済かどうか確認して下さい*/ String senHome = "(SENのディレクトリ)"; ---(インデックス出力先) は result3 を指定 ---(SENのインストールディレクトリ) は $SEN_HOME に入っているものと同じ値を直接記述します。 --tomcat設定ファイル server.xml $ emacs $CATALINA_HOME/conf/server.xml ---94行目に以下の属性を追記 <Connector port="8080" useBodyEncodingForURI="true" --tomcat設定ファイル catalina.sh $ emacs $CATALINA_HOME/bin/catalina.sh ---166行目 を以下に修正(参考:[[Lucene-ja:http://www.f.waseda.jp/kikuchi/tips/Lucene-ja.html]]) JAVA_OPTS="$JAVA_OPTS "-Dsen.home=(SENのディレクトリ)" "-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" "-Djava.util.logging.config.file="$CATALINA_BASE/conf/logging.properties" --http://shower.human.waseda.ac.jp:8080/lucene-ja/ で確認 ---「検索」ボタンを押して、エラーメッセージが出ないことを確認します。 ---ヒットはしているようですが、IndexSearcher.search の urlフィールド、titleフィールドの中身がないので((これらの情報は mkhtmlindex.sh で作成したインデックスにのみ付加されているようです))、何も表示されません。 -フィールドの情報を書き換える --$CATALINA_HOME/webapps/lucene-ja/results.jsp の 121 行目 String url = doc.get("url"); //urlフィールドを取得 String doctitle = doc.get("title"); //タイトルを取得 の部分は、mktextindex.sh でインデックスを作った場合、該当するフィールドがないため null が入ります。 --lucene-ja ディレクトリにある lucene-ja-src.jar を解凍してソースファイルを確認すると、 $ jar xvf lucene-ja-src.jar ---SearchJFiles.java の 103行目 Document doc = hits.doc(i); String path = doc.get("path"); if (path != null) { System.out.println(i + ". " + path + "\tcharset=" + doc.get("charset")); のところが、mktextindex.sh で作られたインデックスの分析結果の出力部分。 ---したがって path フィールドと charset フィールドに値が入っていることが分かります。 --そこで、$CATALINA_HOME/webapps/lucene-ja/results.jsp の以下を書き換えます。 emacs $CATALINA_HOME/webapps/lucene-ja/results.jsp ---109行目以降 <td>パス</td> <td>文字コード</td> ---121行目以降 String path = doc.get("path"); //pathフィールドを取得 String charset = doc.get("charset"); //charsetを取得 if(path!=null){ %> <tr> <td><%=path%></td> <td><%=charset%></td> </tr> <% --Luceneを再起動 $ sh $CATALINA_HOME/bin/shutdown.sh $ sh $CATALINA_HOME/bin/startup.sh --[[http://shower.human.waseda.ac.jp:8080/lucene-ja/ :http://shower.human.waseda.ac.jp:8080/lucene-ja/]] にアクセス ---無事、検索結果が表示されました! #ref(lucene1.jpg) --確認したらシャットダウンしておく $ sh $CATALINA_HOME/bin/shutdown.sh ***カスタマイズ [#r3a05a11] -画面のデザインを変えたい場合は、$CATALINA_HOME/webapps/lucene-ja/ 以下の JSPファイル(java埋め込みhtmlファイル)を編集します。 -検索結果を変えたい場合は、$LUCENE_HOME/lucene-ja-src.jar を解凍してできる org/apache/lucene/demo 以下にある SearchJFiles.java や IndexJFiles.java を編集します。 -もしくは results.jsp の中に「パスで指定されたファイルを読み込んで、クエリと照らし合わせて[[スニペット:http://d.hatena.ne.jp/keyword/%A5%B9%A5%CB%A5%DA%A5%C3%A5%C8]]を生成する」プログラムを書いてもいいかもしれません。 --'''[[修正版results.jsp:http://shower.human.waseda.ac.jp/~m-kouki/pg/lucene/results.jsp.html]]'''(赤字の部分が追記した場所) ---ヒットしたテキストファイルをhtmlに変換してリンクを表示します。