[Python]使用SpeechRecognition進行語音辨識

更新於 發佈於 閱讀時間約 10 分鐘

本文主要使用SpeechRecognition來做一個簡單的語音辨識,使用pyqt5介面呈現。

  1. 按下Start Recording,開始錄音,並顯示請開始說話。然後按鈕名改名Stop
  2. 在按下Stop Recording,稍等片刻後就會呈現出辨識結果​


raw-image

程式範例

import sys
import speech_recognition as sr
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTextEdit, QVBoxLayout
from PyQt5.QtCore import Qt
import threading

class AudioRecorder(QWidget):
def __init__(self):
super().__init__()

self.initUI()
self.recording = False
self.recognizer = sr.Recognizer()
self.audio = None
self.thread = None

def initUI(self):
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Audio Recorder')

layout = QVBoxLayout()

self.start_button = QPushButton('Start Recording')
self.start_button.clicked.connect(self.toggle_recording)
layout.addWidget(self.start_button)

self.text_area = QTextEdit()
self.text_area.setReadOnly(True)
layout.addWidget(self.text_area)

self.setLayout(layout)

def toggle_recording(self):
if self.recording:
self.stop_recording()
else:
self.start_recording()

def start_recording(self):
self.recording = True
self.start_button.setText('Stop Recording')
self.text_area.setText("請開始說話:")
self.thread = threading.Thread(target=self.record_audio)
self.thread.start()

def stop_recording(self):
self.recording = False
self.start_button.setText('Start Recording')
if self.thread:
self.thread.join()
self.recognize_audio()

def record_audio(self):
microphone = sr.Microphone()

with microphone as source:
self.recognizer.adjust_for_ambient_noise(source)
self.audio = self.recognizer.listen(source)

def recognize_audio(self):
try:
text = self.recognizer.recognize_google(self.audio, language='zh-tw')
self.text_area.setText(text)
except sr.UnknownValueError:
self.text_area.setText("無法辨識音訊")
except sr.RequestError as e:
self.text_area.setText(f"無法連接到Google服務;{e}")

def closeEvent(self, event):
if self.recording:
self.stop_recording()
event.accept()

if __name__ == '__main__':
app = QApplication(sys.argv)
ex = AudioRecorder()
ex.show()
sys.exit(app.exec_())

程式碼重點說明

定義 AudioRecorder 類別

class AudioRecorder(QWidget):
def __init__(self):
super().__init__()

self.initUI()
self.recording = False
self.recognizer = sr.Recognizer()
self.audio = None
self.thread = None
  • __init__ 方法:初始化類別。這裡設置了一些初始狀態,如錄音狀態、語音辨識器和音頻數據。

錄音和停止錄音的邏輯

    def toggle_recording(self):
if self.recording:
self.stop_recording()
else:
self.start_recording()

def start_recording(self):
self.recording = True
self.start_button.setText('Stop Recording')
self.text_area.setText("請開始說話:")
self.thread = threading.Thread(target=self.record_audio)
self.thread.start()

def stop_recording(self):
self.recording = False
self.start_button.setText('Start Recording')
if self.thread:
self.thread.join()
self.recognize_audio()
  • toggle_recording :根據當前錄音狀態切換開始或停止錄音。
  • start_recording :開始錄音,將按鈕文本設為 "Stop Recording",並啟動新執行緒來錄製音頻。
  • stop_recording :停止錄音,將按鈕文本設為 "Start Recording",並在執行緒結束後進行語音辨識。

錄製音頻和語音辨識

    def record_audio(self):
microphone = sr.Microphone()

with microphone as source:
self.recognizer.adjust_for_ambient_noise(source)
self.audio = self.recognizer.listen(source)

def recognize_audio(self):
try:
text = self.recognizer.recognize_google(self.audio, language='zh-tw')
self.text_area.setText(text)
except sr.UnknownValueError:
self.text_area.setText("無法辨識音訊")
except sr.RequestError as e:
self.text_area.setText(f"無法連接到Google服務;{e}")
  • record_audio :使用 speech_recognition 庫來錄製音頻。這裡使用了 Microphone 來捕捉音頻,並調整麥克風的背景噪音。
  • recognize_audio :使用 Google 語音辨識服務將錄製的音頻轉換為文字,並顯示在文本區域。如果辨識失敗,則顯示錯誤信息。

視窗關閉事件

    def closeEvent(self, event):
if self.recording:
self.stop_recording()
event.accept()
  • closeEvent 方法:在關閉窗口時,如果仍在錄音,則停止錄音,然後接受關閉事件。










avatar-img
128會員
217內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
平時都在用tesseract來辨識OCR的部分,在網路上也常常聽說easyOCR比tesseract好用,就拿之前測試的OCR素材來比較看看囉。 以下輸入同樣圖片直接測試,並非絕對誰就比較準,只單純測試數字含英文的部分。 圖片素材就是15碼(英文加數字),檔名為OCR正確結果
本文將展示使用不同激活函數(ReLU 和 Sigmoid)的效果。 一個簡單的多層感知器(MLP)模型來對 Fashion-MNIST 資料集進行分類。 函數定義 Sigmoid 函數 Sigmoid 函數將輸入壓縮到 0到 1 之間: 特性: 輸出範圍是 (0,1)(0, 1)(0,1
本文主要介紹神經網路訓練辨識的過程,利用fashion_mnist及簡單的神經網路來進行分類。 使用只有兩層的神經網路來訓練辨識fashion_mnist資料。
本文主要應用deepface的正面(frontal)人臉檢測的預設模型,使用analyze 函數,用於分析一張人臉圖像的情感(emotion)。 在Colab上實現,若用其他平台需稍微修改程式碼。 Deepface Deepface是一個輕量級的Python人臉辨識和臉部屬性分析
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
微調(Fine tune)是深度學習中遷移學習的一種方法,其中預訓練模型的權重會在新數據上進行訓練。 本文主要介紹如何使用新的訓練圖檔在tesseract 辨識模型進行Fine tune 有關於安裝的部分可以參考友人的其他文章 Tesseract OCR - 繁體中文【安裝篇】 將所有資料
平時都在用tesseract來辨識OCR的部分,在網路上也常常聽說easyOCR比tesseract好用,就拿之前測試的OCR素材來比較看看囉。 以下輸入同樣圖片直接測試,並非絕對誰就比較準,只單純測試數字含英文的部分。 圖片素材就是15碼(英文加數字),檔名為OCR正確結果
本文將展示使用不同激活函數(ReLU 和 Sigmoid)的效果。 一個簡單的多層感知器(MLP)模型來對 Fashion-MNIST 資料集進行分類。 函數定義 Sigmoid 函數 Sigmoid 函數將輸入壓縮到 0到 1 之間: 特性: 輸出範圍是 (0,1)(0, 1)(0,1
本文主要介紹神經網路訓練辨識的過程,利用fashion_mnist及簡單的神經網路來進行分類。 使用只有兩層的神經網路來訓練辨識fashion_mnist資料。
本文主要應用deepface的正面(frontal)人臉檢測的預設模型,使用analyze 函數,用於分析一張人臉圖像的情感(emotion)。 在Colab上實現,若用其他平台需稍微修改程式碼。 Deepface Deepface是一個輕量級的Python人臉辨識和臉部屬性分析
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
我們前面幾篇已經講完TTS技術的一大半架構了,知道了如何將聲學特徵重建回音訊波形,也從中可以知道要是聲學特徵不完善,最終取得的結果也會不自然,剩下要探討該如何將文字轉換成聲學特徵,且能夠自然地表現停頓及細節變化,讓我們開始吧。
Thumbnail
還記得我們之前介紹過「【Google Colab Python系列】 初探Whisper: 來一段Youtube影片進行語音辨識吧!」這套語音辨識引擎, 那為什麼我們又要教這一套? 因為我們也可以將whisper的模型轉換成onnx的格式, 輕鬆移植到各種平台, 且效能更佳。 語音辨識的熱門組件之
Thumbnail
  我們在語音初探篇提到TTS的流程可以分成三個部分 :輸入前處理、預測音訊特徵、語音重建,其中輸入前處理的部分上兩篇已經處理完,在進入預測音訊特徵前,讓我們先來理解最後的語音重建部分。
Thumbnail
上篇我們簡單的了解了 TTS 想要達到的目標,但是對於訓練資料的處理、網路架構、損失函數、輸出分析等考慮到篇幅尚未解釋清楚,這篇將針對訓練資料處理中的文字部分進行詳細說明,讓我們開始吧。
Thumbnail
  在 AI 應用中,圖像、語音、文字三種可以說是主要應用,其中我一直以來都是專注於圖像上的研究,對於另兩種僅止於淺嚐,接下來就往音訊上研究看看,先從入門級的Text-To-Speech (TTL) 入場並一個個嘗試其他類型的應用,那麼,就讓我們開始吧。
Thumbnail
免費文字轉語音(Free text to speech)免費的線上語音合成工具,使用微軟 AI 語音庫生成仿真人語音,支援 129 種語言,提供三百多種聲音,輸入文本即可線上聆聽和下載 MP3 檔案。
Thumbnail
當我們在進行「語音辨識」的應用開發時, 首先會面臨一個問題, 那就是究竟要怎麼知道哪些段落是「人在說話的區段」, 精確的標示出這些區段之後, 我們除了可以儲存成純對話的段落, 還可以做出時間軸的字幕檔, 應用非常廣泛, 因此學會怎麼用VAD是進入語音領域非常重要的其中一個環節。 VAD代表
Thumbnail
本文介紹如何設置OpenAI API密鑰並使用Whisper API轉寫音訊檔案。文章詳細說明了轉寫單個音訊檔案,以及將長音訊分割並轉寫的過程。透過範例演示,讀者可以學習如何將音訊轉寫為文字,提高工作效率。
Thumbnail
torchaudio 是 PyTorch 的官方音訊處理庫,提供了許多用於音訊數據讀取、轉換和處理的工具和功能。它旨在簡化音訊數據的加載、預處理和後續處理過程,同時與 PyTorch 緊密整合, 包括我們常常用於資料科學處理的Tensor資料。 這個篇章主要在分享我們如何使用標準的I/O進行讀
Thumbnail
ChatGPT最近更新了語音對話功能,同時推出了附屬功能Read out loud,讓對話更方便。使用者可以立刻知道英文單字的讀音和例句唸法,加上十秒重播功能,非常實用。
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
我們前面幾篇已經講完TTS技術的一大半架構了,知道了如何將聲學特徵重建回音訊波形,也從中可以知道要是聲學特徵不完善,最終取得的結果也會不自然,剩下要探討該如何將文字轉換成聲學特徵,且能夠自然地表現停頓及細節變化,讓我們開始吧。
Thumbnail
還記得我們之前介紹過「【Google Colab Python系列】 初探Whisper: 來一段Youtube影片進行語音辨識吧!」這套語音辨識引擎, 那為什麼我們又要教這一套? 因為我們也可以將whisper的模型轉換成onnx的格式, 輕鬆移植到各種平台, 且效能更佳。 語音辨識的熱門組件之
Thumbnail
  我們在語音初探篇提到TTS的流程可以分成三個部分 :輸入前處理、預測音訊特徵、語音重建,其中輸入前處理的部分上兩篇已經處理完,在進入預測音訊特徵前,讓我們先來理解最後的語音重建部分。
Thumbnail
上篇我們簡單的了解了 TTS 想要達到的目標,但是對於訓練資料的處理、網路架構、損失函數、輸出分析等考慮到篇幅尚未解釋清楚,這篇將針對訓練資料處理中的文字部分進行詳細說明,讓我們開始吧。
Thumbnail
  在 AI 應用中,圖像、語音、文字三種可以說是主要應用,其中我一直以來都是專注於圖像上的研究,對於另兩種僅止於淺嚐,接下來就往音訊上研究看看,先從入門級的Text-To-Speech (TTL) 入場並一個個嘗試其他類型的應用,那麼,就讓我們開始吧。
Thumbnail
免費文字轉語音(Free text to speech)免費的線上語音合成工具,使用微軟 AI 語音庫生成仿真人語音,支援 129 種語言,提供三百多種聲音,輸入文本即可線上聆聽和下載 MP3 檔案。
Thumbnail
當我們在進行「語音辨識」的應用開發時, 首先會面臨一個問題, 那就是究竟要怎麼知道哪些段落是「人在說話的區段」, 精確的標示出這些區段之後, 我們除了可以儲存成純對話的段落, 還可以做出時間軸的字幕檔, 應用非常廣泛, 因此學會怎麼用VAD是進入語音領域非常重要的其中一個環節。 VAD代表
Thumbnail
本文介紹如何設置OpenAI API密鑰並使用Whisper API轉寫音訊檔案。文章詳細說明了轉寫單個音訊檔案,以及將長音訊分割並轉寫的過程。透過範例演示,讀者可以學習如何將音訊轉寫為文字,提高工作效率。
Thumbnail
torchaudio 是 PyTorch 的官方音訊處理庫,提供了許多用於音訊數據讀取、轉換和處理的工具和功能。它旨在簡化音訊數據的加載、預處理和後續處理過程,同時與 PyTorch 緊密整合, 包括我們常常用於資料科學處理的Tensor資料。 這個篇章主要在分享我們如何使用標準的I/O進行讀
Thumbnail
ChatGPT最近更新了語音對話功能,同時推出了附屬功能Read out loud,讓對話更方便。使用者可以立刻知道英文單字的讀音和例句唸法,加上十秒重播功能,非常實用。