{"id":25192,"date":"2021-06-02T12:25:00","date_gmt":"2021-06-02T09:25:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=25192"},"modified":"2021-10-17T20:29:43","modified_gmt":"2021-10-17T17:29:43","slug":"puhe-tekstiksi-kayttamalla-amazon-transcriptia-php-ssa","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fi\/puhe-tekstiksi-kayttamalla-amazon-transcriptia-php-ssa\/","title":{"rendered":"Puhe-tekstiksi k\u00e4ytt\u00e4m\u00e4ll\u00e4 Amazon Transcripti\u00e4 PHP: ss\u00e4"},"content":{"rendered":"<p>Viime aikoina ty\u00f6skentelin projektissa, jossa minulle esiteltiin <a href=\"https:\/\/aws.amazon.com\/transcribe\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Amazon Transcribe<\/a> -palvelu. Halusimme lis\u00e4t\u00e4 sovelluksellemme ominaisuuden muuntaa puhe tekstiksi. L\u00f6ysimme, ett\u00e4 Amazon Transcribe sopii siihen parhaiten. Amazon Transcribe k\u00e4ytt\u00e4\u00e4 syv\u00e4\u00e4 oppimisprosessia, jota kutsutaan automaattiseksi puheentunnistukseksi (ASR) muuntaa puhe tekstiksi nopeasti ja tarkasti.<\/p>\n<p>T\u00e4ss\u00e4 artikkelissa n\u00e4yt\u00e4n sinulle, kuinka puhe voidaan muuntaa tekstiksi Amazon Transcribe -ohjelmalla PHP: ss\u00e4. K\u00e4yt\u00e4mme virallista AWS SDK -pakettia, joka on rakennettu PHP-ohjelmointiin.<\/p>\n<h3>P\u00e4\u00e4st\u00e4 alkuun<\/h3>\n<p>Aloittamiseksi sinulla on oltava <a href=\"https:\/\/aws.amazon.com\/console\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">AWS-tili<\/a>. Kirjaudu AWS-tilillesi ja tartu suojaustiedoihisi. Vaadimme n\u00e4m\u00e4 tunnistetiedot opetusohjelman my\u00f6hemm\u00e4ss\u00e4 osassa.<\/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=\"Puhe-tekstiksi k\u00e4ytt\u00e4m\u00e4ll\u00e4 Amazon Transcripti\u00e4 PHP: ss\u00e4\" ><\/a><\/p>\n<p>Asenna t\u00e4m\u00e4n j\u00e4lkeen <a href=\"https:\/\/github.com\/aws\/aws-sdk-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">AWS SDK PHP<\/a> -kirjasto Composer-komennolla:<\/p>\n<pre><code>composer require aws\/aws-sdk-php<\/code><\/pre>\n<p>Puheen muuntamiseksi tekstiksi tarvitset mediatiedostosi valmiina. Sallitut mediamuodot ovat <code>mp3 | mp4 | wav | flac<\/code>. T\u00e4m\u00e4n lis\u00e4ksi on olemassa useita kieli\u00e4, joilla puheesi voidaan muuntaa tekstiksi. N\u00e4et kaikki tuetut kielet ja parametrien perustiedot niiden <a href=\"https:\/\/docs.aws.amazon.com\/transcribe\/latest\/dg\/API_StartTranscriptionJob.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentaatiosta<\/a>. K\u00e4ytt\u00e4j\u00e4 voi muuntaa tuettujen kielten puheen tekstiksi.<\/p>\n<p>Integroimalla Amazon Transcribe sovellukseen, meid\u00e4n on rakennettava virtaus seuraavasti:<\/p>\n<ul>\n<li>Lataa mediatiedosto S3 Bucketiin.<\/li>\n<li>V\u00e4lit\u00e4 Amazon Transcribe Client.<\/li>\n<li>Aloita Amazon Transcriben transkriptioty\u00f6 v\u00e4litt\u00e4m\u00e4ll\u00e4 S3: n media-URL ja yksil\u00f6llinen ty\u00f6n tunnus.<\/li>\n<li>Amazon Transcribe -palvelun k\u00e4\u00e4nn\u00f6sprosessi saattaa kest\u00e4\u00e4 muutaman minuutin. Joten odota sit\u00e4.<\/li>\n<li>Lataa tekstitiedosto sen j\u00e4lkeen, kun AWS on suorittanut transkriptioty\u00f6n.<\/li>\n<\/ul>\n<p>Katsotaanpa, kuinka k\u00e4sitell\u00e4 t\u00e4t\u00e4 kulkua todellisen PHP-koodin kanssa.<\/p>\n<h3>Puhe-tekstiksi k\u00e4ytt\u00e4m\u00e4ll\u00e4 Amazon Transcripti\u00e4 PHP: ss\u00e4<\/h3>\n<p>Luo ensin HTML-lomake, jossa k\u00e4ytt\u00e4j\u00e4t voivat selata mediatiedostoa ja painaa L\u00e4het\u00e4-painiketta. L\u00e4hetett\u00e4ess\u00e4 toimitamme mediatiedoston jatkok\u00e4sittelyyn ja lopulta l\u00e4het\u00e4mme k\u00e4\u00e4nn\u00f6stekstin takaisin selaimeen .txt-tiedostomuodossa.<\/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>PHP-lopussa sinun on l\u00e4hetett\u00e4v\u00e4 mediatiedosto AWS-palvelulle k\u00e4sittely\u00e4 varten, joten sis\u00e4llyt\u00e4 AWS-ymp\u00e4rist\u00f6 seuraavasti.<\/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>T\u00e4m\u00e4n j\u00e4lkeen lataa mediatiedosto S3-\u00e4mp\u00e4riin. Tartu sitten ladatun median S3-URL-osoitteeseen.<\/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>Muista korvata paikkamerkit todellisilla arvoilla. Seuraavaksi meid\u00e4n on l\u00e4hetett\u00e4v\u00e4 ladattu media-URL Amazon Transcribe -palvelulle. Se vaatii my\u00f6s ainutlaatuisen ty\u00f6tunnuksen, jonka luon <code>uniqid()<\/code>menetelm\u00e4ll\u00e4.<\/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>Yll\u00e4 olevassa koodissa me v\u00e4lit\u00e4mme Amazon Transcribe Client -sovelluksen ja aloitamme transkriptioty\u00f6n. K\u00e4\u00e4nn\u00f6ksen suorittaminen voi kest\u00e4\u00e4 muutaman minuutin. Olen k\u00e4sitellyt sen k\u00e4ytt\u00e4en while loop and sleep() -menetelm\u00e4\u00e4. Tarkistan, onko prosessi valmis 5 sekunnin v\u00e4lein, ja katkaisen silmukan prosessin p\u00e4\u00e4tytty\u00e4.<\/p>\n<p>N\u00e4et t\u00e4m\u00e4n transkriptioprosessin AWS-hallintapaneelissa <strong>Amazon Transcriptione-&gt; Transcription -ty\u00f6t<\/strong> -kohdassa alla olevan kuvakaappauksen mukaisesti.<\/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=\"Puhe-tekstiksi k\u00e4ytt\u00e4m\u00e4ll\u00e4 Amazon Transcripti\u00e4 PHP: ss\u00e4\" ><\/a><\/p>\n<p>Lataa lopuksi tiedosto alla olevalla koodilla.<\/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>T\u00e4m\u00e4 koodi l\u00e4hett\u00e4\u00e4 luodun tekstitiedoston selaimeen, jotta k\u00e4ytt\u00e4j\u00e4 voi ladata sen.<\/p>\n<h3>Lopullinen n\u00e4ytekoodi<\/h3>\n<p>Yll\u00e4 kirjoitettu koodi on paloina. Jos haluat kokonaisen koodin yhdess\u00e4, se on seuraava.<\/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>Toivon, ett\u00e4 ymm\u00e4rr\u00e4t kuinka muuntaa puhe tekstiksi Amazon Transcribe -ohjelmalla PHP: ss\u00e4. Jaa ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.<\/p>\n<h4>Aiheeseen liittyv\u00e4t artikkelit<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/teksti-puheeksi-kayttamalla-amazon-pollya-php-ssa\/\" title=\"Teksti puheeksi k\u00e4ytt\u00e4m\u00e4ll\u00e4 Amazon Polly\u00e4 PHP: ss\u00e4\">Teksti puheeksi k\u00e4ytt\u00e4m\u00e4ll\u00e4 Amazon Polly\u00e4 PHP: ss\u00e4<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/lataa-tiedostot-amazon-s3-een-aws-php-sdk-n-avulla\/\" title=\"Lataa tiedostot Amazon S3: een AWS PHP SDK: n avulla\">Lataa tiedostot Amazon S3: een AWS PHP SDK: n avulla<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-ladata-tiedosto-s3-een-laravel-tiedostojarjestelman-avulla\/\" title=\"Kuinka ladata tiedosto S3: een Laravel-tiedostoj\u00e4rjestelm\u00e4n avulla\">Kuinka ladata tiedosto S3: een Laravel-tiedostoj\u00e4rjestelm\u00e4n avulla<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Haluatko muuntaa puheen tekstiksi Amazon Transcribe -ohjelmalla PHP: ss\u00e4? Amazon Transcribe k\u00e4ytt\u00e4\u00e4 syv\u00e4\u00e4 oppimisprosessia, jota kutsutaan automaattiseksi puheeksi<\/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":[275],"tags":[843],"class_list":["post-25192","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-6","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/25192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/comments?post=25192"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/25192\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media\/21623"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media?parent=25192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/categories?post=25192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/tags?post=25192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}