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

_images/get_started.png

3.Em NOVO PROJETO selecione a opção Projeto de imagem. (image project).

_images/image_project.png

4.Selecione a opção modelo de imagem padrão (Stardard image model).

_images/standard_image_model.png

5.Treine o seu modelo com as imagens necessárias.

_images/treinar_modelo.png

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

_images/export_model.png _images/tensorflow.png _images/download_model.png

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

_images/export_jupyter.png

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

_images/restart_runtime.png

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:

_images/write_classificador_imagem.png

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:

_images/write_aplicativo_classificacao.png

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.

_images/click_to_continue.png

Após rodar a célula ele irá gerar um link:

_images/teachable_link.png

E aqui está nosso aplicativo com classificação de imagens:

_images/teachable_app.png

Caso a gente rode com outra classe:

_images/teachable_app_2.png