Teachable Machine e Streamlit
01.Compreensão do negócio
Definal qual o problema de classificação do seu projeto.
Defina quais são as classes a serem preditas no seu projeto.
Exemplo:
- Problema:
Classe 01: Milho ruim
Classe 02: Milho bom
02.Treinar o modelo de classificação
Para treinar e obter o modelo de classificação, vamos usar o site do Teachable Machine e realizar os seguintes passos:
1.Entre no site do Teachable Machine: https://teachablemachine.withgoogle.com
2.Clique no botão começar (get started).
3.Em NOVO PROJETO selecione a opção Projeto de imagem. (image project).
4.Selecione a opção modelo de imagem padrão (Stardard image model).
5.Treine o seu modelo com as imagens necessárias.
Warning
Atenção, este é apenas um exemplo que preparamos para você. O recomendado na hora de treinar o seu modelo é subir o máximo de imagens possíveis para o modelo ter uma melhor acurácia.
6.Exporte o modelo clicando no botão exportar modelo (Export Model), em seguida na aba Tensorflow e por fim clique no botão Transferir o meu modelo (download my model).
7.Após o download, transfira o arquivo do modelo (keras_model.h5) para a área de arquivos no Google Colab (assim como fazemos com os datasets).
Warning
O arquivo vem “zipado” do download, primeiro retire o arquivo do modelo (keras_model.h5) da pasta “zipada” e só depois inclua o arquivo (keras_model.h5) na área de arquivos do Google Colab na lateral esquerda.
03.Instalando as bibliotecas necessárias
Para este projeto precisamos instalar as seguintes bibliotecas:
numpy - para trabalhar com números.
pillow - para trabalhar com imagens.
tensorflow - para trabalhar com inteligênicia artificial.
keras - para trabalhar com inteligênicia artificial.
streamlit - para criar o aplicativo.
1 !pip install numpy
2 !pip install pillow
3 !pip install tensorflow
4 !pip install keras
5 !pip install streamlit
Lembre-se de clicar em RESTART RUNTIME ao instalar o Streamlit
04.Criar um arquivo para classificar as imagens
04.a.Descrição
04.a.I.Use o comando %%writefile para criar o arquivo chamado arquivo_classificador_de_imagem.py.
04.a.II.Preparar a classificação de imagem.
Importar as bibliotecas necessárias.
04.a.III.Adicionar o modelo de classificação (keras_model.h5) na área de arquivos do Google Colaboratory.
04.b.Código do arquivo
Ao seguir as instruções acima, seu código irá ficar assim:
1 # CRIAR ARQUIVO DE CLASSIFICAÇÃO.
2
3 # 01.Criar o arquivo.
4 %%writefile arquivo_classificador_de_imagem.py
5
6 import tensorflow
7 from keras.models import load_model
8 from PIL import Image, ImageOps
9 import numpy as np
10
11 def funcao_classificar_imagem(img, keras_model):
12
13 # Disable scientific notation for clarity
14 np.set_printoptions(suppress=True)
15
16 # Load the model
17 model = load_model('keras_model.h5')
18
19 # Create the array of the right shape to feed into the keras model
20 # The 'length' or number of images you can put into the array is
21 # determined by the first position in the shape tuple, in this case 1.
22 data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)
23
24 # Replace this with the path to your image
25 image = img
26
27 #resize the image to a 224x224 with the same strategy as in TM2:
28 #resizing the image to be at least 224x224 and then cropping from the center
29 size = (224, 224)
30 image = ImageOps.fit(image, size, Image.ANTIALIAS)
31
32 #turn the image into a numpy array
33 image_array = np.asarray(image)
34
35 # display the resized image
36 image.show()
37
38 # Normalize the image
39 normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1
40
41 # Load the image into the array
42 data[0] = normalized_image_array
43
44 # run the inference
45 prediction = model.predict(data)
46 print(prediction)
47
48 return np.argmax(prediction)
Ao executar este código irá exibir o seguinte resultado:
05.Criar o aplicativo com Streamlit
05.a.Descrição
05.a.I.Use o comando %%writefile para criar o arquivo chamado arquivo_aplicativo_de_classificacao.py
05.a.II.Importar a função funcao_classificar_imagem e as bibliotecas necessárias:
1 from arquivo_classificador_imagem import funcao_classificar_imagem
2 import streamlit as st
3 from PIL import Image
05.a.III.Criar os elementos que compõem o aplicativo:
Lembre-se de trocar o nome das suas classes a serem preditas.
05.b.Código do aplicativo
Ao seguir as instruções acima, seu código irá ficar assim:
1 # CRIAR ARQUIVO DO APLICATIVO.
2 # 01.Criar o arquivo chamado arquivo_aplicativo_de_classificacao.py.
3 %%writefile arquivo_aplicativo_de_classificacao.py
4
5 # 02.Importar a função funcao_classificar_imagem e as bibliotecas necessárias.
6 from arquivo_classificador_de_imagem import funcao_classificar_imagem
7 import streamlit as st
8 from PIL import Image
9
10 # 03.Criar os elementos que compõe o aplicativo.
11 # TÍTULO DO SITE.
12 st.title("Classificador de milho.")
13
14 # BOTÃO PARA FAZER UPLOAD DA IMAGEM A SER CLASSIFICADA.
15 uploaded_file = st.file_uploader("Escolha um arquivo", type="jpg")
16
17 # CLASSIFICAÇÃO DA IMAGEM.
18 if uploaded_file is not None:
19
20 # ABRIR A IMAGEM CARREGADA.
21 image = Image.open(uploaded_file)
22
23 # MOSTRAR A IMAGEM.
24 st.image(image, caption='', use_column_width=True)
25
26 # TEXTO INDICANDO QUE A IMAGEM ESTÁ SENDO CLASSIFICADA.
27 st.write("Classificando...")
28
29 # CHAMAR A FUNÇÃO DE CLASSIFICAÇÃO DE IMAGEM
30 # E ARMAZENAR O RESULTADO NA VARIÁVEL LABEL.
31 label = funcao_classificar_imagem(image, 'keras_model.h5')
32
33 # CONDICIONAL PARA IDENTIFICAR A CLASSE DA IMAGEM.
34 if label == 1:
35
36 # INSIRA O NOME DA PRIMEIRA CLASSE.
37 st.write("Milho bom.")
38
39 else:
40
41 # INSIRA O NOME DA SEGUNDA CLASSE.
42 st.write("Milho ruim.")
Ao executar este código irá exibir o seguinte resultado:
06.Visualizar o aplicativo
Para visualizar o aplicativo precisamos executar o seguinte comando:
1 !streamlit run arquivo_aplicativo_de_classificacao.py &>/dev/null&
2
3 !npx localtunnel --port 8501
Warning
Após gerar o link do aplicativo, será criado uma nova aba no navegador, entre nesta nova aba e clique no botão Click to continue (clique para continuar). Logo em seguida irá aparecer o aplicativo criado.
Após rodar a célula ele irá gerar um link:
E aqui está nosso aplicativo com classificação de imagens:
Caso a gente rode com outra classe: