Esse é um projeto da matéria de Algebra Linear e Teoria da Informação do Insper para o curso de Ciência da Computação.
O projeto consiste em fazer um processador de efeito de vídeo em tempo real que faça o seu streaming de vídeo ficar "girando" na tela
A função criar_indices recebe quatro argumentos: min_i, max_i, min_j e max_j. Importa o módulo "itertools" e usa a função "product" desse módulo para criar uma lista "L" que contêm todos os pares ordenados possíveis (i,j) com i variando entre min_i e max_i e j variando entre min_j e max_j. Depois, a função cria dois arrays numpy "idx_i" e "idx_j", que contêm, respectivamente, todos os valores de i e j da lista "L". E assim, a função empilha os arrays "idx_i" e "idx_j" verticalmente, usando a função "vstack" do numpy, para criar uma matriz de índices com duas linhas e N colunas (onde N é o número de pares ordenados possíveis), em que a primeira linha contém todos os valores de i e a segunda linha contém todos os valores de j. E por fim, retorna a matriz de índices criada.
A função run é responsável por abrir a câmera do computador e mostrar a imagem capturada em tempo real. A largura e altura da imagem são definidas, width = 320 e height = 240 e uma dica é fornecidas para otimizar o processamento, imagens menores precisam de menos processamento. Em seguida, é verificado se outros dispositivos estão acessando a câmera. É definida uma matriz de rotação identidade para ser incrementada, e outra matriz de rotação para ser multiplicada pela primeira. Em seguida, é iniciado um loop que é encerrado quando 'q' é pressionado no teclado. A cada iteração, um novo frame é capturado da câmera, o tamanho do frame é reduzido para reduzir o processamento necessário nas próximas etapas e é verificado se o frame foi capturado com sucesso. A imagem é girada ou contraiada de acordo com o teclado pressionado pelo usuário, ultilizando as teclas 'a' e 'd' para girar, 's' para contrair, no qual a contração é uma transformação que reduz as dimensões de uma imagem e 'w' para voltar a imagem a seu estado original. Depois de todas as transformações, a imagem resultante é exibida na tela por 40ms. Se 'q' é pressionado, o loop é encerrado e os recursos são devolvidos ao sistema.
Para rodar o projeto e testar o projeto, basta acessar e rodar o arquivo demo.py, nesse arquivo você pode visualizar a sua camera. Com as teclas "a" ou "d" fazer sua camera rodar, tecla "s" para fazer a contração e a tecla "Q" para fechar a janela da imagem exibida.