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
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
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!