« 理不尽 | トップページ | 珍しい »

2023年3月 8日 (水)

たったこれだけで

晴れてはいたけれど、空は霞んでいた。

どうやら、PM2.5の影響のようだ。

気温は、18.8度と、かなり高くなった。

 

AIサービスで、Bing Search(Bing AIチャット)とPerplexity AIで、基本こと足りているけれど、ChatGPTがAPIを公開したということで、興味を持った。
(Perplexity AIの返答がやけに速くなったと思ったら、ChatGPT APIに切り替えたのだそうだ。)

これを使えば、何年も前にインストールして使った、Windows上でのGoogle Assistantと同じようなことが出来るのでは?と思った。

文字入力だけではなく、音声入力をし、返答を文字出力、音声出力させられる。

基本的には、Pythonを使ってコーディングするのがいいらしい。

でも、Pythonは、今まで触ったことがなかった。
Google Assistantの時は、インストールと設定作業だったからね。

Bing Searchの初期の頃の長編チャットが出来た時、Pythonについて会話したんだよね。

その時に、あらかたの概要を聞いていたので、それが今回役に立った。

Pythonには、if文やfor文の時の{}のような閉じる処理がない。
その代わり、スペース4つを使って、インデントするのだそうだ。

あの時の会話がなかったら、きっと、わからないことだらけだったことだろう。

まずは、音声入力、テキスト入力、テキスト出力、音声出力のPythonを作ろうと思って、Bing SearchやPerplexity AIの力を借りて作ってみた。

以前であれば、ネットで検索して、あちこち探していたけれど、これらAIを使えば、あっという間にコーディングしてくれるから、めっちゃ便利!
本当にすごい時代になった。

手直ししながら、出来たものを動かしたけれど、どういう訳か、音声入力が出来ない。(泣)

設定やらの問題ではないと思う。
現に、他のソフトウェアでは、音声入力は問題ないから。

Pythonのマイク入力のパラメータを変更して、PC本体のマイクは問題ないのだけれど、USB DACに接続している、使いたいマイクがダメ。

Google Assistantの時は問題なかったのになぁ...

そういう状態になったため、ChatGPT導入は断念、というか、気が萎えてしまったのである。(苦笑)

その代わり、ふと思ったことがあった。

ChatGPT API公開時、Whisperなるものも使える、ということを。

Whisperは、音声データをテキスト出力してくれるAI。

試しにやってみるか、と思って、取り掛かった。

もちろん、Bing Searchのお世話になることに。

が、これが出してきた情報はダメだったので、Perplexity AIの方で確認すると、こちらの方が正確だった。

但し、注意事項が。

GitHub - openai/whisper: Robust Speech Recognition via Large-Scale Weak Supervision

で公開されているものは、Pythonのバージョンが「3.10.X」以下でないとダメらしい。

インストールしたPythonは、「3.11.2」。

これだと、インストール時にエラーになったので、仕方なしに、「3.10.10」もインストールして、そちらで、Gitのコマンドは導入していなかったので、

「pip install -U openai-whisper」

を実行して、無事インストール出来た。

Gitを入れているなら、直接、GitHubから導入も出来る。

処理時間を計測する処理を入れているので、行数は増えているけれど、Whisperで必要な処理は、たったの「7行」!

たったこれだけで、音声をテキスト出力してくれるのである!
まぁ、ライブラリの恩恵なんだけれど。(苦笑)

import datetime
import whisper
start = datetime.datetime.now()
model = whisper.load_model("base")
result = model.transcribe(infile.opus, verbose=True, fp16=False, language="ja")
file = open(outfile.txt, "w")
for i in result['segments']:
    file.write(f"{i['start']}" + "\t" + f"{i['end']}" + "\t" + f"{i['text']}" + "\n")
end = datetime.datetime.now()
elapsed_time = end - start
file.write("\n" + "\n" + f"処理時間: {elapsed_time}秒")
print("\n" + "\n" + f"処理時間: {elapsed_time}秒")
file.close()

「infile.opus」が、音声ファイル、「outfile.txt」が、出力するファイル。
これらを、希望のものにしよう。
別の場所にあるなら、フルパスで書く。
OPUSでも読み取ってくれるのだから、ほとんどの音声ファイルに対応しているのではないだろうか?

タブで区切りをしているので、拡張子を「csv」にして、Excelで開いて、出力結果の見直しを掛けてもいいだろう。
区切り文字や拡張子は、お好みで。

処理中、リアルタイムで、テキスト化される様子が見られる。

左側が、そのテキストの再生されている時間、右側が、テキスト。

テキスト化されたものをみて、ちょっと感動である。

何度も言うけれど、すごい時代になったものだ。

 

「whisper.load_model("base")」について。

このパラメータを変更することによって、認識の精度が変わるようだ。

「large」「medium」「small」「base」「tiny」とかがある。

一般用途では、「base」で十分のようで、より精度を高めたいなら、左側のパラメータを使えばいい。

但し、初期実行時に、「Whisperのモデルファイルと、音声認識に必要なライブラリやツール」をダウンロードするよう。

そのファイル、どこにあるの?と思って、「AppData」とかを探してみたけれど、そこにはなく、「C:\Users\ACCOUNT\.cache\whisper」にあった。

もし、不要なら、この下を覗いて、削除するといい。

それぞれのパラメータがダウンロードしたファイルのサイズは、大雑把に書くと、large=3GB, small=480MB, base=150MB, tiny=80MBであった。
この中に、色んな情報が詰まっているらしい。

変換精度に関して言うと、音源次第だと思うけれど、完全ではなかった。

が、small、base、tinyで試した結果、左に行くほど、精度が上がっていたのは確かだ。

その代わり、変換に時間は掛かるけれど。
この変換速度は、CPU次第だろうから、最新のCPUであれば、それなりに速いのではないだろうか?

どうせ見直しはしないといけないのだから、バランスを考えると、「base」で変換するのがよさそう。

現時点では、自分にはこういう作業はないけれど、何かのために、この仕組みを作ることが出来てよかったと思う。

 

あと、調べていて、そんなに前からあったの?というAIサービス。

同じく、OpenAIが、数年前から、プログラミング言語に特化したAIサービスを提供していたのだそうだ。
(OpenAIって、立ち上げ時に、イーロン・マスクが関わっていたんだってね。へー、と思った。)

OpenAI Codexというもの。

Pythonが得意らしく、他には、C#、JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL、Shell等があるそうだ。
VB.NETがないのは残念。
まぁ、終わりの言語だから、仕方ないか。(苦笑)

このサービスのすごいところは、喋り言葉で、こういう処理、と条件を出すと、それに沿ってコーディングしてくれるところ。
90年代に夢見ていたことが、まさしく、ここに実現している!
まだ使ってはいないけれど、本当にすごい!

プログラマーなら、ここは必須なのではないだろうか?

と、去年末あたりから、急速にAI関連が盛り上がっていて、とても面白い。

珍しく、Googleは乗り遅れているし、最近、AIに関しては音沙汰がないけれど、どう出るか?

自分に関しては、ChatGPT API、どうするか、だな。

|

« 理不尽 | トップページ | 珍しい »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 理不尽 | トップページ | 珍しい »