Pythonで日本語音声をテキスト化する
ただ 50MB以上 の大きな音声ファイルだと エラー になってしまいます
そこで 音声ファイルを小さく 約20MB程度 に細かく分割し
テキストファイル に追記することにしました
①これを マイクを使った形に変更すれば
ブログに掲載する記事を
ほぼ 音声 だけでアップする準備ができてしまうことになります
※これは訂正します。 発話とブログの メリハリ(区切り、♪、<>, 絵文字、 声の大小、 声の高低、テンポやリズム、声色、声の表情、アクセントやイントネーションなど)や間 は違うハズです
②NLP の オーディオコンテンツのテキスト化 も出来るはずです
(もちろん私個人用として)
青空文庫
かえるの王様 より
コード
import wave
import struct
import math
import os
from scipy import fromstring, int16
# 一応既に同じ名前のディレクトリがないか確認。
file = os.path.exists("output")
print(file)
if file == False:
#保存先のディレクトリの作成
os.mkdir("output")
def cut_wav(filename,time): # WAVファイルを刈り奪る 形をしてるだろ?
# timeの単位は[sec]
# ファイルを読み出し
wavf = filename + '.wav'
wr = wave.open(wavf, 'r')
# waveファイルが持つ性質を取得
ch = wr.getnchannels()
width = wr.getsampwidth()
fr = wr.getframerate()
fn = wr.getnframes()
total_time = 1.0 * fn / fr
integer = math.floor(total_time) # 小数点以下切り捨て
t = int(time) # 秒数[sec]
frames = int(ch * fr * t)
num_cut = int(integer//t)
# 確認用
print("Channel: ", ch)
print("Sample width: ", width)
print("Frame Rate: ", fr)
print("Frame num: ", fn)
print("Params: ", wr.getparams())
print("Total time: ", total_time)
print("Total time(integer)",integer)
print("Time: ", t)
print("Frames: ", frames)
print("Number of cut: ",num_cut)
# waveの実データを取得し、数値化
data = wr.readframes(wr.getnframes())
wr.close()
X = fromstring(data, dtype=int16)
print(X)
for i in range(num_cut):
print(i)
# 出力データを生成
outf = 'output/' +str("{0:05d}".format(i)) + '.wav'
start_cut = i*frames
end_cut = i*frames + frames
print(start_cut)
print(end_cut)
Y = X[start_cut:end_cut]
outd = struct.pack("h" * len(Y), *Y)
# 書き出し
ww = wave.open(outf, 'w')
ww.setnchannels(ch)
ww.setsampwidth(width)
ww.setframerate(fr)
ww.writeframes(outd)
ww.close()
print("input filename = ")
f_name = input()
#print("cut time = ")
#cut_time = input()
cut_wav(f_name,150)
import speech_recognition as sr
from datetime import datetime
from pathlib import Path
import glob
txt = "test1.txt"
files = sorted(glob.glob('./output/' + '*.wav'))
r = sr.Recognizer()
cnt1 = 0
for file in files:
with sr.AudioFile(file) as source:
audio = r.record(source)
text = r.recognize_google(audio, language='ja-JP')
with open(txt,'a') as f: #ファイルの末尾に追記していく
f.write("
" + text)
cnt1 += 1
結果(全文OK)
昔々 誰のどんな望みでも 思うようにかなった時のことでございます
あるところに 一人の王様がありました
その王様には 美しいお姫様がたくさんありました
その中でも一番のお姫様は それはそれは美しい形で
世の中のことは何でも見て知っていらっしゃる
おひさまでさえ 毎日照らしてみて そのたんびに ビックリ なさるほどでした
さて この王様のお城の近くに こんもり 深く茂った森があって
その森の中に 一本ある古い菩提樹の木の下に
綺麗な身(泉か?)がこんこんと 吹き出していました
暑い夏の日 盛りにお姫様は よくその森へ出かけて行って いずみのそばに 腰を下ろして休みました
そして 対するとキンのマリオでって それを高く投げては手で受け取ったりして
それを何より面白い遊びにしていました
ある日 お姫様はこの森に来て
いつものように 来 なあまり投げをして遊んでいるうちに
マリが手からそれて落ちて 泉の中で ころころころ家こんでしまいました
お姫様は びっくりして そのまりの行方を眺めていましたが
まりは水の中に沈んだまま 分からなくなってしまいました
和泉はとても深くて・・・・・・・・・・