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 -