Desenvolver um aplicativo de detecção de rosto simples na web Incluir recursos de computação cognitiva com AlchemyAPI Chun Bin Tang (chunbint@cn.ibm.com) Solutions Architect, IBM Cloud Ecosystem Development IBM 01/Fev/2016 Desenvolva um aplicativo simples no PHP para usar os recursos de computação cognitiva eficiente do Serviço AlchemyAPI no IBM Cloud. O app demonstra como as funções de detecção de rosto do Serviço AlchemyAPI podem: estudar imagens e localizar rostos, identificar o sexo, estimar a idade e, muitas vezes, identificar uma pessoa. Você não precisa saber nada sobre computação cognitiva ou algoritmo de aprendizado profundo para desenvolver o app cognitivo no IBM Cloud com apenas algumas linhas de código neste exemplo passo a passo. 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. Copyright IBM Corporation 2016. Todos os direitos reservados. Marcas Registradas Desenvolver um aplicativo de detecção de rosto simples na web Página 1 de 10
O que será necessário para desenvolver o aplicativo Saiba mais. Desenvolva mais. Conecte-se mais. O novo programa de associação programa de participação developerworks Premium fornece um passe de acesso completo a ferramentas e recursos de desenvolvimento eficientes, incluindo 500 títulos técnicos principais para desenvolvedores de aplicativos por meio do Safari Books Online, grandes descontos em eventos de desenvolvedores premier, reproduções de vídeos de conferências recentes do O'Reilly, etc. Leia sobre o valor do developerworks Premium ou assista um vídeo unboxing de Govind Baliga. Inscreva-se hoje. Uma conta do IBM Cloud (É possível solicitar uma avaliação grátis aqui.) Um comando DevOps Services. Familiaridade com a linguagem de programação do PHP. Opcionalmente, a familiaridade com a interface da linha de comandos (cf) do Cloud Foundry. Execute o aplicativo Obtenha 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. Leia: No website da AlchemyAPI, saiba como usar AlchemyAPI para criar apps inteligentes que entendam as necessidades do cliente e que prevejam o comportamento do cliente 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: Desenvolver um aplicativo de detecção de rosto simples na web Página 2 de 10
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']; Desenvolver um aplicativo de detecção de rosto simples na web Página 3 de 10
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. Leia: Informações sobre os campos de pedido e de resposta podem ser localizadas na documentação da AlchemyAPI 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 { Desenvolver um aplicativo de detecção de rosto simples na web Página 4 de 10
$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..."; $fitem = $response['imagefaces'][0]; echo "Gender: <b>"; echo $fitem['gender']['gender']; echo "</b> (Confidence: "; echo number_format($fitem['gender']['score'], 2); echo ")"; echo "Age: <b>"; echo $fitem['age']['agerange']; echo "</b> (Confidence: "; echo number_format($fitem['age']['score'], 2); echo ")"; 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..."; else { echo "Sorry, we are unable to guess who you are, as: "; echo $response['statusinfo']; 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. Desenvolver um aplicativo de detecção de rosto simples na web Página 5 de 10
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. Desenvolver um aplicativo de detecção de rosto simples na web Página 6 de 10
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 Desenvolver um aplicativo de detecção de rosto simples na web Página 7 de 10
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 Desenvolver um aplicativo de detecção de rosto simples na web Página 8 de 10
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. Serviço AlchemyAPIhttps://console.ng.bluemix.net/catalog/alchemyapi/O Serviço AlchemyAPI fornece processamento de linguagem natural e visão por computador para ajudá-lo a entender conversas, documentos e fotos do mundo. Desenvolver um aplicativo de detecção de rosto simples na web Página 9 de 10
Sobre o autor Chun Bin Tang Chun Bin Tang é um arquiteto de soluções no IBM Cloud Ecosystem Development. Ele obteve seu mestrado na Fudan University, Shanghai, China, e tem mais de 10 anos de experiência no segmento de mercado de TI. Agora, ele foca na promoção de nuvem e na tecnologia de mobilidade na China. Copyright IBM Corporation 2016. Todos os direitos reservados. (www.ibm.com/legal/copytrade.shtml) Marcas Registradas (www.ibm.com/developerworks/br/ibm/trademarks/) Desenvolver um aplicativo de detecção de rosto simples na web Página 10 de 10