我还是python新手。我想创建一个具有与音频文件相关的信息的json,还想为其添加开始时间和结束时间。
即使在我尝试计算结束时间之前,仍然出现了很多错误,但是一切都很好。
import re
import speech_recognition as sr
import json
import time
from datetime import datetime, date, time, timedelta
import wave
import contextlib
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
def read_in():
lines = sys.stdin.readlines()
return json.loads(lines[0])
def myconverter(o):
if isinstance(o, datetime.datetime):
return o.__str__()
def convertToString():
# lines = read_in()
r = sr.Recognizer()
text = ""
duration = 0.0
arr = ["test2.wav", "2020-05-11 16:04:22"]
# for item in lines:
# arr.append(item)
# print(arr)
audio = arr[0]
timestamp_begin = datetime.strptime(arr[1], '%Y-%m-%d %H:%M:%S')
with contextlib.closing(wave.open(audio, 'r')) as f:
frames = f.getnframes()
rate = f.getframerate()
# duration should be in seconds
duration = frames / float(rate)
print(duration)
with sr.AudioFile(audio) as source:
audio = r.record(source)
try:
text = r.recognize_google(audio, language='ko-kr')
print(text)
except Exception as e:
print(e)
result = {'begin': timestamp_begin, 'end': timestamp_begin +
timedelta(0, duration), 'audio_text': text}
print(json.dumps(result, default=myconverter))
print(text)
def main():
convertToString()
if __name__ == '__main__':
main()
希望您能帮助我。我不知道在哪里解决该问题。
非常感谢。
如您所见,如果您阅读了错误消息(总是个好主意,则错误发生在此行:
if isinstance(o, datetime.datetime):
似乎您正在尝试访问同名datetime
module中的datetime
class。但这不起作用,因为导入行如下所示:
from datetime import datetime, date, time, timedelta
这将从datetime
模块中将这些项目直接导入全局范围,因此它们在没有datetime.
前缀的情况下变为可用。因此,只需省略该前缀:
if isinstance(o, datetime):
或者,批量导入datetime
模块:
import datetime
并在整个代码中使用datetime.datetime
,datetime.date
,datetime.time
,datetime.timedelta
和datetime.datetime.strptime
(!)。这样可以更清楚地知道一切来自何处,以更大的冗长为代价;选择是你的。