一週間前に初めてpythonの書籍を手に取ったど素人が
音声認識に手を出して先だって作ったニュース配信アプリを制御する試みです。
ほかの言語でも音声認識に手を出したことがないので初めてこの技術に触ります。
音声認識ライブラリとサンプルプログラムを用いて簡単に実装できてしまうなんてpythonすげー。
さてマイクに向かって「前」とか「次」とかいうとニュースが切り替わっていきます
プログラム側が音声認識を待機しているタイミングで話しかけてやらないといけないのでタイミングが難しい
しかし言葉自体の識字率はものすごくよいです。
本名を話しかけたらきちんと漢字変換までしてくれて当ててくれました。すげぇ。
pythonという言語はライブラリが充実しているので最新技術に手軽に触れますね
言語自体は確かに初学者向けなのかなぁと思います。
しかしながら環境構築の難しさはトップクラスです。
IDLEは電卓の代わりにしかならずとてもプログラムは組めないし
IDEもデフォルトが英語のものが多い。
python3.7でインストールしたライブラリがpython3.8だと認識しなくて
再度インストールしないといけないのはなぜだろうか。VisualStudioだけか。
お盆も終わり時間が取れなくなるため趣味で作っているC#ソフトウェアの開発に戻りますが
pythonう少し触ってみようと思う言語でした。
*次はジュピターノートブック使ってpandaを使ってみよう
import feedparser
import tkinter
import threading
#音声認識
import speech_recognition as sr
#変数宣言
datalist = []
timer = 0
Max = 0
#読み込み先定義
RSS_URL = 'https://www3.nhk.or.jp/rss/news/cat1.xml'
#データを格納する構造体
#一件の記事につき一つのクラスを生成するよー
class data_struct:
def __init__(self,argsnumber,argstitle,argssummary):
self.data_number = argsnumber #記事番号
self.data_title = argstitle #記事タイトル
self.data_summary = argssummary #記事本文
#タイマー関数
def Repeat():
global timer
if len(datalist)-1 == timer:
timer = 0
timer += 1
l_title["text"] = datalist[timer].data_title
l_summary["text"] = datalist[timer].data_summary
root.after(100000,Repeat)
#TKinter表示スレッド
def main():
global l_title
global l_summary
global root
#xmlデータを取得
data = feedparser.parse(RSS_URL)
#構造体データ格納
count = 0
for entry in data.entries:
datalist.append(data_struct(count,entry.title,entry.summary))
count += 1
#記事の最大値を取得
global Max
Max = len(datalist)
#メインウインドウ作成
root = tkinter.Tk()
#root.attributes('-fullscreen',True)
root.configure(bg='black')
#タイトルラベルと記事の内容
l_title = tkinter.Label(root)
l_summary= tkinter.Label(root)
#メインウインドウの設定
root.after(0,Repeat())
l_title.pack()
l_summary.pack()
root.mainloop()
#音声認識スレッド
def sub():
r = sr.Recognizer()
mic = sr.Microphone()
global timer
global l_title
global l_summary
while True:
print("入力受付中-----")
with mic as source:
r.adjust_for_ambient_noise(source)
audio = r.listen(source)
try:
if r.recognize_google(audio,language='ja-JP') == "次":
l_title["text"] = datalist[timer].data_title
l_summary["text"] = datalist[timer].data_summary
timer+=1
print("認識文字:" + r.recognize_google(audio,language='ja-JP'))
print("ニュースを進めます 記事番号",timer,)
if r.recognize_google(audio,language='ja-JP') == "前":
if timer == 0:
timer = len(datalist) - 1
else:
timer-=1
l_title["text"] = datalist[timer].data_title
l_summary["text"] = datalist[timer].data_summary
print("認識文字:" + r.recognize_google(audio,language='ja-JP'))
print("ニュースを戻します 記事番号",timer)
if r.recognize_google(audio, language='ja-JP') == "ストップ" :
print("end")
break
except sr.UnknownValueError:
print("could not understand audio")
#マルチスレッドスタート
thread_1 = threading.Thread(target=main)
thread_2 = threading.Thread(target=sub)
thread_1.start()
thread_2.start()