A indústria de Tecnologia, Informação e Comunicação (TIC) têm uma questão interessante, e os economistas profissionais aparentemente não gostam de falar sobre ela.
Em praticamente todos os setores da economia o preço de um bem sobe mais rápido do que sua utilidade, um fenômeno intrinsecamente “inflacionário”. Portanto, há pouco sentido em adiar uma compra – logo, compre um apartamento ou casa o mais cedo possível.
Agora considere os computadores, um item cujo desempenho (utilidade) historicamente dobrou a cada 18 meses, segundo a progressão conhecida como Lei de Moore. No entanto, o preço deles em moeda fiduciária permaneceu relativamente estável. Ou seja, R$ 1.500 sempre deram acesso a um moderno laptop para consumo ou negócios, ano após ano.
Enquanto isso, a maioria das outras coisas sofria com uma inflação da moeda fiduciária de cerca de 3% ao ano. Portanto, depois de uma década, o que custava $100 agora fora reajustado para ~ $134. Note que com a economia pagando, na melhor das hipóteses, cerca de 2% de rendimento, você só teria ~ $125 guardados na poupança nesse mesmo período.
Assim, quando você quisesse comprar um laptop de ponta, seus $ 1.500 no banco, depois de uma década, teriam chegado a $1.875 ($375 a mais). Contudo, o computador seria 100 vezes mais poderoso. Do ponto de vista econômico, isso representa uma deflação muito séria e muito prejudicial. Portanto, pelas normas da economia clássica, a industria de ITC não deveria existir – nem qualquer outra indústria de eletrônicos de consumo.
O capitalismo virtual
Esse problema estava se espalhando para o mercado automotivo, devido à eletrônica embarcada, o que estava se mostrando prejudicial de várias maneiras.
No entanto, e esse é o novo fenômeno, alguns fabricantes automotivos agora não mais “vendem” carros aos consumidores. Em em vez disso eles agora usam expressões como “buy back” ou “trade up“- uma espécie de leasing rebatizado. Em essência, fazem você pagar uma taxa de uso mensal indefinidamente. Eles apenas te dão outro carro, com cada vez mais componentes eletrônicos, a cada três anos – o que ainda é efetivamente deflacionário pelas regras dos economistas clássicos.
Alguns fabricantes de carros de ponta nem tentam esconder o fato de que os seus produtos vêm com todos os recursos possíveis já embutidos – só que desativados. Se você pagar um pouco a mais a cada mês, eles vão permitir que você os use, bastando apenas uma atualização remota do cṍdigo.
Você não é proprietário legítimo do carro [arrisco dizer que, nessas condições, dar certos comandos de voz em tons mais ríspidos poderia trazer apuros jurídicos].
Além disso, como reza o contrato [que você talvez não tenha lido], você precisa também dar a eles a sua alma, em forma de um dilúvio de informações pessoais.
Um sabor de mercantilismo
As velhas regras da economia estão se tornando menos relevantes à medida que somos forçados a uma economia rentista da qual não se pode escapar. Veja assim o futuro próximo: perca sua renda por algum motivo e eles, remotamente, desligam tudo o que você achava que possuía. Mesmo assim todas as coisas ao seu redor ainda vão continuar a espionar você minuto a minuto, dia a dia – porque para se desconectar é preciso usar uma das funcionalidades que eles desativaram remotamente. Nada como a proverbial “liberdade capitalista”.
De qualquer forma, em um futuro próximo certamente haverá alguma cláusula legal para fazer você pagar um montante adicional para ser excluído da vigilância.
Pelo que me disseram, as telecoms americanas chegaram muito perto desse modelo, ou de algo que serviria de trampolim para ele. O usuário pagaria pelo plano de conectividade – em oposição a um modelo grátis baseado em anúncios – mas mesmo assim as empresas o espionariam e venderiam os dados coletados.
Se você quisesse o plano “sem vigilância”, a ideia era que você teria que pagar mais, com todos os tipos de outros penduricalhos, etc., totalizando algo como $30/mês a mais – eles ainda iriam espionar e coletar dados, mas não “vendê-los” enquanto você continuasse a pagar o “resgate” [como em um sequestro].
Não ficou claro o que eles queriam dizer com “não vender” e não havia garantia de que eles não venderiam todos os seus dados privados em uma data posterior – aparentemente alguém decidiu que o mercado ainda não estava pronto para essa opção, “ainda”.
Post scriptum
O capitalismo tem perdido também outras dimensões. Acabamos de ver aqui como o capitalismo está rapidamente se dissociando da ideia de “propriedade”.
Mas nem é preciso uma análise atenta para ver que o conceito de concorrência está sendo pulverizado por monopólios cada vez mais poderosos. Noções mais abstratas e difusas, como virtude, pudor, modéstia e mérito, tão sagradas à clássica moral capitalista protestante, já foram extintas pela brutal economia da atenção e pelo imediatismo narcisista das redes sociais, em que é possível encontrar completos imbecis a fazer fortunas da noite para o dia, e a ditar o ethos da época [o que alguns chamam de zeitgeist].
Eticamente, o capitalismo está em frangalhos, desta vez muito mais do que esteve em qualquer período da história, e a marcha de sua insensatez parece apenas se acelerar. O capitalismo se parece cada vez mais com o seus antecessores primitivos, o feudalismo e o mercantilismo. A social-democracia de tempos atrás, praticamente extinta, me parece agora um regime muito mais sofisticado e justo – e em 1989 parecia, de fato, ter vencido a História.
Neste post vou abordar um assunto com o qual os leitores podem facilmente se identificar, pois o que vamos discutir está firmemente arraigado em nossa vida diária. Faça um esforço para ler até o fim. Você pode se surpreender e até gostar.
Arte: Vox Leone
Como já informei, aqui em nosso lab temos usado o incrível Jupyter Notebook, nas tarefas rotineiras de análise de dados, e também em pesquisas relacionadas à visão de computador e processamento de linguagem natural. Isso nos permite colaborar (trabalhar em rede), consolidar dados que serão usados em outras fases do trabalho e gerar as mais diversas visualizações, que são necessárias nas relações com clientes e o público geral.
Nas últimas semanas estive absorvido na tarefa de desenvolver nossa própria aplicação de reconhecimento facial, usando tecnologias populares na área, como Tensorflow, Computer Vision 2, Matplotlib e Pandas. Tudo orquestrado pela excelente biblioteca DeepFace, que disponibiliza oito modelos pré-treinados.
Os resultados que tivemos foram impressionantes. Animado com os experimentos, preparei este Notebook para demonstrar aos leitores como somos vistos pelos olhos digitais que pululam ao nosso redor (sempre em detrimento de nossa privacidade) e quais as tecnologias empregadas.
Os aeroportos resumem a experiência. Todos sabem que ao entrar nesse tipo de ambiente nós somos enquadrados de todos os ângulos imagináveis, por sensores cada vez mais sofisticados, entre os quais se destacam os onipresentes sensores óticos. Já discutimos neste blog – e vamos continuar – algumas questões éticas e legais a respeito do assunto, mas hoje quero demonstrar sucintamente como a análise facial é feita materialmente e quais as informações que os sistemas de vigilância podem obter bastando apenas voltar seu olhar em nossa direção.
A Tecnologia
Vou ter que usar um pouco de código, e algum jargão, mas você pode pular até o resultado da análise da imagem e discussão, mais abaixo.
Seguindo a tendência de grande parte da indústria, nossa aplicação – escrita em Python – é desenvolvida e executada dentro de um ambiente virtual Conda. O núcleo do ambiente é a versátil biblioteca DeepFace, desenvolvida pela Alphabet (Google), aqui instalada através do repositório pip. (*)ressalto que não é recomendado misturar os canais dos repositórios Conda e pip em um mesmo ambiente, mas neste experimento se torna necessário usar pip pelo fato de DeepFace ainda não estar disponível no repositório Conda.
Depois de ter instalado a DeepFace e suas dependências no ambiente virtual, iniciamos o script importando a DeepFace e outras bibliotecas das quais ela depende, como TensorFlow, CV2 e Matplotilb. TensorFlow é o motor da aplicação. CV2 é responsável pela visão de computador, neste caso digitalizando apropriadamente as imagens. Matplotlib é a responsável pela renderização das imagens (plotagem). Vou comentar o código com as explicações.
In [2]:
#Importando as bibliotecasfromdeepfaceimportDeepFaceimportcv2importmatplotlib.pyplotasplt
In [3]:
#definição da variável que aponta para o caminho do arquivo de#imagem a ser carregadoimg1_path="/home/admin/Pictures/bmarques.jpg"valid_images=[".jpg",".jpeg",".png"]
#plotar a imagem usando a função imshow()da matplotlibplt.imshow(img1)plt.show()
In [6]:
#usando o modelo pré-treinado Facenet para a análise facial.#DeepFace tem oito modelos pré-treinados; Facenet mostrou um ótimo#comportamento em nossos testesmodel_name="Facenet"model=DeepFace.build_model(model_name)
In [7]:
#criando um objeto para conter a análise da imagem- é neste estágio que tudo aconteceobj=DeepFace.analyze(img_path=img1_path)
Et voilà! Depois de alguns segundos temos o resultado da análise. O algoritmo, mesmo nesta configuração básica, é sensível o bastante para detectar sete variações emocionais, além da idade aparente e do gênero. Ele também é capaz de diferenciar seis etnicidades, um tanto arbitrárias, devo dizer, espelhando a classificação dos países anglo-saxões.
Eu anoto neste ponto que usamos a biblioteca DeepFace em sua configuração original, assim como o modelo de aprendizado de máquina pré-treinado em bancos de imagens com milhões de amostras. Não tivemos ainda tempo hábil para introduzir grandes modificações no código e treinar nossos próprios modelos, o que já está sendo feito – e será mostrado oportunamente.
Esta é a análise que os sistemas fazem sobre mim [sobre nós] no momento em que saio do táxi na porta do aeroporto.
É uma análise aparentemente trivial de uma imagem trivial. Contexto real da foto: acabei de chegar a uma chácara para uma festa de aniversário – alguns anos atrás.
A Análise
O algoritmo me interpreta como um homem branco de aparentes 37 anos – sendo agradavelmente generoso na avaliação etária. É interessante que ele me atribui uma certa negritude, como alternativa, muito mais do que seria esperado de minha ascendência mediterrânea, que fica relegada a um baixíssimo patamar de probabilidade. Minha expressão é calma, que o algoritmo traduz como neutra. Como indicam os números na tabela em inglês, posso estar também um pouco triste, e com um certo nojinho.
Contudo, o resultado me atribui uma significativa aparência de medo, como o segundo resultado mais provável. Por que eu estaria com medo nesta foto? Acabei de chegar a uma festa e a tarde de sábado parece promissora – no aeroporto isso acenderia uma luz amarela no centro de comando da segurança. Interrompo o teste e começo a tentar entender esse resultado aparentemente divergente.
Depois de algumas horas eu tive um insight que realmente me encantou. Eu entendi que, de fato, o algoritmo havia conseguido ver através da minha máscara social. Ele captou uma verdade íntima e bastante sutil: eu realmente sou ansioso em situações sociais, e sempre demoro um pouco a me adaptar aos ambientes – valentemente, com um sorriso no rosto. Mas a ansiedade – uma forma de medo – deve sulcar nossa face de uma maneira óbvia a sistemas de precisão, que conhecem dezenas de milhões de rostos que respondem sempre da mesma maneira; da mesma maneira humana demais. Minúsculos espasmos musculares, resultantes de nossas emoções, não importa quão sutis, deixam sua marca em nossa face, e em imagens de alta resolução nos desnudam de qualquer abrigo.
Ver o sistema em ação elevou em vários graus minha confiança na tecnologia [além de uma óbiva inquietação]. Depois de muitas rodadas do sistema, com imagens diferentes, eu tenho razões para crer que esse tipo de algoritmo é consistente na detecção de sinais e marcadores de emoções bastante sutis.
Revelando emoções ocultas
Existe uma atividade humana em que ser capaz de detectar as emoções alheias seria de muita utilidade: a política, por exemplo. Seria do maior interesse público tentar sondar os reais sentimentos daqueles que se apresentam para gerir a coisa pública. Nessa atividade em que a manipulação das emoções é tão corriqueira, seria interessante tentar ver através das máscaras.
Acontece que em abril de 2022 nós temos essas fantásticas ferramentas e estamos aprendendo a dominá-las. Vamos tentar, então, fazer a mesma análise que fiz acima, de mim mesmo, em imagens casuais dos principais políticos que se apresentam para a disputa presidencial deste ano. Vamos usar fotos tiradas da internet e submetê-las ao mesmo algoritmo.
Com certeza os candidatos não vão se importar, pois todos eles, com palavras ou atos, já se manifestaram apoiadores da vigilância eletrônica na vida do cidadão. É uma ironia deliciosa poder usar contra os representantes do sistema a mesma tecnologia que o sistema usa para nos oprimir delicadamente. Vai ser, no mínimo, divertido.
Nota: as imagens abaixo foram buscadas no site da Wikimedia Commons. Foram escolhidas por serem adequadas a este projeto. São apresentadas na ordem alfabética dos sobrenomes dos retratados.
O perfil de Bolsonaro revela uma grande carga de emotividade. Uma mistura de raiva, medo e tristeza, indicando um rosto que quer esconder o que sente. O modelo também é generoso na atribuição da idade, desvio que foi notado em todas as imagens analisadas [creio que sei a razão para isso, que comento na conclusão do artigo].
Vamos concordar que a imagem não precisa de análise por AI. Embora o modelo opte pela etnicidade Latina, na verdade ele se mostra indeciso. Isso implica em um certo viés colorista. Comento na conclusão.
Embora não esteja exibindo um sorriso exuberante [como Dória], o modelo atribuiu à imagem um sinal de alegria muito sólido. Não há emoções conflitantes, indicando sinceridade e abertura. A discrepância etária também é menor aqui. Surpreendentemente o modelo não atribui um peso muito forte à herança árabe da senadora.
Conclusão e notas
Como eu disse anteriormente, o modelo Facenet, um dos oito implementados na biblioteca DeepFace, se comporta de forma muito satisfatória. É preciso lembrar que o modelo reflete a amostra com a qual foi treinado. A medida que mais iterações do processo de treinamento venham a incorporar mais e mais segmentos populacionais, a precisão deverá aumentar.
Deixo uma crítica à classificação étnica empregada pelo modelo. Ela reflete a abordagem do censo americano, mas claramente não é mais adequada. Uma revisão se impõe. Os desvios notados com relação à idade das pessoas analisadas, se devem, provavelmente, à baixa resolução das imagens, que nivela os valores dos pixels dando margem a um enganoso efeito de filtro. A discrepância parece ser diretamente proporcional à idade do analisado [quanto mais idoso, maior a discrepância]. Esse desvio é responsável também pelo ‘colorismo’ do software, que dá grande peso à palidez aparente da imagem na classificação étnica.
Vamos continuar experimentando e trabalhando para tornar o modelo mais fiel às nossas características.
Embora possa parecer uma postagem de blog normal do WordPress (como todas as postagens anteriores em nosso blog), na verdade você está olhando para um Jupyter Notebook.
Minha saudação a todos neste primeiro post do ano. Que seja um ano de paz e prosperidade para todos nós. Depois de um agradável recesso de férias, na praia e no campo, estive muito ocupado no início do mês, preparando, com os parceiros, a transição de nossas atividades, de fornecedores de infraestrutura web, para o campo da ciência (predição de tendências usando dados agregados) e análise de dados (interpretação do passado com base em dados acumulados).
Muitas oportunidades nessa área e muitos desafios. Mas vejo que podemos contribuir positivamente para os nossos usuários e a sociedade. Estamos atentos às questões éticas e queremos inovar, tornando disponível ao público grande parte de nossos dados e análises, sem prejuízo de nossas atividades lucrativas. Mais à frente no tempo falaremos mais sobre isso, porque esse nosso diálogo vai continuar em caráter permanente.
Dados e mais dados por toda parte
Quando se fala em ciência e análise de dados no ano da Graça de 2022, não se pode fugir do inevitável assunto: os Notebooks, que estão a provocar uma revolução na área. Se você não estiver familiarizado com os Jupyter notebooks, tentarei mostrar de forma breve o que você precisa saber sobre eles, em linguagem acessível.
O Jupyter Notebook é um aplicativo de código aberto baseado na Web, que permite criar e compartilhar documentos contendo código ao vivo, equações, visualizações e texto narrativo. Os casos de uso incluem: limpeza e transformação de dados, simulação numérica, modelagem estatística, visualização de dados, aprendizado de máquina e muito mais.
Achamos que seria bem a propósito compartilhar aqui como conseguimos transformar um Jupyter Notebook em uma postagem de blog do WordPress. Nesta primeira “prova de conceito”, vou mostrar como os Notebooks funcionam e algumas coisas interessantes que você pode fazer com eles.
Por que estamos fazendo isso?
A razão pela qual estamos testando “postar em um blog usando um Jupyter Notebook” é para demonstrar que ele permite compartilhar na rede uma análise de dados feita em Python – e o correspondente código – com mais facilidade e de maneira mais reproduzível. Como o nome indica, o software foi projetado, no início, como um front-end para as linguagens Julia, Python e R. Atualmente ele suporta um grande número de linguagens.
Aqui nos Laboratórios Vox Leone (chegaremos lá um dia!), em função das mudanças que citei, usamos agora muito Python em todas as etapas de nosso fluxo de trabalho. Jupyter Notebook é a ferramenta que escolhemos para executar e compartilhar nosso código, internamente e com nossos clientes. Pensamos então ‘por que não aproveitar o mesmo pipeline em nossos esforços de comunicação no blog?’
Nosso plano, portanto, é criar uma série de posts do tipo tutorial, onde mostramos como você pode usar Python (e Notebooks) em seu trabalho diário como analista de dados – ou como acadêmico(a). Vamos extrair dados do Google Analytics e da Internet em geral – usando nossos próprios robôs, testar ferramentas e bancos de dados e executar todos os tipos de análises e visualizações usando esses dados (e Notebooks). Um notebook também é uma excelente ferramenta para apresentações – hora de abandonar o antiquado PowerPoint.
Transformando um Notebook em HTML
O primeiro passo no processo de compartilhar seu Notebook no WordPress é convertê-lo do formato nativo ipynb para o formato html.
Fazendo o WordPress renderizar um Notebook
Usando a maneira mais óbvia, simplesmente colamos o código HTML do Notebook dentro de um bloco ‘HTML personalizado’ na postagem do blog. No WordPress nosso post infelizmente é estático, mas existem serviços de nuvem (como o Zenodo e o Kaggle) especializados na hospedagem de notebooks, que permitem o compartilhamento interativo entre colaboradores.
Nota: A versão auto-hospedada (isto é, instalada em uma máquina local) do Jupyter Notebook, como a que usamos, vem com uma prática opção “Baixar como HTML” – o Google Colab, popular serviço de nuvem, infelizmente não possui esse recurso. Para contornar esses problemas, estamos à procura de uma solução alternativa que nos permita ao menos semi-automatizar todo o processo de publicação em blogs – por exemplo, construindo um plugin WordPress que pega o ID de um Colab Notebook, etc, e o transforma automaticamente em HTML.
Nas postagens futuras do blog, todo post que contiver um Notebook, como este, receberá uma tag “notebook”. Vamos também dizer ao WordPress para carregar alguma CSS extra para renderizar o Notebook como ele aparece em seu ambiente nativo. No momento estamos fazendo isso alterando algumas linhas de código em nosso arquivo functions.php.
Queremos contribuir para dar mais popularidade a esse tipo de ferramenta, mostrando algumas coisas interessantes e úteis que estamos fazendo usando Python e Jupyter Notebooks.
O que é possível fazer com os Notebooks?
Com o conhecimento básico do que é um Notebook e como transformá-los em posts do WordPress, vamos ver o que podemos realmente conseguir com eles.
A coisa mais interessante, é claro, é que você pode executar o código Python e ver imediatamente a saída.
Aqui está um exemplo bem básico:
In [6]:
x=5foriinrange(x):print(i*'*')
*
**
***
****
Incrível, não é mesmo? O pequeno bloco de programa imprime recursivamente o número ‘x’ no intervalo entre 1 e ‘x’ (exclusive) em forma de asteriscos.
Os únicos limites que você tem são sua criatividade e habilidade em Python.
Esse primeiro bloco de script foi bastante inútil. Vamos tentar um código mais robusto para plotar um gráfico. O script a seguir gera um gráfico de linhas [genérico, apenas pra exibição], que é exibido logo abaixo.
In [3]:
defmake_fig(figsize):frommatplotlibimportrcParams,cyclerimportmatplotlib.pyplotaspltimportnumpyasnpplt.ion()# Fixando o estado aleatório para reproducibilidadenp.random.seed(19680801)N=10data=[np.logspace(0,1,100)+.2*np.random.randn(100)+iiforiiinrange(N)]data=np.array(data).Tcmap=plt.cm.coolwarmrcParams['axes.prop_cycle']=cycler(color=cmap(np.linspace(0,1,N)))frommatplotlib.linesimportLine2Dcustom_lines=[Line2D([0],[0],color=cmap(0.),lw=4),Line2D([0],[0],color=cmap(.5),lw=4),Line2D([0],[0],color=cmap(1.),lw=4)]fig,ax=plt.subplots(figsize=figsize)lines=ax.plot(data)ax.legend(custom_lines,['Frio','Morno','Quente'])make_fig(figsize=(10,5))
Note que, a esta altura do post, já misturamos texto, código ativo e figuras em um mesmo corpo gráfico, usando uma única plataforma de software. Imagine o efeito final de um conteúdo como este em um relatório de vendas ou em um trabalho acadêmico.
(!) Admito que a formatação gráfica deste post/notebook não é das melhores, mas a intenção aqui é apenas chamar atenção para as possibilidades do software. Certamente você pode fazer melhor.
É bem simples, concorda?
Há muito mais o que você pode fazer com Python e Jupyter Notebooks e vamos cobrir algumas coisas mais avançadas em nossos próximos posts.
Eu gostaria de terminar aqui com três pensamentos que tive enquanto eu escrevia este material:
Escrever um post no blog usando Markdown é divertido (e eficaz). Eu sei que muitas pessoas já estão fazendo isso, mas esta é a primeira vez para mim, que venho da austera linha de comando. Markdown é a maneira padrão de escrever texto em Notebooks.
Eu já pensava assim antes, mas agora tenho certeza absoluta de que Notebooks + WordPress é uma solução incrível para compartilhar exemplos de código e visualizações de dados online.
Eu adoraria ouvir suas opiniões, ideias, perguntas e sugestões de tópicos nos comentários. Fico feliz em responder/ajudar.
PS! Mais conteúdo relacionado a Notebooks em breve! Considere assinar nossa newsletter