;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Papo Cabeça

O psiquiatra Jairo Bouer tira dúvidas sobre saúde mental


Cientistas criam sistema para detectar insuficiência respiratória pela voz

Trabalho apoiado pela Fapesp tem como objetivo ajudar na triagem de pacientes com suspeita de covid-19 - Divulgação
Trabalho apoiado pela Fapesp tem como objetivo ajudar na triagem de pacientes com suspeita de covid-19 Imagem: Divulgação

Elton Alisson

Da Agência Fapesp

22/06/2020 04h00

Além da temperatura, da oxigenação no sangue e da frequência cardíaca, a voz pode se tornar um parâmetro para ajudar a identificar mais rapidamente pacientes com suspeita de covid-19.

Por meio da análise da fala, pesquisadores apoiados pela Fapesp pretendem detectar a insuficiência respiratória, um dos principais sintomas da doença. O projeto, batizado de Spira –sigla de Sistema de Detecção Precoce de Insuficiência Respiratória por meio de Análise de Áudio–, está sendo desenvolvido com apoio do HC-FMUSP (Hospital das Clínicas da Faculdade de Medicina da Universidade de São Paulo).

“A ideia é identificar pela voz se uma pessoa que está falando ao telefone ou na frente da tela de um computador, por exemplo, apresenta um nível de insuficiência respiratória que indique a necessidade de ir imediatamente para um hospital para ser avaliada por uma equipe médica”, diz à Agência Fapesp Marcelo Finger, professor do IME (Instituto de Matemática e Estatística) da USP e coordenador do projeto.

Para desenvolver o sistema, os pesquisadores criaram um programa para coletar gravações de frases como “o amor ao próximo ajuda a enfrentar o coronavírus com a força de que a gente precisa”, lidas por pacientes com covid-19 internados no Hospital das Clínicas.

As amostras de voz coletadas serão comparadas com as de pessoas sem a doença para identificação de padrões diferentes por programas baseados em inteligência artificial.

Por meio de técnicas de aprendizado de máquina, como de redes neurais, o sistema irá aprender a identificar se uma pessoa apresenta insuficiência respiratória pela quantidade de pausas, respirações e outros padrões presentes na voz ao proferir uma sentença, por exemplo.

Ao constatar que a pessoa apresenta insuficiência respiratória, o sistema emitirá um alerta para o profissional de saúde que está monitorando o paciente remotamente entrar em contato com ele ou com seu acompanhante para encaminhá-lo a um hospital.

“A ideia é que o sistema facilite o trabalho de triagem dos pacientes pelas equipes médicas, principalmente no momento atual, em que o sistema de saúde está sobrecarregado”, afirma Finger.

Para fazer um pré-treinamento do sistema, os pesquisadores pretendem usar um acervo de vozes de falantes de língua portuguesa, de todas as regiões do Brasil, reunidas ao longo dos últimos 50 anos.

"O sistema pré-treinado com essa quantidade de dados será adaptado para que com muito menos amostras de vozes consiga classificar se uma pessoa apresenta ou não insuficiência respiratória", explica Finger.

“Esse projeto, que usará processamento de linguagem natural para fazer diagnóstico médico, está na fronteira do conhecimento. Pode ser que o grau de precisão que alcançaremos em uma primeira fase não seja o ideal. Mas também estamos aprendendo e abrindo uma via de pesquisa que pode ter inúmeras aplicações”, diz.

Os pesquisadores participantes do projeto estão recebendo novos registros de voz por meio do site do projeto. Mais de 7.000 pessoas já aram a plataforma, gravaram três frases e contribuíram com a pesquisa.

Percepção tardia

O sistema será especialmente útil no diagnóstico da covid-19 porque a doença tem progressão muito lenta. Por isso, a maioria dos pacientes percebe muito tardiamente a piora do quadro e demora para ir a um hospital, conta Anna Shafferman, professora da FM-USP e integrante do projeto.

As pessoas que evoluem para quadros mais graves da doença começam a piorar só após o sétimo dia de infecção e entre o oitavo e o 11º dia ocorre uma piora súbita, disse a pesquisadora em um evento online promovido pelo Jornal da USP.

“No começo da epidemia, perguntávamos por que as pessoas demoravam tanto para procurar um hospital. Constatamos que isso se deve ao fato de não notarem que estão piorando. Por isso, a orientação é não ficar em casa esperando perceber que está com insuficiência respiratória porque essa percepção é muito tardia”, diz.

Uma das razões para a progressão lenta da doença é o tipo de comprometimento pulmonar, mais intersticial, que mantém a complacência dos pulmões e dá a falsa impressão para o paciente de que o órgão está funcionando bem, explica a pesquisadora.

“É muito frequente os pacientes com covid-19 apresentarem saturação de oxigênio entre 85 e 87, que são números muito baixos. Um sistema capaz de identificar esse quadro de insuficiência respiratória por meio da voz facilitará muito o diagnóstico”, avalia.

O sistema também será muito útil mesmo após superada a epidemia de covid-19, uma vez que a insuficiência respiratória é um sintoma comum de outras doenças, como a pneumonia, aponta a pesquisadora.

“Os profissionais de saúde também vão poder usar esse sistema na triagem de pacientes em um pronto-socorro, por exemplo”, afirma.