Skip to main content

Speech-to-text for Flet apps via OS-native recognition (Android/iOS)

Project description

flet-stt

Speech-to-text for Flet apps via OS-native recognition (Android/iOS).

Install

pip install flet-stt

App pyproject.toml setup

Three things are required in your app's pyproject.toml for APK builds:

[project]
dependencies = ["flet>=0.82.0", "flet-stt"]

# 1. microphone permission
[tool.flet.android.permission]
"android.permission.RECORD_AUDIO" = true

# 2. prevent source shadowing in APK
[tool.flet.app]
exclude = ["flet_stt"]

# 3. extension discovery
[tool.flet.dev_packages]
flet-stt = "flet_stt"

All three are needed. Missing any one causes silent failures or build errors.

Quick start

import json
import flet as ft
from flet_stt import FletStt

def main(page: ft.Page):
    stt = FletStt()  # do NOT add to page.overlay or page.controls

    def on_result(e):
        data = json.loads(e.data)
        if data["final"]:
            print(f"Recognized: {data['text']}")

    stt.on_result = on_result

    async def start(e):
        await stt.initialize()
        await stt.listen(listen_mode="dictation")

    page.add(ft.Button(content="Listen", on_click=start))

ft.run(main)

More examples in examples/.

Common pitfalls

1. Do not add FletStt to page.overlay or page.controls

FletStt is a service, not a visual control. It registers itself automatically. Adding it to page.overlay, page.controls, or page.add() causes a red crash screen on Android with no useful error message.

# WRONG - causes crash
stt = FletStt()
page.overlay.append(stt)

# CORRECT - just instantiate
stt = FletStt()

2. Always uninstall before reinstalling APK

Flet's serious_python caches the extracted Python environment. adb install -r silently runs old code.

adb uninstall com.yourapp.package
adb install build/apk/app-release.apk

3. on_device=True may silently produce no results

On-device speech models may not be installed on the device. Recognition starts, status says "listening", but no results come back and no error fires. The default is on_device=False (cloud) which includes a 15-second timeout that fires a cloud_recognition_timeout error if nothing comes back.

API

FletStt()

Instantiate once. Assign event handlers before calling listen().

Events

Event e.data Description
on_result {"text": "...", "final": true, "confidence": 0.95, "alternates": [...]} Recognition result. final=false for partial results.
on_error {"error": "...", "permanent": false} Error. Includes cloud_recognition_timeout when cloud returns nothing.
on_status {"status": "listening"} Status: "listening", "notListening", "done".
on_sound_level {"level": -6.5} Mic dB level during listening.

Methods

await initialize() -> bool - initialize recognizer, request mic permission. Call before listen().

await listen(...)

Parameter Default Description
locale_id "" BCP-47 locale (e.g. "en_US"). Empty = system default.
listen_for_seconds 0 Max duration. 0 = platform default (~60s).
pause_for_seconds 0 Silence before auto-stop. 0 = platform default.
partial_results True Fire on_result for partial results.
on_device False Use on-device recognition. Default is cloud.
cancel_on_error False Cancel on error instead of continuing.
sample_rate 0 Hz. 0 = platform default.
listen_mode "confirmation" "confirmation", "search", or "dictation".

await stop() - stop and get final result.

await cancel() - stop without final result.

await locales() -> list[dict] - available locales.

await system_locale() -> dict - system default locale.

await is_listening() -> bool / await has_permission() -> bool

Platform notes

  • Android: Google Speech Services. On-device for ~50 languages. Auto-stops after ~5s silence / ~60s total. Requires RECORD_AUDIO.
  • iOS: Apple SFSpeechRecognizer. On-device since iOS 15 for major languages. Needs NSSpeechRecognitionUsageDescription and NSMicrophoneUsageDescription in Info.plist.
  • Desktop: instantiates without error but recognition won't work (no native plugin).

Building APK

flet build apk -v

On Windows, set PYTHONIOENCODING=utf-8 before building to avoid Unicode crashes.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flet_stt-0.1.2.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flet_stt-0.1.2-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file flet_stt-0.1.2.tar.gz.

File metadata

  • Download URL: flet_stt-0.1.2.tar.gz
  • Upload date:
  • Size: 7.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for flet_stt-0.1.2.tar.gz
Algorithm Hash digest
SHA256 e565a28704b4df3ae47d6429be0b9c6a7576f0a06f75ebeb2255b6f5be278424
MD5 d8d0a3b54ce4f6f70ea704c9b8b83a78
BLAKE2b-256 fb2be2665d91a37761eb1fb1be89acb60d65797dd67c22e9503faae6a332e313

See more details on using hashes here.

File details

Details for the file flet_stt-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: flet_stt-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for flet_stt-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e917732b79e86850d008b2959c7a702c16c66b2ccbafe83a3c2138bf18b5b4f5
MD5 07b5441c170511f1a9aad2b65547ed9e
BLAKE2b-256 c120a0b7250c745000dffaa67ce6ad86b5301eb82f781c5a93235a99e044454d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page