Розпізнавання мови може бути складним, але за допомогою 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.