{"id":18384816,"url":"https://github.com/alyssonmach/pds-projeto","last_synced_at":"2026-05-07T18:35:45.075Z","repository":{"id":239947322,"uuid":"799703412","full_name":"Alyssonmach/pds-projeto","owner":"Alyssonmach","description":"Análise de batimento cardíaco a partir de detecção facial","archived":false,"fork":false,"pushed_at":"2024-05-15T13:12:56.000Z","size":7360,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-19T08:12:17.512Z","etag":null,"topics":["computer-vision","dlib","fourier-transform","opencv","pds","python","ufcg"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Alyssonmach.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-12T23:05:09.000Z","updated_at":"2024-05-27T12:45:48.000Z","dependencies_parsed_at":"2024-05-16T03:39:18.944Z","dependency_job_id":"0a36710e-2181-4f93-80af-39f110cc6dd4","html_url":"https://github.com/Alyssonmach/pds-projeto","commit_stats":null,"previous_names":["alyssonmach/pds-projeto"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Alyssonmach/pds-projeto","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alyssonmach%2Fpds-projeto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alyssonmach%2Fpds-projeto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alyssonmach%2Fpds-projeto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alyssonmach%2Fpds-projeto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Alyssonmach","download_url":"https://codeload.github.com/Alyssonmach/pds-projeto/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alyssonmach%2Fpds-projeto/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32750912,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computer-vision","dlib","fourier-transform","opencv","pds","python","ufcg"],"created_at":"2024-11-06T01:15:35.239Z","updated_at":"2026-05-07T18:35:45.062Z","avatar_url":"https://github.com/Alyssonmach.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Análise de Batimento Cardíaco Utilizando Magnificação de Vídeo Euleriano e Detecção Facial\n\nA proposta desse projeto de finalização de disciplina é conseguir detectar batimentos cardíacos utilizando apenas visão computacional. Para esse fim, vamos explorar uma técnica chamada Magnificação de Vídeo Euleriano (*Eulerian Video Magnification*). Esse método de processamento de vídeo foi desenvolvido para amplificar variações sutis de cor e movimento que normalmente não seriam perceptíveis a olho nu. Essa técnica é frequentemente usada em aplicações de visão computacional e processamento de imagem para analisar mudanças dinâmicas em vídeos, como variações no fluxo sanguíneo na pele, movimentos respiratórios ou outros sinais fisiológicos.\n\n![Eulerian Video Magnification](assets/eulerian-magnification.png)\n\u003e Um exemplo de uso da aplicação de Magnificação de Vídeo Euleriano para visualizar o pulso humano. (a) Quatro frames da sequência de vídeo original. (b) Os mesmos quatro frames com o sinal de pulso do usuário amplificado. (c) Uma linha de varredura vertical dos vídeos de entrada (topo) e saída (parte inferior) plotada ao longo do tempo mostra como nosso método amplifica a variação cromática periódica. Na sequência de entrada, o sinal é imperceptível, mas na sequência ampliada a variação fica clara.\n\n![filtro-magnificacao](assets/filtro-magnificacao.gif)\n\u003e A partir da aplicação de Magnificação Euleriana, conseguimos obter visualmente na imagem a representação do pulso na pele do usuário. Desse modo, aplicando a transformada de Fourier para entender as componentes de frequência desse sinal, juntamente com um filtro passa-banda para extrair as pulsações, conseguimos quantificar a quantidade de batimentos cardíacos por minuto (BPM). Fator esse que não seria possível utilizando somente uma vídeo simples.\n\n### Instalação do Projeto\n\nA versão do Python utilizada para realização desse projeto foi a `3.10.12`, todos os pacotes utilizados com suas respectivas versões podem ser encontradas no arquivo `requirements.txt`.\n\n### Custo do Projeto\n\n|Fatores de Custo|Preço (R$)|\n|-|-|\n|Pesquisa e Desenvolvimento|2000|\n|Embarcar a Aplicação em Hardwares de Menor Custo|1000|\n|Aplicação do Método Desenvolvido em Outras Áreas|3000|\n\nConsiderando que essa aplicação de Magnificação Euleriana pode ser utilizada em diversas aplicações, como por exemplo, teste de vivacidade em aplicações de reconhecimento facial, com o intuito de detectar se a pessoa a ser reconhecida na imagem é uma pessoa real ao invés de uma foto ou vídeo de outro usuário, foi definido uma quantia extra caso o cliente deseje expandir essa técnica em outras aplicações úteis.\n\n### Escopo da Aplicação\n\nO método de Magnificação de Vídeo Euleriano foi utilizado para inferir o batimento cardíaco através da região facial. Esse processo envolveu a amplificação de variações sutis na coloração da pele da face, que estão associadas aos batimentos cardíacos, tornando essas variações visíveis e analisáveis no vídeo. \n\nPara realizar esse procedimento, utilizei um algoritmo de detecção facial para identificar e delimitar a região do rosto na imagem. Em seguida, por meio do mapeamento de pontos faciais, identifiquei pontos específicos na testa e nas bochechas para extrair regiões de interesse. Essas regiões foram então analisadas usando a técnica de Magnificação de Vídeo Euleriano para amplificar variações sutis associadas ao batimento cardíaco, permitindo a inferência do pulso a partir das mudanças de cor nessas áreas do rosto.\n\n![aplicacao](assets/aplicacao.gif)\n\u003e Ilustração da aplicação funcionando, a partir das regiões da bochecha e da testa, aplicamos o método proposto para identificação de batimento cardíaco nessas regiões delimitadas.\n\n1. **Inicialização da Classe `BPMFourier`**:\n   - Classe chamada `BPMFourier` que é inicializada com a largura (`width`) e altura (`height`) da imagem de entrada.\n\n2. **Inicialização dos Parâmetros**:\n   - No construtor (`__init__`), é definido os parâmetros necessários para o processamento do vídeo:\n     - `width` e `height`: Dimensões da imagem de entrada.\n     - `videoFrameRate`: Taxa de quadros por segundo (FPS) do vídeo.\n     - `levels`: Quantidade de níveis na pirâmide gaussiana.\n     - `alpha`: Fator de amplificação da imagem filtrada.\n     - `minFrequency` e `maxFrequency`: Frequências mínima e máxima para o filtro passa-banda.\n     - `bufferSize`: Tamanho do buffer para armazenamento dos quadros processados ao longo do tempo.\n\n3. **Construção da Pirâmide Gaussiana** (`buildGauss`):\n   - O método `buildGauss` é usado para construir uma pirâmide gaussiana a partir de um quadro de imagem. Ele reduz iterativamente o tamanho do quadro usando a operação de pirâmide gaussiana (`cv2.pyrDown`) e armazena os níveis da pirâmide em uma lista.\n\n4. **Reconstrução do Quadro** (`reconstructFrame`):\n   - O método `reconstructFrame` reconstrói um quadro de imagem a partir de uma pirâmide gaussiana. Ele aplica a operação de pirâmide gaussiana inversa (`cv2.pyrUp`) para reconstruir o quadro original a partir dos níveis da pirâmide.\n\n5. **Atualização do Processamento do Vídeo** (`update`):\n   - O método `update` é chamado para processar um novo quadro de imagem.\n     - Constrói a pirâmide gaussiana a partir do quadro atual e armazena o nível desejado na lista de vídeo gaussiano.\n     - Aplica a transformada de Fourier ao vídeo gaussiano ao longo do tempo para analisar as variações de frequência.\n     - Aplica um filtro passa-banda à transformada de Fourier para filtrar frequências específicas associadas ao batimento cardíaco.\n     - Calcula o BPM (batimentos por minuto) com base na frequência dominante da transformada de Fourier.\n     - Amplifica o sinal filtrado usando o parâmetro `alpha`.\n     - Reconstrói o quadro resultante combinando o quadro original com o sinal filtrado.\n     - Retorna o quadro resultante e o valor do BPM calculado.\n\n6. **Utilização da Classe**:\n   - Após a inicialização da classe `BPMFourier` com as dimensões da imagem de entrada, é aplicado o método `update` a cada quadro de vídeo para obter o quadro processado e o valor do BPM associado à região facial.\n\n7. **Ferramentas Auxiliares**:\n    - As funções em `face_utils` fornecem toda a solução para detecção facial e extração de regiões de análise de interesse.\n    - As funções em `utils` contém recursos que auxiliam a deixar o display mais performático.\n\n### Citação do Artigo de Referência\n\n* [Eulerian Video Magnification for Revealing Subtle Changes in the World](https://people.csail.mit.edu/mrub/evm/)\n\n```\n@article{Wu12Eulerian,\n  author = {Hao-Yu Wu and Michael Rubinstein and Eugene Shih and John Guttag and Fr\\'{e}do Durand and\n  William T. Freeman},\n  title = {Eulerian Video Magnification for Revealing Subtle Changes in the World},\n  journal = {ACM Transactions on Graphics (Proc. SIGGRAPH 2012)},\n  year = {2012},\n  volume = {31},\n  number = {4},\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falyssonmach%2Fpds-projeto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falyssonmach%2Fpds-projeto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falyssonmach%2Fpds-projeto/lists"}