Tabla de contenidos

Introducción

En este tutorial, vamos a crear una aplicación que permite analizar el texto a través de la cámara del teléfono y hablar hacia fuera para usted.

Aprende, Código, Desarrollar bandera de Zenva

Si desea seguir con el tutorial, todo lo que necesita es la unidad y una conexión a Internet.

Puede descargar el proyecto completo desde aquí.

No se pierda! extremos de la oferta en

  • Accede a los más de 200 cursos
  • Nuevos cursos añadió mensual
  • Cancelar en cualquier momento
  • Los certificados de terminación

    ACCESO ahora

    Configuración de Visión por Computador

    En este tutorial, vamos a utilizar Microsoft de Azure cognitivos Servicios . Estos son los servicios de aprendizaje automático que nos ha proporcionado por Microsoft. El primero vamos a estar recibiendo es la visión de computadora. Esto nos permite enviar imágenes a la API y devolver un archivo JSON que contiene el texto de la imagen.

    Yo quiero informarle antes de continuar – el uso de este servicio requerirá una tarjeta de crédito / débito / banco. Los primeros 30 días son gratis y se puede optar por cancelar o continuar después.

    Para empezar, vaya a la página de registro de Azure y haga clic en Inicio libre .

    página de inicio Microsoft Azure

    Rellene el formulario de registro. Tendrá que verificar su cuenta con un número de teléfono y la tarjeta de información (que no se le cobrará a menos que actualice su cuenta).

    página de registro Microsoft Azure

    Una vez hecho esto, se puede navegar en el portal. Haga clic en el botón Crear un recurso .

    Microsoft Azure tablero de instrumentos para la creación de un servicio

    Búsqueda de Computer Vision y, a continuación, haga clic en Crear .

    página de servicio de Microsoft Azure de Visión por Computador

    A continuación, se puede rellenar la información de nuestro servicio de Visión por Computador.


    • Establecer la ubicación en la que wantSet la franja de precios a F0 (gratis) Crear un nuevo grupo de recursos

      Una vez hecho esto, podemos hacer clic en el botón Crear .

      Computer Vision Crear opciones de servicio en Microsoft Azure

      El recurso va a comenzar ahora a implementar. Cuando es completo, usted debe ser capaz de hacer clic en el botón Ir a los recursos .

      El despliegue de mensaje de progreso para el servicio Microsoft Azure

      Al llegar al recurso, vaya a la pestaña Descripción y copiar el Punto final . Esta es la URL vamos a utilizar para conectarse a la API. A continuación, haga clic en el botón Mostrar teclas de acceso … para ver nuestras llaves.

      Microsoft Azure imagen de la página Analizador

      A continuación, queremos copiar la clave de teclas 1 . Esto le permitirá identificar con nosotros cuando se llama a la API.

      página ImageAnalyzer Claves para Microsoft Azure

      Configuración de texto a voz

      Aún en el portal de Azure, vamos a configurar nuestro texto para el servicio de voz. Esto se hace a través de la Voz servicio cognitiva.

      página de servicio de Microsoft Azure Speech

      Puesto que estamos utilizando la licencia libre, que está restringido en este recurso para utilizar solamente en la Oeste de Estados Unidos ubicación. Con la seleccionada, sin embargo, elegir el F0 franja de precios (la gratuita). Asegúrese también para establecer el Grupo de recursos a ser el mismo que el de Visión por Computador.

      Speech opciones de creación de servicios de Microsoft Azure

      Al igual que antes, espera para el recurso para desplegar, a continuación, haga clic en el botón botón Ir al sitio web . En esta página, ir a la pestaña Descripción . Aquí, queremos copiar el Punto final , a continuación, haga clic en el menú Mostrar teclas de acceso … .

      página de servicio de Microsoft Azure ImageTextToSpeech

      A continuación, queremos copiar el Nombre (esto es nuestra nombre de recurso ) y clave 1 .

      llaves Microsoft Azure ImageTextToSpeech

      Configuración del Proyecto

      No es un activo que necesitamos para este proyecto de trabajo, y eso es simplejson . Simplejson nos permite convertir fácilmente un archivo JSON prima a una estructura de objetos que podemos utilizar fácilmente en un script.

      Descargar simplejson de GitHub.

      Simple página JSON github

      En la Unidad, crear un nuevo proyecto en 2D y asegúrese de que Proyección de la cámara se define en ortográfico . Puesto que estamos utilizando en 3D, lo que hace la profundidad no es necesario.

      Cámara Unidad Principal de la ventana Inspector

      También vamos a hacer Antecedentes de la cámara de color negro por lo que si hay un problema con la cámara del dispositivo, sólo tendremos que ver negro.

      La unidad con el fondo de la cámara establece en negro

      UI

      Ahora podemos trabajar en la interfaz de usuario. Vamos a empezar por la creación de un lienzo (clic derecho Jerarquía > interfaz de usuario> Canvas ).

      proyecto Unity con IU lienzo añadido

      Como hijo de la tela, crear un nuevo TextMeshPro – Objeto de texto (puede que tenga que importar algunos elementos esenciales TMP). Esto va a mostrar el texto que extraemos de la imagen.


      • Establecer el anclaje a la parte inferior-stretchSet Altura de 200


        Para hacer que nuestro texto legible en una pantalla móvil, vamos a cambiar algunas propiedades:


        • Establecer fuente Estilo de fuente Tamaño BoldSet a 60set alineación de centro, medio

          También puede eliminar el texto “Nuevo texto”, ya que no queremos nada hay por defecto.

          ajustes de texto Unidad TextMeshPro en ventana de inspección

          Ahora tenemos que añadir un objeto de imagen sin procesar a la lona (llamarlo CameraProjection ). Esto va a ser lo aplicamos nuestra WebCamTexture frontal (la textura que hace que lo que ve nuestra cámara del dispositivo). Asegúrese de que está en la parte superior del texto en la Jerarquía (esto hace que el texto hacen en frente).

          Unidad Rect Transformada de componente para el elemento de interfaz de usuario

          Eso es todo por nuestra interfaz de usuario! Vamos a mover hacia el scripting ahora.

          CameraController escritura

          Antes de hacer un guión, vamos a crear un nuevo GameObject (clic derecho Jerarquía > Crea vacío ) y lo llaman _AppManager . Esto mantendrá todos nuestros scripts.

          _ objeto AppManager como se ve en el Inspector Jerarquía y unidad

          Crear un nuevo C # script (derecha haga clic en proyecto > Crear> C # script ) llamado CameraController y arrastrarlo a la _AppManager objeto. Este script hará que lo que ve la cámara del dispositivo a un WebCamTexture, a continuación, en la interfaz de usuario.

          Tenemos que añadir la biblioteca de interfaz de usuario de la Unidad a nuestros utilizando espacios de nombres.
          utilizando UnityEngine.UI;.

          A continuación, vamos a añadir nuestras variables
          // IU RawImage estamos aplicando la web cam textura topublic RawImage cameraProjection; // textura que muestra lo que nuestra cámara es seeingprivate WebCamTexture camText; // 12345 UI RawImage estamos aplicando la leva textura topublicRawImage cameraProjection web; // textura que las pantallas lo que nuestra cámara es seeingprivateWebCamTexture camText;.

          Inicio función, vamos a crear un nuevo WebCamTexture, asignarlo a la interfaz de usuario y empezar a jugar
          vacío Inicio () {// crear la cámara textura Camtex = new WebCamTexture (screen.width, Screen.Height); cameraProjection.texture = CAMTEX; camTex.Play ();} 1234567voidStart () {// crear la cámara texturecamTex = newWebCamTexture (screen.width, Screen.Height); cameraProjection.texture = Camtex; camTex.Play ();}

          La función principal va siendo takePicture . Esta será una co-rutina, porque tenemos que esperar un fotograma al inicio. La función convierte los píxeles de la Camtex a una matriz de bytes -. Lo que vamos a enviar a la API de Visión por Computador
          // toma una imagen y convierte los datos a un byte arrayIEnumerator takePicture () {rendimiento de retorno nuevo WaitForEndOfFrame (); // crear una nueva textura del tamaño de la textura de leva de la tela Texture2D screenTex = nuevo Texture2D (camTex.width, camTex.height); // leer los píxeles en la textura cámara web y aplicarlos screenTex.SetPixels (camTex.GetPixels ()); screenTex.Apply (); // convertir la textura a PNG, a continuación, obtener los datos como un byte array byte [] byteData = screenTex.EncodeToPNG (); // enviar los datos de imagen fuera de la API de Visión por Computador // … vamos a llamar a esta función en otro script pronto 123456789101112131415161718} // toma una imagen y convierte los datos a un byte arrayIEnumerator takePicture () {returnnewWaitForEndOfFrame rendimiento () ; // crear una nueva textura del tamaño de la leva de la tela textureTexture2D screenTex = newTexture2D (camTex.width, camTex.height); // leer los píxeles en la textura de leva de la tela y aplicar themscreenTex.SetPixels (camTex.GetPixels ()); screenTex.Apply (); // convertir la textura a PNG, a continuación, obtener los datos como un arraybyte byte [] = byteData screenTex.EncodeToPNG (); // enviar los datos de imagen fuera de la API de Visión por Computador // … nosotros ‘ll llamar a esta función en otro script pronto}

          a continuación, en el Actualizar función, podemos desencadenar esta co-rutina por una prensa de ratón (para la prueba en el editor), o un toque en la pantalla.
          vacío Update () {// clic / entrada táctil para tomar una foto si (Input.GetMouseButtonDown (0)) StartCoroutine (takePicture ()); else if (Input.touchCount> 0 && Input.touches [0] == .phase TouchPhase.Began) StartCoroutine (takePicture ());} 12345678voidUpdate () {// clic / entrada táctil para tomar una pictureif (Input.GetMouseButtonDown ( 0)) StartCoroutine (takePicture ()); elseif (Input.touchCount> 0 && Input.touches [0] == .phase TouchPhase.Began) StartCoroutine (takePicture ());}

          ahora podemos volver al Editor , y arrastre en la CameraProjection objeto a la secuencia de comandos.

          objeto Unidad CameraProjection añadido a la cámara Controller

          AppManager escritura

          Crear un nuevo guión C # llamado AppManager y adjuntarlo al objeto también. Este script envía los datos de imagen a la API de Visión por Computador y recibe un archivo JSON que luego extraer el texto de.

          Comenzaremos añadiendo utilizando en nuestros espacios de nombres.
          utilizando UnityEngine.Networking; usando simplejson; usando TMPro; 123usingUnityEngine.Networking; usingSimpleJSON; usingTMPro;

          Nuestras primeras variables son lo que necesitamos para conectarse a la API .
          // Visión por Computador de suscripción subclave keypublic cadena; // Computer Vision API urlpublic String url, 12345 // Visión por Computador de suscripción keypublicstringsubKey; // Computer Vision API urlpublicstringurl;

          A continuación, tenemos que el elemento de texto de interfaz de usuario que realiza antes de
          // el texto en pantalla, que muestra el texto que hemos analyzedpublic TextMeshProUGUI uiText; 12 // texto en pantalla que muestra el texto que hemos analyzedpublicTextMeshProUGUI uiText;

          Desde tendrá que ser visitada por el texto a este script uno -speech (vamos a hacer que la próxima), vamos a crear una instancia del mismo.
          // ejemplo AppManager estática instancepublic; void Awake () {// establecer la instancia instancia = esta;} 12345678 // ejemplo instancepublicstaticAppManager; voidAwake () {// establecer la instanceinstance = esta;}

          La función principal es un co -routine la que va a hacer lo que he mencionado anteriormente.
          // envía la imagen a la Visión API y vuelve ordenador un IEnumerator getImageData JSON filepublic (byte [] propiedad imageData) {} // 12345 envía la imagen a la Visión API y vuelve ordenador un filepublicIEnumerator getImageData JSON (byte [] propiedad imageData) {}

          En primer lugar, vamos a hacer el show texto que estamos calculando.
          uiText.text = « [Calculando …] «; 1uiText.text = « [Calculando …] «;

          A continuación, tenemos que crear una web solicitar (uso del sistema de la Unidad). Ajuste del método a Publicar , significa que vamos a estar enviando datos al servidor.
          // crear una solicitud de web y establecer el método para POSTUnityWebRequest webReq = new UnityWebRequest (url); webReq.method = UnityWebRequest.khttpVerbPOST; 123 // crear una solicitud de web y establecer el método para POSTUnityWebRequest webReq = newUnityWebRequest (url); webReq. method = UnityWebRequest.khttpVerbPOST;.

          un controlador de descarga es cómo vamos a acceder al fichero JSON vez, la imagen ha sido analizado y obtener un resultado
          // crear un controlador de descarga para recibir el JSON filewebReq.downloadHandler = new DownloadHandlerBuffer (); 12 // crear un controlador de descarga para recibir el JSON filewebReq.downloadHandler = newDownloadHandlerBuffer ();.

          Configuración y luego nos dejó el controlador de carga
          // cargar la imagen datawebReq.uploadHandler = new UploadHandlerRaw (propiedad imageData); webReq.uploadHandler.contentType = «application / octet-stream»; 123 // cargar la imagen datawebReq.uploadHandler = newUploadHandlerRaw (propiedad imageData); webReq.uploadHandler.contentType = «application / octet-stream»;.

          también es necesario añadir nuestra clave de suscripción a las cabeceras
          // establecer la headerwebReq.SetRequestHeader ( «Ocp-Apim-suscripción-Key», subclave); 12 // Establecer el headerwebReq.SetRequestHeader ( «Ocp-Apim-suscripción-Key», subclave);

          Con que todo hecho , vamos a enviar la petición web y esperar a consecuencia de ello.
          // enviar el contenido a la API y la espera para un retorno responseyield webReq.SendWebRequest (); // 12 enviar el contenido a la API y espera por una returnwebReq.SendWebRequest responseyield ();

          Ahora que tenemos nuestros datos, vamos a convertirlo en un objeto JSON usando simplejson.
          // convertir la cadena de contenido a un JSON fileJSONNode jsonData = JSON.parse (webReq.downloadHandler.text); 12 // convertir la cadena de contenido a un JSON fileJSONNode jsonData = JSON.parse (webReq.downloadHandler.text);

          con esto, queremos extraer sólo el texto legible (una función que va a hacer a continuación), a continuación, mostrar el texto en la pantalla.
          // obtener sólo el texto del archivo JSON y visualización en screenstring imagetext = GetTextFromJSON (jsonData); uiText.text = imagetext; // enviar el texto al texto de la API de voz … // llamada en otro script que’ ll hacer soon123456 // obtener sólo el texto del archivo JSON y visualización en screenstringimageText = GetTextFromJSON (jsonData); uiText.text = imagetext; // enviar el texto al texto de la API de voz … // llamada en otro script haremos pronto

          la GetTextFromJSON función, toma en un objeto JSON y extractos sólo el texto que ha sido analizada en la imagen y lo devuelve como una cadena.
          // devuelve el texto de la JSON datastring GetTextFromJSON (JSONNode jsonData) {text string = «»; líneas JSONNode = jsonData [ «regiones»] [0] [ «líneas»]; // bucle a través de cada foreach línea (línea JSONNode en lines.Children) {// bucle a través de cada palabra en el foreach línea (JSONNode palabra en línea [ «palabras»]. Niños) {// añadir el texto texto + = palabra [ «texto»] + » «; }} Texto retorno;} 12345678910111213141516171819 // devuelve el texto de la JSON datastringGetTextFromJSON (JSONNode jsonData) {stringtext = «»; líneas JSONNode = jsonData [ «regiones»] [0] [ «líneas»]; // bucle a través de cada lineforeach (JSONNode línea inlines.Children) {// bucle a través de cada palabra en el lineforeach (JSONNode palabra inline [ «palabras»] niños.) {// añadir el Texttext + = palabra [ «texto»] +» «;}} returntext; }

          ahora vamos a volver a la CameraController guión y hasta la parte inferior de la función takePicture. A continuación, vamos a enviar los datos de imagen a la AppManager script para ser analizada.
          … // enviar los datos de imagen fuera de la Visión por Computador API AppManager.instance.StartCoroutine ( «getImageData», byteData);} 1234 … // enviar los datos de imagen fuera de la Visión APIAppManager.instance.StartCoroutine ordenador ( «getImageData», byteData);}

          de nuevo en el Editor, añadir la clave de suscripción de Visión por Computador y la URL de punto final con /v2.0/ocr al final. El mío es: https://australiaeast.api.cognitive.microsoft.com/vision/v2.0/ocr

          Texto Unidad de malla Pro objeto añadido al componente App Manager

          TextToSpeech escritura

          Crear un nuevo guión C # llamado TextToSpeech y adjuntar esto a la objeto _AppManager. Este script se llevará en el texto, enviarlo a la API de voz y reproducir la voz TTS.

          Vamos a necesitar solamente el espacio de nombres de red para este script.
          utilizando UnityEngine.Networking; 1usingUnityEngine.Networking;.

          Desde que estamos jugando un clip de audio a través de este guión, que tendrá que asegurarse de que no está pegado un AudioSource
          [RequireComponent (typeof (AudioSource))] TextToSpeech clase pública: MonoBehaviour {123 [RequireComponent (typeof (AudioSource))] publicclassTextToSpeech: MonoBehaviour {

          Para nuestros primeras variables, vamos a realizar un seguimiento de la información que necesitamos conectarse a la API.
          // TTS suscripción keypublic subclave cadena; // TTS servicio región cadena regionpublic; // TTS cadena namepublic recursos resourceName; // 12345678 TTS suscripción keypublicstringsubKey; // TTS regionpublicstringregion servicio; // TTS namepublicstringresourceName recursos;

          Entonces necesitamos no perder de vista nuestra token de acceso y la fuente de audio.
          // señal necesaria para acceder al TTS APIprivate cadena accessToken; // fuente de audio para reproducir el TTS voiceprivate AudioSource ttsSource; // 12345 token de acceso necesario para el TTS APIprivatestringaccessToken; // fuente de audio para reproducir el TTS voiceprivateAudioSource ttsSource;

          Finalmente , vamos a crear una instancia y la pusieron en el función despierto.
          // ejemplo TextToSpeech estática instancepublic; void Awake () {// establecer la instancia instancia = esta; // obtener la fuente de audio ttsSource = getComponent ();} 1234567891011 // ejemplo instancepublicstaticTextToSpeech; voidAwake () {// Establecer el instanceinstance = esta; // obtener el audio sourcettsSource = getComponent ();} < p> lo primero que tendremos que hacer es crear una función para obtener un token de acceso. Se necesita esta señal con el fin de utilizar la API.
          // necesitamos un token de acceso antes de hacer llamadas de voz a la APIIEnumerator GetAccessToken () {} // 12345 necesitamos un token de acceso antes de hacer llamadas de voz a la APIIEnumerator GetAccessToken () {}

          Paso 1, es crear una nueva solicitud web y establecer la URL para que sea el punto final con nuestra región incluido.
          // crear una solicitud de web y establecer el método para POSTUnityWebRequest webReq = new UnityWebRequest (string.Format ( «https: // {0} .api.cognitive.microsoft.com / pts / v1.0 / issuetoken», región)) ; webReq.method = UnityWebRequest.khttpVerbPOST; // crear un controlador de descarga para recibir el acceso tokenwebReq.downloadHandler = new DownloadHandlerBuffer (); // 123456 crear una solicitud web y establecer el método de POSTUnityWebRequest webReq = newUnityWebRequest (string.Format (» https: // {0} .api.cognitive.microsoft.com / pts / v1.0 / issuetoken», región)); webReq.method = UnityWebRequest.khttpVerbPOST; // crear un controlador de descarga para recibir el acceso tokenwebReq.downloadHandler = newDownloadHandlerBuffer ();.

          a continuación, podemos establecer el encabezado de la solicitud que contiene la llave de la sub y lo envía fuera
          // establecer el headerwebReq.SetRequestHeader ( «OCP Apim-suscripción-Key», subclave); // enviar la solicitud y esperar un retorno webReq.SendWebRequest responseyield (); // 12345 ajustar la headerwebReq.SetRequestHeader ( «Ocp- Apim-suscripción-Key», subclave); // enviar la solicitud y esperar una returnwebReq.SendWebRequest responseyield ();

          Cuando obtenemos un resultado, cheque por un error y registrarla en caso afirmativo. De lo contrario, establecer nuestra token de acceso.
          // si conseguimos un error – log y returnif (webReq.isHttpError) {debug.log (webReq.error); yield break;} // establece lo contrario el acceso tokenaccessToken = webReq.downloadHandler.text; 123456789 // si conseguimos un error – log y returnif (webReq.isHttpError) {debug.log (webReq.error); yield break;} // establecer de otro modo el acceso tokenaccessToken = webReq.downloadHandler.text;.

          Una vez hecho esto, podemos llamar a la co-rutina en el Inicio , función
          vacío Inicio () {// antes de que podamos hacer nada, necesitamos un token de acceso StartCoroutine (GetAccessToken ());} 12345voidStart () {// antes de que podamos hacer nada, necesitamos una tokenStartCoroutine de acceso (GetAccessToken ());}

          ahora el trabajo de Let en el GetSpeech función (co-rutina), el cual se enviará el texto a la API y devolver un mensaje de voz.
          // envía el texto a la API de voz de audio y vuelve datapublic IEnumerator GetSpeech (cadena de texto) {} // 12345 envía el texto a la API de voz de audio y vuelve datapublicIEnumerator GetSpeech (stringtext) {}

          La primera cosa que necesitamos hacer, es crear el cuerpo. Aquí es donde vamos a almacenar la información de la API para leer.
          // crear el cuerpo – que especifica el texto, voz, lenguaje, etcstring = cuerpo @ « » + texto + « «; 123 // crear el cuerpo – que especifica el texto, voz, lenguaje, etcstringbody = @ « «+ texto +» «;.

          a continuación, como antes, podemos crear una nueva solicitud web
          // crear una solicitud de web y establecer el método para POSTUnityWebRequest webReq = new UnityWebRequest (string.Format ( «https: // {0} .tts.speech.microsoft.com / cognitiveservices / v1», región)); webReq.method = UnityWebRequest.kHttpVerbPOST; // crear un controlador de descarga para recibir el audio datawebReq.downloadHandler = new DownloadHandlerBuffer (); // 123456 crear una petición web y establecer el método para POSTUnityWebRequest webReq = newUnityWebRequest (string.Format ( «https: // {0} .tts.speech.microsoft.com / cognitiveservices / V1» , región)); webReq.method = UnityWebRequest.kHttpVerbPOST; // crear un controlador de descarga para recibir el audio datawebReq.downloadHandler = newDownloadHandlerBuffer ();

          a continuación, se desea cargar el cuerpo de la solicitud.
          // establecer el cuerpo para ser uploadedwebReq.uploadHandler = nuevos UploadHandlerRaw (System.Text.Encoding.UTF8.GetBytes (cuerpo)); webReq.uploadHandler.contentType = «application / SSML + xml»; 123 // conjunto del cuerpo para ser uploadedwebReq.uploadHandler = newUploadHandlerRaw (System.Text.Encoding.UTF8.GetBytes (cuerpo)); webReq.uploadHandler.contentType = «application / xml SSML +»;

          A continuación, vamos a establecer las cabeceras, lo que nos identificar y también incluir algo de información para el audio de retorno.
          // establecer el headerswebReq.SetRequestHeader ( «Autorización», «portador» + accessToken); webReq.SetRequestHeader ( «User-Agent», resourceName); webReq.SetRequestHeader ( «X-Microsoft-OutputFormat», «rif-24kHz-16bit -mono-PCM «); // 1234 establece la headerswebReq.SetRequestHeader (» Autorización » «portador «+ accessToken); webReq.SetRequestHeader (» User-Agent», resourceName); webReq.SetRequestHeader (» X-Microsoft-OutputFormat «, «rif-24kHz-16bit-mono-PCM»);

          Ahora puede enviar la solicitud y esperar un resultado. Si obtenemos un error, el retorno.
          // enviar la solicitud y esperar un retorno webReq.SendWebRequest responseyield (); // si hay un problema – yield break returnif (webReq.isHttpError); // reproducir los audioStartCoroutine (PlayTTS (webReq.downloadHandler.data)); 123456789 // enviar la solicitud y espera por una returnwebReq.SendWebRequest responseyield (); // si hay un problema – yield break returnif (webReq.isHttpError); // reproducir los audioStartCoroutine (PlayTTS (webReq.downloadHandler.data));

          La PlayTTS / strong>, función <(co-rutina) realiza en los datos de audio como una matriz de bytes y lo guarda como un archivo temporal .wav . Luego cargamos en que, convertirlo en un clip de audio y reproducirlo a través de la fuente de audio.
          // convierte los datos de audio y reproduce los PlayTTS clipIEnumerator (byte [] AudioData) {// guardar los datos de audio temporalmente como una cadena archivo .wav temppath = Application.persistentDataPath + «/tts.wav»; System.IO.Fil.WriteAllBytes (TempPath, AudioData); // carga ese archivo en UnityWebRequest loader = UnityWebRequestMultimedia.GetAudioClip (TempPath, AudioType.WAV); producir loader.SendWebRequest retorno (); // convertirlo a un clip de audio AudioClip ttsClip = DownloadHandlerAudioClip.GetContent (loader); // jugar a lo ttsSource.PlayOneShot (ttsClip);} 1234567891011121314151617 // convierte los datos de audio y reproduce los PlayTTS clipIEnumerator (byte [] AudioData) {// Guardar los datos de audio temporalmente como .wav filestringtempPath = Application.persistentDataPath + «/ tts .wav «; System.IO.Fil.WriteAllBytes (TempPath, AudioData); // carga ese archivo inUnityWebRequest loader = UnityWebRequestMultimedia.GetAudioClip (TempPath, AudioType.WAV); returnloader.SendWebRequest rendimiento (); // convertirlo en un audio clipAudioClip ttsClip = DownloadHandlerAudioClip.GetContent (cargador); // jugar itttsSource.PlayOneShot (ttsClip);.}

          de nuevo en el Editor, se puede llenar en las propiedades del componente

          La unidad de texto Para configuración de los componentes del habla

          Eso es todo por las secuencias de comandos! Si tienes una cámara web, puede probarlo en este momento en el Editor. De lo contrario, se puede construir la aplicación para su dispositivo y probarlo en ese país.

          Conclusión

          Felicitaciones por terminar el tutorial! Si ha seguido a lo largo, ahora tiene una aplicación completa con el texto a las capacidades del habla. Si desea hacer adiciones, o simplemente tener el proyecto listo para usar, puede descargar los archivos del proyecto aquí.

          Mensajes relacionados
          Una introducción a la ML-Agentes de la unidad

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *