Visão computacional com aprendizado profundo e OpenCV: como detectar sorrisos | Yacine Rouizi | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Visão computacional com aprendizado profundo e OpenCV: como detectar sorrisos

teacher avatar Yacine Rouizi

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Apresentação

      1:53

    • 2.

      Instalação

      1:33

    • 3.

      Como carregar os dados

      17:15

    • 4.

      Como treinar o detector de sorriso

      14:41

    • 5.

      Como aplicar o nosso detector de sorriso às imagens

      12:58

    • 6.

      Como aplicar o nosso detector de sorriso em vídeos

      4:56

    • 7.

      Conclusão

      1:37

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

89

Estudantes

--

Projeto

Sobre este curso

Neste curso, vamos criar um aplicativo completo para detectar sorrisos em imagens e vídeos.

Para isso, vamos usar o aprendizado profundo e começar por treinar uma rede neural convolucional no conjunto de dados SMILES que contém faces de pessoas que sorriem e não sorriem. Depois que a rede for treinada, vamos passar pelos passos seguintes para detectar sorrisos em imagens e vídeos:

  1. Vamos usar cascatas Haar para detectar um rosto em uma imagem.
  2. Vamos extrair a região facial da imagem.
  3. em seguida, vamos passar a região facial para a rede para classificação.
  4. E, finalmente, vamos anotar a imagem com o rótulo "sorrindo" ou "não sorrindo" dependendo da saída da rede.

Este curso foi feito para programadores intermédios em Python que têm alguma familiaridade com o aprendizado profundo e a visão computacional.

No final deste curso, você vai ter um aplicativo de detecção de sorriso totalmente funcional para os seus projetos.

Conheça seu professor

Teacher Profile Image

Yacine Rouizi

Professor

Hi! My name is Yacine Rouizi. I have a Master's level in physics of materials and components and I am a passionate self-taught programmer. I've been programming since 2019 and I teach on my blog about programming, machine learning, and computer vision.

My goal is to make learning accessible to everyone and simplify complex topics, such as computer vision and deep learning, by following a hands-on approach.

Visualizar o perfil completo

Habilidades relacionadas

Computador Fotografia IA para fotografia
Level: Intermediate

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Apresentação: Bem-vindo à aula de detecção de força com aprendizado profundo, onde criaremos um aplicativo de ponta a ponta que pode detectar minas em imagens e vídeos. Meu nome é arsine e eu serei seu instrutor nesta aula. Eu programo desde 2019. E eu sou o autor do blog, don't repeat yourself.org, onde tenho mais de 5 mil desenvolvedores cada mês para aprender mais sobre Python, aprendizado de máquina e visão computacional. A classificação de imagens é uma tarefa muito comum em visão computacional. É uma tarefa em que você tem um conjunto de imagens e a unidade para classificá-las em um conjunto de categorias. Neste curso, especificamente, classificaremos as imagens em duas categorias. Sorrindo e balançando a cabeça, sorrindo. Que usaremos o aprendizado profundo e começaremos treinando uma rede neural convolucional neste conjunto de dados negativo, que contém rostos de pessoas sorrindo e não sorrindo. Quando a rede estiver secando, seguiremos as etapas a seguir para detectar sorrisos em imagens e vídeos. Usaremos as cascatas duras para detectar um rosto, uma imagem. Em seguida, extrairemos a região do rosto da imagem. Em seguida, passaremos a região facial para a rede para classificação. E, finalmente, anotaremos a imagem com o rótulo sorrindo ou não sorrindo, dependendo da saída da rede. Se isso parece empolgante, então vamos entrar na aula e começar a criar nosso aplicativo de detecção de odores. 2. Instalação: Neste primeiro vídeo, veremos como instalar os pacotes necessários para este projeto. Você pode pegar o arquivo requirements.txt do código-fonte e instalar o que está nele. Ou se você estiver acompanhando comigo, você pode criar um novo arquivo no diretório do projeto. Vamos chamá-lo de dxdy do requisito e inserimos as bibliotecas necessárias para este projeto. Então, precisamos de num pi. Fizemos como os ciclistas aprendem o OpenCV. Também precisamos de coágulos de lama. Então, finalmente, precisamos, agora salvamos o arquivo. E com a terminologia que aprendemos começou com o texto de pontos de requisitos de energia. No meu caso, os pacotes já estão instalados. Então, aqui podemos ver que o requisito já satisfez todas essas bibliotecas. Mas no seu caso, você verá que os pacotes estão sendo instalados. E pode levar algum tempo para instalar todos eles. 3. Como carregar os dados: Neste vídeo, vamos carregar esses mouses. O conjunto de dados de ratos contém mais de 13 mil imagens em tons de cinza de 64 por 64 pixels em crise. Sorrindo, e eles não estão sorrindo. Para os rostos que não sorriem, temos mais de 9 mil imagens. E para os rostos sorridentes, temos 3.690 imagens. Portanto, o conjunto doctype está desequilibrado, o que significa que há uma distribuição uniforme das imagens. Uma técnica comum para lidar com um conjunto de dados desequilibrado é aplicar a espera de classe. Veremos como fazer isso quando construirmos nosso modelo. Então, primeiro faremos o download do conjunto de dados. Você pode navegar até esse URL para fazer o download. Então, clicaremos no botão Gravar e faremos o download em formato zip. Quando o arquivo é baixado, nós o descompactamos. Excluímos esse arquivo. E nosso conjunto de dados está contido nesta pasta de fórmula you smiles. Então, aqui temos duas subpastas, positivos e negativos. Este contém imagens de rostos com sorrisos, como você pode ver aqui. E o conteúdo da pasta de negativos, imagens de não sorrindo. Então, como você pode ver, as imagens estão em escala de cinza e são um pouco mais 64 por 64. Então, normalmente podemos treinar nosso modelo com problema de duto. Não deve consumir muitos recursos. Não se esqueça de copiar a pasta para o diretório do projeto. Agora estamos prontos para carregar nosso conjunto de dados a partir disso. Então, vamos começar importando os pacotes necessários. Primeiro, criaremos um novo arquivo Python, ponto de treinamento p-y. Começaremos importando a função de divisão de teste de trem da seleção scikit-learn got errante. Hoje e nesta divisão, vamos usá-lo para dividir nosso conjunto de dados em conjunto de treinamento, conjunto de validação e um conjunto de testes. Em seguida, temos a função de matriz de imagens. Portanto, não há pulsos na minha imagem ou imagem para organizar. E então temos do TensorFlow keras dot load in range, que usaremos para carregar uma imagem a partir disso. Em seguida, temos o modelo sequencial. Então, de servir Flow Keras, Sequential. E então precisamos de alguns advogados. Então, teremos o TensorFlow. Keras, camadas chegam ao ano. Depois temos a piscina dos monges, depois temos a camada achatada e, finalmente, a camada densa. Também precisamos do módulo pyplot, numpy e do pacote OS. Então, vamos importá-los também. E agora estamos prontos para carregar nosso conjunto de dados. Então, vamos criar uma função chamada partes da imagem, que levará o bot ao conjunto de dados como argumento. E ele retornará a lista de caminhos para as imagens no conjunto de dados. Então, podemos primeiro criar uma lista de extensões válidas. Então, diremos que formatos válidos são iguais a. Gpg incluirá P e G. Então, basicamente, usaremos essa lista para verificar se a extensão do arquivo é uma imagem. E a seguir, vamos criar uma lista vazia chamada partes da imagem. É igual a uma lista vazia, que conterá, conterá as partes das imagens no conjunto de dados. Em seguida, examinaremos a árvore do diretório raiz. Digamos que os nomes dos seus casulos na parede. E aqui o caminho é o caminho para o diretório atual na árvore. E seus nomes são dos subdiretórios do diretório atual nos três, e os cinco nomes são os arquivos no diretório atual. Então, vamos começar imprimindo. Aqui está meu Harris e veremos o que vou dizer aqui. Você tem muitas plantas. Aqui vamos nós direto desse axônio leve. Vamos rodar nosso roteiro. Portanto, a saída aqui são todos os subdiretórios do diretório smiles. Como você pode ver, temos os negativos, positivos, que estão aqui, e depois menos sete, positivos, sete, que estão aqui. E aqui. Agora vamos fazer um loop sobre a íris final. Então, escreveremos para o nome em nomes. Vamos também imprimir o tubo e a parte final para ver o que está acontecendo. Assim, podemos escrever que você está em seu próprio roteiro de cores. Então, aqui, como você pode ver, temos esse pote de diretório e, em seguida, esse grão fino. E então essa camada realmente comprou esse nome de arquivo, que é uma imagem, e assim por diante. Então, o que podemos fazer agora é extrair a extensão do arquivo, que é This, this, e compará-la com a nossa, a esta lista para verificar se o nome do arquivo é uma imagem. Então, vamos escrever aqui extensão. Quer dividir o texto. Nós fornecemos um bom nome. Noah. Em seguida, escreveremos que nossa extensão está na lista de formatos válidos. Construiremos o caminho completo para nossa imagem. Então, diremos que a parte da imagem é igual ao ponto do sistema operacional, ponto, junção de pontos. E aqui nos juntaremos à parte do diretório, que é esta. Nós definimos o nome aqui parte. Com o financiamento para essa imagem em particular. O nome completo da imagem será esse aqui. E também precisamos acrescentar nossa imagem dois, nossa lista. Acabamos com essa função. Apenas partes escritas da imagem. Então, agora, quando essa função, temos o caminho completo para cada imagem no conjunto de dados armazenado em uma lista. Portanto, o próximo passo é usar essas partes da imagem e carregar o conjunto de dados mais inteligente. Então, podemos dizer que vamos criar uma nova função. Dê o nome de célula de carga. E aqui forneceremos dois argumentos. A primeira são as partes da imagem e a segunda é o tamanho alvo das imagens. Vamos defini-lo aqui. Digamos que o tamanho da imagem seja igual a 3232. Caminhos da imagem corporal da imagem. Agora podemos criar duas listas vazias. Primeiro, vamos chamá-la de cidade, que conterá as imagens. E então nós o lemos. mesmo acontece com o nome de rótulos, que conterá o rótulo de cada imagem sorrindo ou não sorrindo. Então, a seguir, começaremos obtendo as imagens. Assim, podemos fazer um loop sobre as partes da imagem. Diremos para pods de parte de imagem. Aqui vamos escrever imagem é igual a, vamos carregar nossa imagem usando a função de carregamento de imagem. Aqui, o primeiro argumento é o caminho para nossa imagem. E então temos o modo de cor, que é em tons de cinza. E então o último argumento é o tamanho do alvo, que podemos usar nosso tamanho alvo. Em seguida, precisamos converter nossa imagem em uma matriz NumPy. Simplesmente escreveremos a imagem dois. E, finalmente, acrescentamos nossa imagem aos dados. Então, aqui acabamos com as imagens. Agora podemos obter os rótulos. Agora, para obter o rótulo, podemos extraí-lo da imagem. Mas, por exemplo, aqui imprimiremos as partes da imagem. E diremos Veja o que obtemos. Os dados. Forneça caixa de imagem. Então, aqui, como você pode ver, temos o bot para cada imagem em nosso conjunto de dados. Por exemplo, aqui está o caminho completo para essa imagem específica. Então, se pegarmos a parte completa, podemos extrair o rótulo dessa parte, que aqui é positiva. Então, para essa imagem em particular, a pessoa está sorrindo. Temos um rosto sorridente nessa imagem. Então, para obter o rótulo, encontraremos aqui esta linha. E escreveremos que o rótulo é igual ao vínculo da imagem e formaremos a imagem, mas vamos dividi-lo com base no separador de diretório, que é esse separador aqui. E vamos pegar o terceiro a partir do final. Então este é o primeiro, menos um, menos dois e menos três. Então, aqui vamos obter o rótulo é igual a dois positivos. Agora diremos que se nosso rótulo for igual a dois positivos, nós o codificaremos como um. Então, vamos escrever um. Se num for igual a positivos, caso contrário, codificaremos que tem 0. Finalmente, acrescentamos nosso rótulo à nossa lista. O último passo é simplesmente retornar os dados, a lista e a lista. Nós nos certificamos de convertê-los em um array NumPy. Vamos dizer return num pi dot, reescrever os rótulos superior e não pi dot. Também ouvimos a necessidade de dimensionar os dados para o intervalo 01 dividindo por 255. Aqui até aqui, podemos obter nossas tabelas de dados usando nossa função. 4. Como treinar o detector de sorriso: Nesta parte, vamos construir nosso modelo e começar a treinar. O modelo que vamos construir consiste em uma folga para curvar para a marca mais que aparece nos blogs, seguida por uma camada totalmente conectada. Então, como você pode ver nesta imagem, teremos essa camada fina do que o pool máximo para a camada. E então a mesma coisa aqui, C mais camadas máximas de pool. E então teremos o bloco totalmente conectado, que consiste em camada achatada, e então uma camada densa e outra camada que vai esperar para fora como. Então, vamos criar uma função. Vamos chamá-lo de modelo. E isso tomará a boa forma de um argumento, que será igual à ciência média. Brilho um para uma dimensão de canal. Mas não precisaríamos mudar. Neste tópico. Usaremos esses modelos de equação para que possamos escrever murmúrios, querer sequencial. Teremos todos os filtros aceitarão o trabalho sujo. O governador assina. Vamos ver, tamanho três por três. Para que a ativação faça a função de observação. Ou as Cruzadas. mesma boa forma. Usaremos alarme, máximo de férias, que usaremos conciso para o meu trabalho. E então a mesma coisa aqui da camada de perda de fluido dos filtros. Vamos dobrar o número de filtros. E depois a camada achatada. Com 256. Você é honesto. E para a ativação da camada de saída. Nós temos. Como estamos lidando com um problema de classificação binária, usaremos a função de ativação sigmóide e enviaremos a todos vocês. Então você é um para o sinal de ativação. Vamos também compilar nosso modelo. Então, vamos modelar o ponto para compilar a função de perda. É claro que pegaremos a cruz binária na cópia. O ideal é 0. Digamos que o otimizador ou as métricas. Realmente pegue o Parker Awesome. Em seguida, precisamos calcular os pesos da classe. Como eu disse antes, nosso conjunto de dados está desequilibrado. Então, precisamos dar mais peso ao vidro sub-representado. Sorrindo mais, neste caso, para que o modelo preste mais atenção a esse copo. Podemos começar por conter o número de cada rótulo usando a função numpy dot unique. Então, diremos, eu esqueço de devolver o modelo. Então, em troca, o modelo, e diremos que a contagem de rótulos é a chamada para não pi. O que está correndo na cabeça, estaremos com nossos rótulos e diremos retorno, é verdade. Retornar colunas é igual a mostrar, para retornar o número de cada rótulo. Vamos imprimir esses. Diremos que não teremos não teremos problemas com os produtos. Nós temos. Vai aqui, já que não precisamos rotular, todos os rótulos estão definidos como 0. Então, agora estamos no nosso roteiro. Aqui. Como você pode ver, formamos um rotulado 01, que está sorrindo ou não sorrindo. E para a variável count, temos 9.475. Desdobre essa camada de revestimento. Temos 3.690. Então, agora precisamos calcular os pesos das classes. Para isso. Podemos usar uma operação mais simples. Então, podemos escrever aqui conta. As novas contas serão iguais às contagens máximas, que estão aqui, e nós as dividimos pelas contagens anteriores. Vamos mover essas duas variáveis novamente. Então, aqui, como você pode ver, o mais um é MyInt plus terá os pesos para 0,56 maiores que o mais 0. Vamos criar um dicionário que mapeará cada classe com seu peso. Então, podemos escrever mais peso é igual. Usaremos a função zip. Então, o dicionário. Agora precisamos criar um conjunto de treinamento e um conjunto de validação e um conjunto de testes. Levaremos 20% dos dados para rezar por esse conjunto. E dos 80% restantes, levaremos 20% para criar o conjunto de validação. Então, vamos começar com o conjunto de testes. Usaremos a função de divisão de teste de trem para isso. Então, nós gostamos de tentar proporcionar o nosso dia. E, em seguida, esse tamanho levará 20 por cento. Digamos, comece o outono. Eles seguem sua própria demonstração. Ou para fazer. A mesma coisa para o conjunto de validação. Acabamos de copiar e colar. Estirpe. Escorra lentamente. Nós fornecemos. Certo. Agora estamos prontos para treinar nossos modelos. Então, primeiro construiremos o modelo escrevendo. O modelo é igual ao módulo. E vamos treinar o modelo para a 20ª caixa. Portanto, a caixa é igual a um. historiador da arte é o quantil diria que é a maravilha por que hoje. O conjunto de validação de dados de validação. E precisamos usar o peso positivo para o tamanho do lote. Diga 64. Desdobrou a caixa, uma caixa. Vamos também guardar o modelo para mais tarde. Então, podemos simplesmente escrever um não diz e nós o nomearemos, prejudicará um brilho. Aguarda e espera pelo arquivo inicial. Nós usamos o hoje. Então seja bem-vindo. treinamento não deve demorar muito Então você pode esperar que o treinamento termine. Então, como você pode ver o que nossos ginásios e desligam aproximadamente 90 por cento. Mas vamos traçar as curvas de aprendizado para visualizar nossos resultados. Então, vou apenas copiar o código daqui. Não há nada de especial. Aqui. Estamos apenas traçando a precisão do treinamento, a precisão da validação. E então temos a perda de treinamento e a validação. Então, vamos reexecutar o script. Então aqui temos a perda de treinamento, e aqui temos a precisão de validação do treinamento de aproximar aqui, 1, 2%. O que você pode notar é que a precisão do treinamento e validação aproximadamente aqui, então começa a divergir. Então, isso é um sinal de sobreajuste. Podemos melhorar a precisão do nosso modelo usando o aumento de dados. Mas eu não vou cobrir isso nesta aula. Então, vamos avaliar nosso modelo no conjunto de testes. E podemos aplicar nosso modelo ao resumo ou a quais imagens. Então, essa precisão de perda. Há um gráfico de quantil envolvendo o uso do conjunto de teste. Aqui estamos recentemente durante o operador de perdas , Awesome. Então, temos uma grama, é aproximadamente uma pessoa. 5. Como aplicar nosso detector de sorriso às imagens: Agora que nosso modelo está treinado, vamos aplicá-lo a algumas imagens do mundo real. Então, vamos criar um novo arquivo Python. Vamos chamá-lo de sorriso, imagem do detector, PY. E podemos começar a escrever algum código. Então, vamos importar muitas vezes dizer v. Então temos desses modelos. Função de carga. Também precisa. Em seguida, vamos definir algumas variáveis. Então, vamos creditar que a largura é igual a 800. Digamos que a altura seja igual a 600. Também criamos a cor azul, então é igual a 5500. E agora podemos carregar nossa imagem. Então aqui eu tenho uma pasta com algumas imagens. Vou apenas copiá-lo daqui. Eu tenho dez imagens. Vamos pegar o primeiro, nossos modelos. Então, vamos gostar que a imagem seja igual a CV muito alto de um fuzileiro naval. Imagens. Nós damos o primeiro palpite. Também é necessário redimensioná-lo. Então, vamos gostar da ferramenta TV, redimensionar a imagem e usar a largura e a altura. E finalmente, nos convertemos em muito tolo para não CBT converter o CV do cabelo para ler você tem que ficar grisalho. Em seguida, podemos começar a detectar rostos usando o classificador em cascata Haar. Então aqui eu defini nosso XML padrão em cascata, face frontal. Então vou colocá-lo aqui, o diretório do projeto, e podemos carregá-lo usando a função CV para adotar o classificador em cascata. Então, vamos escrever que nosso detector de rosto é igual a CV para classificador em cascata. E aqui fornecemos o nome de que também precisamos carregar nosso modelo. Então, diremos mais do que é igual ao modelo. Aqui temos o nome do nosso modelo que é mais do que. Agora podemos detectar rostos usando a função detectar multiescala. Como esses retângulos é igual ao nosso detector facial. Para o primeiro argumento, fornecemos nossa imagem em tons de cinza e, em seguida, temos o carro falso em escala. Vamos colocá-lo como 1.1. Então temos que definir os vizinhos mínimos, que podemos colocar como. Esses parâmetros funcionam. Bem, no meu caso, mas você pode mudá-los se quiser. Portanto, aqui a variável de retângulos de face conterá as caixas delimitadoras de face. Portanto, o próximo passo é fazer um loop sobre as caixas delimitadoras da face e extrair a região da face. Diremos para x, y, largura e altura. No nosso caso. Aqui vamos primeiro retângulo ao redor do rosto. Então, nós gostamos do TV2.com. Aqui. Nós conhecemos nossa imagem. E daremos as contas MSDN, que são x e y. E então temos duas rachaduras diagonais diferentes , que seriam x mais y mais. E depois temos a cor azul e duas para a espessura. E na próxima semana comece a região do rosto a partir da imagem em escala de cinza. Temos as coordenadas do rosto aqui. Então, escreveremos nosso herói por quê? A ligação para Ray. E simplesmente usaremos o corte. Então, surgiremos de y para y mais x. X mais largura. Também precisamos redimensionar a região da face e dimensioná-la para 01 ramo antes de alimentá-la em nosso modelo. Então vamos mentir ou y é igual a CV para encaixar o tamanho. Aqui aprenderemos a dimensioná-lo para 32 por 32, porque é isso que usamos para treinar nosso modelo. Aqui, para o tamanho da imagem, temos 32 por 32. Em seguida, escalamos para 01, ramo Dois, 55. Também precisamos adicionar a imagem a um lote. Nós vamos, porque aqui a forma da imagem de Trinta e dois. Trinta e dois. Nosso modelo foi treinado em lotes de imagens. Portanto, a nova forma será igual a T2, T2 por T2. Então escreveremos y é igual a y. E usaremos a função ponto sem canalização, novo acesso a este novo eixo, eixo y. E vamos manter tudo igual aqui. Pode imprimir aqui o antes e depois de acessar para ver o que mudou aqui. A forma. A mesma coisa aqui. Aqui temos um erro de atributo ou duas vezes. Nos EUA é letra maiúscula. Aqui. Como você pode ver, como eu antes de adicionar o novo eixo é 32 por 32. E depois de adicionar o eixo u aqui, Econ 132 por 32. Então agora o passo final é passar a região do rosto para não funcionar. Para classificação. Nós nunca removemos. Vamos escrever qual previsão é igual à da seta e vamos imprimir o dicionário. Então, normalmente, a previsão terá um valor entre 01. Aqui. Você pode ver aqui o valor da previsão para essa imagem específica. A previsão é 0,6. Então, o que podemos fazer agora é que nosso rótulo é igual a, digamos, se a previsão for maior ou igual a 0,5, criaremos o rótulo como, definiremos o rótulo como sorridente. Caso contrário, vamos configurá-lo para não sorrir. Então, vamos rotular é igual a sorrir. Se a previsão for maior ou igual a 0,5, caso contrário, não sorrindo. Isso é colocado na noite. Para verificar este caso, a etiqueta deve estar gastando seu processo sorrindo para o dia. Mas a última coisa que precisamos fazer é escrever o texto e a imagem e exibir a imagem. Como CV. Para colocar o x. Aqui, colocaremos texto sobre isso. E gostaríamos de fazer a rotulagem e a imagem. Para o texto das coordenadas, usaremos as coordenadas da face. Então vamos dizer x mais x e y. E para a fonte, pode escolher esta é, digamos que esta. E para a escala da fonte, digamos 0,75, cor azul. Formas de visualizar e CB2. Tenho certeza mantemos nossa coluna. A pessoa não está sorrindo, mas nosso modelo detectou na mineração. Obviamente, nosso modelo não é 100% preciso, então essa é uma previsão positiva. Vamos tentar com outra imagem. Digamos que esse. Desta vez. Eu sou Armando previu com sucesso o slide. Podemos tentar do jeito que a pessoa está, não sorrindo. Portanto, não aceitaríamos esse que também pode testar com as outras imagens. E isso é com a imagem. A pessoa não está sorrindo. E nosso modelo foi detectado com sucesso. 6. Como aplicar nosso detector de sorriso aos vídeos: Agora que você sabe como detectar imagens de sorrisos, digamos como aplicar nosso detector de sorriso de aprendizagem profunda dois vídeos. Então, vamos criar um novo arquivo Python. Diga o nome de detector de sorriso, PY. E vamos importar as bibliotecas para que o código não mude muito com isso. Vou apenas copiar essa multa para colar aqui. Então temos a largura e a altura. Quando a cor azul. Aqui, só precisamos inicializar os objetos de captura de vídeo. Então, renovaríamos sua xícara. Claro que é igual a CV para captura de vídeo. Aqui, fornecemos o nome do nosso vídeo. Aqui eu tenho um vídeo pré-gravado meu no qual fiz alguns testes. Então, vou usá-lo apenas para esta parte do vídeo aqui. Fiz alguns testes e sorri e muito dinheiro. Então, aqui vamos colocar o nome do vídeo mp4. E então temos a mesma coisa. Desta parte. Precisaremos detectar rostos, nossa maravilha pré-treinada, e detectaremos rostos, perdendo a função de detecção multiescala. Então, vamos apenas copiar essas três linhas aqui. Então, aqui está nosso dicionário. Lemos no navegador os quadros, para que possamos começar a processar nossos quadros. Podemos dizer, por que é verdade. Então, aqui vamos pegar o próximo quadro do vídeo. Então, quando dizemos quadro de acordo com a captura de vídeo. E então vamos convertê-lo em várias curvas, CV para CV, CV para BGR. E aqui podemos usar a função multiescala The digs e passá-la ao longo do quadro de escala de cinza. Agora podemos fazer um loop sobre as caixas delimitadoras de face. Então, vou apenas copiar o código daqui porque tudo permanece o mesmo aqui. Só preciso mudar aqui imagem, quadro. Encontre uma nova maneira. Você escreve o texto da mesma forma e nós mostramos nossa moldura. Então, basta copiar o código daqui. Como olhar o currículo aqui no cabeçalho, não diríamos que seu currículo pareça, espere, espere um minuto. Então a corrente é igual a q. Ok? Nós saímos. Finalmente, lançamos a captura de vídeo e as janelas. Vamos ver o resultado final. Diremos Python, três, leitura do detector de sorriso. Então, aqui você pode ver que o algoritmo não tem problema detectar sorrisos e sorrisos a partir do vídeo. A detecção é bastante estável. 7. Conclusão: Nesta aula, você aprenderá a treinar uma rede neural convolucional para detectar sorrisos em imagens e vídeos. A primeira coisa que precisamos fazer é carregar nosso conjunto de dados do disco e prepará-lo para nossa rede. Em seguida, criamos nossa rede neural. E aqui calculamos o peso da classe para levar em conta o desequilíbrio de classe no conjunto de dados. E assim forçar o modelo a prestar mais atenção à classe sub-representada. Então, aqui, dividimos um conjunto de dados em um conjunto de treinamento, conjunto de validação e um conjunto de testes e, em seguida, continuamos a treinar nossa rede. Vimos que alcançamos uma precisão de 90 por cento no conjunto de testes. A etapa final foi testar nosso modelo em imagens e vídeos. Então, para isso, usamos um classificador em cascata Haar aqui nesta parte para detectar o rosto na imagem. E então extraímos nesta parte aqui, a região da face da imagem e vinculamos a região da face para previsão ao nosso modelo. E, finalmente, rotulamos a imagem como sorrindo ou não sorrindo.