{"id":28893,"date":"2021-06-02T12:29:00","date_gmt":"2021-06-02T09:29:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28893"},"modified":"2021-10-18T03:38:01","modified_gmt":"2021-10-18T00:38:01","slug":"zamiana-mowy-na-tekst-przy-uzyciu-transkrypcji-amazon-w-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/zamiana-mowy-na-tekst-przy-uzyciu-transkrypcji-amazon-w-php\/","title":{"rendered":"Zamiana mowy na tekst przy u\u017cyciu transkrypcji Amazon w PHP"},"content":{"rendered":"<p>Ostatnio pracowa\u0142em nad projektem, w kt\u00f3rym zapozna\u0142em si\u0119 z us\u0142ug\u0105 <a href=\"https:\/\/aws.amazon.com\/transcribe\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Amazon Transscribe<\/a>. Chcieli\u015bmy doda\u0107 funkcj\u0119 konwersji mowy na tekst w naszej aplikacji. Odkryli\u015bmy, \u017ce najlepiej do tego nadaje si\u0119 Amazon Transcribe. Amazon Transscribe wykorzystuje proces g\u0142\u0119bokiego uczenia si\u0119 zwany automatycznym rozpoznawaniem mowy (ASR), aby szybko i dok\u0142adnie konwertowa\u0107 mow\u0119 na tekst.<\/p>\n<p>W tym artykule poka\u017c\u0119, jak przekonwertowa\u0107 mow\u0119 na tekst za pomoc\u0105 Amazon Transcribe w PHP. Wykorzystamy oficjalny pakiet AWS SDK zbudowany do programowania w PHP.<\/p>\n<h3>Pierwsze kroki<\/h3>\n<p>Aby rozpocz\u0105\u0107, powiniene\u015b mie\u0107 <a href=\"https:\/\/aws.amazon.com\/console\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">konto AWS<\/a>. Zaloguj si\u0119 na swoje konto AWS i pobierz swoje dane uwierzytelniaj\u0105ce. Te po\u015bwiadczenia b\u0119d\u0105 nam potrzebne w dalszej cz\u0119\u015bci samouczka.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20376-6081e7c8394ba.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20376-6081e7c8394ba.png\" alt=\"Zamiana mowy na tekst przy u\u017cyciu transkrypcji Amazon w PHP\" ><\/a><\/p>\n<p>Nast\u0119pnie zainstaluj bibliotek\u0119 <a href=\"https:\/\/github.com\/aws\/aws-sdk-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP AWS SDK<\/a> za pomoc\u0105 polecenia Composer:<\/p>\n<pre><code>composer require aws\/aws-sdk-php<\/code><\/pre>\n<p>Aby przekonwertowa\u0107 mow\u0119 na tekst, potrzebujesz gotowych plik\u00f3w multimedialnych. Dozwolone formaty multimedi\u00f3w to <code>mp3 | mp4 | wav | flac<\/code>. Opr\u00f3cz tego dost\u0119pnych jest kilka j\u0119zyk\u00f3w do konwersji mowy na tekst. Mo\u017cesz zobaczy\u0107 wszystkie obs\u0142ugiwane j\u0119zyki i podstawowe informacje o parametrach w ich <a href=\"https:\/\/docs.aws.amazon.com\/transcribe\/latest\/dg\/API_StartTranscriptionJob.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentacji<\/a>. U\u017cytkownik mo\u017ce konwertowa\u0107 mow\u0119 obs\u0142ugiwanych j\u0119zyk\u00f3w na tekst.<\/p>\n<p>Integruj\u0105c Amazon Transcribe w aplikacji, musimy zbudowa\u0107 przep\u0142yw w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<ul>\n<li>Prze\u015blij plik multimedialny do S3 Bucket.<\/li>\n<li>Utw\u00f3rz wyst\u0105pienie klienta Amazon Transscribe.<\/li>\n<li>Rozpocznij zadanie transkrypcji us\u0142ugi Amazon Transcribe, przekazuj\u0105c adres URL medi\u00f3w S3 i unikalny identyfikator zadania.<\/li>\n<li>Us\u0142uga Amazon Transscribe mo\u017ce potrwa\u0107 kilka minut, aby zako\u0144czy\u0107 proces t\u0142umaczenia. Wi\u0119c poczekaj na to.<\/li>\n<li>Pobierz plik tekstowy po zako\u0144czeniu przez AWS zadania transkrypcji.<\/li>\n<\/ul>\n<p>Zobaczmy, jak obs\u0142u\u017cy\u0107 ten przep\u0142yw z rzeczywistym kodem PHP.<\/p>\n<h3>Zamiana mowy na tekst przy u\u017cyciu transkrypcji Amazon w PHP<\/h3>\n<p>Najpierw utw\u00f3rz formularz HTML, w kt\u00f3rym u\u017cytkownicy mog\u0105 przegl\u0105da\u0107 plik multimedialny i nacisn\u0105\u0107 przycisk przesy\u0142ania. Po przes\u0142aniu pobieramy plik multimedialny do dalszego przetwarzania i na koniec wysy\u0142amy tekst t\u0142umaczenia z powrotem do przegl\u0105darki w formacie pliku \u201e.txt&quot;.<\/p>\n<pre><code>&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"file\" name=\"audio\" accept=\"audio\/*,video\/*\" \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Submit\" \/&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Po stronie PHP musisz wys\u0142a\u0107 plik multimedialny do us\u0142ugi AWS w celu przetworzenia, wi\u0119c do\u0142\u0105cz \u015brodowisko AWS w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>&lt;?php\nrequire 'vendor\/autoload.php';\n\u00a0\u00a0\nuse AwsS3S3Client;\nuse AwsTranscribeServiceTranscribeServiceClient;\n\u00a0\n\/\/ submission code<\/code><\/pre>\n<p>Nast\u0119pnie prze\u015blij plik multimedialny do zasobnika S3. I pobierz adres URL S3 przes\u0142anych multimedi\u00f3w.<\/p>\n<pre><code>if (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_mime_types = ['audio\/wav', 'audio\/mpeg', 'video\/mp4', 'audio\/x-flac'];\n\u00a0\u00a0\u00a0\u00a0if (!in_array($_FILES['audio']['type'], $arr_mime_types)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0die('File type is not allowed');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$region = 'PASS_REGION';\n\u00a0\u00a0\u00a0\u00a0$access_key = 'ACCESS_KEY';\n\u00a0\u00a0\u00a0\u00a0$secret_access_key = 'SECRET_ACCESS_KEY';\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Instantiate an Amazon S3 client.\n\u00a0\u00a0\u00a0\u00a0$s3 = new S3Client([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'version' =&gt; 'latest',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'region'\u00a0 =&gt; $region,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'credentials' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'key'\u00a0\u00a0\u00a0 =&gt; $access_key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; $secret_access_key\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$bucketName = 'PASS_BUCKET_NAME';\n\u00a0\u00a0\u00a0\u00a0$key = basename($_FILES['audio']['name']);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ upload file on S3 Bucket\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $s3-&gt;putObject([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Bucket' =&gt; $bucketName,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Key'\u00a0\u00a0\u00a0 =&gt; $key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Body'\u00a0\u00a0 =&gt; fopen($_FILES['audio']['tmp_name'], 'r'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'ACL'\u00a0\u00a0\u00a0 =&gt; 'public-read',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$audio_url = $result-&gt;get('ObjectURL');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Amazon Transcribe service start here\n\u00a0\u00a0\u00a0\u00a0}\u00a0 catch (Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Pami\u0119taj, aby zast\u0105pi\u0107 symbole zast\u0119pcze rzeczywistymi warto\u015bciami. Nast\u0119pnie musimy przekaza\u0107 adres URL przes\u0142anego multimedi\u00f3w do us\u0142ugi Amazon Transscribe. Wymaga r\u00f3wnie\u017c unikalnego identyfikatora pracy, kt\u00f3ry stworz\u0119 t\u0105 <code>uniqid()<\/code>metod\u0105.<\/p>\n<pre><code>\/\/ Create Amazon Transcribe Client\n$awsTranscribeClient = new TranscribeServiceClient([\n\u00a0\u00a0\u00a0\u00a0'region' =&gt; $region,\n\u00a0\u00a0\u00a0\u00a0'version' =&gt; 'latest',\n\u00a0\u00a0\u00a0\u00a0'credentials' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'key'\u00a0\u00a0\u00a0 =&gt; $access_key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; $secret_access_key\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\n\/\/ Start a Transcription Job\n$job_id = uniqid();\n$transcriptionResult = $awsTranscribeClient-&gt;startTranscriptionJob([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'LanguageCode' =&gt; 'en-US',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Media' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'MediaFileUri' =&gt; $audio_url,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'TranscriptionJobName' =&gt; $job_id,\n]);\n\u00a0\n$status = array();\nwhile(true) {\n\u00a0\u00a0\u00a0\u00a0$status = $awsTranscribeClient-&gt;getTranscriptionJob([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'TranscriptionJobName' =&gt; $job_id\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if ($status-&gt;get('TranscriptionJob')['TranscriptionJobStatus'] == 'COMPLETED') {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0sleep(5);\n}\n\u00a0\n\/\/ download the txt file<\/code><\/pre>\n<p>W powy\u017cszym kodzie tworzymy instancj\u0119 klienta transkrypcji Amazon i rozpoczynamy zadanie transkrypcji. Uko\u0144czenie procesu t\u0142umaczenia mo\u017ce potrwa\u0107 kilka minut. Obs\u0142u\u017cy\u0142em to za pomoc\u0105 p\u0119tli while i metody sleep(). Sprawdzam, czy proces si\u0119 ko\u0144czy co 5 sekund i przerywam p\u0119tl\u0119 po zako\u0144czeniu procesu.<\/p>\n<p>Mo\u017cesz zobaczy\u0107 ten proces transkrypcji na pulpicie nawigacyjnym AWS w zak\u0142adce <strong>Amazon Transcribe-&gt;Transkrypcja,<\/strong> jak pokazano na zrzucie ekranu poni\u017cej.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20376-6081e7c8394ba.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20376-6081e7c8394ba.png\" alt=\"Zamiana mowy na tekst przy u\u017cyciu transkrypcji Amazon w PHP\" ><\/a><\/p>\n<p>Na koniec pobierz plik, korzystaj\u0105c z poni\u017cszego kodu.<\/p>\n<pre><code>$url = $status-&gt;get('TranscriptionJob')['Transcript']['TranscriptFileUri'];\n$curl = curl_init();\ncurl_setopt($curl, CURLOPT_URL, $url);\ncurl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($curl, CURLOPT_HEADER, false);\n$data = curl_exec($curl);\nif (curl_errno($curl)) {\n\u00a0\u00a0\u00a0\u00a0$error_msg = curl_error($curl);\n\u00a0\u00a0\u00a0\u00a0echo $error_msg;\n}\ncurl_close($curl);\n$arr_data = json_decode($data);\n\u00a0\n\/\/ download a file\n$file = $job_id.\".txt\";\n$txt = fopen($file, \"w\") or die(\"Unable to open file!\");\nfwrite($txt, $arr_data-&gt;results-&gt;transcripts[0]-&gt;transcript);\nfclose($txt);\n\u00a0\nheader('Content-Description: File Transfer');\nheader('Content-Disposition: attachment; filename='.basename($file));\nheader('Expires: 0');\nheader('Cache-Control: must-revalidate');\nheader('Pragma: public');\nheader('Content-Length: '. filesize($file));\nheader(\"Content-Type: text\/plain\");\nreadfile($file);\nexit();<\/code><\/pre>\n<p>Ten kod wysy\u0142a wygenerowany plik tekstowy do przegl\u0105darki, aby u\u017cytkownik m\u00f3g\u0142 go pobra\u0107.<\/p>\n<h3>Kod pr\u00f3bki ko\u0144cowej<\/h3>\n<p>Kod napisany powy\u017cej jest porcjami. Je\u015bli chcesz mie\u0107 ca\u0142y kod razem, to wygl\u0105da nast\u0119puj\u0105co.<\/p>\n<pre><code>&lt;?php\nset_time_limit(0);\n\u00a0\nrequire 'vendor\/autoload.php';\n\u00a0\u00a0\nuse AwsS3S3Client;\nuse AwsTranscribeServiceTranscribeServiceClient;\n\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_mime_types = ['audio\/wav', 'audio\/mpeg', 'video\/mp4', 'audio\/x-flac'];\n\u00a0\u00a0\u00a0\u00a0if (!in_array($_FILES['audio']['type'], $arr_mime_types)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0die('File type is not allowed');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$region = 'PASS_REGION';\n\u00a0\u00a0\u00a0\u00a0$access_key = 'ACCESS_KEY';\n\u00a0\u00a0\u00a0\u00a0$secret_access_key = 'SECRET_ACCESS_KEY';\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Instantiate an Amazon S3 client.\n\u00a0\u00a0\u00a0\u00a0$s3 = new S3Client([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'version' =&gt; 'latest',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'region'\u00a0 =&gt; $region,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'credentials' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'key'\u00a0\u00a0\u00a0 =&gt; $access_key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; $secret_access_key\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$bucketName = 'PASS_BUCKET_NAME';\n\u00a0\u00a0\u00a0\u00a0$key = basename($_FILES['audio']['name']);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ upload file on S3 Bucket\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $s3-&gt;putObject([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Bucket' =&gt; $bucketName,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Key'\u00a0\u00a0\u00a0 =&gt; $key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Body'\u00a0\u00a0 =&gt; fopen($_FILES['audio']['tmp_name'], 'r'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'ACL'\u00a0\u00a0\u00a0 =&gt; 'public-read',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$audio_url = $result-&gt;get('ObjectURL');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Create Amazon Transcribe Client\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$awsTranscribeClient = new TranscribeServiceClient([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'region' =&gt; $region,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'version' =&gt; 'latest',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'credentials' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'key'\u00a0\u00a0\u00a0 =&gt; $access_key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; $secret_access_key\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Start a Transcription Job\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$job_id = uniqid();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$transcriptionResult = $awsTranscribeClient-&gt;startTranscriptionJob([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'LanguageCode' =&gt; 'en-US',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Media' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'MediaFileUri' =&gt; $audio_url,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'TranscriptionJobName' =&gt; $job_id,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$status = array();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0while(true) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$status = $awsTranscribeClient-&gt;getTranscriptionJob([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'TranscriptionJobName' =&gt; $job_id\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($status-&gt;get('TranscriptionJob')['TranscriptionJobStatus'] == 'COMPLETED') {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sleep(5);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$url = $status-&gt;get('TranscriptionJob')['Transcript']['TranscriptFileUri'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$curl = curl_init();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl_setopt($curl, CURLOPT_URL, $url);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl_setopt($curl, CURLOPT_HEADER, false);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data = curl_exec($curl);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (curl_errno($curl)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$error_msg = curl_error($curl);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $error_msg;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl_close($curl);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_data = json_decode($data);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ download a file\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$file = $job_id.\".txt\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$txt = fopen($file, \"w\") or die(\"Unable to open file!\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fwrite($txt, $arr_data-&gt;results-&gt;transcripts[0]-&gt;transcript);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fclose($txt);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Content-Description: File Transfer');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Content-Disposition: attachment; filename='.basename($file));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Expires: 0');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Cache-Control: must-revalidate');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Pragma: public');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Content-Length: '. filesize($file));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header(\"Content-Type: text\/plain\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0readfile($file);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exit();\n\u00a0\u00a0\u00a0\u00a0}\u00a0 catch (Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0}\n}\n?&gt;\n&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"file\" name=\"audio\" accept=\"audio\/*,video\/*\" \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Submit\" \/&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Mam nadziej\u0119, \u017ce rozumiesz, jak konwertowa\u0107 mow\u0119 na tekst za pomoc\u0105 Amazon Transscribe w PHP. Podziel si\u0119 swoimi przemy\u015bleniami i sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/text-to-speech-przy-uzyciu-amazon-polly-w-php\/\" title=\"Text-To-Speech przy u\u017cyciu Amazon Polly w PHP\">Text-To-Speech przy u\u017cyciu Amazon Polly w PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/przeslij-pliki-do-amazon-s3-za-pomoca-aws-php-sdk\/\" title=\"Prze\u015blij pliki do Amazon S3 za pomoc\u0105 AWS PHP SDK\">Prze\u015blij pliki do Amazon S3 za pomoc\u0105 AWS PHP SDK<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-przeslac-plik-do-s3-za-pomoca-systemu-plikow-laravel\/\" title=\"Jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel?\">Jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel?<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czy chcesz przekonwertowa\u0107 mow\u0119 na tekst za pomoc\u0105 Amazon Transscribe w PHP? Amazon Transscribe wykorzystuje proces g\u0142\u0119bokiego uczenia si\u0119 zwany mow\u0105 automatyczn\u0105<\/p>\n","protected":false},"author":1,"featured_media":21623,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[277],"tags":[847],"class_list":["post-28893","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=28893"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28893\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21623"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}