IA com Python - Visão Computacional

A visão computacional se preocupa com a modelagem e a replicação da visão humana usando software e hardware de computador. Neste capítulo, você aprenderá em detalhes sobre isso.

Visão Computacional

A visão computacional é uma disciplina que estuda como reconstruir, interromper e compreender uma cena 3D a partir de suas imagens 2D, em termos das propriedades da estrutura presente na cena.

Hierarquia de visão computacional

A visão computacional é dividida em três categorias básicas como segue -

  • Low-level vision - Inclui imagem de processo para extração de recursos.

  • Intermediate-level vision - Inclui reconhecimento de objetos e interpretação de cenas 3D

  • High-level vision - Inclui a descrição conceitual de uma cena como atividade, intenção e comportamento.

Visão Computacional Vs Processamento de Imagens

O processamento de imagens estuda a transformação de imagem em imagem. A entrada e a saída do processamento de imagem são imagens.

A visão computacional é a construção de descrições explícitas e significativas de objetos físicos a partir de sua imagem. A saída da visão computacional é uma descrição ou interpretação de estruturas em cena 3D.

Formulários

A visão computacional encontra aplicações nos seguintes campos -

Robotics

  • Localização - determina a localização do robô automaticamente

  • Navigation

  • Evitar obstáculos

  • Montagem (peg-in-hole, soldagem, pintura)

  • Manipulação (por exemplo, robô manipulador PUMA)

  • Human Robot Interaction (HRI): robótica inteligente para interagir e servir as pessoas

Medicine

  • Classificação e detecção (por exemplo, lesão ou classificação de células e detecção de tumor)

  • Segmentação 2D / 3D

  • Reconstrução 3D de órgãos humanos (ressonância magnética ou ultrassom)

  • Cirurgia robótica guiada pela visão

Security

  • Biometria (íris, impressão digital, reconhecimento facial)
  • Vigilância - detecção de certas atividades ou comportamentos suspeitos

Transportation

  • Veículo autônomo
  • Segurança, por exemplo, monitoramento de vigilância do motorista

Industrial Automation Application

  • Inspeção industrial (detecção de defeito)
  • Assembly
  • Leitura do código de barras e etiqueta da embalagem
  • Classificação de objetos
  • Compreensão de documentos (por exemplo, OCR)

Instalando Pacotes Úteis

Para visão computacional com Python, você pode usar uma biblioteca popular chamada OpenCV(Open Source Computer Vision). É uma biblioteca de funções de programação voltada principalmente para a visão computacional em tempo real. Ele é escrito em C ++ e sua interface principal é em C ++. Você pode instalar este pacote com a ajuda do seguinte comando -

pip install opencv_python-X.X-cp36-cp36m-winX.whl

Aqui, X representa a versão do Python instalada em sua máquina, bem como o win32 ou 64 bits que você tem.

Se você estiver usando o anaconda ambiente e, em seguida, use o seguinte comando para instalar o OpenCV -

conda install -c conda-forge opencv

Ler, escrever e exibir uma imagem

A maioria dos aplicativos de currículo precisa obter as imagens como entrada e produzi-las como saída. Nesta seção, você aprenderá a ler e gravar arquivos de imagem com a ajuda das funções fornecidas pelo OpenCV.

Funções OpenCV para ler, mostrar, escrever um arquivo de imagem

O OpenCV fornece as seguintes funções para esta finalidade -

  • imread() function- Esta é a função para ler uma imagem. OpenCV imread () suporta vários formatos de imagem como PNG, JPEG, JPG, TIFF, etc.

  • imshow() function- Esta é a função para mostrar uma imagem em uma janela. A janela se ajusta automaticamente ao tamanho da imagem. OpenCV imshow () suporta vários formatos de imagem como PNG, JPEG, JPG, TIFF, etc.

  • imwrite() function- Esta é a função para escrever uma imagem. OpenCV imwrite () suporta vários formatos de imagem como PNG, JPEG, JPG, TIFF, etc.

Exemplo

Este exemplo mostra o código Python para ler uma imagem em um formato - exibindo-a em uma janela e escrevendo a mesma imagem em outro formato. Considere as etapas mostradas abaixo -

Importe o pacote OpenCV conforme mostrado -

import cv2

Agora, para ler uma imagem particular, use a função imread () -

image = cv2.imread('image_flower.jpg')

Para mostrar a imagem, use o imshow()função. O nome da janela na qual você pode ver a imagem seriaimage_flower.

cv2.imshow('image_flower',image)
cv2.destroyAllwindows()

Agora, podemos escrever a mesma imagem em outro formato, digamos .png, usando a função imwrite () -

cv2.imwrite('image_flower.png',image)

A saída True significa que a imagem foi gravada com sucesso como um arquivo .png também na mesma pasta.

True

Nota - A função destroyallWindows () simplesmente destrói todas as janelas que criamos.

Conversão de Espaço de Cor

No OpenCV, as imagens não são armazenadas usando a cor RGB convencional, mas sim na ordem inversa, ou seja, na ordem BGR. Portanto, o código de cor padrão ao ler uma imagem é BGR. ocvtColor() função de conversão de cores para converter a imagem de um código de cor para outro.

Exemplo

Considere este exemplo para converter a imagem de BGR para tons de cinza.

Importe o OpenCV pacote como mostrado -

import cv2

Agora, para ler uma imagem particular, use a função imread () -

image = cv2.imread('image_flower.jpg')

Agora, se virmos esta imagem usando imshow() função, então podemos ver que esta imagem está em BGR.

cv2.imshow('BGR_Penguins',image)

Agora usa cvtColor() função para converter esta imagem em tons de cinza.

image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_penguins',image)

Detecção de Borda

Os humanos, depois de ver um esboço tosco, podem reconhecer facilmente muitos tipos de objetos e suas poses. É por isso que as arestas desempenham um papel importante na vida dos humanos, bem como nas aplicações da visão computacional. OpenCV fornece uma função muito simples e útil chamadaCanny()para detectar as bordas.

Exemplo

O exemplo a seguir mostra a identificação clara das bordas.

Importe o pacote OpenCV como mostrado -

import cv2
import numpy as np

Agora, para ler uma imagem específica, use o imread() função.

image = cv2.imread('Penguins.jpg')

Agora, use o Canny () função para detectar as bordas da imagem já lida.

cv2.imwrite(‘edges_Penguins.jpg’,cv2.Canny(image,200,300))

Agora, para mostrar a imagem com bordas, use a função imshow ().

cv2.imshow(‘edges’, cv2.imread(‘‘edges_Penguins.jpg’))

Este programa Python criará uma imagem chamada edges_penguins.jpg com detecção de borda.

Detecção de rosto

A detecção de rosto é uma das aplicações fascinantes da visão computacional, o que a torna mais realista e futurística. O OpenCV possui um recurso integrado para realizar a detecção de rosto. Vamos usar oHaar classificador em cascata para detecção de rosto.

Dados Haar Cascade

Precisamos de dados para usar o classificador em cascata Haar. Você pode encontrar esses dados em nosso pacote OpenCV. Depois de instalar o OpenCv, você pode ver o nome da pastahaarcascades. Haveria arquivos .xml para aplicativos diferentes. Agora, copie todos eles para uso diferente e cole em uma nova pasta no projeto atual.

Example

A seguir está o código Python usando Haar Cascade para detectar a face de Amitabh Bachan mostrado na imagem a seguir -

Importe o OpenCV pacote como mostrado -

import cv2
import numpy as np

Agora, use o HaarCascadeClassifier para detectar rosto -

face_detection=
cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/
haarcascade_frontalface_default.xml')

Agora, para ler uma imagem específica, use o imread() função -

img = cv2.imread('AB.jpg')

Agora, converta em tons de cinza porque aceitaria imagens em cinza -

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Agora, usando face_detection.detectMultiScale, realizar detecção de rosto real

faces = face_detection.detectMultiScale(gray, 1.3, 5)

Agora, desenhe um retângulo ao redor de todo o rosto -

for (x,y,w,h) in faces:
   img = cv2.rectangle(img,(x,y),(x+w, y+h),(255,0,0),3)
cv2.imwrite('Face_AB.jpg',img)

Este programa Python criará uma imagem chamada Face_AB.jpg com detecção de rosto como mostrado

Detecção de olhos

A detecção ocular é outra aplicação fascinante da visão computacional, que a torna mais realista e futurística. O OpenCV possui um recurso integrado para realizar a detecção do olho. Vamos usar oHaar cascade classificador para detecção de olhos.

Exemplo

O exemplo a seguir fornece o código Python usando Haar Cascade para detectar a face de Amitabh Bachan dada na imagem a seguir -

Importe o pacote OpenCV como mostrado -

import cv2
import numpy as np

Agora, use o HaarCascadeClassifier para detectar rosto -

eye_cascade = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_eye.xml')

Agora, para ler uma imagem específica, use o imread() função

img = cv2.imread('AB_Eye.jpg')

Agora, converta em tons de cinza porque aceitaria imagens em cinza -

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Agora com a ajuda de eye_cascade.detectMultiScale, realizar detecção de rosto real

eyes = eye_cascade.detectMultiScale(gray, 1.03, 5)

Agora, desenhe um retângulo ao redor de todo o rosto -

for (ex,ey,ew,eh) in eyes:
   img = cv2.rectangle(img,(ex,ey),(ex+ew, ey+eh),(0,255,0),2)
cv2.imwrite('Eye_AB.jpg',img)

Este programa Python criará uma imagem chamada Eye_AB.jpg com detecção de olho como mostrado -