Detecção de objetos com aprendizado profundo e OpenCV | Yacine Rouizi | Skillshare

Velocidade de reprodução


1.0x


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

Detecção de objetos com aprendizado profundo e OpenCV

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.

      VISÃO GERAL

      1:22

    • 2.

      Instalação

      1:40

    • 3.

      Detecção de objetos em imagens

      14:10

    • 4.

      Detecção de objetos em vídeos

      4:41

  • --
  • 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.

63

Estudantes

--

Projeto

Sobre este curso

Neste curso, vamos ver como detectar objetos em imagens e vídeos usando aprendizado profundo e OpenCV.

Vamos usar o framework de detector de tiro único combinado com a arquitetura do MobileNet como nosso detector de objetos baseado em aprendizado profundo.

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: Beginner

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. VISÃO GERAL: Oi. Nesta aula, veremos como detectar objetos em imagens e vídeos usando aprendizado profundo e currículo aberto. Meu nome é Yossi e eu serei seu instrutor nesta classe. Eu programo desde 2019. E eu sou o autor do vlog. Não se repita .org, onde ajudo 5 mil desenvolvedores a cada mês a aprender mais sobre Python, aprendizado de máquina e visão computacional. Então, o que é detecção de objetos? detecção de objetos é o processo de localizar objetos com caixas delimitadoras, uma imagem ou um vídeo. É uma das tarefas mais importantes da visão computacional. E tem muitas aplicações em vários campos, como vigilância, pessoas, contagem, carros autônomos, etc. Agora, há uma diferença entre detecção de objetos e classificação de imagens. Então, basicamente, a detecção de objetos é o processo que localiza objetos em uma imagem. Já a classificação de imagens é o processo que atribui rótulos às imagens com base em seu conteúdo. Então, vamos entrar na aula e começar a construir nosso projeto. 2. Instalação: A primeira coisa que precisamos fazer é instalar os pacotes necessários, úteis para o processamento de imagens. Então, vamos instalar o OpenCV e o não pipe. Vamos primeiro começar com o OpenCV, abrir uma nova janela do terminal e executar o comando pip, Install OpenCV polygon. No meu caso, você pode ver que eu já tenho o Open CV instalado. Requisito, já satisfeito. Mas eu só quero criar um ambiente virtual. Assim, o trio pode ver o que você obtém quando o instalou. Então, vamos criar o ambiente virtual. Nós invejamos. Vamos falar de TV. Agora, vamos pré-instalar o CV aberto. Cv. Aqui você pode ver que o OpenCV foi instalado com sucesso junto com o CV sem canal aberto. Então, eu não preciso instalar o NumPy. Aqui você pode ver que eu tenho a versão CV 4.54.5 aberta do OpenCV e a versão do não pi air é 1,22 para um. 3. Detecção de objetos em imagens: Agora, neste vídeo, usaremos o detector de disparo único do trabalho combinado com a arquitetura MobileNet como nosso detector de objetos baseado em aprendizado profundo. Então, a primeira coisa que precisamos fazer é importar nossas bibliotecas. Então, diremos importar CB2. E também podemos carregar nossa imagem. Então, vamos dizer Marine aqui, o pote para nossa imagem. E também podemos redimensioná-lo. Então, quando dizemos CV para redimensionar a imagem, digamos 644 da largura. E para 84 a altura. Agora vamos ver a altura da imagem e a largura. Portanto, não diríamos imagem em forma de ponto 0. E para a altura dirá forma um. Agora precisamos dos pesos e do arquivo de configuração do nosso modelo. Então você baixou este phi da documentação do OpenCV. Então, temos dois arquivos aqui. Vou colocar um link para essas pessoas na versão de texto desta parte. Agora que temos todos os arquivos de que precisamos, podemos carregar nosso modelo. Então, podemos escrever aqui nossa rede. Portanto, não veremos o ponto V2 DNN lido no tipo de fluxo. E no cabeçalho, forneceremos os pesos e o arquivo de configuração. Portanto, não podemos escrever essas duas variáveis aqui. Quando você diz que o peso é igual a e nós fornecemos o caminho para o nosso peso. Portanto, esse é o arquivo que contém os pesos do modelo. Você pode dizer modelo. Essa é a arquitetura do nosso modelo. Agora, o que podemos fazer é isso, então aqui temos o arquivo de nomes do cacau. Quando você o coloca aqui dentro do projeto. Então, basicamente, esse arquivo contém as cláusulas que podemos detectar. Assim, podemos abrir o arquivo e instalar os rótulos das classes na lista. Podemos usar o Context Manager para adultos, então diremos com open. E aqui fornecemos o caminho para o nosso nome de cacau está bom. Basta copiá-lo daqui. Aqui vamos dizer ler arquivo. Aqui, armazenaremos os rótulos das classes dentro, dentro da lista, aos quais daremos nomes. Então, diremos aqui que nomes dos clusters são iguais a uma lista vazia. Aqui podemos escrever f, lot, rained, stripped e dots. E vamos nos separar com base na nova linha. Agora precisamos pré-processar nossa imagem e temos uma função que fará todo o pré-processamento para nós. Então, podemos dizer aqui que blob é igual a c v2 dot DNN. E aqui usaremos a imagem funcional do envelope. Aqui nós fornecemos nossa imagem. E agora temos alguns parâmetros que são definidos por padrão. Eles são fornecidos na documentação. Então, basicamente aqui, o primeiro é o fator de escala. Podemos colocar 1, dividimos por 127,5. E então aqui temos o tamanho da imagem de saída. Não podemos escrever 320. E o último argumento aqui é o meio dos valores de produção. Agora podemos escrever um para um até 7,5. A mesma coisa aqui e a mesma coisa aqui. Em seguida, podemos definir esse blob como entrada para a rede e obter a previsão de saída. Então, podemos dizer aqui que não é muito. Entrada. E forneceremos nossa bolha. Para fazer a previsão. Diremos que a saída é igual a quatro. Agora, aqui temos nossas previsões. Então, vamos imprimir a forma dessa variável. Nós diremos que a forma de saída será para escrever nosso código. Então, aqui, como você pode ver, temos uma forma de 11107. Então aqui temos as detecções, o cabelo sete, temos as caixas delimitadoras, a confiança e algumas outras informações. Agora, o que podemos fazer repetir essa variável para obter as detecções. Então, diremos para detecção na saída. Aqui vamos dizer 00. E aqui pegamos tudo. E aqui também levamos tudo. Agora, aqui teremos a confiança do modelo para a detecção atual. Portanto, podemos dizer que Pro Really t é igual ao segundo argumento do segundo elemento de nossa detecção. Agora podemos filtrar as detecções de bugs. Portanto, agora podemos vincular se nossa probabilidade ou a confiança do modelo estiver, digamos, abaixo de 0,5, continuaremos fazendo um loop. Então, não faremos nada. Caso contrário, obteremos a caixa delimitadora da detecção. Portanto, a caixa delimitadora está localizada. Você pode ver a detecção de três a sete. Agora, esta caixa delimitadora, ou dada uma relativa em relação à largura e altura da imagem. Então, vamos imprimir nossa caixa. E o cabelo. Como você pode ver, temos 0,30.350.5. Portanto, precisamos multiplicá-los pela largura e altura da imagem para obter as coordenadas x e y reais da caixa delimitadora. Olá, O que podemos fazer usar a função zip e não escreveremos uma compreensão de lista. Então, aqui, quando escrevermos o ZIP, levaremos as detecções de três a sete. E o segundo argumento aqui forneceremos a largura, a altura, a largura e a altura. E aqui diremos Para a, b nesta função zip, tomaremos a multiplicação desses dois elementos. Aqui. A primeira coordenada é o x do canto superior esquerdo da caixa delimitadora. Nós o multiplicamos pela largura. Então temos o y. Nós o multiplicamos pela altura. E então temos o x na parte inferior, vezes à direita da largura. E então as coordenadas y na parte inferior, vezes à direita da altura. Então, não precisamos mais disso. E também precisamos converter nossa lista em uma tupla. Agora podemos desenhar os retângulos, então diremos retângulo de pontos c v2. Aqui. Deixe-me dizer imagem. Para as coordenadas do retângulo, usaremos a caixa delimitadora. Tomemos como ponto de partida, pegaremos os dois primeiros elementos da caixa delimitadora. Então, aqui vamos dizer os dois últimos elementos. O motivo da chamada é a espessura. Agora, vamos extrair o ID do cluster do objeto detectado e obter o rótulo da classe. Então, tudo bem, o ID da classe é igual a e aqui o ID do cluster. Podemos acessá-lo assim. Para o nome da classe, podemos escrever aqui o rótulo. O rótulo que é o ponto de texto que vamos colocar na imagem que vamos escrever é igual a uma string f. O primeiro elemento. Nós aceitaremos o rótulo da classe. Então, temos os nomes das nossas classes. E os nomes das nossas classes são uma lista. Começa a partir de 0. Então, precisamos subtrair um do ID do cluster. Então, escreveremos o ID de permissão e subtrairemos um. Agora também podemos ouvir a probabilidade exibida junto com os rótulos das classes. Então, diremos probabilidade vezes 100. E, finalmente, podemos desenhar nosso texto na imagem. Então, diremos CV para adotar, coloque texto aqui, imagem. Aqui, para o texto, teremos, digamos, o rótulo da origem. Podemos usar nossas caixas. Então, 0 aqui e a caixa um. Mas aqui vamos adicionar alguns pixels para garantir que o texto esteja dentro da caixa delimitadora. Vamos adicionar 15 pixels. Agora, para a fonte, podemos usar a fonte. Simplesmente procura a pele, digamos 0,5 de cor verde. E dois, para a espessura. Acho que terminamos para podermos mostrar nossa imagem. Então, digamos que V2 dot IM mostre imagem e imagem. E o peso do ponto CB2 0. Vamos executar nosso código. E aqui a caixa delimitadora não é exibida. Aqui está, precisamos pegar os dois últimos elementos na caixa delimitadora. Então, quando executamos isso novamente, agora aqui, como você pode ver, a pessoa foi detectada, mas aqui o texto é um pouco estranho. Nós podemos mudar. A fonte, digamos, as mulheres dizem aqui. No terciário está simplesmente a aparência. Então, aqui, como você pode ver, a pessoa foi detectada corretamente. E aqui temos a confiança, que é de 78% 4. Detecção de objetos em vídeos: Agora vamos para a próxima etapa, que é detectar objetos em um vídeo. Então, aqui primeiro precisamos inicializar a captura de vídeo. Escreveremos que v d u é igual a CV para adotar a captura de vídeo. E aqui eu tenho um vídeo que vou usar neste exemplo. Então, vamos escrever aqui, digamos, refazer um ponto mp4. Agora, aqui tudo continua o mesmo. Mas segundo, ele pode criar uma lista de cores aleatórias para representar cada classe. Então, agora podemos escrever aqui. Primeiro, precisaremos importar o numpy. E aqui não precisamos realmente desses dois pacotes. Então, aqui escreveremos sementes aleatórias que não sejam pontos pi para T2 e T4. As cores, diremos que não são pi, não ao redor delas. Por aí. Para o valor baixo, diremos 0 e para o valor alto 255. Portanto, ele gerará valores entre esses dois valores. O tamanho que usaremos é o tamanho dos nomes das nossas classes. E aqui diremos três para gerar as cores RGB. Em seguida, podemos começar a processar nossos forames. Então, embora seja verdade. E aqui vamos fazer um up frames. Então, vamos dizer por que é verdade aqui. Quando a xícara e quando a colocamos dentro do laço inteiro. Aqui, fomos ver a altura de nossas molduras. Então, para ele, não em forma de 0. E também a largura e o cabelo, tudo continua o mesmo. Então, vamos ouvir dizer frame. A única coisa que queremos fazer é obter o fórum de cores, a detecção atual. Então, diremos que as cores são iguais às nossas. E aqui precisamos fornecer o ID da detecção. Então, podemos colocar essa linha antes do estacionamento. E aqui podemos dizer classe. Agora precisamos converter a cor em um número inteiro. Então, diremos que r é igual a um inteiro de cor, a primeira cor. A mesma coisa para o BGF. E o cabeçalho, podemos usar nossa cor personalizada. Vamos dizer B, G e R. E aqui o nome e a moldura. E aqui precisamos usar um por um milissegundo para o peso k. Caso contrário, nossa moldura ficará congelada. Então, agora podemos executar nosso código. Então lá vamos nós. Nosso carro foi detectado com sucesso no vídeo. Agora você pode usar vídeos diferentes para ver se isso funcionará bem. Mas espero que você tenha a ideia da detecção de objetos.