image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Guilherme Bezerra
Guilherme Bezerra18/09/2023 22:10
Compartilhe

O que é Visão computacional e Utilizando IA para apresentar slides no PowerPoint

  • #Python
  • #Inteligência Artificial (IA)

Visão computacional

Antes de começar a prática, aqui vai uma explicação do que se trata a visão computacional.

A Visão Computacional: Transformando Dados Visuais em Informações Valiosas

image

A visão computacional é uma disciplina da inteligência artificial que se dedica a ensinar as máquinas a interpretar e compreender o mundo visual que as rodeia, assim como os seres humanos fazem naturalmente. Essa tecnologia é uma peça fundamental em muitas aplicações modernas, e seu funcionamento se assemelha de forma notável à maneira como nossos olhos e cérebro colaboram para interpretar imagens e vídeos.

Como Funciona a Visão Computacional:

1. Aquisição de Dados: O primeiro passo na visão computacional é a obtenção de dados visuais, que podem ser imagens estáticas ou sequências de vídeo. Esses dados são capturados por câmeras, sensores de imagem, drones ou outras fontes visuais.

2. Pré-processamento: Antes que a máquina possa entender as imagens, é necessário realizar um pré-processamento. Isso inclui a correção de distorções, ajustes de brilho e contraste, além da segmentação de objetos de interesse, separando-os do plano de fundo.

3. Extração de Características: Neste estágio, características relevantes das imagens são identificadas e extraídas. Isso pode envolver a detecção de bordas, formas, cores, texturas, e até mesmo a identificação de objetos específicos.

4. Reconhecimento e Classificação: Uma vez que as características são extraídas, os algoritmos de visão computacional classificam os objetos ou padrões identificados. Isso é feito comparando as características extraídas com um conjunto de dados de treinamento que ensina à máquina como reconhecer diferentes objetos ou padrões.

5. Tomada de Decisão: Com base na classificação e nas informações extraídas, a máquina toma decisões ou executa ações específicas. Isso pode variar de simples marcações de objetos em uma imagem até o controle de veículos autônomos.

A Importância da Visão Computacional no Mercado de Trabalho:

A visão computacional desempenha um papel cada vez mais vital no mercado de trabalho e em diversas indústrias. Aqui estão algumas das razões pelas quais essa tecnologia é tão relevante:

1. Automatização de Processos: A capacidade de máquinas interpretarem informações visuais permite a automatização de processos anteriormente dependentes de intervenção humana. Isso aumenta a eficiência e reduz os custos operacionais em indústrias como manufatura, logística e saúde.

2. Segurança e Vigilância: Em sistemas de segurança e vigilância, a visão computacional permite a detecção de atividades suspeitas, identificação de rostos e objetos, e até mesmo a análise de comportamentos incomuns, melhorando a segurança em aeroportos, empresas e áreas públicas.

3. Medicina e Diagnóstico: Na área da saúde, a visão computacional auxilia na interpretação de imagens médicas, como radiografias e ressonâncias magnéticas, auxiliando os médicos no diagnóstico precoce de doenças.

4. Realidade Aumentada e Virtual: A visão computacional é fundamental para a realidade aumentada e virtual, permitindo experiências imersivas e interativas em jogos, treinamento industrial, design de produtos e muito mais.

5. Setor Automotivo e Transporte: A visão computacional é um componente essencial na condução autônoma, possibilitando que veículos detectem e respondam a obstáculos, sinalizações e outros veículos nas estradas.

6. Varejo e Comércio Eletrônico: A análise de vídeo e imagens ajuda as empresas a compreender o comportamento do cliente, permitindo estratégias de marketing mais eficazes e a otimização da disposição de produtos nas prateleiras.

Em resumo, a visão computacional é uma tecnologia revolucionária que capacita máquinas a interpretar e extrair informações valiosas a partir de dados visuais, desempenhando um papel crucial em uma ampla gama de setores e impulsionando a automação e a eficiência. Aqueles que dominam essa habilidade têm uma vantagem significativa no mercado de trabalho, pois podem contribuir para a inovação e a melhoria em suas respectivas áreas de atuação.

Passando slides utilizando as mãos

image

Aqui desenvolveremos um programa que faz a leitura da sua mão e, com base nos seus gestos, ela realizará algumas ações pré-atribuídas. Nesse sentido, faremos com que a IA leia os gestos das nossas mãos e passe os slides para frente e para trás, mas também pode fazer diversas outras coisas.

Nesse projeto, utilizaremos apenas a linguagem Python, que, por sua vez, possui diversas bibliotecas para nos ajudar nesse desenvolvimento.

Antes de tudo, abriremos nosso terminal e baixaremos as bibliotecas que utilizaremos. As bibliotecas são as seguintes: OpenCV-python, cvzone, mediapipe e pynput.

OpenCV - é uma biblioteca de processamento de imagem de código aberto que permite a criação de aplicativos de visão computacional com suporte para diversos sistemas operacionais e linguagens de programação.

Cvzone - Este é um pacote de visão computacional que facilita a execução do processamento de imagens e funções de IA. Basicamente, ele usa as bibliotecas OpenCV e MediaPipe.

MediaPipe - é um framework criado pelo Google e de código totalmente aberto, capaz de detectar elementos em imagens e vídeos. Ele oferece diversas soluções. Uma delas é a detecção das mãos em imagens e vídeos, e ela está disponível para a linguagem Python.

Pynput - é uma biblioteca Python extremamente útil para a automação de tarefas por meio do controle do mouse e do teclado. Com suas funcionalidades avançadas, é possível criar scripts personalizados que automatizam tarefas repetitivas de forma eficiente.

Para instalar as bibliotecas mencionadas acima, basta escrever o seguinte no terminal: pip install "nome_da_biblioteca". Lembrando que as aspas não vão, apenas o nome da biblioteca.

Baixou todas as bibliotecas? Mãos na massa!

Começaremos importando as bibliotecas:

import cv2
from cvzone.HandTrackingModule import HandDetector
from pynput.keyboard import Key, Controller

Da biblioteca cvzone, importamos o HandTrackingModule e a função HandDetector, que fará a detecção das mãos. Da biblioteca pynput, importamos o Key e o Controller, que farão o controle das teclas.

Seguindo o código, criaremos uma variável chamada de vídeo, que fará a abertura de sua webcam:

 video = cv2.VideoCapture(0)

Na variável vídeo, eu defino a webcam como índice 0. Dependendo de quantas câmeras você tiver no seu PC, pode ser que você precise adicionar outros índices, por exemplo, 0, 1, 2. Mas em geral, o número 0 já faz a detecção da sua webcam.

Em seguida, definiremos a definição da imagem:

video.set(3, 1080)
video.set(4, 720)

Adicionei a resolução 1080x720, mas você pode definir a resolução que quiser de acordo com a sua câmera que irá trabalhar com o HandDetector. A importância da alta resolução é que ela irá facilitar a detecção de suas mãos.

Continuando, criaremos uma variável chamada de keyboard, que iremos instanciar como Controller da biblioteca pynput:

keyboard = Controller()

Iremos criar uma configuração para o HandDetector da cvzone, criando uma variável chamda de detector e iremos atribuir um valor de confidencia com detectionCon de 0.8, que é um valor que irá trabalhar com a imagem da sua webcam e também uma variável chamada estado atual que vai receber um array de 0, 0, 0, 0, 0, onde cada número representa um dedo da mão e 0 significa que todos os dedos estão fechados:

detector = HandDetector(detectionCon=0.8)
estadoAtual = [0, 0, 0, 0, 0]

Agora, vou fazer a importação de duas imagens, uma imagem que é uma seta para a esquerda e outra para a direita. Nesse caso, você deverá adicionar duas imagens no seu documento, para que você possa chamá-las, como no código a seguir:

setaDir = cv2.imread('seta-direita.PNG')
setaEsq = cv2.imread('seta-esquerda.PNG')

Agora, criaremos um loop para fazer a captura da imagem utilizando a função read(), que vai passar a imagem da webcam para a biblioteca cvzone utilizando a função findHands(img) que recebe a variável img e processa utilizando o MediaPipe. O interessante é que ela já identifica a mão direita e esquerda:

while True:
  _, img = video.read()
  hands, img = detector.findHands(img)

Em seguida, criaremos uma condição para verificar se a variável hands não está vazia. Ela só irá executar os próximos códigos se houver uma mão dentro da imagem. Iremos criar a variável estado, que será o estado da mão, e iremos fornecer uma função chamada fingersUp que irá retornar as informações de quais dedos estão levantados e colocaremos a variável hands na posição 0, que será a primeira mão identificada na imagem:

if hands:
  estado = detector.fingersUp(hands[0])

Agora vamos dar continuidade com algumas condições para capturar a posição dos dedos se estiverem fechados ou abertos. Se o estado for diferente do estado atual e o estado for igual ao array [0, 0, 0, 0, 1], onde o número 1 significa que o dedo mindinho da direita está aberto, caso seja verdadeiro, ele irá imprimir a mensagem " passar slide" e deve clicar na tecla direita do teclado com a variável keyboard que recebe a press(Key.right), a função release(Key.right) significa que a gente soltou a tecla, para que ela não fique segurando a tecla direita e, com isso, irei passar o slide para frente:

if estado != estadoAtual and estado == [0, 0, 0, 0, 1]:
  print('passar slide')
  keyboard.press(Key.right)
  keyboard.release(Key.right)

E aqui criamos outra condição para quando o dedão for aberto, ele utiliza a tecla para esquerda, assim, voltando o slide:

if estado != estadoAtual and estado == [1, 0, 0, 0, 0]:
  print('voltar slide')
  keyboard.press(Key.left)
  keyboard.release(Key.left)

E agora criaremos uma condição para acrescentar as imagens quando as funções acima antes das chamadas. Se o estado for igual ao estado atual e o estado for igual ao array [0, 0, 0, 0, 1], que é quando o mindinho for levantado, ele irá adicionar a imagem seta-direita no canto direito da tela, onde definimos a img com um ponto no eixo X e Y da imagem e inserimos a seta:

if estado == estadoAtual and estado == [0, 0, 0, 0, 1]:
  img[50:216, 984:1230] = setaDir

E aqui é quando a seta for para a esquerda:

if estado == estadoAtual and estado == [1, 0, 0, 0, 0]:
  img[50:216, 50:296] = setaEsq

Em seguida, criaremos uma variável chamada estado atual que a cada quadro receberá a posição dos dedos da variável estado:

estadoAtual = estado

Por fim, mostraremos uma imagem da webcam utilizando a função imshow e adicionaremos a função resize para redimensionar a imagem da webcam, que no meu caso irei adicionar 640x420, e a função cv2.waitKey(1) é usada para permitir que o programa continue em execução e responde a eventos do teclado enquanto a imagem é exibida na janela:

cv2.imshow('img', cv2.resize(img, (640, 420)))
cv2.waitKey(1)

Antes de executar o programa, abra o PowerPoint em uma apresentação qualquer e depois execute o programa fazendo os gestos com as mãos em frente à câmera, levantando o dedo mindinho ou o dedão, para avançar ou voltar um slide.

Lembre-se de ajustar o código conforme necessário para que ele funcione corretamente com suas imagens e requisitos de resolução.

E para quem não tem webcam, basta baixar o app 'Camo' no seu PC e no smartphone, e conectar a câmera do seu celular.

Este artigo foi montado com base em alguns estudos, como vídeos no YouTube e pesquisas. Espero que ele tenha sido muito útil, e desejo ótimos estudos para todos, cada um no seu próprio tempo, sem pressa!

Compartilhe
Comentários (2)
Wendel Rodrigues
Wendel Rodrigues - 19/09/2023 09:49

Muito bom. Aprendi algumas coisas novas!

RM

Ricardo Mendes - 19/09/2023 06:53

Muito obrigado, gostei muito e aprendi bastante