Bem-vindos ao curso de Visão Computacional em Análise Facial. Meu nome é Michel e nesse curso vamos aprender a analisar alguns aspectos bem interessantes em imagens e vídeos em relação à faces e rostos.
Ou seja, dada uma imagem, será que conseguimos extrair o que há de mais importante naquilo? Então naquela imagem eu preciso ter alguma forma de extrair aquilo que eu tenho interesse, ou seja, o rosto da pessoa.
Então temos esse tipo de aplicação muito comum na China e até mesmo no Brasil, só para dar alguns exemplos - onde temos por exemplo: uma imagem cheia de pessoas e cheia de rostos mas eu não preciso me preocupar se a pessoa está vestida de um determinado tipo de roupa, se ela está carregando uma mochila.
Ou se tem um poste na rua ou se tem uma calçada. Meu único objetivo em análise facial são as faces então vamos aprender como é que, dada uma imagem, eu consigo extrair a face.
Vamos aprender como podemos utilizar os classificadores de cascata de Haar para essa finalidade, ou seja, para extrema região de interesse. Uma vez que eu tenho essa região de interesse já definida, posso fazer esse recorte e com esse recorte nessa região de interesse, eu posso, por exemplo, utilizar modelos de Machine Learning para poder inferir e para poder testar se aquela face é de uma determinada pessoa.
Para isso vamos ter também a oportunidade de construir classificadores baseados em diferentes algoritmos de Machine Learning e visão computacional para faces, que são os algoritmos Eigenfaces, FisherFaces e até o LBPH.
E com isso seremos capazes de construirmos o próprio classificador utilizando um “dataset” que é bem comum, que é o dataset do pessoal da Georgia Tech, onde temos vários exemplos com várias pessoas, com várias imagens e temos condições de treinar o nosso modelo.
E depois até mesmo validar se ele realmente está inferindo bem com as imagens de teste que vamos separar para poder de fato verificar se o nosso classificador está bom ou se não está.
Além disso, também vamos estudar: dada uma imagem, vamos conseguir o extrair o que chamamos de “marcos faciais”. Os marcos faciais são obtidos por meio de uma biblioteca que é muito conhecida no ramo, que é a Dlib.
A Dlib possui alguns classificadores já pré-treinados que conseguem extrair 68 pontos que delimitam regiões do rosto. Quais são essas regiões? Os olhos, o nariz, a boca, aqui no queixo, e com isso é possível verificarmos a abertura e fechamento da boca. Só para dar um exemplo para vocês, nessa imagem aqui temos esses pontos delimitados, são os 68 pontos que eu comentei.
Então cada um desses pontos reúnem uma determinada região do rosto: a sobrancelha, os olhos, a boca e o nariz. Com isso somos capazes inclusive, dado um vídeo, podemos verificar se uma pessoa está bocejando, se ela está com o olho aberto ou com o olho fechado.
Seria algo mais ou menos igual fizemos aqui, que vocês vão estudar, por exemplo: eu tenho um vídeo e pegamos esses mesmos marcos faciais e começamos a fazer análise em tempo real, frame by frame, porque estamos trabalhando com vídeo.
Então com isso eu consigo, por exemplo, determinar por aspecto de razão as medidas de abertura e fechamento da boca, que inclusive eles invariam com a escala, ou seja, se eu aproximar ou se eu também me afastar do vídeo, eu consigo manter as medidas quase que intactas porque as medidas de aspecto de razão eliminam um pouco esse efeito de distorção de aproximação ou de afastamento.
Tem bastante coisa legal. Eu espero que vocês gostem desse conteúdo e eu faço o convite: por que não começar agora!? Conto com vocês pessoal, até mais!
Para fazer download dos dados que serão utilizados, basta acessar o repositório no Github, na branch “imagens” ou, se preferir, fazer download do projeto da aula 01.
Vamos lá! Para podermos começar, precisamos instalar o Anaconda e alguns pacotes que vamos usar nas próximas aulas, então, em primeiro lugar, vamos entrar no Chrome e nele vamos digitar "anaconda" na busca.
Geralmente é o primeiro link que nos aparece, veja só. Deixe-me verificar... É isso mesmo, o “anaconda.com”, se vocês quiserem entrar diretamente no navegador. O Anaconda é o nosso ambiente para poder fazer esses desenvolvimentos.
Uma vez que entramos no site, vocês vão ver que na parte superior, à direita, tem um botão de “Download”, então vocês vão clicar nele. Vamos descer aqui com o cursor e vamos ver as versões: 2.7, que não estamos utilizando mais, e a versão mais moderna, que é a 3.7 do Python.
Então vamos clicar no botão “Download” e ele vai baixar. Eu estou no ambiente usando o macOS, se você estiver usando o Windows, o processo é exatamente o mesmo.
O que vai mudar é que quando você entrar nessa tela, vai aparecer o link para você baixar a versão do Windows, você entra e escolhe se a sua versão é de 32bits ou 64 bits. Não muda muita coisa.
Durante a instalação - vamos ver aqui, logo mais - o processo é bem simples, é praticamente “Next”, “Next” e “Finish”, não tem muito o que configurar. Agora que acabou de fazer o download, vamos clicar nele para poder instalar. Ele vai abrindo aqui, clique em “Continue” e aqui é aquilo que eu falei: é “Next”, “Next” e “Finish”.
No caso aqui do Mac, vamos clicar em “Continue” em todas as telas. Nós concordamos com a licença, pode ser no local padrão. À essa altura nós já concluímos a instalação. Nós cortamos porque a instalação deve levar, mais ou menos, de 5 a 10 minutos.
E agora vamos dar o “Continue” aqui e o “Close”, e vamos mover aqui para o lixo porque não vamos precisar mais do instalador, então nesse momento, o que nós fizemos?
Nós instalamos o ambiente Anaconda e agora vamos – deixe-me fechar aqui. Agora vamos localizar aqui e abrir ele. Ele já está aqui no Anaconda Navigator - no Windows, você vai no iniciar porque você vai achar facilmente o atalho para o Anaconda.
Eu vou entrar aqui no Anaconda. Agora que abrimos o Anaconda, vocês vão perceber alguns aplicativos, nós vamos usar logo mais o Jupyter Notebook.
Mas antes de abrirmos ele, vamos dar uma olhada nos ambientes: tem um menu aqui à esquerda, nessa barra lateral, chamado “Enviroments”. Quando clicamos aqui, vocês vão perceber que tem um único ambiente já montado, que é o ambiente “base(root)”.
Nesse ambiente, como vocês podem ver, existem várias bibliotecas instaladas. Por que disso? Porque o Anaconda já prepara um ambiente com boa parte das bibliotecas para projetos de Machine Learning que você porventura possa usar.
Então tem muitas bibliotecas aqui e dificilmente você vai precisar instalar alguma biblioteca adicional. É o que costumamos falar: é o Python com pilhas incluídas. No nosso caso, que vamos trabalhar com projetos de visão computacional e análise facial, é até melhor criarmos um ambiente separado para não ter nenhum tipo de problema relacionado à interferência de uma biblioteca com todas essas que já estão instaladas.
Então é comum até mesmo você instalar um ambiente virtual por projeto diferente ou então por tema que você quer trabalhar: “Quero trabalhar com visão computacional, com OpenCV!” Nós criamos um ambiente virtual dedicado a isso para não ter problema nenhum em relação alguma à alguma dependência que possa ter algum conflito.
Então para fazermos isso, eu vou criar esse ambiente virtual, vamos clicar aqui no botão “Create”, que fica aqui embaixo. Vamos dar um nome para esse ambiente virtual, eu vou chamar aqui de "vc-analise-facial".
Vamos trabalhar com a versão 3.6 do Python, que é a mais estável e mais madura para esse tipo de projeto. Vamos clicar aqui em “Create”, ele está criando esse ambiente virtual. Só lembrando que como estamos criando o ambiente virtual do zero, todas aquelas bibliotecas que Anaconda já cria no ambiente “base(root)” não vêm para cá, vem algumas mas não todas.
Dentre elas, o próprio notebook já não vem instalado, então se clicarmos com o botão esquerdo do lado do nome do nosso ambiente virtual, vocês vão ver que está desabilitado o “Open with Jupyter Notebook” porque essa biblioteca ainda não foi instalada.
Então vamos fazer o seguinte: vamos abrir o terminal, clicar aqui no “Open Terminal” e agora vamos instalar as bibliotecas que precisamos para trabalhar.
Então a primeira delas, vamos instalar o próprio OpenCV. Para fazer isso, eu vou mandar aqui no terminal o seguinte comando: "conda install -c conda-forge" - "conda-forge" é o nome do repositório onde tem o OpenCV.
Temos que tomar cuidado porque temos repositórios que tem OpenCV, só que as às vezes são versões diferentes do OpenCV ou até mesmo versões que não tenham todas as bibliotecas. Essa que eu estou passando para vocês é a que tem todas as bibliotecas que vamos precisar e que vamos utilizar.
No caso da versão, vamos colocar aqui o nome da biblioteca: "opencv=3.4.3", que é a versão mais redonda para trabalhar com os nossos projetos, então vamos mandar ele instalar e ele vai bater no repositório para buscar todas as informações, isso leva de 1 a 2 minutos, é bem tranquilo.
Já coletou os dados, vamos apertar a tecla "Enter" para confirmar, então ele está baixando todas as bibliotecas que ele precisa para trabalhar com o OpenCV.
Então o OpenCV não está sozinho, tem outras bibliotecas aqui, também que fazem parte desse pacote. Como podemos ver, até a própria NumPy já está por aqui, e outras mais. Terminou aqui a instalação do OpenCV, agora vamos instalar o Notebook.
O Notebook, vamos mandar o comando um pouquinho diferente, que é o "conda install jupyter". Como o Jupyter já está no repositório principal, eu não preciso especificar um repositório alternativo.
O Jupyter já vai um pouco mais rápido, um pouco diferente do OpenCV, que é um pouquinho mais pesado. Mais alguns segundos e já fechamos essa instalação. Por fim, eu vou instalar uma outra biblioteca, que é um pouquinho pesada, que é a Dlib.
Essa Dlib nós vamos usar mais para frente, que é a biblioteca que identifica os pontos faciais - nós já vamos falar sobre isso - mas vamos deixar instalada porque ela é importante para o curso.
É o "conda install -c", nesse caso ele está no "conda-forge", assim como o OpenCV, "dlib". Aqui podemos trabalhar com a última versão, por isso que eu não especifiquei a versão depois do "dlib". Podemos aceitar.
À essa altura nós já instalamos tudo o que precisamos, então eu vou até fechar o terminal e aqui eu vou clicar no botão esquerdo, aqui no Anaconda Navigator, e agora vamos perceber que o Jupyter Notebook já está ativado. Vamos clicar nele.
Então o Jupyter aqui, eu vou escolher a pasta para poder salvar os meus documentos. No meu caso, deixe-me só me localizar. Na sua casa você escolhe a pasta mais adequada. No meu caso aqui, eu vou escolher “aula 1” aqui, e vou abrir o Jupyter.
Vou só dar um zoom para ficar um pouco mais legível para vocês. Para verificarmos se está tudo certo, vou dar um “import” nas bibliotecas aqui que acabamos de instalar.
A primeira delas é o "import cv2", que é o do OpenCV, então importou. Podemos até dar uma verificada na versão do OpenCV, então se eu der aqui, por exemplo: "print(cv2.__version)", ele vai mostrar a versão, que é 3.4.3, que acabamos de instalar.
E eu vou fazer a mesma coisa com "import dlib", importou aqui. Vamos ver se o Dlib também me traz aqui a versão que nós precisamos, que é a 19.18, que é a última que ele tem. Agora que já instalamos o Dlib e também o OpenCV, vamos precisar daquelas bibliotecas que lidam com gráfico para podermos exibir as imagens e coisas assim.
Então essas bibliotecas - para quem já trabalha com o Python - já são bem conhecidas, que são a Matplotlib e a Seaborn, então vou instalar essas duas da mesma forma que instalamos o OpenCV e o Dlib.
Então eu vou voltar no terminal, caso alguém tenha fechado o terminal, é só vir aqui Anaconda Navigator, botão esquerdo, “Open Terminal” e o comando é o mesmo: "conda install". Como o Matplotlib está no repositório principal, vamos instalar ele por lá: "matplotlib" e na sequência eu vou instalar o Seaborn.
O Seaborn é uma biblioteca de gráficos que torna o estilo de apresentação do Matplotlib até um pouco mais refinado. O gráfico fica mais bonito, então eu gosto de utilizar ele por essa razão.
Então vamos fazer a mesma coisa: "conda install seaborn". Podemos pegar as últimas versões porque essas bibliotecas não tem muitos problemas de compatibilidade. O Seaborn já está instalando. Ele já traz no conjunto de bibliotecas o próprio Pandas e o SciPy juntos. Perfeito!
Vamos voltar para o Jupyter e agora vamos verificar se essas bibliotecas de fato estão nele: "import matplotlib" e "import seaborn". Vamos ver, o Seaborn está demorando um pouquinho para carregar mas carregou.
Então nessa daqui não precisamos nem verificar versão porque ela já é de uso cotidiano e não tem problema. Nesse ponto nós instalamos as principais bibliotecas que vamos utilizar durante o curso. É comum durante um projeto ou outro, nós voltarmos aqui e instalar alguma biblioteca adicional, isso faz parte, não tem problema algum.
Então, eventualmente, durante as aulas talvez possamos instalar mais alguma outra biblioteca justamente porque o ambiente virtual foi criado a partir do zero.
Agora que já temos o ambiente montado, estamos preparados para poder abrir uma imagem, tratar essa imagem ou abrir até mesmo um vídeo e analisar frame a frame desse vídeo, ou seja, temos a fundação para que possamos posteriormente desenvolver as aplicações e as análises faciais que vamos ver durante o curso.
Vamos começar a trabalhar com as imagens. Já instalamos todos os ambientes e também todas as principais bibliotecas, agora vamos tentar abrir uma imagem para começarmos a trabalhar alguns aspectos relacionados à região de interesse e coisas desse tipo.
Em primeiro lugar, vamos importar a biblioteca do “import cv2”, do OpenCV. Vamos aproveitar para também já renomear aqui - “vídeo 1.2” - e para que consigamos abrir uma imagem eu vou usar o comando aqui do OpenCV, que se chama “imread”.
Esse comando faz a abertura, a leitura de uma imagem, então eu vou definir uma variável “imagem = cv2.imread()” e vou passar o caminho dessa imagem. O caminho dessa imagem está aqui dentro da minha pasta “("imagens/px-girl.jpg")”. Vamos mandar o comando, ele vai abrir.
Agora eu quero plotar essa imagem na tela, para isso vamos usar o Matplotlib. Eu vou fazer aqui em cima o “import matplotlib.pyplot as plt”, só para podermos organizar o nosso material, o nosso Notebook.
Vou colocar aqui o comando “plt” só para poder ficar mais fácil de chamarmos o “pyplot” do Matplotlib. Importou. Agora eu vou aqui no “plt.imshow(imagem)” e vou pedir para renderizar essa imagem. O que está acontecendo aqui?
Essa imagem não foi feita dessa forma aqui, tem uma distorção de cores. Por que aconteceu isso? Porque o OpenCV, por padrão, abre as imagens no formato “.bgr”, que são as iniciais para Blue, Green e Red, que seriam azul, verde e vermelho.
Se formos usar o “pyplot”, ele usa um outro padrão, o padrão “RGB”. Nesse espaço de cores, ele só inverte o “R” pelo “B”, que é o “Red”, “Blue” e “Green”, então precisamos fazer uma conversão antes de plotar igual plotamos aqui.
Então vamos fazer essa conversão? Nós fazemos da seguinte forma: vou chamar aqui de “imagem =” de novo, “= cv2.”. Vamos usar outro comando aqui, o “.cvtColor()” para fazer uma conversão.
Vou passar a “(imagem)”. Vamos renomear, só para ficarem separadas as cores, fica um pouco melhor - e eu passo o seguinte parâmetro: “cv2.COLOR_”, depois eu vou chamar “(BGR)” - que foi o espaço de cores padrão - “BGR2RGB)”.
Agora eu vou fazer a plotagem da mesma forma que eu fiz anteriormente, que é o “plt.imshow(imagem_rgb)” e já temos a imagem na sua coloração original. Essas conversões de espaço de cores, de “BGR” para “RGB” e até mesmo para escala de cinza, são bem úteis para podemos trabalhar com Notebook, para fazermos a plotagem e para podermos visualizar como fica a imagem, mas também tem outros cenários.
Por exemplo: se eu quero identificar alguns padrões da imagem onde a cor não é tão importante, nós acabamos convertendo essa imagem em escala de cinza, pois ela simplifica a nossa análise.
Só para você ter uma ideia, se pegarmos aqui “imagem_rgb.shape”, vamos perceber que a imagem, por ter três canais, tem aqui no “shape” esses três canais que seriam o “R”, o “G” e o “B”, então é uma imagem complexa.
Se formos pensar em números de pixels, seria a multiplicação do comprimento pela altura - que estamos visualizando aqui - vezes três, que é cada canal, então fica muito complexa a análise de imagens.
E nem sempre precisamos dos três canais. Por exemplo, se eu fizer um outro tipo de conversão, vou pegar essa imagem “imagem_gray = cv2.cvtColor” e vou converter para a escala de cinza - “(imagem_rgb, cv2.COLOR_RGB2GRAY)”.
E vamos plotar essa imagem. Aqui eu só preciso colocar um outro parâmetro que é o “cmap="gray")” para informar para o “pyplot” que é uma imagem em escala de cinza, então se visualizarmos essa imagem agora, ela está em escala de cinza.
A escala de cinza nada mais é do que a média de cada componente de cor: se pegarmos um determinado pixel na imagem colorida, a porção “RGB” é somada e dividida por três, que vai dar o valor da minha escala de cinza. Só para vocês verem, essa “imagem_gray.shape”, nós só vamos ter um único canal.
Então não temos aqui a informação do número de canais porque ela tem um único canal. O único canal que ela tem é exatamente essa matriz desse tamanho – 853, 1280 - e cada valor dessa matriz vai de 0 até 255.
Então para, por exemplo, alguns tipos de análise - do tipo encontrar um rosto em uma imagem - podemos aplicar um classificador em cascata, nós usamos imagens em escala de cinza pois simplifica bem essa atividade. Nós conseguimos inclusive executar isso em tempo real porque ele consegue ser muito veloz.
O curso Análise e Classificação de Faces: visão Computacional com OpenCV possui 178 minutos de vídeos, em um total de 45 atividades. Gostou? Conheça nossos outros cursos de Machine Learning em Data Science, ou leia nossos artigos de Data Science.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.