Вот так вот, ее подруга вдруг включила фильм, который любит смотреть на ночь, но без субтитров, что ее очень огорчает. Я торопился и срочно решал нужды своей девушки. Используйте Python для создания программного обеспечения, которое может распознавать речь, а затем переводить ее в текст.
1. Сюжетная линия
Вот так вот, ее подруга вдруг включила фильм, который любит смотреть на ночь, но без субтитров, что ее очень огорчает.
Я торопился и срочно решал нужды своей девушки.
Я подумал об использовании Python для создания программного обеспечения, которое может распознавать речь и затем переводить ее в текст.
На картинке ниже эффект от этой статьи, ха-ха, неплохо, выглядит отлично.
Если вы заинтересованы, вы можете поставить мне лайк, а затем принести больше забавных и интересных демонстраций и руководств по реализации.
Отрывок из первого эпизода «Легенды о Чжэнь Хуане»:
На самом деле это так:
В последнее время нехватка драмы, и иногда вытаскивает, кто скачивает телешоу послевкусие, Classic - это классическая, будь то истории настолько привлекательны, а? И т. Д., Линии, линии ...... Это как практикующий, я вдруг эврика момента - теперь настолько продвинутая технология распознавания речи, есть ли способ помочь мне сохранить несколько замечательных линий сюжета? Может быть, я могу быть дикими субтитрами Jun: P, кажется, на этой основе, то легко переводить неясные отдельные линии!
Подумав некоторое время, у меня, вероятно, возникла идея — сделать программу, извлекающую аудио из видео, а затем запросить открытый API распознавания речи, чтобы помочь мне преобразовать речь в текст. Ввиду приятного опыта звонка Youdao Zhiyun ранее, я решил снова использовать его в своих целях, и быстро сделал это.demo(Пожалуйста, игнорируйте этот уродливый макет интерфейса, его можно использовать...).
Добро пожаловать, чтобы следовать за мной,一块来履行我之前的承诺,连更一个月之内, написать несколько статей.
| серийный номер | предполагаемое время окончания | Придумайте название и функцию купола и опубликуйте содержание статьи | Было ли это написано | Ссылка на статью |
|---|---|---|---|---|
| 1 | 3 сентября | Перевод текста, перевод одного текста, демонстрация пакетного перевода. | завершенный | CSDN:нажмите на меня напрямуюПубличный аккаунт WeChat:нажмите на меня напрямую |
| 2 | 11 сентября | OCR-демонстрация, полное распознавание пакетной загрузки; в демоверсии вы можете выбрать различные типы распознавания OCR (в том числе почерк/печать/удостоверение личности/форма/целый вопрос/визитная карточка), а затем вызвать возможности платформы, конкретные этапы реализации, и Т. Д. | завершенный | CSDN:нажмите на меня напрямуюПубличный аккаунт WeChat: |
| 3 | 27 октября | Демонстрация распознавания речи, загрузите видео в демо и перехватите короткое распознавание речи в видео - демонстрационное аудио для распознавания короткой речи | CSDN:нажмите на меня напрямуюПубличный аккаунт WeChat: | |
| 4 | 17 сентября | Оценка Smart Voice — демонстрация | CSDN: Публичный аккаунт WeChat: | |
| 5 | 24 сентября | Коррекция композиции - демонстрация | CSDN: Публичный аккаунт WeChat: | |
| 6 | 30 сентября | Синтез речи - демо | CSDN: Публичный аккаунт WeChat: | |
| 7 | 15 октября | Поиск по одному вопросу — демонстрация | CSDN: Публичный аккаунт WeChat: | |
| 8 | 20 октября | Перевод изображения - Демо | CSDN: Публичный аккаунт WeChat: | |
2. Подготовка перед разработкой
Сначала нужно создать инстанс, создать приложение, привязать приложение и инстанс на личной странице Youdao Zhiyun и получить id и ключ приложения, используемого для вызова интерфейса. Подробную информацию о процессе личной регистрации и создании приложения см. в статьеМенее 100 строк кода, чтобы заставить Python выполнять распознавание символов для идентификации удостоверений личности, текста и других шрифтов.
3. Подробное введение в процесс разработки
Конкретный процесс разработки кода описан ниже.
(1) Описание спецификации интерфейса
Во-первых, проанализируйте спецификации ввода и вывода API Youdao Zhiyun. в соответствии сДокументацияС точки зрения формат вызывающего интерфейса выглядит следующим образом:
HTTPS-адрес API распознавания речи Youdao:
https://openapi.youdao.com/asrapi
Параметры вызова интерфейса:
| имя поля | тип | значение | необходимые | Примечание |
|---|---|---|---|---|
| q | text | Строка аудиофайла в кодировке Base64 для перевода | True | Должен быть закодирован в Base64 |
| langType | text | исходный язык | True | Поддерживаемые языки |
| appKey | text | Идентификатор приложения | True | Доступны наУправление приложениемПроверять |
| salt | text | UUID | True | UUID |
| curtime | text | метка времени (секунды) | true | секунды |
| sign | text | Подпись, созданная md5 (идентификатор приложения + q + соль + curTime + ключ) | True | Идентификатор приложения + q + соль + curTime + значение MD5 ключа |
| signType | text | подписанная версия | True | v2 |
| format | text | Формат аудиофайла, wav | true | wav |
| rate | text | Частота дискретизации, рекомендуемая частота дискретизации 16000 | true | 16000 |
| channel | text | Количество каналов, поддерживает только моно, заполните фиксированное значение 1 | true | 1 |
| type | text | Тип загрузки, поддерживает только загрузку base64, пожалуйста, заполните фиксированное значение 1 | true | 1 |
Среди них q — аудиофайл в кодировке base64, который необходимо распознать: «Длительность загруженного файла не может превышать 120 с, а размер файла не может превышать 10 МБ», что требует внимания.
APIвернуть содержимоеПроще:
| поле | значение |
|---|---|
| errorCode | Код ошибки результата идентификации должен существовать. Детали для участияСписок кодов ошибок |
| result | Результаты идентификации, успех идентификации должен существовать |
(2) Разработка проекта
Этот проект используетpython3развития, в том числеmaindow.py,videoprocess.py,srbynetease.pyтри файла.
界面часть, используя тот, который поставляется с pythontkinter库, обеспечивающий выбор видеофайла, поле ввода времени и кнопку подтверждения;
videoprocess.py: для достижения функций извлечения аудио и обработки API возвращаемой информации в указанный временной интервал видео;
srbynetease.py: отправить обработанный звук в API распознавания короткой речи и вернуть результат.
1. Реализация интерфейсной части
Как часть интерфейса кода, это относительно просто.
root=tk.Tk()
root.title("netease youdao sr test")
frm = tk.Frame(root)
frm.grid(padx='50', pady='50')
btn_get_file = tk.Button(frm, text='选择待识别视频', command=get_file)
btn_get_file.grid(row=0, column=0, padx='10', pady='20')
path_text = tk.Entry(frm, width='40')
path_text.grid(row=0, column=1)
start_label=tk.Label(frm,text='开始时刻:')
start_label.grid(row=1,column=0)
start_input=tk.Entry(frm)
start_input.grid(row=1,column=1)
end_label=tk.Label(frm,text='结束时刻:')
end_label.grid(row=2,column=0)
end_input=tk.Entry(frm)
end_input.grid(row=2,column=1)
sure_btn=tk.Button(frm, text='开始识别', command=start_sr)
sure_btn.grid(row=3,column=0,columnspan=3)
root.mainloop()
Событие привязки start_sr() для sure_btn выполняет простую обработку исключений и выводит окончательный результат распознавания во всплывающем окне:
def start_sr():
print(video.video_full_path)
if len(path_text.get())==0:
sr_result = '未选择文件'
else:
video.start_time = int(start_input.get())
video.end_time = int(end_input.get())
sr_result=video.do_sr()
tk.messagebox.showinfo("识别结果", sr_result)
2. Разработка функций обработки аудио и видео
(1) В videoprocess.py я использовал библиотеку python moviepy для обработки видео, перехватил видео в соответствии с указанным временем начала и окончания, извлек аудио и преобразовал в кодировку base64 в соответствии с требованиями API:
def get_audio_base64(self):
video_clip=VideoFileClip(self.video_full_path).subclip(self.start_time,self.end_time)
audio=video_clip.audio
result_path=self.video_full_path.split('.')[0]+'_clip.mp3'
audio.write_audiofile(result_path)
audio_base64 = base64.b64encode(open(result_path,'rb').read()).decode('utf-8')
return audio_base64
(2) Кодировка обработанного аудиофайла передается инкапсулированному методу вызова Youdao Zhiyun API:
def do_sr(self):
audio_base64=self.get_audio_base64()
sr_result=srbynetease.connect(audio_base64)
print(sr_result)
if sr_result['errorCode']=='0':
return sr_result['result']
else:
return "Something wrong , errorCode:"+sr_result['errorCode']
3. Разработка функции перевода отправки данных
Метод вызова, инкапсулированный в srbynetease.py, относительно прост, просто «соберите» данные{} в соответствии с документацией API и отправьте их:
def connect(audio_base64):
data = {}
curtime = str(int(time.time()))
data['curtime'] = curtime
salt = str(uuid.uuid1())
signStr = APP_KEY + truncate(audio_base64) + salt + curtime + APP_SECRET
sign = encrypt(signStr)
data['appKey'] = APP_KEY
data['q'] = audio_base64
data['salt'] = salt
data['sign'] = sign
data['signType'] = "v2"
data['langType'] = 'zh-CHS'
data['rate'] = 16000
data['format'] = 'mp3'
data['channel'] = 1
data['type'] = 1
response = do_request(data)
return json.loads(str(response.content,'utf-8'))
В-четвертых, результаты показывают
Просто откройте определенный раздел первого эпизода «Легенды о Чжэнь Хуане» и попробуйте:
Эффект в порядке, и небольшой недостаток в сегментации предложения можно игнорировать. Я не ожидал, что этот короткий API распознавания речи сможет понять древних и современность, а распознавание древней речи настолько скользкое, что это потрясающе!
V. Резюме
Некоторые попытки открыли дверь в новый мир.С сегодняшнего дня я могу быть диким джентльменом с субтитрами, который может нести субтитры, не печатая их.Я могу попытаться распознать и перевести на другие языки, когда у меня будет время позже.Ну, да сила техники!
адрес проекта:GitHub.com/lemon Q H/SR F…