Crie um serviço de transcrição de vídeo

Em um ambiente de aprendizagem domiciliar, muitos alunos passarão a ter aulas por vídeo. O vídeo pode ser uma excelente forma de aprender, mas, muitas vezes, os instrutores precisam fornecer observações ou leituras designadas a alunos que precisam de formas de aprendizagem adicionais ou alternativas ou que não têm acesso ao vídeo original. A pandemia do coronavírus (COVID-19) aumentou rapidamente a necessidade de todo tipo de material de instruções on-line. O aplicativo que você criou neste tutorial permitirá que os instrutores forneçam observações adicionais a alunos que estejam usando ferramentas de vídeo e áudio como a maneira principal de aprender. Os professores também podem fornecer facilmente instruções por escrito aos alunos que não conseguem reproduzir um vídeo por algum motivo.

O código e os arquivos relacionados a este tutorial estão localizados no repositório do GitHub fornecido com ele.

Objetivos do aprendizado

Neste tutorial, será possível aprender como:

  • Criar um aplicativo Python que pode extrair texto de vídeos de informativos usando o Watson Speech to Text.
  • Traduzir textos usando o Watson Language Translator e armazenar a transcrição resultante no IBM Cloud Object Storage.
  • Criar um front-end Vue.js que permita que os usuários façam upload de vídeos e recebam a transcrição resultante.

Pré-requisitos

Para concluir este tutorial, deve-se:

Tempo estimado

Este tutorial deve levar 30 minutos para ser concluído.

Diagrama de arquitetura

Diagrama de arquitetura do transcritor de vídeo

  1. O usuário navega para o site e faz o upload de um arquivo de vídeo.
  2. O Watson Speech to Text processa o áudio e extrai o texto.
  3. O Watson Translation pode (opcionalmente) traduzir o texto para o idioma desejado.
  4. O aplicativo armazena o texto traduzido como um documento no Object Storage.

Instruções

1. Clone o repositório

git clone git@github.com:Call-for-Code/cfc-covid-19-video-transcriber.git
cd cfc-covid-19-video-transcriber

2. Configure as variáveis de ambiente

Crie um arquivo .env no diretório raiz do projeto contendo as seguintes variáveis de ambiente. Observe: elas serão substituídas pelas credenciais do serviço do IBM Cloud na próxima etapa.

STT_API_KEY=<api key for speech to text service>
STT_URL=<URL for speech to text service>
TRANSLATE_API_KEY=<api key for translator service>
TRANSLATE_URL=<URL for translator service>
COS_API_KEY=<cloud object storage api key>
COS_IAM_ROLE_CRN=<cloud object storage IAM role crn. e.g. crn:v1:bluemix:public:iam::::serviceRole:Writer>
COS_ENDPOINT=<cloud object storage endpoint. e.g. s3.eu-gb.cloud-object-storage.appdomain.cloud>
COS_BUCKET_NAME=<cloud object storage bucket name>

3. Crie os serviços do IBM Cloud e obtenha as credenciais de serviço

Registre-se ou efetue login no IBM Cloud e crie os seguintes serviços:

  • IBM Watson Speech to Text

    • Copie os valores de apikey e url nas credenciais de serviço para as variáveis de ambiente STT_API_KEY e STT_URL no arquivo .env criado na etapa 2.
  • IBM Watson Language Translator

    • Copie os valores de apikey e url nas credenciais de serviço para as variáveis de ambiente TRANSLATE_API_KEY e TRANSLATE_URL no arquivo .env criado na etapa 2.
  • IBM Cloud Object Storage.

    • Crie um bucket padrão com um determinado nome. Copie esse nome para a variável de ambiente COS_BUCKET_NAME no arquivo .env criado na etapa 2. Para o propósito deste Kit Starter, o bucket criado no Cloud Object Storage exige acesso público.
    • Copie os valores de apikey e iam_role_crn nas credenciais de serviço para as variáveis de ambiente COS_API_KEY e COS_IAM_ROLE_CRN no arquivo .env criado na etapa 2.
    • Navegue para a URL endpoints nas credenciais do serviço (por exemplo, https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints) e escolha um service-endpoint public que esteja próximo de sua localização. Copie o terminal escolhido para a variável de ambiente COS_ENDPOINT no arquivo .env criado na etapa 2.

4. Instale as dependências e execute os aplicativos

Servidor

  1. No diretório raiz do projeto, crie um ambiente virtual pipenv:

     pipenv --python <path to python executable>
    

    por exemplo, se o Python 3.6 estiver instalado:

     pipenv --python 3.6
    
  2. Ative o shell do pipenv:

     pipenv shell
    
  3. Instale as dependências do projeto:

     pipenv install
    
  4. Para executar o aplicativo localmente, use:

     python manage.py start
    

    O utilitário manage.py oferece uma variedade de diferentes comandos de execução adequados para sua situação:

    • start: inicia um servidor em uma configuração de produção usando gunicorn.
    • run: inicia um servidor de desenvolvimento Flask nativo. Isso inclui o recarregamento de back-end após o salvamento do arquivo e o depurador de rastreio de pilha Werkzeug para diagnosticar falhas de tempo de execução no navegador.
    • livereload: inicia um servidor de desenvolvimento usando o pacote livereload. Isso inclui o recarregamento do back-end e também o recarregamento do navegador de front-end dinâmico. O depurador de rastreio de pilha Werkzeug será desativado, portanto, isso é recomendado somente ao trabalhar no desenvolvimento de front-end.
    • debug: inicia um servidor de desenvolvimento Flask nativo, mas com o recarregador/rastreador nativo desativado. Isso deixa a porta de depuração exposta para ser conectada a um IDE (como o Attach to Local Process do PyCharm).

      Também há alguns comandos de utilitário:

    • build: compila arquivos .py no diretório do projeto em arquivos .pyc.

    • test: Executa todos os testes de unidade do diretório test do projeto.

      o servidor estiver em execução em: http://localhost:3000/ em seu navegador.

IU de front-end

  1. Se você ainda não instalou o Node.js e o Yarn, faça isso agora.

  2. Em um novo terminal, mude da raiz do projeto para o diretório frontend e instale as dependências:

     cd frontend
     yarn install
    
  3. Instale o aplicativo de front-end:
    Compila e recarrega dinamicamente para o desenvolvimento

     yarn serve
    

    Compila e minimiza para a produção

     yarn build
    

    Executa lint e corrige arquivos

     yarn lint
    

A IU de front-end agora está em execução em http://localhost:8080/ no navegador.

5. Extensão do Language Translator

Este tutorial mostra como criar um serviço Watson Language Translator e escrever o código necessário do lado do servidor para traduzir transcrições de vídeo. A implementação da IU de front-end é oferecida como uma extensão para que você mesmo a implemente. Sugestão – inspecionando a função upload_video em server/routes/index.py, é possível observar que o lado do servidor espera uma linguagem de source e uma de target como parte dos dados do formulário de solicitação POST para /upload_video. Os modelos de linguagem com suporte são fornecidos em https://localhost:3000/language_models depois que o servidor estiver em execução.

6. Implemente o aplicativo

As instruções a seguir aplicam-se à implementação do servidor Python Flask. Para implementar a IU de front-end, siga o tutorial de compilação e implementação do Node.js.

Implementando no IBM Cloud

É possível implementar este aplicativo no IBM Cloud ou criá-lo localmente clonando o repositório primeiro. Depois que o aplicativo estiver funcionando, será possível acessar o terminal /health para criar o aplicativo nativo da nuvem.

Use o botão abaixo para implementar esse mesmo aplicativo no IBM Cloud. Essa opção cria um pipeline de implementação completo com um projeto do GitLab hospedado e a cadeia de ferramentas do DevOps. Haverá a opção de implementar no Cloud Foundry ou em um cluster do Kubernetes. Os serviços de DevOps do IBM Cloud fornecem cadeias de ferramentas como um conjunto de integrações de ferramentas com suporte para tarefas de desenvolvimento, implementação e operações no IBM Cloud.

Deploy to IBM Cloud

Criando localmente

Para começar a criar este aplicativo localmente, é possível executar o aplicativo nativamente ou usar o IBM Cloud Developer Tools para conteinerização e fácil implementação no IBM Cloud.

Desenvolvimento de aplicativo nativo

O desenvolvimento de aplicativo nativo foi abordado na etapa 4 acima quando você instalou e executou o aplicativo. o servidor estiver em execução em: http://localhost:3000/ no navegador.

  • A IU do Swagger está em execução em: /explorer
  • Sua definição de Swagger está em execução em: /swagger/api
  • Terminal em funcionamento: /health

Há duas opções diferentes para depurar um projeto do Flask:

  1. Executar o python manage.py runserver para iniciar um servidor de desenvolvimento Flask nativo. Ele é fornecido com o depurador de rastreio de pilha Werkzeug, que apresentará rastreios de pilha de falha de tempo de execução no navegador com a capacidade de inspecionar objetos em qualquer ponto no rastreio. Para obter mais informações, consulte a documentação do Werkzeug.

  2. Executar o python manage.py debug para executar um servidor de desenvolvimento Flask com a depuração exposta, mas com o depurador/recarregador nativo desligado. Isso concede acesso para que um IDE se conecte ao processo (ou seja, no PyCharm, use Run -> Attach to Local Process).

Também é possível verificar o estado do aplicativo em execução local usando o script de teste da IU do Selenium, incluído no diretório scripts.

Note for Windows users: não há suporte para o gunicorn no Windows. É possível iniciar o servidor com python manage.py run na máquina local ou criar e iniciar o Dockerfile.

IBM Cloud Developer Tools

Instale o IBM Cloud Developer Tools na máquina executando os comandos a seguir:

curl -sL https://ibm.biz/idt-installer | bash

Crie um aplicativo no IBM Cloud executando:

ibmcloud dev create

Isso criará e fará o download de um aplicativo Starter com os arquivos necessários para o desenvolvimento e a implementação locais.

O aplicativo será compilado com os contêineres do Docker. Para compilar e iniciar o aplicativo, execute:

ibmcloud dev build
ibmcloud dev run

Isso iniciará o aplicativo localmente. Quando estiver pronto para implementar no IBM Cloud no Cloud Foundry ou no Kubernetes, execute um dos seguintes comandos:

ibmcloud dev deploy -t buildpack // to Cloud Foundry
ibmcloud dev deploy -t container // to K8s cluster

É possível criar e depurar o aplicativo localmente com:

ibmcloud dev build --debug
ibmcloud dev debug

Resumo

Este tutorial mostrou como criar e implementar um aplicativo que usa o Watson Speech to Text para transcrever arquivos de vídeo. Este tutorial também abordou a implementação de um Watson Language Translator e de um IBM Cloud Object Storage. É possível usar este aplicativo simples como uma base para incluir funcionalidades mais complexas e criar um aplicativo de aprendizagem sólido que ajudará os instrutores e alunos a melhorar a experiência de aprendizagem on-line.