python一週間でどこまでできるようになったか

taketoshi
記事: 222
登録日時: 14年前
住所: 日本国

python一週間でどこまでできるようになったか

投稿記事 by taketoshi » 4年前

お盆は今日まで。

一週間前に初めてpythonの書籍を手に取ったど素人が
音声認識に手を出して先だって作ったニュース配信アプリを制御する試みです。

ほかの言語でも音声認識に手を出したことがないので初めてこの技術に触ります。
音声認識ライブラリとサンプルプログラムを用いて簡単に実装できてしまうなんてpythonすげー。

さてマイクに向かって「前」とか「次」とかいうとニュースが切り替わっていきます
プログラム側が音声認識を待機しているタイミングで話しかけてやらないといけないのでタイミングが難しい
しかし言葉自体の識字率はものすごくよいです。

本名を話しかけたらきちんと漢字変換までしてくれて当ててくれました。すげぇ。

pythonという言語はライブラリが充実しているので最新技術に手軽に触れますね
言語自体は確かに初学者向けなのかなぁと思います。

しかしながら環境構築の難しさはトップクラスです。
IDLEは電卓の代わりにしかならずとてもプログラムは組めないし
IDEもデフォルトが英語のものが多い。
python3.7でインストールしたライブラリがpython3.8だと認識しなくて
再度インストールしないといけないのはなぜだろうか。VisualStudioだけか。

お盆も終わり時間が取れなくなるため趣味で作っているC#ソフトウェアの開発に戻りますが
pythonう少し触ってみようと思う言語でした。
*次はジュピターノートブック使ってpandaを使ってみよう
タイトルなし.png
タイトルなし.png (23.66 KiB) 閲覧数: 104 回

CODE:


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()

コメントはまだありません。