Conteúdo


Desenvolver um aplicativo de detecção de rosto simples na web

Incluir recursos de computação cognitiva com AlchemyAPI

Comments

No início deste ano, a IBM adquiriu a empresa AlchemyAPI. AlchemyAPI é um fornecedor de liderança da computação cognitiva escalável e de tecnologia de aprendizado profundo que permite que computadores entendam o idioma e a visão tal qual seres humanos. Serviços de idioma relevantes, como análise de sentimento, extração de palavra-chave e extração de relação, podem ajudar a analisar o conteúdo por trás da linguagem natural sofisticada e incluir informações semânticas de alto nível. Serviços relevantes de visão, como identificação de imagem e detecção de rosto, ajuda-nos a a entender o contexto e o conteúdo de uma imagem.

Neste tutorial, você aprende a comprar um aplicativo simples da web que demonstra a função de detecção de rosto do Serviço AlchemyAPI no IBM Cloud™. O recurso de detecção de rosto pode:

  • Estudar imagens e determinar se há rostos.
  • Determinar o sexo e a idade estimada do rosto.
  • Tentar identificar o rosto, puxando de um corpus de mais de 60.000 pessoas bem conhecidas.

Este exemplo passo a passo mostra o quão fácil é desenvolver um app cognitivo no IBM Cloud com somente poucas linhas de código no PHP.

O que será necessário para desenvolver o aplicativo

Execute o aplicativoObtenha o código

Aplicativo de exemplo: Who Are You?

O app de exemplo, denominado Quem é você?, é criado no PHP, porque o PHP é leve, eficiente, amplamente aceito pela comunidade de software livre, e suportado pelo IBM Cloud como um tempo de execução central. O app de exemplo é executado normalmente, mesmo com 128 MB de memória.

Não se preocupe se não estiver familiarizado com a computação cognitiva avançada e algoritmos de aprendizado profundo. O Serviço AlchemyAPI no IBM Cloud resume todos os detalhes para nós; tudo o que você precisa fazer é chamar a API com algumas linhas de código. Graças ao IBM Cloud, nós desenvolvedores comuns podemos colher os frutos do serviço de computação cognitiva da AlchemyAPI eficiente sem saber realmente como ele funciona.

Se você estiver interessado nos outros serviços cognitivos da AlchemyAPI, e desejar criar mais apps com base nestes serviços, poderá usar nosso app de detecção de rosto de amostra como um modelo.

Etapa 1. Criar um app com o Serviço AlchemyAPI no IBM Cloud

Criar um app no Painel do IBM Cloud:

  1. Efetue login em sua conta IBM Cloud (ou registre-se para obter uma avaliação gratuita).
  2. Abra o catálogo do IBM Cloud.
  3. Na seção Tempos de Execução, clique em PHP.
  4. No campo App, especifique o nome do app. O exemplo é configurado como whoru.
  5. Clique em Create, em seguida, aguarde o aplicativo ser fornecido.

Incluir o Serviço AlchemyAPI:

  1. Clique no app criado no Painel.
  2. Clique em Incluir um serviço.
  3. Na seção Watson, selecione Serviço AlchemyAPI.

    A chave de avaliação da AlchemyAPI pode levar cinco minutos ou mais para entrar em vigor. O app lê a chave de avaliação da variável de ambiente VCAP_SERVICES.

  4. Clique em Create. Clique em Remontar , se for solicitado remontar o aplicativo.

    Um app semelhante a este será criado:

Etapa 2. Revise e ajuste o código

Consulte o código-fonte para ver os detalhes mais recentes. A boa notícia é que a AlchemyAPI fornece um PHP SDK para desenvolvedores; a má notícia é que ele não suporta a função de detecção de rosto que é necessária para o nosso app.

Atualizar o PHP SDK da AlchemyAPI

O arquivo principal no PHP SDK da AlchemyAPI é alchemyapi.php. Siga estas etapas para incluir uma nova função.

Buscar a chave da API da AlchemyAPI das variáveis de ambiente VCAP_SERVICES

O PHP SDK original lê a chave da API da AlchemyAPI de um arquivo. Você fará algumas melhorias para ler a chave das variáveis de ambiente VCAP_SERVICES, para que não seja necessário preparar um arquivo-chave adicional da AlchemyAPI para melhorar a segurança. Use o seguinte fragmento de código para modificar o arquivo alchemyapi.php original.

//Load the API Key from api_key.txt 		//$key = trim(file_get_contents("api_key.txt")); 	 		// vcap_services Extraction
 $services_json = json_decode(getenv('VCAP_SERVICES'),true);
 $credential = $services_json["alchemy_api"][0]["credentials"]; 		 		// Extract the VCAP_SERVICES variables 		$key = $credential['apikey'];

Incluir a API de detecção de rosto

O PHP SDK original não fornece a API para chamar os recursos relevantes de detecção de rosto. É necessário anexar uma nova função denominada face_detection para modificar o arquivo alchemyapi.php original.

Para definir os terminais do recurso de detecção de rosto:

		$this->_ENDPOINTS['face_detection']['url'] = '/url/URLGetRankedImageFaceTags';
		$this->_ENDPOINTS['face_detection']['image'] = '/image/ImageGetRankedImageFaceTags';

Para definir a função face_detection :

	public function face_detection($flavor, $image, $options) { 		//Make sure this request supports the flavor 		if (!array_key_exists($flavor,
$this->_ENDPOINTS['face_detection'])) { 			return array('status'=>'ERROR',
'statusInfo'=>'Face detection for ' . $flavor . ' not available');
		}
 
		//Add the image to the options and analyze 		if($flavor=='url'){ 			$options[$flavor] = $image; 			return
$this->analyze($this->_ENDPOINTS['face_detection'][$flavor], $options); 		} 		else{ 			return
$this->analyzeImage($this->_ENDPOINTS['face_detection'][$flavor],
                            $options, $image);	 		} 	}

A função face_detection retorna com informações relevantes, como a posição do rosto na imagem, a idade e o sexo no formato JSON.

Todas estas atualizações foram consolidadas no PHP SDK atualizado no código-fonte (php/alchemyapi.php). É possível compará-lo com o SDK original para ver os detalhes das modificações.

Implementar o app

Após atualizar o PHP SDK, será possível implementar o app. O app suporta a incrível função de detecção de rosto de duas maneiras:

  1. fornecendo uma figura do computador local
  2. fornecendo o link para uma imagem da Internet publicamente acessível

É muito fácil chamar os recursos de detecção de rosto no app. No código-fonte central, há somente uma linha para chamar a função face_detection : ($alchemyapi->face_detection).

require_once ('alchemyapi.php');
$alchemyapi = new AlchemyAPI();
 
//use image url to detect face if (!empty($_POST['imageurl'])) {
 $response = $alchemyapi->face_detection('url', $_POST['imageurl'], null);
 printResponse($response);
} 
//Upload an image to detect face else if (!empty($_FILES["upfile"])) {
 if ($_FILES["upfile"]["size"] < 512 * 1024) {
 if ($_FILES["upfile"]["error"] > 0) {
 echo "Fail to upload the file: " . $_FILES["upfile"]["error"] . "<br />";
 } else {
 $imageFile = fopen($_FILES["upfile"]["tmp_name"], "r") or die("Unable to open file!");
 $imageData = fread($imageFile, $_FILES["upfile"]["size"]);
 fclose($imageFile);
 //Do not forget to set imagePostMode option to raw
 $response = $alchemyapi->face_detection('image', $imageData, array(
 'imagePostMode' => 'raw'
 ));
 printResponse($response);
 }
 } else {
 echo "Error: only support image file with size < 512 KBytes";
 }
} else {
 echo "Error: no image found"; }

Em seguida, imprima os resultados quando eles forem recebidos.

/*
 * This method prints out the response */ function printResponse($response) {
 $status = $response['status'];
 if ($status == 'OK') {
 $fcount = count($response['imageFaces']);
 if ($fcount > 0) {
 echo "Let me say ...";
 echo ("</br>");
 $fitem = $response['imageFaces'][0];
 echo "Gender: <b>";
 echo $fitem['gender']['gender'];
 echo "</b> (Confidence: ";
 echo number_format($fitem['gender']['score'], 2);
 echo ")";
 echo ("</br>");
 echo "Age: <b>";
 echo $fitem['age']['ageRange'];
 echo "</b> (Confidence: ";
 echo number_format($fitem['age']['score'], 2);
 echo ")";
 echo ("</br>");
 echo ("</br>");
 if (array_key_exists('identity', $fitem)) {
 echo "Emmm, we guess you are <b>";
 echo $fitem['identity']['name'];
 echo "</b> (Confidence: ";
 echo number_format($fitem['identity']['score'], 2);
 echo ")";
 } else {
 echo "However, we do not know who you are exactly...";
 }
 }
 echo ("</br>");
 } else {
 echo "Sorry, we are unable to guess who you are, as: ";
 echo ("</br>");
 echo $response['statusInfo'];
 echo ("</br>");
 }
}

Detalhes sobre a implementação estão em php/facedetection.php na seção código-fonte. A gravação de uma única linha de código para chamar a função face_detection implementa os recursos de detecção de rosto do Serviço AlchemyAPI no app de amostra. Para chamar outros recursos, é necessário seguir um processo semelhante.

Etapa 3. Implementar o app no IBM Cloud

  1. Acesse a seção código-fonte, clique em Bifurcar Projeto, e efetue login no IBM DevOps Services com o ID IBM. Quando solicitado, insira o nome do projeto.

    Certifique-se de selecionar Tornar isso um projeto IBM Cloud, e verifique se a Região, Organizatione Espaço estão corretos.

    Clique em Create para bifurcar o repositório.

  2. Clique em Editar código. Na seção de menu do projeto criado recentemente, clique no ícone de lápis para editar a configuração de ativação para o IBM Cloud.
  3. Verifique se Destino, Organization, Espaçoe Domínio estão corretos. Atualize Nome do Aplicativo e em Host para corresponderem ao nome do app do IBM Cloud criado. Em seguida, clique em Save.
  4. Clique no ícone de seta à direita para implementar o aplicativo. Aguarde um minuto ou mais, em seguida, verifique o status da implementação.

Se preferir, é possível usar o comando cf para implementar este projeto localmente:

  1. Bifurque o código-fonte localmente.
  2. Atualize o arquivo manifest.yml mudando <your_app_name> para o nome do app do IBM Cloud criado. É possível também mudar o tamanho da memória. O tamanho da memória padrão é configurado como 128 MB.
    ---
    applications:
    # replace the 'host' variable below with your own unique one, as this one can be already taken
    - name: <your_app_name>
     memory: 128M
     instances: 1
     host: <your_app_name>
     path: ./php
  3. Execute o comando cf para implementar o projeto:
    cf push

Etapa 4. Executar o app

Depois que o app Quem é você for implementado com êxito, será possível executá-lo. O app tentará reconhecer a pessoa em uma imagem. É possível fornecer uma URL de imagem publicamente acessível na Internet ou fazer upload de uma imagem da unidade local para testar se o app pode determinar "Quem é você?"

  1. Acesse a URL do app, que normalmente é http://<app_name>.mybluemix.net. Nossa amostra é http://whoru.mybluemix.net.
  2. Clique em Adivinhar quem você é a partir da URL da imagem. Uma nova janela fornecerá avisos.
  3. Insira a URL da imagem que deseja analisar. Por exemplo, é possível inserir https://lh3.googleusercontent.com/-B8jO7AKe1Fw/UOxJEuRSV3I/AAAAAAAAAGA/28e6_kjzmVc/s512-no/Profil%2B7.png,
  4. Clique em Enviar.
  5. Verifique se o app pode identificar a pessoa na imagem. Para a URL da imagem de exemplo, o app pode determinar facilmente que a figura é de Novak Djokovic (um jogador sérvio de tênis profissional). Bom! Vá em frente e tente outras imagens para mais testes.
  6. Volte para a página principal e clique em Advinhar Quem é você fazendo upload de uma imagem. Uma janela fornecerá prompts novamente a você.
  7. Clique em Browse para escolher uma imagem do computador local. Como alternativa, é possível fazer downloadde uma imagem de amostra do código-fonte. Extraia os arquivos do arquivo transferido por download e escolha php/andy.jpg. Clique em Upload.
  8. Verifique se o app pode detectar quem é a pessoa. Para a imagem de amostra, a resposta é Andy Murray (um jogador escocês de tênis profissional). O Serviço AlchemyAPI funcionou novamente. Sinta-se livre para fazer upload e tentar mais imagens.

Embora o app Quem é você não possa reconhecer todas as pessoas apresentadas, as funções de detecção de rosto eficientes no serviço AlchemyAPI são impressionantes. Com base na minha experiência, o app pode identificar muitas pessoas corretamente, especialmente estrelas de esportes e estrelas de cinema.

Conclusão

A computação cognitiva é um tópico relevante e agora, com o IBM Cloud, é possível usar facilmente os recursos cognitivos eficientes do Serviço AlchemyAPI. Este tutorial mostrou como usar o PHP para criar um app simples da web que explora os recursos de detecção de rosto e de reconhecimento da AlchemyAPI. É possível estender o app de exemplo para criar mais apps cognitivos no IBM Cloud.


Recursos para download


Temas relacionados


Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Cognitive computing, Cloud computing
ArticleID=1014398
ArticleTitle=Desenvolver um aplicativo de detecção de rosto simples na web
publish-date=02012016