PythonのAI音声処理の基礎

こんにちは、Python Symphonyの管理人です。今回は、Pythonを使ったAI音声処理について基礎から学んでいきましょう。

1. 音声データの取得と分析

音声データを扱うには、まずそのデータを取得する必要があります。音声データの取得には、Pythonのライブラリであるpyaudioを使用するのが一般的です。

import pyaudio
import wave

chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=chunk)

print("録音開始")

frames = []

for i in range(0, int(RATE / chunk * RECORD_SECONDS)):
    data = stream.read(chunk)
    frames.append(data)

print("録音終了")

stream.stop_stream()
stream.close()
p.terminate()

wf = wave.open("output.wav", 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

このコードでは、pyaudioを使って5秒間の音声データを取得し、output.wavというファイル名で保存しています。取得した音声データを分析するには、PythonのライブラリであるLibrosaを使用します。

import librosa

# 音声データの読み込み
data, sr = librosa.load("output.wav")

# スペクトログラムの作成
spec = librosa.stft(data)

# スペクトログラムの表示
import matplotlib.pyplot as plt
import librosa.display

plt.figure(figsize=(10, 4))
librosa.display.specshow(librosa.amplitude_to_db(abs(spec), ref=np.max), y_axis='log', x_axis='time')
plt.colorbar(format='%+2.0f dB')
plt.title('Spectrogram')
plt.tight_layout()
plt.show()

このコードでは、取得した音声データを読み込み、スペクトログラムを作成しています。スペクトログラムとは、周波数成分と時間成分を表したグラフであり、音声データの特徴を可視化することができます。

2. 音声データの前処理

音声データを分析する前に、データの前処理を行う必要があります。前処理には、データの正規化やノイズ除去などが含まれます。

import numpy as np
from sklearn import preprocessing

# データの正規化
data = preprocessing.normalize(data)

# ノイズ除去
from scipy.signal import wiener

data = wiener(data)

このコードではデータの正規化とノイズ除去を行っています。正規化には、sklearnのpreprocessingライブラリを使用し、データの値を0から1の範囲に変換しています。ノイズ除去には、scipyのsignalライブラリを使用し、Wienerフィルターを適用しています。

3. 音声認識

音声認識は、音声データから文字列を抽出する処理です。Python音声認識を行うには、Google Cloud Speech-to-Text APIを使用するのが一般的です。以下のコードでは、Google Cloud Speech-to-Text APIを使用して音声認識を行っています。

pythonCopy code
import io
import os
from google.cloud import speech

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "credentials.json"

client = speech.SpeechClient()

with io.open("output.wav", "rb") as audio_file:
    content = audio_file.read()
    audio = speech.RecognitionAudio(content=content)

config = speech.RecognitionConfig(
    encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=sr,
    language_code="ja-JP",
)

response = client.recognize(config=config, audio=audio)

for result in response.results:
    print("認識結果: {}".format(result.alternatives[0].transcript))

このコードでは、Google Cloud Speech-to-Text APIを使用して音声認識を行っています。Google Cloud Speech-to-Text APIを使用するためには、Google Cloud Platformのアカウントが必要です。また、credentials.jsonというファイルを作成し、Google Cloud PlatformのプロジェクトIDとAPIキーを記述する必要があります。

以上が、Pythonを使ったAI音声処理の基礎です。音声データの取得、分析、前処理、音声認識という流れで、Pythonを使って音声処理を行うことができます。AI音声処理には、さまざまな応用があります。今後も、Python Symphonyでは最新のトレンドや技術について紹介していきますので、お楽しみに!