Используйте Python, чтобы удовлетворить потребности подруг, смотрящих фильмы без субтитров

Python

Вот так вот, ее подруга вдруг включила фильм, который любит смотреть на ночь, но без субтитров, что ее очень огорчает. Я торопился и срочно решал нужды своей девушки. Используйте Python для создания программного обеспечения, которое может распознавать речь, а затем переводить ее в текст.

1. Сюжетная линия

Вот так вот, ее подруга вдруг включила фильм, который любит смотреть на ночь, но без субтитров, что ее очень огорчает.

Я торопился и срочно решал нужды своей девушки.

Я подумал об использовании Python для создания программного обеспечения, которое может распознавать речь и затем переводить ее в текст.

img

На картинке ниже эффект от этой статьи, ха-ха, неплохо, выглядит отлично.

Если вы заинтересованы, вы можете поставить мне лайк, а затем принести больше забавных и интересных демонстраций и руководств по реализации.

Отрывок из первого эпизода «Легенды о Чжэнь Хуане»:

img

На самом деле это так:

В последнее время нехватка драмы, и иногда вытаскивает, кто скачивает телешоу послевкусие, Classic - это классическая, будь то истории настолько привлекательны, а? И т. Д., Линии, линии ...... Это как практикующий, я вдруг эврика момента - теперь настолько продвинутая технология распознавания речи, есть ли способ помочь мне сохранить несколько замечательных линий сюжета? Может быть, я могу быть дикими субтитрами Jun: P, кажется, на этой основе, то легко переводить неясные отдельные линии!

Подумав некоторое время, у меня, вероятно, возникла идея — сделать программу, извлекающую аудио из видео, а затем запросить открытый API распознавания речи, чтобы помочь мне преобразовать речь в текст. Ввиду приятного опыта звонка Youdao Zhiyun ранее, я решил снова использовать его в своих целях, и быстро сделал это.demo(Пожалуйста, игнорируйте этот уродливый макет интерфейса, его можно использовать...).

img

Добро пожаловать, чтобы следовать за мной,一块来履行我之前的承诺,连更一个月之内, написать несколько статей.

серийный номер предполагаемое время окончания Придумайте название и функцию купола и опубликуйте содержание статьи Было ли это написано Ссылка на статью
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 выполнять распознавание символов для идентификации удостоверений личности, текста и других шрифтов.

img

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'))

В-четвертых, результаты показывают

Просто откройте определенный раздел первого эпизода «Легенды о Чжэнь Хуане» и попробуйте:

img

Эффект в порядке, и небольшой недостаток в сегментации предложения можно игнорировать. Я не ожидал, что этот короткий API распознавания речи сможет понять древних и современность, а распознавание древней речи настолько скользкое, что это потрясающе!

V. Резюме

Некоторые попытки открыли дверь в новый мир.С сегодняшнего дня я могу быть диким джентльменом с субтитрами, который может нести субтитры, не печатая их.Я могу попытаться распознать и перевести на другие языки, когда у меня будет время позже.Ну, да сила техники!

адрес проекта:GitHub.com/lemon Q H/SR F…