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.