Olá, boas-vindas a mais um curso na Alura. Meu nome é Allan Spadini.
Audiodescrição: Allan se descreve como um homem branco, com cabelos lisos castanhos e olhos castanhos. Ele veste uma camisa preta e está no estúdio com luzes verdes e azuis ao fundo.
Neste curso, vamos utilizar o TensorFlow, mais especificamente o módulo Keras, dentro do TensorFlow, para realizar o processo de classificação de imagens. A classificação de imagens tem diversas aplicações, como a detecção de defeitos em produtos, o diagnóstico médico por imagem, entre outros.
Para fins didáticos, neste curso vamos realizar o processo de classificação de folhas de videira, identificando se as folhas estão saudáveis ou não.
No decorrer deste curso, vamos implementar redes neurais convolucionais, que são muito eficazes para a classificação de imagens.
Ao final do curso, você também será capaz de construir uma aplicação com o Streamlit, que vai utilizar o modelo que vamos construir para realizar esse processo de classificação de imagens.
Para acompanhar este curso, você já deve conhecer o Python voltado para a ciência de dados e também sobre o uso do Keras com o TensorFlow para classificação de dados tabulares.
Esperamos ver você nos próximos vídeos do curso. Até lá!
Imagine que trabalhamos em uma vinícola e essa vinícola começou a detectar alguns problemas na qualidade do vinho e do suco de uva produzidos. Por isso, uma pessoa profissional na área de agronomia começou a tirar fotos das folhas de videira e identificou três problemas diferentes nas folhas.
Por conta disso, foi determinado que seria interessante construir algo capaz de realizar essa classificação dos problemas nas folhas de videira rapidamente. Isso permitiria o tratamento das plantas de forma rápida e eficiente. Assim, vamos construir uma rede neural convolucional, que é conhecida por fazer esse processo de classificação de imagens de maneira bem eficiente.
Para começar a entender esse problema, vamos consultar nossos dados e verificar como esses dados estão disponíveis para nós.
Colocamos os dados dentro de uma pasta do nosso Google Drive. A ideia é que você também coloque dentro de uma pasta do seu Google Drive.
Vamos conectar o nosso Google Drive ao Colab.
Para isso, vamos em arquivos, do lado esquerdo, e clicar em "Montar Drive" aqui dentro do Google Colab. Vamos conectar o Google Drive. Ele vai demorar um pouco para fazer esse processo. Depois que ele fizer esse processo, vamos clicar em atualizar, se não aparecer a pasta do Drive.
No nosso caso, a pasta apareceu. Vamos identificar onde está a pasta que colocamos no Google Drive. Após localizar a pasta, vamos clicar em "Copiar caminho".
Vamos colocar esse caminho dentro de uma variável URL
, e vamos colocar ele entre aspas, para que tenhamos a string do caminho.
url = 'caminho do arquivo no googledrive'
Para ler esses dados, vamos utilizar uma biblioteca chamada Pathlib. Vamos fazer aqui o import da pathlib
, executar.
Em seguida, vamos colocar dentro de uma variável de nome data_dir
, que vai ser igual a pathlib.path
, vamos abrir e fechar parênteses, vamos passar a URL
. E agora sim, temos o diretório dos dados.
import pathlib
data_dir = pathlib.Path(url)
Com esse diretório dos dados, já conseguimos verificar algumas informações.
Por exemplo, quantos arquivos temos lá dentro da nossa pasta do Google Drive.
len(list(data_dir.glob('*/*.JPG')))
1600
O comando acima vai fazer com que identifiquemos todos os arquivos presentes ali com essa extensão JPG.
Ao executar, ele informou que temos 1600 imagens, 1600 arquivos dentro dessa pasta de uvas.
Mas, será que temos essas imagens disponíveis de maneira solta dentro da pasta? Provavelmente temos elas em diretórios. Então, vamos verificar o nome dos diretórios presentes dentro da pasta de uvas.
subfolders = `[f.name for f in data_dir.iterdir() if f.is_dir()]
O que estamos fazendo aqui é construir um for, que vai percorrer toda essa pasta, e se o f
for um diretório, ele vai retornar a informação para nós.
Depois disso, vamos imprimir o nome dessas subpastas, dessas subfolders
.
subfolders = `[f.name for f in data_dir.iterdir() if f.is_dir()]
subfolders
['LeafBlight', 'BlackRot', 'HealthyGrapes', 'BlackMeasles']
Temos quatro subpastas.
Como dissemos, a pessoa agrônoma identificou três problemas nas folhas, mas também temos uma pasta chamada "HealthyGrapes", que significa "uvas saudáveis", ou as videiras saudáveis. Então, temos quatro pastas que representam quatro classes do problema que temos que resolver.
Vamos tentar verificar como é uma folha das videiras, para ver como está sendo esse problema. Vamos utilizar aqui a biblioteca PIL
para visualizar uma das imagens dentro dessa pasta.
Vamos fazer aqui o import PIL
.
import PIL
Vamos pegar uma imagem dessa LeafBlight
, que é a primeira classe. Vamos criar aqui uma variável de nome leaf_blight
, que vai ser igual a list(data_dir.glob('LeafBlight/*'))
. Vamos pegar todas as imagens, todo o conteúdo dentro dessa pasta LeafBlight
, e colocar dentro da variável leaf_blight
.
leafblight = list(data_dir.glob('LeafBlight/*'))
Assim, vamos abrir a primeira imagem dentro da pasta. Para isso, vamos utilizar o seguinte comando:
PIL.Image.open(str(leafblight[0]))
Ao executar o comando, temos aqui a imagem das folhas, de uma folha com essa característica, com esse problema que estamos chamando de "LeafBlight".
Já deu pra ver que temos realmente imagens dentro dessas pastas. E, se você já trabalhou com machine learning, ou mesmo com redes neurais, normalmente é comum que trabalhemos com dados tabulares, arquivos CSV e tal.
Então, no próximo vídeo, vamos dar uma olhada melhor nas características das imagens, para que consigamos transformar, passar as imagens de uma maneira adequada para as redes neurais.
Continuaremos no próximo vídeo.
No vídeo anterior, vimos que estamos lidando com dados de imagens. Por isso, neste vídeo, vamos tentar entender um pouco mais as características das imagens. Para fazer isso, vamos percorrer de maneira um pouco mais detalhada nosso diretório de imagens.
Vamos precisar da biblioteca NumPy, pois uma das características das imagens que queremos são as dimensões das imagens.
import numpy as np
Agora, vamos percorrer o diretório das imagen com o seguinte comando:
for subfolder in subfolders:
path = data_dir / subfolder
images = list(path.glob('*.JPG'))
print(f"Classe '{subfolder}' tem {len(images)} imagens.")
O que estamos querendo pegar é a quantidade de imagens dentro de uma subpasta.
Ao executar, teremos:
Classe LeafBlight tem 400 imagens
Classe BlackRot tem 400 imagens
Classe HealthyGrapes tem 400 imagens
Classe BlackMeasles tem 400 imagens
Agora, conseguimos ver que temos 400 imagens dentro de cada uma das pastas.
Isso é uma informação bem interessante, porque o nosso dataset (conjunto de dados) para classificação de imagens, está todo balanceado. Temos 400 elementos para cada uma das classes. Mas, não é só essa informação que queremos. Queremos saber também a dimensão das imagens dentro dessas pastas.
Para isso faremos o seguinte:
if images:
img = PIL.Image.open(str(images[0]))
img_array = np.array(img)
print(f"Dimensões da primeira imagem em '{subfolder}': {img_array.shape}")
Vamos pegar sempre a primeira imagem dentro de cada uma das pastas. Feito isso, vamos imprimir também a informação da dimensão das imagens.
Agora, vemos que além do fato de ter 400 imagens em cada uma das pastas, sempre a primeira imagem tem a dimensão 256, 256,3. Os primeiros dois números, aqui 256 por 256, são as dimensões em pixels das imagens. A imagem tem 256 pixels de largura por 256 pixels de altura. E o terceiro número são o número de canais da imagem.
Classe 'LeafBlight' tem 400 imagens.
Dimensões da primeira imagem em 'LeafBlight': (256, 256, 3)
Classe 'BlackRot' tem 400 imagens.
Dimensões da primeira imagem em 'BlackRot': (256, 256, 3)
Classe 'HealthyGrapes' tem 400 imagens.
Dimensões da primeira imagem em 'HealthyGrapes': (256, 256, 3)
Classe 'BlackMeasles' tem 400 imagens.
Dimensões da primeira imagem em 'BlackMeasles': (256, 256, 3)
Tentamos deixar uma imagem aqui para entendermos melhor o que são essas características das imagens. Aqui, estamos vendo um exemplo onde não temos 256 pixels por 256 pixels, temos 4 pixels por 4 pixels, e a imagem está dividida em 3 canais de cores, ou seja, é como se fosse uma junção de 3 matrizes. Se tivéssemos uma imagem na escala de cinza, onde temos apenas um canal de cor, teríamos apenas uma matriz, onde os pixels, os valores dos pixels, variam de 0 até 255. Mas no caso de uma imagem colorida, temos esses 3 canais.
Você pode imaginar eles como painéis LED acesos. Por exemplo, o primeiro painel representa a cor vermelha, o segundo, a cor azul, e o terceiro, a cor verde. Se tivermos um painel com o valor 0, significa que esse painel está apagado.
Então, a cor vermelha não está contribuindo para a representação, para a cor final que enxergamos na imagem. Se tivermos o valor 255, a imagem estaria com o vermelho contribuindo bastante, totalmente, para a formação da imagem. Se os outros canais estivessem com o valor 0, estaríamos enxergando o vermelho naquele ponto de pixel. Ou seja, temos ali a junção dessas 3 matrizes, formando uma única matriz tridimensional, que chamamos de tensor, para passar para as imagens.
Essas são as características importantes das imagens, que no próximo vídeo vamos começar a passar para o TensorFlow. Vamos começar a ver uma forma de passá-las diretamente para o TensorFlow. Vamos começar já a chamar o TensorFlow no próximo vídeo. Até lá!
O curso TensorFlow Keras: classificando imagens com redes convolucionais possui 126 minutos de vídeos, em um total de 51 atividades. Gostou? Conheça nossos outros cursos de IA para Dados em Inteligência Artificial, ou leia nossos artigos de Inteligência Artificial.
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.