1. 程式人生 > >Python學習實踐 | speech智慧語音模組

Python學習實踐 | speech智慧語音模組

最近的生活、學習節奏很是容易被打斷,終於,在今天,既實習結束之後,夏令營也結束了。
前幾天,一個人在複習地很累的時候,又重新將Python撿了起來,看了挺多的知識點。 真是太有意(wu)思(liao)了!

環境準備

1️⃣ python2.*python3.*

2️⃣ 安裝pywin32擴充套件庫

3️⃣ 安裝speech模組

安裝Python 2/3

  • 安裝Python2還是Python3的選擇上,我個人是推薦兩個都裝上,在某些地方用的時候稍微多個切換環境變數的步驟而已。當然了,我覺得就目前Python3已經推出的時長來看,初學者的話,還是建議先選擇安裝Python2熟悉Python的一些語法結構定義,而且使用上應該較舒適一些吧。畢竟Python2推出的時間更久一些,遇到一些問題,可供搜尋的解決方案也豐富些;同時啊,目前仍讓存有部分模組功能無法適應Python3或是Python3.*的較高版本。
  • 具體安裝的的過程就不詳講了,不管哪個版本都幾乎大同小異,很容易上手也是Python的特性之一

PyCharm IDE

在眾多IDE中,最受大家追捧的一款便是PyCharm了,作為 JetBrains全家桶的一份子,這款軟體具備完善功能,如:除錯、語法高亮、專案管理、程式碼跳轉、智慧提示、自動完成,單元測試甚至版本控制等。另外,它還提供了一些很好的功能用於 Django 開發,同時支援 Google App Engine,更酷的是,PyCharm 支援 IronPython

IDEA系列主題下載地址:http://www.riaway.com/theme.php,這些主題支援的IDE包括:InteliJ IDEA, PhpStorm, PyCharm, RubyMine, WebStorm and AppCode。

注:怎麼安裝下載的主題

  1. 從主選單開啟你的編輯器選擇File->Import Setting ,選擇你下載的jar檔案;
  2. 等待重啟之後進行配置:開啟File->Settings->Editor->Colors and fonts,然後選擇你安裝的主題即可完成。

安裝pywin32擴充套件庫

pywin32即 Python for Windows Extensions,提供了Pyhton訪問和呼叫Windows底層功能函式的介面,pywin32包括了win32apiwin32comwin32guiwin32process等模組

這個要 根據Python版本(2.*/3.*)和CPU位數(32位/64位)下載相應版本並安裝

比如,像我這種情況,就需要安裝 pywin32-221.win-amd64-py3.7.exe

安裝speech模組

使用pip install speech命令即可安裝,但對於安裝了Python3的使用者來說,還需要針對Python3的一些新特性對安裝後的配置檔案做些修改

至於這裡的pip,它是Python包管理工具,該工具提供了對Python包的查詢、下載、安裝、解除安裝的功能;
同時,Python 2.7.9 +Python 3.4+ 以上版本都自帶pip工具,只要安裝的時候沒取消勾選那個選項,一般都不用再特別安裝了的,可以通過命令pip --version來判斷是否已安裝;
pip官網下載地址:https://pypi.org/project/pip/,注意,用哪個版本的 Python 執行安裝指令碼,pip 就被關聯到哪個版本;
值得注意的是,部分 Linux 發行版可直接用包管理器安裝 pip,如 Debian 和 Ubuntu:sudo apt-get install python-pip

pip常用相關指令

功能 指令
顯示版本和路徑 pip –version
獲取幫助 pip –help
升級 pip pip install -U pip
安裝最新版本包 pip install SomePackage
安裝指定版本 pip install SomePackage==1.0.4
最小版本 pip install ‘SomePackage>=1.0.4’
升級包 pip install –upgrade SomePackage
升級至指定的包 使用== 、 >=
解除安裝包 pip uninstall SomePackage
搜尋包 pip search SomePackage
顯示安裝包資訊 pip show
檢視指定包的詳細資訊 pip show -f SomePackage
列出已安裝的包 pip list
檢視可升級的包 pip list -o

注:如果上面那個 升級pip命令出現問題 ,可以使用以下命令:sudo easy_install --upgrade pip

Python3.*環境下正常使用speech的解決方法

安裝完speech模組後,需要去修改 speech.py檔案,該檔案路徑在..\Python37\Lib\site-packages

  1. line59 修改import thread,改成import threading
  2. line157 修改print prompt,改成print(prompt)
  3. 對最後的函式_ensure_event_thread修改如下:
class T(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
            pass

def _ensure_event_thread():
    """
    Make sure the eventthread is running, which checks the handlerqueue
    for new eventhandlers to create, and runs the message pump.
    """
    global _eventthread
    if not _eventthread:
        def loop():
            while _eventthread:
                pythoncom.PumpWaitingMessages()
                if _handlerqueue:
                    (context,listener,callback) = _handlerqueue.pop()
                    # Just creating a _ListenerCallback object makes events
                    # fire till listener loses reference to its grammar object
                    _ListenerCallback(context, listener, callback)
                time.sleep(.5)
        _eventthread = T()
        _eventthread.start()

智慧語音自動讀詞指令碼

前幾天,朋友分享給我一個關於計算機專業相關英語詞彙的檔案,接收之後一直放在電腦桌面上,也不知道有沒有用。

今天下午的時候,突然就想到可不可以將這些英語單詞用已有的Python語音擴充套件包去實現一種類似於”課堂聽寫”的自動(談不上智慧)模式。

具體的源程式下面也可以看到,整個的程式結構很簡陋,也沒花多少時間,相信理解起來也並不難。

值得說明的有這麼幾點:

  1. 提供的樣例單詞都是計算機專業相關的,如果你想換成別的單詞,只需要修改test.csv檔案即可。其中,test.csv檔案中共有兩列資料,分別代表英語詞彙與相應中文釋義,要想實現中英互譯的功能,只要去將這列的順序去對調一下即可。
  2. 和”課堂聽寫”模式相像,每次會相隔Interval_Time時間按行語音輸出詞彙兩次(聽寫的時候,一般老師會間隔著地讀2~3次),之後的話,每聽寫一小組詞彙(LOOP_NUM個),就會將它們一起展示出來(中英對照),也以便看看自己的”正確率”有多高。
  3. 既然談到這兒,就多聊一些關於音訊方面的內容,比如,如何使用Python播放mp3wavogg格式的音訊檔案
    4.1 呼叫系統預設播放器播放

    import time
    import os
    file = r'F:/Test/musicT/Hello.mp3'
    os.system(file)
    time.sleep(10)

    4.2 pygame 播放,但存在語速失真的不足,pygame提供了兩個載入音樂檔案的方法
    4.2.1 pygame.mixer.Sound,主要載入ogg和wav音訊檔案。
    4.2.2 pygame.mixer.music,主要載入mp3音訊檔案。

    import time
    import pygame
    file = r'F:/Test/musicT/Hello.mp3'
    pygame.mixer.init()
    track = pygame.mixer.music.load(file)
    pygame.mixer.music.play()
    time.sleep(10)
    pygame.mixer.music.stop()

    4.3 mp3play播放,語速正常,但貌似目前只能用於python2.*,不支援python3.*

    import time
    import mp3play
    
    def playmusic(path):
        clip = mp3play.load(path)
        clip.play()
        time.sleep(10)
        clip.stop()
    
    file = r'F:/Test/musicT/Hello.mp3'
    playmusic(file)
  4. 在程式設計過程中,有遇到了下面這種問題,針對這種情形的解決方案便是去任務管理下找到並結束智慧語音程序。

源程式

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/7/27 18:01
# @Author  : zhouie
# @File    : main.py
# @Software: PyCharm

import speech
import time
import csv

data = []  # 暫存 *.csv 檔案每行資料
Interval_Time = 4  # 兩次讀詞的間隔時間
LOOP_NUM = 8  # 迴圈基數
Think_Time = 15  # 回顧等待時間

csv_file = open('./res/test.csv', encoding='utf-8')
csv_reader_lines = csv.reader(csv_file)
# print(csv_reader_lines)

num = 0
for one_line in csv_reader_lines:
    data.append(one_line)
    num = num + 1

speech.say("計算機專業相關的英語單詞 中英互譯 測試小程式,demo版")
speech.say("This is a small routine (compiled by Python) for exercise about English phrases in the field of computer")

i = 0
while i < num:
    # print(i + 1, data[i][0])
    # speech.say(i + 1)
    # speech.say(data[i][0])
    # time.sleep(Interval_Time)
    # speech.say(data[i][0])
    if 0 == (i + 1) % LOOP_NUM:
        speech.say("來回顧一下 以上所學的幾個詞彙吧")
        speech.say("Just follow me , look back on the words you have learned...")
        print("!--#######--*--#######--!")
        print("第", int(i / LOOP_NUM) + 1, "組詞彙:")
        for j in range(i - (LOOP_NUM - 1), i + 1):
            print(data[j][0], data[j][1])
            speech.say(data[j][0])
            speech.say(data[j][1])
        print("!--#######--*--#######--!")
        speech.say("你的正確率如何呢?")
        speech.say("So , What about your correct rate?")
        time.sleep(Think_Time)
    i = i + 1

speech.say("Congratulation!")

效果展示