BirdDex
O BirdDex transforma a observação de aves num jogo de coleção. Tira-se uma fotografia a uma ave e obtém-se de imediato a identificação da espécie, com detalhes de guia de campo e o seu canto real, para depois a guardar no próprio BirdDex. Combina um LLM com visão com dados públicos de biodiversidade (Wikipedia e Xeno-canto) e armazenamento no dispositivo, em Android e iOS.



Como funciona
- 1Captar
Tirar uma fotografia com a câmara ou escolher uma da galeria.
- 2Identificar
A imagem é enviada ao GPT-4o mini com um prompt que obriga a uma resposta em JSON estrito, para que o resultado possa ser lido de forma fiável.
- 3Validar
O JSON é lido e verificado; respostas malformadas ou incompletas tornam-se erros tipados ou valores por omissão seguros, em vez de falhas.
- 4Enriquecer
Uma fotografia de referência vem da API da Wikipedia e um canto real do Xeno-canto, ambos sem bloquear a identificação.
- 5Colecionar
O avistamento é guardado no Hive, no dispositivo, e adicionado à grelha da coleção BirdDex.
- Nome comum e científico, grau de confiança, descrição, habitat, dieta, estatuto IUCN, tamanho e peso
- Barra de confiança animada com código de cores e um selo do estado de conservação
- Leitor do canto da ave, com reproduzir/pausar e barra de progresso navegável
- Favoritos e notas pessoais por espécie, guardados offline
- Catálogo inicial de espécies (incluindo nomes em português); as espécies ainda não encontradas aparecem como “???”
- Barra de progresso das espécies colecionadas
- Pesquisa por nome comum ou científico
- Filtros por colecionadas, por colecionar, favoritas e tamanho; ordenação por nome, data ou peso
Decisões de design
O prompt fixa o modelo a um esquema JSON e o cliente defende-se de respostas inválidas, para que a interface nunca falhe por causa do modelo.
As imagens da Wikipedia e o áudio do Xeno-canto são extras opcionais; se falharem, a interface mostra um marcador em vez de bloquear a identificação.
Se não houver gravação para a espécie exata, a app tenta pelo género antes de desistir.
Coleção, favoritos e notas ficam em caixas Hive separadas, para funcionarem sem ligação e de forma independente.
Ecrãs, serviços responsáveis por todas as chamadas de rede e uma camada de persistência, para que cada parte possa ser alterada ou testada isoladamente.
As chaves de API são lidas de um ficheiro .env ignorado pelo git.
- Passar a chamada à OpenAI para um pequeno proxy no backend, para que nenhuma chave seja distribuída com a app
- Identificação no dispositivo com um modelo TensorFlow Lite, para uso offline e menor custo
- Gestão de estado com Riverpod ou Bloc e maior cobertura de testes
- Registo da localização e um mapa de avistamentos
- Mudança de idioma na app, usando os nomes em português que já estão no catálogo