CameraX: um vislumbre do passado, presente e futuro

Tempo de leitura: 7 minutes

O CameraX é uma biblioteca Android Jetpack desmembrada que ajuda você a adicionar facilmente recursos da câmera aos seus aplicativos Android. Tradicionalmente, criar aplicativos com recursos de câmera tem sido difícil no Android devido à grande variedade de dispositivos Android e a um modelo de programação complexo. Agora, milhares de desenvolvedores estão usando o CameraX e muitos conseguiram reduzir o tamanho do APK, melhorar suas métricas de negócios e também otimizar seus recursos, permitindo que seus engenheiros se concentrem na criação de novos recursos interessantes.

Este post fala sobre como o CameraX inverte o modelo de programação de estrutura de câmera existente, como ajuda a dimensionar seus aplicativos no Android e introduz novos recursos desde o Beta, como uma maneira fácil de integrar recursos inteligentes como o ML Kit ao seu aplicativo.

 

Invertendo a complexidade do passado

Começamos pesquisando on-line os vários problemas enfrentados por você e testando vários dispositivos existentes no campo. Ficamos surpresos ao saber que muitos de vocês recorreram a grandes blocos de códigos if-else entre fabricantes, chipsets e até dispositivos específicos apenas para fazer as coisas funcionarem. Um dos motivos desse comportamento é que, com as APIs de estrutura Camera1 ou Camera2, você inicia com um conjunto de entradas específicas de dispositivo e SO para obter a saída desejada, como tirar uma foto. Por design, isso exige que você conheça a configuração do dispositivo com antecedência para ajudá-lo a atingir seu objetivo – dificultando o dimensionamento do seu código quando novos dispositivos são lançados.

Modelo de programação da estrutura Camera1 / Camera2

Tivemos que repensar fundamentalmente o modelo de programação. Muitos de seus comentários nos inspiraram a virar o funil e começar com uma abordagem baseada em casos de uso (representada pelo diagrama abaixo).

Modelo de programação CameraX

 

 

Com essa nova abordagem, a equipe criou uma biblioteca separada, CameraX, que era independente de todas as principais versões do Android e pode trabalhar em mais de 94% dos dispositivos começando com a API 21, sem a necessidade de blocos if-else específicos do dispositivo. No CameraX, você primeiro especifica sua meta criando um caso de uso, por exemplo “Tirar uma foto” com o caso de uso do ImageCapture. Em seguida, o CameraX determina a configuração específica do sistema operacional e do dispositivo que o ajudará a alcançar seu objetivo. Hoje, os casos de uso sustentam a experiência do CameraX, começando com Preview, ImageAnalysis e ImageCapture.

 

Ajudando os desenvolvedores a escalar os testes

Além da implementação da API da estrutura existente e da complexidade do uso, muitos desenvolvedores enfrentam dificuldades para testar seus aplicativos em escala em um grande número de dispositivos Android e diversas configurações de câmera. O que aprendemos é que, mesmo para os aplicativos de câmera mais básicos, muitos de seus recursos foram gastos no teste de um grande pool de dispositivos, resultando em soluções específicas de dispositivos, conforme mencionado anteriormente. Dado que o teste é uma parte crucial do seu desenvolvimento geral, isso nos inspirou a criar um laboratório de testes CameraX dedicado que forneceria cobertura de teste em vários dispositivos Android.

Hoje, este laboratório está preenchido com mais de 90 dispositivos Android. Dois telefones são montados dentro de uma caixa de teste personalizada com iluminação controlada e um motor para simular a rotação e a orientação do aplicativo da câmera. Esses mais de 90 dispositivos representam ~ 450 milhões de dispositivos Android ativos, abrangendo todos os níveis de SO (desde Marshmallow), níveis de preço (nosso telefone mais barato tem um preço de varejo inferior a US $ 100), chipsets (cobrindo MediaTek, Qualcomm e Unisoc) e fabricantes (lista completa de dispositivos).

 

Fechando a lacuna

Nos últimos anos, os fabricantes de Android fizeram um tremendo progresso, trazendo novos recursos como High Dynamic Range (HDR), bokeh borrado e fotografia noturna para dispositivos móveis. No entanto, até agora, esse recurso só estava acessível por meio do aplicativo de câmera nativa (ou sistema) do telefone. As extensões de fornecedor do CameraX (também conhecidas como extensões) fecham a lacuna e abrem cinco recursos específicos do fabricante para todos os desenvolvedores. Isso inclui:

  • HDR: usa os recursos de processamento de vários quadros do fabricante para mesclar vários quadros e fornecer uma imagem que retém os destaques e os baixos de uma cena.
  • Noite: usa os recursos de processamento de quadros múltiplos com pouca luz do fabricante para fornecer fotos mais atraentes em condições de pouca luz.
  • Automático: determina automaticamente e fornece uma imagem HDR ou Noturna com base nas condições atuais de iluminação ambiente.
  • Bokeh: fornece uma imagem com um fundo desfocado, ideal para fotografia de pessoas.
  • Beleza: ativa os efeitos de beleza do rosto na imagem.

A melhor parte: ao ativar as extensões, você não precisa de blocos if-else específicos do dispositivo – codifique uma vez e funcionará em todos os dispositivos suportados. Você pode verificar se as extensões estão ativadas em um dispositivo específico usando ExtensionsManager.ExtensionsAvailability. Se uma extensão estiver disponível, você poderá mostrar os elementos de interface do usuário necessários ao usuário (se aplicável) e configurar os casos de uso Preview e ImageCapture para usar extensões em vez da captura normal de imagens. Com apenas mais algumas linhas de código, você pode melhorar drasticamente a qualidade da imagem e a experiência geral do usuário.

HDR desativado (esquerda) vs. HDR ativado (direita) no Samsung S10 + tirada usando as extensões CameraX

Essas extensões estão disponíveis na Samsung (todos os carros-chefe do S10 + em diante), Motorola (a maioria de seus dispositivos atualizados ou lançados com Android 10), Oppo (Reno Pro 2) e vários telefones básicos que usam os processadores móveis Unisoc. Estamos empolgados em fechar a lacuna com as Extensões e agradecemos a todos os fabricantes por expandir continuamente o número de dispositivos com esses recursos.

 

Ativando novos recursos

Avance rapidamente através do lançamento do CameraX Alpha no Google I/O 2019, versão beta em fevereiro de 2020, até hoje. Com a versão beta mais recente, temos o prazer de compartilhar sobre a compatibilidade aprimorada do CameraX, a introdução do PreviewView para obter uma visualização contínua e novas amostras e utilitários para tornar o uso do CameraX ainda mais fácil.

Começando com a compatibilidade aprimorada do dispositivo, conseguimos solucionar vários problemas específicos do dispositivo, como proporção incorreta do dispositivo (no LG G3), falha na troca de câmera em determinadas instâncias (no Pixel 2) e correção do toque para focar (no Samsung J7) adicionando correções e soluções alternativas no CameraX. Além disso, com base nas informações fornecidas pelos relatórios públicos de erros (obrigado!), Adicionamos testes adicionais no laboratório de testes do CameraX, como testes de integração de widget da interface do usuário e de proporção. Se houver algum problema específico do dispositivo, informe-nos. Teremos o maior prazer em resolvê-lo.

Embora o CameraX forneça o caso de uso Visualizar, muitos de vocês pedem uma solução ainda mais simples para obter uma visualização na tela. O PreviewView é a maneira mais simples de adicionar uma visualização ao seu aplicativo que interage com a câmera. Ele não requer conhecimento profundo sobre as APIs da câmera ou o hardware subjacente e, como é alimentado pelo CameraX, é eficiente em termos de energia e apresenta latência muito baixa para os usuários. Isso é possível usando o SurfaceView por padrão e, se o dispositivo não for compatível com o SurfaceView, ele fará o fallback para o TextureView automaticamente.

O PreviewView também ajuda a melhorar a experiência do usuário. A nova API getPreviewStreamState () permite que seus aplicativos sejam notificados quando a visualização estiver em fluxo contínuo ou inativa. Você pode usar essa nova API para mostrar uma imagem de espaço reservado na parte superior do PreviewView quando a visualização estiver ociosa e ocultar o espaço reservado quando a visualização estiver sendo transmitida. Isso evita uma tela preta desagradável enquanto a visualização está iniciando.

Por fim, o ImageAnalysis começa fornecendo acesso ao buffer por quadro. Depois que combinamos esse caso de uso com as APIs prontas para uso do ML Kit, ele abre muitas novas possibilidades, como reconhecimento de texto, identificação de imagens e até mesmo a detecção e reconhecimento de objetos usando seu próprio modelo treinado Tensorflow Lite. Como alternativa, você pode usar o CameraX diretamente com o tempo de execução do TensorFlow Lite (GitHub). Para uma visão detalhada das atualizações mais recentes do CameraX, confira este vídeo:

 

Atualmente, existem milhares de aplicativos na Play Store implantados com o CameraX nas categorias automotiva, bancária, namoro, bate-papo, comércio eletrônico, pesquisa, social e muitas outras categorias. Alguns dos desenvolvedores que consideraram útil o CameraX incluem:

  • O Monzo Bank usou o CameraX para: a) eliminar 9.000 linhas de código, incluindo o código da interface do usuário eb) reduzir a taxa de abandono da captura de imagem de identificação e das gravações de vídeo selfie de 25% para cerca de 5% (estudo de caso).
  • O YouCam Perfect conseguiu atingir 70% menos linhas de código com o CameraX (sobre camera2) e melhorou bastante a eficiência do desenvolvimento de novos produtos.
  • A Ufoto usou o CameraX para otimizar seus recursos, permitindo que seus engenheiros se concentrassem na criação de novos recursos interessantes. Eles também observaram uma melhoria mensurável ao migrar do Camera1 para o CameraX. Por exemplo, em alguns dispositivos, a captura de imagem é 10% mais rápida e, em alguns dispositivos, a taxa de quadros de visualização é 30% maior.

 

Qual é o próximo

Melhoraremos continuamente a compatibilidade e a confiabilidade do dispositivo no Android, tornando o CameraX ainda mais fácil de usar para você (lista de problemas corrigidos do CameraX relatados pelos desenvolvedores). Por exemplo, adicionaremos dispositivos adicionais ao laboratório de testes do CameraX nos próximos meses. Acreditamos firmemente que os desenvolvedores não devem se preocupar com a pilha de câmeras subjacente ou peculiaridades específicas do dispositivo, para que possam se concentrar na criação de aplicativos incríveis que os usuários adoram. Com mais de 2.000 desenvolvedores usando o CameraX em produção, recomendamos que você tente adotar e implantar a versão mais recente do CameraX Beta.

Se você quiser sujar as mãos com o CameraX, confira nosso tutorial e nossa amostra oficial. Depois de experimentar o CameraX, gostaríamos de ouvir sobre os tipos de melhorias que você vê. E se você observar algum problema com a versão mais recente, registre um bug com relatórios de erros sempre que possível (triagem semanalmente). Você também pode enviar um e-mail para o Grupo de discussão do CameraX Android com perguntas ou postar no StackOverflow com a tag ‘android-camerax’.

Nossos sinceros agradecimentos a você, nossos incríveis desenvolvedores, parceiros, fabricantes e membros da equipe CameraX por ajudar a moldar e construir a biblioteca CameraX Jetpack.