Skip to content

Repository files navigation

SmartGlassesNotes

SmartGlassesNotes social preview

Local-first, hands-free voice notes for smart glasses on Android. The app was developed and physically validated with Ray-Ban Meta glasses: it captures their Bluetooth microphone audio, detects wake and stop phrases, and transcribes each note entirely on the phone with Vosk and Whisper.cpp.

Core transcription does not use ChatGPT, a backend, or a hosted speech service. The architecture can be adapted to other smart-glasses brands and models when Android exposes a compatible Bluetooth communication-audio route.

Highlights

  • Brazilian Portuguese voice commands and transcription;
  • on-device wake phrase detection with Vosk;
  • local batch transcription with multilingual Whisper small-q5_1;
  • private local note storage, selection, deletion, and Android sharing;
  • Bluetooth acknowledgement tones and background foreground-service operation;
  • Android/Kotlin/Jetpack Compose implementation for ARM64 devices.

For setup and build details, see the Portuguese documentation below. Issues and pull requests in English or Portuguese are welcome.

Português

Aplicativo Android para criar anotações privadas por voz usando o microfone de óculos inteligentes. Esta implementação foi desenvolvida e validada com Ray-Ban Meta, recebendo o áudio Bluetooth dos óculos, detectando os comandos e transcrevendo a anotação localmente, sem backend ou serviço externo de IA.

A arquitetura pode ser adaptada para outras marcas e modelos que disponibilizem o microfone ao Android por uma rota de comunicação Bluetooth compatível. Essa compatibilidade não é automática: o roteamento de áudio, as permissões e o comportamento em segundo plano precisam ser validados em cada dispositivo.

Funcionamento

  1. Ative o modo de anotações no aplicativo.
  2. Diga “Nova anotação” ou “Anote para mim”.
  3. Aguarde o sinal sonoro enviado pela rota Bluetooth e dite a nota.
  4. Diga “Fim da anotação”, “Fim da nota” ou “Encerrar anotação”, ou permaneça em silêncio por quatro segundos.
  5. O texto é salvo no armazenamento privado do aplicativo e o áudio transitório é descartado.

As anotações podem ser selecionadas individualmente ou todas de uma vez. A seleção pode ser excluída após confirmação ou compartilhada como um único texto, com uma linha em branco entre as notas, pelo seletor padrão do Android (incluindo Samsung Notes, WhatsApp e ChatGPT quando disponíveis).

Reconhecimento local

O pipeline é híbrido para equilibrar precisão, latência e bateria:

  • Vosk com vocabulário restrito permanece ativo para detectar os comandos;
  • Whisper small-q5_1, executado pelo whisper.cpp, transcreve somente a fala delimitada;
  • o Whisper é carregado sob demanda, reutilizado por até cinco minutos entre notas e depois liberado para reduzir a memória em espera;
  • o idioma do Whisper é fixado em português (pt);
  • a inferência do Whisper ocorre em lote e fora da thread principal;
  • o código nativo usa otimização -O3 e até seis núcleos para reduzir a latência das notas;
  • nenhum áudio ou texto é enviado para transcrição na nuvem.

Na primeira ativação, o aplicativo precisa de internet para baixar aproximadamente 190 MB do modelo oficial ggml-small-q5_1.bin. O arquivo é validado por SHA-1 e armazenado no diretório privado do aplicativo. Após isso, o fluxo funciona offline. Limpar os dados ou desinstalar o aplicativo remove o modelo e exige um novo download.

Diagnóstico

O botão Gravar teste cria deliberadamente um WAV no armazenamento privado para confirmar que o áudio vem dos óculos. Fora desse modo explícito, o áudio da anotação existe apenas temporariamente em memória e é descartado depois da transcrição.

Base técnica

  • Kotlin e Jetpack Compose/Material 3;
  • JVM 17, minSdk 31, compileSdk 36 e targetSdk 36;
  • Vosk Android com vosk-model-small-pt-0.3;
  • whisper.cpp v1.9.1 compilado para arm64-v8a;
  • Whisper multilíngue small-q5_1;
  • NDK 25.2.9519653 e CMake 3.22.1.

Build

Use o JBR do Android Studio e execute na raiz do repositório:

$env:JAVA_HOME = 'C:\Program Files\Android\Android Studio\jbr'
$env:Path = "$env:JAVA_HOME\bin;$env:Path"
.\gradlew.bat assembleDebug
.\gradlew.bat test
.\gradlew.bat lint

Os caches e artefatos gerados ficam em ~/.gradle, fora do OneDrive. O APK de debug é gerado em ~/.gradle/project-builds/smartglassesnotes/app/outputs/apk/debug/app-debug.apk.

Privacidade e limitações

  • As notas permanecem no armazenamento privado do aplicativo.
  • Não há sincronização, analytics, ChatGPT ou fallback de transcrição pela rede.
  • O aplicativo precisa permanecer em um serviço de microfone visível na notificação enquanto aguarda o gatilho.
  • O microfone dos óculos depende da rota de comunicação Bluetooth fornecida pelo Android.
  • A primeira versão é compilada apenas para aparelhos Android ARM64.

As licenças e origens dos componentes estão em THIRD_PARTY_NOTICES.md.

O código original deste aplicativo é disponibilizado sob a licença MIT. Componentes de terceiros permanecem sujeitos às respectivas licenças.

About

Offline hands-free voice notes for smart glasses on Android, validated with Ray-Ban Meta

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages