LINUX.ORG.RU

whisper.cpp 1.7.5

 , , , ,

whisper.cpp 1.7.5

1

2

2 апреля состоялся выпуск 1.7.5 высокопроизводительной системы автоматического распознавания речи whisper.cpp, реализующей модель Whisper от OpenAI, написанной на языках C и C++ и распространяемой по лицензии MIT.

В проекте используется авторская тензорная библиотека машинного обучения GGML, написанная на языке C и оптимизированная для использования различных бэкендов (CUDA, Vulkan, BLAS, SYCL, OpenCL и др.).

Это довольно большое обновление с различными улучшениями сборки и CI, особенно для iOS и WASM. Также есть некоторый прирост производительности, особенно для бэкенда Metal и, возможно, для устройств на базе Arm.

Список основных изменений:

  • В API добавлена функция whisper_full_get_segment_no_speech_prob_from_state.
  • В примере server.cpp для конвертирования (вызовом FFmpeg) исходного файла в .wav реализовано генерирование уникального имени временного файла.
  • Обновлены библиотеки GGML и llama.cpp.
  • Для декодирования flac, mp3, ogg и wav теперь используется библиотека miniaudio 0.11.22, без необходимости использования внешних конверторов, как было ранее.
  • Улучшена документация.
  • Улучшены скрипты загрузки моделей.
  • Многочисленные исправления биндингов для других языков программирования.
  • Исправлены найденные ошибки.

>>> Подробности на GitHub

★★★★★

Проверено: maxcom ()

Исправлены найденные ошибки.

Под этим пунктом может скрываться перепись процентов семидесяти кода, необходимость которой кратко юзеру не пояснишь, поэтому «рефакторинг исправлены ошибки, улучшена производительность».

apt_install_lrzsz ★★★
()

Ну всё, теперь заживём!

Biene
()

оффтопик:

насколько сложно вырезать голос из видео, скормить его speech2text программе и трансформировать в .srt субтитры для видео файла ?

по идеи это bash онлайнер, есть ли подводные камни ?

gagarin0
()
Ответ на: комментарий от gagarin0

по идеи это bash онлайнер, есть ли подводные камни ?

Нет камней, только обычно берут не bash, а Python, хотя, если модель запущена инференсом в standalone режиме, то и баша вполне хватит.

Obezyan
()
Ответ на: комментарий от Obezyan

ну примерно хочется такого

test -n input.srt || (
  ffmpeg -i input.mp4 -ar 16000 -ac 1 -f s16le -acodec pcm_s16le - | <text2speech magic> | text2speech convert to .srt | tee -a input.srt 
) && ffplay -an input.mp4 -vf subtitles=input.srt 
gagarin0
()

Народ, если данные для обучения модели не выложены, а предлагается к использованию уже обученная модель, то нельзя же однозначно утверждать о достоверности результатов работы модели на новых данных?

Проще говоря, вполне же может быть, что при обучении модели были заложены, например, такие ключевые слова: «Мама мыла раму», после распознавания которых, модель выдаст ответ: «Папа мыл автомобиль». Такое же возможно?

Enthusiast ★★★
()
Ответ на: комментарий от gagarin0

<text2speech magic>:

import sys
import requests

api_key = 'YOUR_API_KEY' 

def transcribe_audio(audio_content):
    url = "https://api.openai.com/v1/audio/translations"
    headers = {
        "Authorization": f"Bearer {api_key}",
        # "Content-Type": "multipart/form-data"
    }
    files = {
        "file": audio_content,
        "model": (None, "whisper-1"),
        "response_format": (None, "srt")
    }
    
    response = requests.post(url, headers=headers, files=files)
    
    if response.status_code != 200:
        raise Exception(f"API request failed: {response.status_code} {response.text}")
    
    return response.text

def main():
   print(transcribe_audio(sys.argv[1]))

if __name__ == "__main__":
    main()

код не тестил, не удобно с телефона. Сам скрипт можно заменить на curl, а внешнюю сеть на свой локальный инференс а-ля 127.0.0.1:7878

Obezyan
()
Ответ на: комментарий от Enthusiast

нельзя же однозначно утверждать о достоверности результатов работы модели на новых данных?

Даже если обучающие данные выложены - нельзя утверждать о достоверности. В этом главная проблема современных сетей.

например, такие ключевые слова: «Мама мыла раму», после распознавания которых, модель выдаст ответ: «Папа мыл автомобиль». Такое же возможно?

Увеличьте у сети гиперпараметр temperature выше ~1.8-2.0 и получите что Рама маму мылом, или даже папу…

Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 2)
Ответ на: комментарий от mord0d

vosk модель 20мб хорошо распознаёт русскую речь на селероне, своего помошника запилил, озу потребляет, whisper не трогал пишут могёт даже на предложения делить.

s-warus ★★★☆
()
Ответ на: комментарий от gagarin0

насколько сложно вырезать голос из видео, скормить его speech2text программе и трансформировать в .srt субтитры для видео файла ?

Вырезать — простая команда для ffmpeg:
ffmpeg -i infile.mp4 -ar 16k outfile.wav
Преобразовать в SRT:
whisper-cli -m .../ggml-large-v3-turbo-q8_0.bin -l auto outfile.wav -osrt -of "$outname"
Правда, без видеоускорителя, только на CPU, большинство моделей работают в несколько раз дольше, чем распознаваемая запись. Конкретно ggml-large-v3-turbo-q8_0.bin — в 3-4 раза на 2 предыдущих версиях Whisper.cpp, в зависимости от BLAS. Vosk в разы быстрее, но заметно хуже распознаёт и не ставит пунктуацию.

question4 ★★★★★
()
Ответ на: комментарий от mord0d

Насколько сейчас хороши стали STT?

Для создания субтитров к фильмам или коротким роликам из сети vosk и whisper.cpp вполне годятся. whisper может автоматически переводить на основной язык или на английский, но эта фича не очень предсказуемо работает.

question4 ★★★★★
()
Ответ на: комментарий от s-warus

whisper не трогал пишут могёт даже на предложения делить.

Подтверждаю.

Также может автоматически переводить: видео на смеси украинского и русского перевело на украинский; фильм, начинавшийся коротким монологом на французском, перевело с английского на французский; часто заменяет жаргонные слова вроде gonna литературными эквивалентами (going to), а суржик — языком первой реплики. Один раз в интервью Трампа автоматически расставила репликам имена говорящих — «President» и «Press» (фичу можно включить руками, но она почти никогда не работает).

question4 ★★★★★
()
Ответ на: комментарий от Enthusiast

может быть, что при обучении модели были заложены, например, такие ключевые слова: «Мама мыла раму», после распознавания которых, модель выдаст ответ: «Папа мыл автомобиль». Такое же возможно?

Вполне. Более того, если ты не проверяешь датасет для обучения, такую бомбу может содержать датасет.

С чем-то таким политически ангажированным я сталкивался у ggml-large-v3-turbo-q8_0.bin для whisper.cpp.

question4 ★★★★★
()
Ответ на: комментарий от dukzcry

llama.cpp
stable-diffusion.cpp

Какие у них есть модели, представляющие интерес?

olegd ★★★
()
Ответ на: комментарий от Obezyan
 files = {
        "file": audio_content,
        "model": (None, "whisper-1"),
        "response_format": (None, "srt")
    }

вспомнил, я подобное использовал через Yandex speech2text api чтобы получить чистые транскрипции видео

gagarin0
()
Ответ на: комментарий от s-warus

Виспер с максимальной моделью не просто делит на предложение, а довольно правильно расставляет знаки пунктуации и прочее. Я его одно время использовал для распознавания набубненных заметок с диктофона, когда внезапно приходили мысли по статьям или чему-то ещё, а записать было некуда.

Zhbert ★★★★★
()
Ответ на: комментарий от mord0d

Я же тебе рассказывал вроде? ^^^

Или STT, это что-то другое? :)

Zhbert ★★★★★
()
Ответ на: комментарий от s-warus

Зови, если запилишь, почитаем, поможем с оформлением и очепятками :)

Zhbert ★★★★★
()
Ответ на: комментарий от question4

Также может автоматически переводить

Давно завезли полный перевод? В оригинальном Whisper такого вроде бы нет - только на английский.

ioctl
()
Ответ на: комментарий от ioctl

Давно завезли полный перевод? В оригинальном Whisper такого вроде бы нет - только на английский.

Полного перевода нет. В 1.7.3 и 1.7.4 труднопредсказуемый бардак:

  1. Есть ключ --translate, который обеспечивает перевод на английский. Если автоопределение языка отработало нормально, или правильно указан язык в командной строке, и он на всё видео один, довольно часто это работает.

  2. Если в видео несколько языков, и автоопределение верно определило один из них, иногда всё переводит на этот язык.

  3. Иногда это работает и для заданного вручную языка.

  4. Но с тем же успехом может распознавать фразы на другом языке как созвучные слова на основном. Разумеется, получается бред.

1.7.5 пока не пробовал, но соответствующий баг висит без движения.

question4 ★★★★★
()

Сравнил 1.7.4. и 1.7.5. Собрал с -DWHISPER_FFMPEG=ON -DGGML_BLAS=ON .

Новая версия немного лучше разбивает на предложения, скорость работы совпадает в пределах разброса измерений ±5% (CPU, BLAS).

По-прежнему, не может работать непосредственно с MP4 — теперь останавливается с ошибкой «Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none, 1042x720, 182 kb/s): unspecified pixel format». Раньше на MP4 выдавало кучу ошибок и мусор вместо субтитров. А вот вырезанную дорожку AAC успешно распознало, среднее время чуть выше, но в пределах тех же 5%.

question4 ★★★★★
()
Ответ на: комментарий от einhander

Для декодирования flac, mp3, ogg и wav теперь используется библиотека miniaudio 0.11.22, без необходимости использования внешних конверторов, как было ранее.

exception13 ★★★★★
()
Ответ на: комментарий от question4

Да скорость и так в пределах одного релиза и одного файла плавала +/-. Тут есть еще одна фича, в зависимости от бэкенда будет разный выхлоп на одном файле.

exception13 ★★★★★
()
Ответ на: комментарий от exception13

в зависимости от бэкенда будет разный выхлоп на одном файле.

А вот это уже совсем хреново.

Хотя на CPU с BLAS и без него распознавало одинаково.

question4 ★★★★★
()
Ответ на: комментарий от exception13

Для декодирования flac, mp3, ogg и wav теперь используется библиотека miniaudio 0.11.22, без необходимости использования внешних конверторов, как было ранее.

Для декодирования AAC используется ffmpeg, который ранее не работал.

P.S. Включается ли miniaudio, если собирать с поддержкой ffmpeg?

P.P.S. Судя по файлам в whisper.cpp-1.7.5/examples/CMakeFiles, включилась, вместе с ffmpeg. И как тогда понять, которая из них декодирует MP3?

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 2)
Ответ на: комментарий от einhander

А mp3 уже научилось понимать?

Под рукой в MP3 только песни, которые и из 16k WAV распознаются сравнительно плохо. Распознаются, но я не понял, которой из библиотек.

P.S. И из 16k WAV результат другой. Но все неверные.

P.P.S. Просто речь распозналась прекрасно.

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 2)
Ответ на: комментарий от question4

Ну это внутренняя кухня нейронок.

./build.blas/bin/whisper-cli -np -nt -t 8 --language ru -m models/ggml-base.bin ~/tmp/buffalo.wav

 Африканский буйвол. Африканский или каферский буйвол? Налатинском Синсерус кафер. Это вид боков широко распространенный в Африке. Будучи типичным представителем под семейство боков, африканский буйвол, однако, весьма своеобразен и выделяется в отдельный рот Синсерус с единственным видом. Этот вид также единственный из под семейства боков, обитающие в Африке. Дарый весом 900 килограмм нередкость. Изредка встречаются старые быки, весом даже 1300 килограмм. Высота в холке, у взрослых самцов, до 1,80 метра, при длине тела, от трех до трех целых четырех десятых метра. При этом некоторые подвиды Африканского буйвола много меньше. Вообще лесные буйволы значительно меньше тех буйволов, которые обитают в Саванне. Популяция буйволов в Африке сохранилась по сравнению с поголовьем других крупных животных континента, достаточно хорошо, хотя испытывает сильное давление со стороны человека. Википедия свободная инциклопедия, которую может редактировать каждый.
./build.vulkan/bin/whisper-cli -np -nt -t 8 --language ru -m models/ggml-base.bin ~/tmp/buffalo.wav

 Африканский буйвол. Африканский или каферский буйвол? Налатинском сенсерус кафер. Это вид боков широко распространенный в Африке. Будучи типичным представителем под семейство боков, африканский буйвол, однако, весьма своеобразен и выделяется в отдельный рот сенсерус с единственным видом. Этот вид также единственный из под семейства боков, обитающие в Африке. И зарядка встречаются старые боки, весом даже 1300 килограмм. Высота в холке, у взрослых самцов, до 1,80 метра, предлиннее тело от трех до трех целых четырех десятых метра. При этом некоторые подвиды Африканского буйвола много меньше. Вообще лесные буйволы значительно меньше тех буйволов, сдают в Саванне. Популяция буйволов в Африке сохранилась по сравнению с поголовьем других крупных животных континента. Достаточно хорошо, хотя испытывает сильное давление со стороны человека. Википедия свободная инциклопедия, которую может редактировать каждый.
./build.hip/bin/whisper-cli -np -nt -t 8 --language ru -m models/ggml-base.bin ~/tmp/buffalo.wav

 Африканский буйвол. Африканский или каферский буйвол, нолотинском сенсорус кафер. Это вид боков широко распространенный в Африке. Будучи типичным представителем под семейство боков, африканский буйвол, однако, весьма своеобразен и выделяется в отдельный рот сенсорус с единственным видом. Этот вид также единственный из под семейства боков, обитающие в Африке. Африканский буйвол - это крупнейший современных боков, вес взрослых самцов крупных подвидов. Часто превышает одну тонну, а экземпляция 2 весом 900 килограмм нередкость. Изредка встречаются старые боки, весом даже 1300 килограмм. Высота в холке у взрослых самцов до 1,80 метра, предлиннее тело от 3 до 3,4 метра. При этом некоторые подвиды Африканского буйвола много меньше. Вообще лесные буйволы значительно меньше тех буйволов, которые дают в Саванне. Популяция буйволов в Африке сохранилась по сравнению с поголовьем других крупных животных континентах, достаточно хорошо, хотя испытывает сильное давление со стороны человека. Википедия свободная инциклопедия, которую может редактировать каждый адрес в интернете. Ру.википедия.org
exception13 ★★★★★
()

Наткнулся в предыдущей новости на оставшийся без ответа вопрос @sunjob: whisper.cpp 1.7.4 (комментарий)

подыскиваю решение для «надиктовать и перевести в текст», что-то с гуи (если возможно),
т.е. максимально повернутое нетылом к пользователю.

планируется на

  • ThinkPad T460 (т.е. не шибко большой трактор)
  • slackware-15.0 (некоторые особенности/ограничения в сборке/конфигурации пакетов)

вопрос1: что-то подскажете как конечное решение (гуи, тыл, простота в работе)?
вопрос2: на сколько подойдет whisper для этого?
вопрос3: особенности/камни/вода/течение…(типа, ключи сборки, дополнительные библиотеки, нотбук / десктоп / intel / nvidia / cuda…)

Не знаю характеристик ThinkPad T460, но если там нет достаточно нового графического ускорителя, whisper.cpp на CPU с большинством моделей не угонится за скоростью человеческой речи. (А качество tiny мне не понравилось.)

Краткий гуглёж сказал, что там Intel HD Graphics 520 с поддержкой Vulkan 1.3. Может и потянет.

Гуи в комплекте нет. Есть какие-то скрипты для работы онлайн-сервером, натыкался на хвалебный отзыв человека, который ими пользуется на вебсайте, но я их не смотрел.

question4 ★★★★★
()
Ответ на: комментарий от ioctl

К слову, о переводе. Запустил распознавание аудиокниги D&D на английском в режиме русского языка. Большая часть распознанных глав (53 из 60) состоит из реплик «Продолжение следует…», «Субтитры создавал DimaTorzok», «Редактор субтитров А.Семкин Корректор А.Егорова», «Добавил субтитры Алексею Дубровскому», «ПОДПИШИСЬ НА КАНАЛ!», «СИЛЕНЦЕЙ!», «СПОКОЙНАЯ МУЗЫКА». Как правило, одна строка многократно повторяется. 3 главы из 60 нормально распознались на английском, ещё 2 частично, ещё 2 сократило и переврало:

 Субтитры создавал DimaTorzok
 Димара был большой king, который, в legend tells us, ruled here by virtue of the power of his magical orb.
 A score of years ago, the evil ogre Bone-Nasher attacked his castle in search of the orb.
 DimaTorzok's troops held out valiantly, but wave upon wave of orcs crashed upon these battlements,
 wore down the defenders, and drowned them in the onslaught.
 Knowing that his fate was sealed, DimaTorzok spent his last breaths in desperate attempt to keep the orb out of the hands of Bone-Nasher.
 Legend holds it that he hid it somewhere in his castle.
 His enemies have searched for it ever since.
 If the orb has not been found for twenty years, why would Taran suddenly be concerned with it?
 I know many strange things, but please don't ask me to explain the ways of elves or how they gain their secret knowledge.
 Suffice it to say that I have learned to respect them.
 I can't see anything inside, but it's certain it smells of filth and decay.
 Okay, door's clear.
 Okay, door's clear.

(внимание на имя короля)

 Субтитры создавал DimaTorzok
 DimaTorzok
 Продолжение следует...
 Продолжение следует...
 Это будет worse fate than death.
 Что вы знаете, что может помочь нам уничтожить Гонтор?
 В ночи...
 В ночи, я слышу голоса.
 Они говорят о Гонтор's search for immortality.
 Его любовь...
 Для красивого женщины...
 Эрика.
 Его ордер к его уничтожимы, чтобы построить его в этом доме.
 Возвращайтесь в этот дом.
 Возвращайтесь в этот дом.

Если основной язык — русский, а английский в виде коротких реплик, то иногда переводит правильно.

question4 ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.