Whisper.php — автоматичне розпізнавання мови та транскрипція

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 10 грудня, 2024
Відкрийте для себе можливості Whisper.php – потужної PHP-обгортки для моделі Whisper від OpenAI, яка спрощує процес розпізнавання мовлення. Чи готові ви дізнатися, як легко інтегрувати цю технологію у свої проекти та отримати точні транскрипції аудіо? Читайте далі!

Розпізнавання мови може бути складним, але за допомогою Whisper.php ви можете спростити цей процес. Whisper.php - це PHP-обгортка для whisper.cpp, C/C++ порту моделі Whisper від OpenAI. Цей пакет створений Кіріаном Обіквелу, який нещодавно випустив версію 1.0.0, що дозволяє проводити повністю локальну транскрибацію без використання API прямо у ваших проектах. Він пропонує:

Whisper.php вимагає встановлення та активації розширення FFI (Foreign Function Interface) у PHP, що дозволяє взаємодіяти з C-бібліотеками безпосередньо з PHP.

Припустимо, що ви активували FFI. Для встановлення Whisper.php вам потрібно виконати:

composer require codewithkyrian/whisper.php

Whisper.php пропонує як низькорівневе, так і високорівневе API. Низькорівневе API забезпечує детальний контроль над процесом транскрибації, що близький до оригінальної C-імплементації. Високорівневе API пропонує простіший, абстрактний інтерфейс для оптимізації робочого процесу.

У цій статті ми будемо використовувати високорівневе API.

use Codewithkyrian\Whisper\Whisper;
use function Codewithkyrian\Whisper\readAudio;
use function Codewithkyrian\Whisper\toTimestamp;
 
// Транскрибація аудіо
$whisper = Whisper::fromPretrained('tiny.en', baseDir: __DIR__.'/models');
$audio = readAudio(__DIR__.'/audio/laravel-news-227-sample.mp3');
$segments = $whisper->transcribe($audio, 4);
 
// Виведення даних транскрибованих сегментів
foreach ($segments as $segment) {
    echo toTimestamp($segment->startTimestamp) . ': ' . $segment->text . "\n";
}

Whisper.php використовує певні загальні бібліотеки, специфічні для платформ. Вони автоматично завантажуються під час першої ініціалізації моделі за допомогою Whisper::fromPretrained() і зберігаються у нашій директорії models. Перший запуск може зайняти трохи часу через завантаження, проте, як тільки бібліотеки кешуються, наступні запуски проходитимуть швидше. Підтримуються такі базові моделі Whisper: tiny.en, base, base.en та інші.

Функція readAudio() спрощує обробку аудіо, перетворюючи його на частоту 16кГц, що є компромісом між якістю та ефективністю. Це дозволяє зберегти основні частоти людської мови, зменшуючи обсяг оброблюваних даних.

Метод transcribe() бере перетворене аудіо і ділить його на сегменти з початковими та кінцевими мітками часу разом із текстом, який ми можемо вивести у потрібному форматі.

Для тестування ми використали нещодавній епізод подкасту Laravel News. Як видно, він не ідеальний, проте виконує свою задачу добре. Вихід міг виглядати приблизно так:

00:00:00,000:  Привіт усім, як справи? Ласкаво просимо до подкасту, епізод 227, сьогодні 26 листопада
00:00:05,040:  2024
00:00:06,400:  Радий, що ви з нами, і радий, що Майкл нарешті розібрався зі своїм мікрофоном...

Примітка: На момент написання підтримуються тільки Linux та macOS, а підтримка Windows все ще розробляється.

Дізнайтеся більше про цей пакет та перегляньте код на GitHub.