✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Мова до тексту за допомогою Amazon Transcribe у PHP

32

Нещодавно я працював над проектом, де мене познайомили з послугою Amazon Transcribe. Ми хотіли додати функцію перетворення мови в текст у нашому додатку. І ми виявили, що Amazon Transcribe найкраще для цього підходить. Amazon Transcribe використовує глибокий процес навчання, який називається автоматичним розпізнаванням мови (ASR), щоб швидко і точно перетворити мову в текст.

У цій статті я покажу вам, як перетворити мову в текст за допомогою Amazon Transcribe у PHP. Ми використовуватимемо офіційний пакет AWS SDK, створений для програмування на PHP.

Починаємо

Для того, щоб розпочати роботу, у вас повинен бути обліковий запис AWS. Увійдіть у свій обліковий запис AWS і отримайте свої дані безпеки. Ми будемо вимагати ці дані в наступній частині навчального посібника.

Мова до тексту за допомогою Amazon Transcribe у PHP

Після цього встановіть бібліотеку PHP AWS SDK за допомогою команди Composer:

composer require aws/aws-sdk-php

Щоб перетворити мову в текст, вам потрібні ваші медіа-файли. Дозволені формати медіа mp3 | mp4 | wav | flac. На додаток до цього, існує декілька доступних мов для перетворення вашої мови в текст. Ви можете побачити всі підтримувані мови та основні відомості про параметри в їх документації. Користувач може перетворити мовлення підтримуваних мов у текст.

Інтегруючи Amazon Transcribe у додаток, ми повинні побудувати потік наступним чином:

  • Завантажте мультимедійний файл на S3 Bucket.
  • Застосуйте клієнта Amazon Transcribe.
  • Почніть роботу транскрипції Amazon Transcribe, передавши URL-адресу носія S3 та унікальний ідентифікатор завдання.
  • Служба Amazon Transcribe може зайняти кілька хвилин, щоб закінчити процес перекладу. Тож зачекайте.
  • Завантажте текстовий файл після того, як AWS виконає завдання транскрипції.

Давайте подивимося, як обробляти цей потік із фактичним кодом PHP.

Мова до тексту за допомогою Amazon Transcribe у PHP

Спочатку створіть HTML-форму, де користувачі зможуть переглядати медіа-файл і натиснути кнопку «Відправити». Після подання ми беремо медіа-файл для подальшої обробки і, нарешті, надсилаємо текст перекладу назад у браузер у форматі файлу .txt.

<form method="post" enctype="multipart/form-data">     <p><input type="file" name="audio" accept="audio/*,video/*" /></p>     <input type="submit" name="submit" value="Submit" /> </form>

На кінці PHP вам потрібно відправити медіа-файл службі AWS для обробки, тому включіть середовище AWS наступним чином.

<?php require 'vendor/autoload.php';    use AwsS3S3Client; use AwsTranscribeServiceTranscribeServiceClient;   // submission code

Після цього завантажте мультимедійний файл у відро S3. І візьміть URL-адресу S3 завантаженого носія.

if (isset($_POST['submit'])) {       $arr_mime_types = ['audio/wav', 'audio/mpeg', 'video/mp4', 'audio/x-flac'];     if (!in_array($_FILES['audio']['type'], $arr_mime_types)) {         die('File type is not allowed');     }       $region = 'PASS_REGION';     $access_key = 'ACCESS_KEY';     $secret_access_key = 'SECRET_ACCESS_KEY';       // Instantiate an Amazon S3 client.     $s3 = new S3Client([         'version' => 'latest',         'region'  => $region,         'credentials' => [             'key'    => $access_key,             'secret' => $secret_access_key         ]     ]);       $bucketName = 'PASS_BUCKET_NAME';     $key = basename($_FILES['audio']['name']);       // upload file on S3 Bucket     try {         $result = $s3->putObject([             'Bucket' => $bucketName,             'Key'    => $key,             'Body'   => fopen($_FILES['audio']['tmp_name'], 'r'),             'ACL'    => 'public-read',         ]);         $audio_url = $result->get('ObjectURL');           // Amazon Transcribe service start here     }  catch (Exception $e) {         echo $e->getMessage();     } }

Обов’язково замініть заповнювачі фактичними значеннями. Далі нам потрібно передати завантажену URL-адресу носія службі Amazon Transcribe. Для цього також потрібен унікальний ідентифікатор вакансії, який я буду створювати за допомогою uniqid()методу.

// Create Amazon Transcribe Client $awsTranscribeClient = new TranscribeServiceClient([     'region' => $region,     'version' => 'latest',     'credentials' => [         'key'    => $access_key,         'secret' => $secret_access_key     ] ]);   // Start a Transcription Job $job_id = uniqid(); $transcriptionResult = $awsTranscribeClient->startTranscriptionJob([         'LanguageCode' => 'en-US',         'Media' => [             'MediaFileUri' => $audio_url,         ],         'TranscriptionJobName' => $job_id, ]);   $status = array(); while(true) {     $status = $awsTranscribeClient->getTranscriptionJob([         'TranscriptionJobName' => $job_id     ]);       if ($status->get('TranscriptionJob')['TranscriptionJobStatus'] == 'COMPLETED') {         break;     }       sleep(5); }   // download the txt file

У наведеному вище коді ми створюємо екземпляр клієнта Amazon Transcribe і запускаємо завдання транскрипції. Процес перекладу може зайняти кілька хвилин. Я обробляв це за допомогою методу while loop і sleep(). Я перевіряю, чи процес завершується через кожні 5 секунд, і перериваю цикл після завершення процесу.

Ви можете побачити цей процес транскрипції на інформаційній панелі AWS під Amazon Transcribe-> Транскрипція завдань, як показано на скріншоті нижче.

Мова до тексту за допомогою Amazon Transcribe у PHP

Нарешті, завантажте файл, використовуючи код нижче.

$url = $status->get('TranscriptionJob')['Transcript']['TranscriptFileUri']; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, false); $data = curl_exec($curl); if (curl_errno($curl)) {     $error_msg = curl_error($curl);     echo $error_msg; } curl_close($curl); $arr_data = json_decode($data);   // download a file $file = $job_id.".txt"; $txt = fopen($file, "w") or die("Unable to open file!"); fwrite($txt, $arr_data->results->transcripts[0]->transcript); fclose($txt);   header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename='.basename($file)); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: '. filesize($file)); header("Content-Type: text/plain"); readfile($file); exit();

Цей код надсилає сформований текстовий файл у браузер, щоб користувач міг його завантажити.

Остаточний зразок коду

Код, написаний вище, складається шматками. Якщо ви хочете цілий код разом, це наступне.

<?php set_time_limit(0);   require 'vendor/autoload.php';    use AwsS3S3Client; use AwsTranscribeServiceTranscribeServiceClient;   if (isset($_POST['submit'])) {       $arr_mime_types = ['audio/wav', 'audio/mpeg', 'video/mp4', 'audio/x-flac'];     if (!in_array($_FILES['audio']['type'], $arr_mime_types)) {         die('File type is not allowed');     }       $region = 'PASS_REGION';     $access_key = 'ACCESS_KEY';     $secret_access_key = 'SECRET_ACCESS_KEY';       // Instantiate an Amazon S3 client.     $s3 = new S3Client([         'version' => 'latest',         'region'  => $region,         'credentials' => [             'key'    => $access_key,             'secret' => $secret_access_key         ]     ]);       $bucketName = 'PASS_BUCKET_NAME';     $key = basename($_FILES['audio']['name']);       // upload file on S3 Bucket     try {         $result = $s3->putObject([             'Bucket' => $bucketName,             'Key'    => $key,             'Body'   => fopen($_FILES['audio']['tmp_name'], 'r'),             'ACL'    => 'public-read',         ]);         $audio_url = $result->get('ObjectURL');           // Create Amazon Transcribe Client         $awsTranscribeClient = new TranscribeServiceClient([             'region' => $region,             'version' => 'latest',             'credentials' => [                 'key'    => $access_key,                 'secret' => $secret_access_key             ]         ]);           // Start a Transcription Job         $job_id = uniqid();         $transcriptionResult = $awsTranscribeClient->startTranscriptionJob([                 'LanguageCode' => 'en-US',                 'Media' => [                     'MediaFileUri' => $audio_url,                 ],                 'TranscriptionJobName' => $job_id,         ]);           $status = array();         while(true) {             $status = $awsTranscribeClient->getTranscriptionJob([                 'TranscriptionJobName' => $job_id             ]);               if ($status->get('TranscriptionJob')['TranscriptionJobStatus'] == 'COMPLETED') {                 break;             }               sleep(5);         }           $url = $status->get('TranscriptionJob')['Transcript']['TranscriptFileUri'];         $curl = curl_init();         curl_setopt($curl, CURLOPT_URL, $url);         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);         curl_setopt($curl, CURLOPT_HEADER, false);         $data = curl_exec($curl);         if (curl_errno($curl)) {             $error_msg = curl_error($curl);             echo $error_msg;         }         curl_close($curl);         $arr_data = json_decode($data);           // download a file         $file = $job_id.".txt";         $txt = fopen($file, "w") or die("Unable to open file!");         fwrite($txt, $arr_data->results->transcripts[0]->transcript);         fclose($txt);           header('Content-Description: File Transfer');         header('Content-Disposition: attachment; filename='.basename($file));         header('Expires: 0');         header('Cache-Control: must-revalidate');         header('Pragma: public');         header('Content-Length: '. filesize($file));         header("Content-Type: text/plain");         readfile($file);         exit();     }  catch (Exception $e) {         echo $e->getMessage();     } } ?> <form method="post" enctype="multipart/form-data">     <p><input type="file" name="audio" accept="audio/*,video/*" /></p>     <input type="submit" name="submit" value="Submit" /> </form>

Сподіваюся, ви розумієте, як перетворити мову на текст за допомогою Amazon Transcribe у PHP. Будь ласка, поділіться своїми думками та пропозиціями в розділі коментарів нижче.

Пов’язані статті

Джерело запису: artisansweb.net

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі