Como criar um aplicativo de classificação / reconhecimento de imagem

Conteúdo

Esta postagem foi tornada pública como parte do Data Science Blogathon.

Introdução

793797-melhor-imagem-reconhecimento-apis-e1587080882739-2831707

Formulários

  1. Acreditação facial – Câmeras de telefone usam crachá facial para desbloquear o telefone. Os sistemas de acreditação facial podem ser implementados nas portas de entrada dos edifícios de escritórios.
  2. Classificação de imagem – Usado para distinguir entre vários conjuntos de imagens. Indústrias como a automobilística, retalho, os jogos, etc. eles o usam para vários fins.
  3. Credenciamento de imagem As empresas de segurança usam o credenciamento de imagem para detectar várias coisas nas malas dos aeroportos, scanners de imagem, etc.

Etapas para criar o aplicativo

  • Obtenha os dados
  • Preparação de dados
  • Modelagem de dados
  • Projete a interface do usuário
  • Integrar interface de usuário e modelagem

Obtenha os dados

Os dados estariam na forma de imagens, Em outras palavras, Fotografias. As imagens são uma matriz de pixels. Imagens em um número maior seriam necessárias para construir todo o aplicativo ponta a ponta. Os dados estarão disponíveis dentro da própria organização ou deverão ser obtidos na Internet aberta. Dependendo do tipo de aplicação, o tipo de dados necessários irá variar. Se for um pedido de acreditação facial, Podemos até criar dados através da coleção de imagens de várias pessoas. Se as imagens forem obtidas na Internet aberta, podemos raspar as imagens da web.

Las imágenes capturadas deben ser de alta resolução y pueden estar ligeramente distorsionadas. Pode haver uma certa quantidade de ruído presente nas imagens para que o algoritmo possa categorizar as imagens corretamente.

Exemplo de imagens de raspagem da web em uma página da Web –

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument(--ignore-certificate-errors')
options.add_argument("--tipo de teste")
options.binary_location = "/usr/bin/cromo"
motorista = webdriver. Cromar(chrome_options=opções)

motorista.obter('https://imgur.com/')

imagens = driver.find_elements_by_tag_name('img')
para imagem em imagens:
    imprimir(image.get_attribute('src'))

motorista.close()

Preparação de dados

  • As imagens precisam ser redimensionadas para que todas as imagens tenham o mesmo tamanho
  • As imagens podem ser nítidas com alta resolução, bem como um pouco embaçado e barulhento.
  • Operações de transformação como tradução, rotação e escala devem ser aplicadas de modo que as imagens capturadas estejam presentes em todos os ângulos.
  • As imagens podem ser distorcidas ou cortadas para generalizar bem.
  • Introduzir ruído nas imagens, caso não esteja presente
  • Uma distribuição uniforme do número de imagens deve ser apresentada em cada uma das classes.

– Autor de Sapiens

Código para redimensionar uma imagem

img = cv2.imread('/home/img/python.png', cv2. IMREAD_UNCHANGED)
imprimir('Original Dimensions : ',img.shape)
scale_percent = 60
largura = int(img.shape[1] * scale_percent / 100)
altura = int(img.shape[0] * scale_percent / 100)
dim = (largura, altura)
# resize image
resized = cv2.resize(img, Ofuscar, interpolação = cv2.INTER_AREA)

Modelagem de dados

Una vez que se hayan obtenido todas las imágenes, colóquelas en la carpeta adecuada para cada una de las clases. Asegúrese de que haya una distribución adecuada de imágenes para el Treinamento, validação e teste de conjuntos de dados. Para a classificação e credenciamento de imagens teremos que utilizar redes neurais. A arquitetura de convolucional neuronal vermelho se adapta melhor a las imágenes cuando trabajan con matrices.

As redes neurais convolucionais possuem diferentes camadas que auxiliam nas operações matemáticas que são realizadas nas imagens. As camadas incluem a camada de convolução, camada de agrupamento, la capa de padronização por lotes, Funções de gatilho e camadas totalmente conectadas. O aprendizado de passagem oferece a capacidade de usar arquiteturas de modelo de rede pré-treinadas que funcionam bem com imagens de conjunto de dados padrão. Então comece escrevendo sua própria rede, mas você verá que as redes pré-treinadas proporcionarão um desempenho muito melhor.

Comece com alguns dos modelos básicos pré-treinados, como:

  • VGG16
  • Começar
  • Xception
  • MobileNet
  • ResNet50

Você pode usar as bibliotecas Tensorflow ou Keras para usar esses modelos que apresentam suas implementações na biblioteca. Esto le facilitará changer los parametros de las diferentes capas de la arquitectura. Você pode evitar o ajuste de hiperparâmetros para aumentar o desempenho. Durante o treinamento dos modelos, certifique-se de salvar os valores dos coeficientes ou pesos do modelo. Esses valores que você salva podem ser usados ​​para prever imagens futuras que você fornecerá ao seu aplicativo.

Código de modelo VGG16

image_size=224
from keras.applications import VGG16
from keras import models
from keras import layers
from keras import optimizers
#Load the VGG model
vgg_conv = VGG16(pesos ="imagenet", include_top=Falso, input_shape =(224, 224, 3))
para camada em vgg_conv.layers[:-4]:
    layer.trainable = False
for layer in vgg_conv.layers:
    imprimir(camada, camada.trainable)
modelo = modelos. Sequencial()
# Add the vgg convolutional base model
model.add(vgg_conv)
# Add new layers
model.add(Camadas. Achatar())
model.add(Camadas. Denso(1024, activation='relu'))
model.add(Camadas. Abandono escolar(0.5))
model.add(Camadas. Denso(29, activation='softmax'))
# Mostre um resumo do modelo. Check the number of trainable parameters
model.summary()

A biblioteca Keras oferece uma maneira fácil de salvar coeficientes de modelo usando:

model.save('filename.h5')

Projete a interface do usuário

Assim que o modelo estiver pronto para uso, deve funcionar na interface do usuário. Se você estiver desenvolvendo um aplicativo Android, você pode projetar a interface do usuário com a ajuda de Kotlin ou Flutter. A interface do usuário deve ser fácil de ler e interpretar. Deve ser projetado de tal forma que atenda ao objetivo principal do aplicativo.

Se você estiver desenvolvendo um aplicativo da web, Flask ou Django podem ser usados ​​para o mesmo propósito. A GUI pode ser projetada usando bibliotecas Python como Tkinter, etc.

Integrar interface de usuário e modelagem

Para aplicativos Android, O Flutter permite que você integre seus modelos de classificação com a ajuda de uma biblioteca chamada Tensorflow Lite. A implementação do Tensorflow Lite só precisa de dois arquivos para classificação de imagem, Em outras palavras, o arquivo de texto do rótulo da classe e o peso do modelo ou arquivo de coeficientes. Uma vez que esses dois arquivos são colocados na estrutura de pastas, o aplicativo Android estará completo e pronto para ser testado. O widget da câmera que é criado com Flutter pode ser usado para tirar a imagem de entrada.

Código para incluir os dois arquivos –

loadModel() assíncrono {
  aguarde Tflite.loadModel(
    modelo: "ativos / model_unquant.tflite",
    rótulos: "ativos / etiquetas.txt",
  );
}

Aqui, o arquivo .tflite é o arquivo de coeficientes que é criado a partir do modelo e tags.txt são os nomes das classes de imagem separados por uma nova linha. Incorpore isso na estrutura do Android.

Para aplicativos da web, O Flask permite que você integre a biblioteca Tensorflow e use os pesos do modelo para fazer o tipo correto de predição na imagem de entrada.

Seguindo este procedimento, passo a passo, você pode construir seu próprio modelo de classificação imediatamente.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.

Datapeaker