{"id":28113,"date":"2021-06-02T12:10:00","date_gmt":"2021-06-02T09:10:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28113"},"modified":"2021-10-18T04:05:21","modified_gmt":"2021-10-18T01:05:21","slug":"speech-to-text-usando-amazon-transcribe-em-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/speech-to-text-usando-amazon-transcribe-em-php\/","title":{"rendered":"Speech-To-Text usando Amazon Transcribe em PHP"},"content":{"rendered":"<p>Recentemente, estava trabalhando em um projeto em que fui apresentado ao servi\u00e7o <a href=\"https:\/\/aws.amazon.com\/transcribe\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Amazon Transcribe<\/a>. Quer\u00edamos adicionar o recurso de convers\u00e3o de voz em texto em nosso aplicativo. E descobrimos que o Amazon Transcribe \u00e9 a melhor op\u00e7\u00e3o para isso. O Amazon Transcribe usa um processo de aprendizado profundo denominado reconhecimento autom\u00e1tico de fala (ASR) para converter fala em texto com rapidez e precis\u00e3o.<\/p>\n<p>Neste artigo, mostro como converter fala em texto usando o Amazon Transcribe em PHP. Usaremos o pacote oficial do SDK da AWS desenvolvido para programa\u00e7\u00e3o PHP.<\/p>\n<h3>Come\u00e7ando<\/h3>\n<p>Para come\u00e7ar, voc\u00ea deve ter uma <a href=\"https:\/\/aws.amazon.com\/console\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">conta AWS<\/a>. Fa\u00e7a login em sua conta da AWS e obtenha suas credenciais de seguran\u00e7a. Exigiremos essas credenciais na parte posterior do tutorial.<\/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=\"Speech-To-Text usando Amazon Transcribe em PHP\" ><\/a><\/p>\n<p>Depois disso, instale a biblioteca <a href=\"https:\/\/github.com\/aws\/aws-sdk-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">AWS SDK PHP<\/a> usando o comando Composer:<\/p>\n<pre><code>composer require aws\/aws-sdk-php<\/code><\/pre>\n<p>Para converter a fala em texto, voc\u00ea precisa de seus arquivos de m\u00eddia prontos. Os formatos de m\u00eddia permitidos s\u00e3o <code>mp3 | mp4 | wav | flac<\/code>. Al\u00e9m disso, existem v\u00e1rios idiomas dispon\u00edveis para converter sua fala em texto. Voc\u00ea pode ver todos os idiomas suportados e itens b\u00e1sicos sobre par\u00e2metros em sua <a href=\"https:\/\/docs.aws.amazon.com\/transcribe\/latest\/dg\/API_StartTranscriptionJob.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o<\/a>. O usu\u00e1rio pode converter a fala de idiomas suportados em texto.<\/p>\n<p>Ao integrar o Amazon Transcribe no aplicativo, temos que construir o fluxo da seguinte forma:<\/p>\n<ul>\n<li>Fa\u00e7a upload do arquivo de m\u00eddia no S3 Bucket.<\/li>\n<li>Instancie um Amazon Transcribe Client.<\/li>\n<li>Inicie um trabalho de transcri\u00e7\u00e3o do Amazon Transcribe passando o URL de m\u00eddia S3 e o ID de trabalho exclusivo.<\/li>\n<li>O servi\u00e7o Amazon Transcribe pode levar alguns minutos para concluir o processo de tradu\u00e7\u00e3o. Ent\u00e3o espere por isso.<\/li>\n<li>Baixe o arquivo de texto ap\u00f3s a AWS concluir o trabalho de transcri\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>Vamos ver como lidar com esse fluxo com o c\u00f3digo PHP real.<\/p>\n<h3>Speech-To-Text usando Amazon Transcribe em PHP<\/h3>\n<p>Em primeiro lugar, crie um formul\u00e1rio HTML onde os usu\u00e1rios podem navegar no arquivo de m\u00eddia e clicar no bot\u00e3o enviar. Ap\u00f3s o envio, pegamos o arquivo de m\u00eddia para processamento posterior e, finalmente, enviamos um texto de tradu\u00e7\u00e3o de volta ao navegador no formato de arquivo &#8216;.txt&#8217;.<\/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>No final do PHP, voc\u00ea deve enviar o arquivo de m\u00eddia ao servi\u00e7o AWS para processamento, portanto, inclua o ambiente AWS da seguinte forma.<\/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>Depois disso, carregue o arquivo de m\u00eddia no balde S3. E pegue o URL S3 da m\u00eddia carregada.<\/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>Certifique-se de substituir os marcadores de posi\u00e7\u00e3o pelos valores reais. Em seguida, precisamos passar a URL da m\u00eddia carregada para o servi\u00e7o Amazon Transcribe. Ele tamb\u00e9m requer um ID de trabalho exclusivo, que criarei usando o <code>uniqid()<\/code>m\u00e9todo.<\/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>No c\u00f3digo acima, instanciamos o Amazon Transcribe Client e iniciamos o trabalho de transcri\u00e7\u00e3o. O processo de tradu\u00e7\u00e3o pode demorar alguns minutos. Eu lidei com isso usando o m\u00e9todo while loop e sleep(). Estou verificando se o processo \u00e9 conclu\u00eddo a cada 5 segundos e interrompendo o ciclo ao terminar o processo.<\/p>\n<p>Voc\u00ea pode ver esse processo de transcri\u00e7\u00e3o no painel da AWS em <strong>Amazon Transcribe-&gt; Transcription jobs,<\/strong> conforme mostrado na captura de tela abaixo.<\/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=\"Speech-To-Text usando Amazon Transcribe em PHP\" ><\/a><\/p>\n<p>Por fim, baixe o arquivo usando o c\u00f3digo abaixo.<\/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>Este c\u00f3digo envia o arquivo de texto gerado ao navegador para que o usu\u00e1rio possa baix\u00e1-lo.<\/p>\n<h3>C\u00f3digo de amostra final<\/h3>\n<p>O c\u00f3digo escrito acima est\u00e1 em blocos. Se voc\u00ea quiser um c\u00f3digo inteiro junto, \u00e9 o seguinte.<\/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>Espero que voc\u00ea entenda como converter fala em texto usando o Amazon Transcribe em PHP. Por favor, compartilhe seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/text-to-speech-usando-amazon-polly-em-php\/\" title=\"Text-To-Speech usando Amazon Polly em PHP\">Text-To-Speech usando Amazon Polly em PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/carregar-arquivos-para-o-amazon-s3-usando-aws-php-sdk\/\" title=\"Carregar arquivos para o Amazon S3 usando AWS PHP SDK\">Carregar arquivos para o Amazon S3 usando AWS PHP SDK<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-fazer-upload-de-arquivo-para-s3-usando-o-sistema-de-arquivos-laravel\/\" title=\"Como fazer upload de arquivo para S3 usando o sistema de arquivos Laravel\">Como fazer upload de arquivo para S3 usando o sistema de arquivos Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea deseja converter fala em texto usando o Amazon Transcribe em PHP? Amazon Transcribe usa um processo de aprendizado profundo chamado de fala autom\u00e1tica<\/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":[278],"tags":[848],"class_list":["post-28113","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28113"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28113\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21623"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}