Groups | Search | Server Info | Login | Register


Groups > comp.mobile.android > #153761

Tutorial: Windows/Android privacy de-googled STT optimized for speed

From Maria Sophia <mariasophia@comprehension.com>
Newsgroups comp.mobile.android, alt.comp.os.windows-10, alt.comp.microsoft.windows
Subject Tutorial: Windows/Android privacy de-googled STT optimized for speed
Date 2026-04-30 02:53 -0600
Organization BWH Usenet Archive (https://usenet.blueworldhosting.com)
Message-ID <10sv59k$1d9o$1@nnrp.usenet.blueworldhosting.com> (permalink)

Cross-posted to 3 groups.

Show all headers | View raw


Tutorial: 
HeliBoard keyboard & WhisperIME STT on a low-end Samsung for privacy, 
speed & stability set up & tested completely from Windows.

As always, please help everyone if I've made any errors or omissions.

Note: The entire setup & testing was done using scrcpy & adb 
on Windows over USB with Developer Options USB Debugging turned on.

I never once had to even touch the phone, and, if the phone was on 
Wi-Fi, it could have been anywhere in the house on the LAN.

1. Obtain and install the HeliBoard apk
    Name: HeliBoard_3.9-release.apk
    Size: 22559621 bytes (21 MiB)
    SHA256: 4CCCF4943AD4E5FCE218EC47153C57A783C56B12A3C18D82FF0D36686EFB837D

   adb install HeliBoard_3.9-release.apk

2. Enable HeliBoard as an available input method
   This registers the keyboard with the Android system so it can be selected.
   adb shell ime enable helium314.keyboard/.latin.LatinIME

   Note we cannot set a keyboard as default until we enable it first.

3. Set HeliBoard as the active default keyboard
   This physically switches the on-screen keyboard to HeliBoard immediately.
   adb shell ime set helium314.keyboard/.latin.LatinIME

4. Check that the voice input is turned on (it ususaly is, by default)
   adb shell am start -n helium314.keyboard/.settings.SettingsActivity
   HeliBoard Settings > Toolbar > Select toolbar keys > Voice input = on

5. Obtain & install the WhisperIME engine
    Name: org.woheller69.whisper_36.apk
    Size: 22593805 bytes (21 MiB)
    SHA256: 39DF3E8200B9BD9697E97693DDF81D61E928C6E526FD76F0B5BFCC6911534192

    Note that WhisperIME is not the same as Whisper+.cpp but they're similar.

   adb install org.woheller69.whisper_36.apk
   
   Note: It's critical to NOT open the woheller69 Whisper app on Android yet!
   It's not intuitive that the woheller69 app has almost no settings whatsoever.
   Upon its first launch, the WhisperIME app checks its internal data folder 
   (/Android/data/org.woheller69.whisper/files/) for specifically named models.  
   This is hard coded. The app will download the models if they don't exist.
   If it finds the folder empty, it triggers a "Force Download" prompt for 
   the ~435MB Multilingual Base model. There is no other option.
   WhisperIME is minimalistic, but that is too large for our low-end Samsung. 
   By staying out of the app now, we can "pre-seed" that /files/ folder with 
   the ~40MB Tiny English model first. When we finally open the WhisperIME app,
   it will see the files with the correct name (even as the size is different).
   This tricks the app into assuming setup finished, which allows us to use
   the smallest language files possible in the minimalist woheller69 app.

6. Obtain the WhisperIME tflite tiny model
    Name: whisper-tiny.en.tflite
    Size: 42103936 bytes (40 MiB)
    SHA256: 632F4014EC3F9C714A9500B08902F6490F611F06DD3E7021D9FED79888220ABB

7. Fake the first time Whisper starts into thinking it has the larger model
  
   When WhisperIME starts up, it's *hard coded* to look for a file named
   whisper.tflite, which, if it doesn't exist, triggers the download of
   a massive ~435MB file, which this trick is intended to avoid happening.

   There is no way around this hard-coded file name in the GUI. 
   Unlike Whisper+.cpp, there are no settings in WhisperIME. 
   Hence, there is no "Install" option in WhisperIME. 
   There is just the "Download" option in WhisperIME. 

   To get past that restriction, just give it the file "name" it wants.
 
   Create the target directory:
   adb shell "mkdir -p /storage/emulated/0/Android/data/org.woheller69.whisper/files"

   Note: We need to make the target directory because WhisperIME hasn't run yet.
         /storage/emulated/0/Android/data/org.woheller69.whisper/files/

   Push the tiny tflite model into that directory but copy it also 
   to what WhisperIME expects the name to be (which can be deleted later).

   adb push whisper-tiny.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/
   adb shell "cp /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper.tflite"

   Note: Pushing this ~40MB file to whisper.tflite satisfies the app's 
   internal launch check without requiring the ~435mb download.

   Note that WhisperIME works differently after the first startup!

   On the second and successive startups, WhisperIME doesn't just look 
   for one file anymore. WhisperIME scans the file directory which, 
   since we will set WhisperIME to "English, only fast", means it looks
   for a file named whisper-tiny.en.tflite in that same directory.

8. Grant microphone permission to WhisperIME
   adb shell pm grant org.woheller69.whisper android.permission.RECORD_AUDIO

   Note: HeliBoard doesn't need microphone permission because it hands the 
   microphone task off to the voice-recognition service (i.e., Whisper).

9. Set Whisper to be the global voice-recognition provider 

   On de-googled devices, the standard "Voice Input" menus are missing. 
   Hence, use ADB to manually set WhisperIME as the system-wide
   voice recognition provider so it works inside HeliBoard & in other apps.

   adb shell settings put secure voice_recognition_service org.woheller69.whisper/com.whispertflite.WhisperRecognitionService

   Note that using adb to set the voice_recognition_service  is the 
   only way to get true STT on de-Googled ROMs or on debloated Samsung
   devices because the system settings menu for Voice Input often 
   disappears entirely. This happens because that menu is usually 
   hard-coded to look for com.google.android.googlequicksearchbox 
   or Samsung's Bixby.

   Note this setup does not create or touch any digital assistant 
   where a digital assistant listens for keywords like "Hey Google".
   Because it isn't an assistant, it doesn't run a constant background 
   check waiting for a wake-word. It only activates when you tap the 
   mic button. 

10. Optimize for stability on low-end Samsung devices.

   Low-end Samsung devices are shockingly aggressive with memory management. 
   Hence, explicitly whitelist WhisperIME to keep it from being killed mid-sentence.

   a. Whitelist from Deep Sleep
      adb shell dumpsys deviceidle whitelist +org.woheller69.whisper

   b. Allow background activity
      adb shell cmd appops set org.woheller69.whisper RUN_ANY_IN_BACKGROUND allow

   c. Bypass the Phantom Process Killer (Android 12+) for less-powerful CPUs
      adb shell cmd device_config put activity_manager max_phantom_processes 2147483647

   d. Grant permission for the minimalistic listening pop-up overlay 
      adb shell "appops set org.woheller69.whisper SYSTEM_ALERT_WINDOW allow"

11. Optimize Whisper using the hidden settings activity
   adb shell am start -n org.woheller69.whisper/com.whispertflite.WhisperRecognitionServiceSettingsActivity

   This brings up a hidden menu where the following can be set:
    Whisper Voice Input
    Model: English, only fast
    Language: Detect language (grayed out)
    Simplified Chinese [_]
   
12. Now we can safely open the WhisperIME app by tapping on the app icon.
    When it runs for the first time, it will scan the directory, see the 
    pre-seeded ~40MB whisper.tflite & skip the massive ~435MB download.

    Whisper opens to its main activity com.whispertflite.MainActivity 
    If necessary, set it to the same settings as in the service above.
     Model: English only, fast
     Language: Detect language (grayed out)
     Status
       Append [_]
       Translate to English [_]

13. Set the Whisper listening dialog overlay to automatic
   (also called a voice overlay or the STT interface)

   First, bring up the Whisper listening dialog to it's default
   adb shell am start -n org.woheller69.whisper/com.whispertflite.WhisperRecognizeActivity

   Note that the default is to require a manual press the mic & hold while
   speaking. Tap the (A) to switch to automatic voice activity detection.

   Note that you can bring that overlay up anywhere, even on the home screen, 
   although it will be mostly used to replace the keyboard when speaking.

14. Add the mic icon to the Heliboard toolbar
     Access the mic shortcut
     Open the keyboard and long-press the Comma (,) key.
     This allows you to pin the mic for one-tap access
     Drag the mic icon onto the toolbar as desired

15. Test. 
    a. From the homescreen, open up the default SMS/MMS app
    b. Select a contact or group 
    c. Tap in the text box (HeliBoard should come up)
    d. Type into the text field (if desired)
    e. Then press the mic button in HeliBoard
    f. This should bring up the Whisper overlay in (A) automatic mode
    g. Start speaking (the progress bar should indicate activity)
    h. When you stop speaking, two things should happen right away
       i. There will be the transcribed text in the text box
       ii. And the keyboard should have returned automatically
    i. Voila!

16. Debug
    Check active keyboard
     adb shell settings get secure default_input_method
      Expected output:
      helium314.keyboard/.latin.LatinIME
    Check active voice service
     adb shell settings get secure voice_recognition_service
      Expected output:
      org.woheller69.whisper/com.whispertflite.WhisperRecognitionService
    Verify whitelist status
     adb shell dumpsys deviceidle whitelist | grep whisper
      Expected output:
      user,org.woheller69.whisper,10843
    Check on the Whisper process
     adb shell ps -ef | grep whisper
      Expected output:
      u0_a843 21962 902 1 00:06:23 ? 00:00:33 org.woheller69.whisper
    Check microphone usage logs 
     adb shell appops query-op android:record_audio allow | grep whisper
      Expected output:
      org.woheller69.whisper
    Verify the model file name and location
     adb shell ls -l /storage/emulated/0/Android/data/org.woheller69.whisper/files/
      Expected output (simplified)
       whisper-tiny.en.tflite  (The working model)
       whisper.tflite          (The decoy/setup flag)
       filters_vocab_en.bin    (The logic file)

    Note WhisperIME automatically downloads .bin files the first time 
    a voice recognition attempt occurs.

    Check the list of currently enabled keyboards
      adb shell "ime list -s | grep -E 'helium|whisper'"
      Expected output:
       helium314.keyboard/.latin.LatinIME
       org.woheller69.whisper/com.whispertflite.WhisperInputMethodService
   Confirm Whisper is actually using the 40MB tiny model:
    adb logcat -c
    Tap the HeliBoard mic button to wake up whisper, and then run
    adb shell "logcat -d -v tag WhisperEngineJava:D *:S"
      Expected output:
      Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite

This confirms the phone is 100% independent of Google/Samsung voice servers.
-- 
On Usenet, wizened old men discuss topics of interest, where each adds
their own flavor of value so that the group, as a whole, benefits greatly.

Back to comp.mobile.android | Previous | NextNext in thread | Find similar


Thread

Tutorial: Windows/Android privacy de-googled STT optimized for speed Maria Sophia <mariasophia@comprehension.com> - 2026-04-30 02:53 -0600
  Re: Tutorial: Windows/Android privacy de-googled STT optimized for speed Alan Peeling <Alan@invalid.co.uk> - 2026-04-30 12:15 +0100
    Re: Tutorial: Windows/Android privacy de-googled STT optimized for speed Maria Sophia <mariasophia@comprehension.com> - 2026-04-30 05:39 -0600
      Re: Tutorial: Windows/Android privacy de-googled STT optimized for speed Alan Peeling <Alan@invalid.co.uk> - 2026-04-30 21:50 +0100
        Re: Tutorial: Windows/Android privacy de-googled STT optimized for speed Maria Sophia <mariasophia@comprehension.com> - 2026-04-30 15:33 -0600
  Re: Tutorial: Windows/Android privacy de-googled STT optimized for speed Maria Sophia <mariasophia@comprehension.com> - 2026-05-02 18:19 -0600
    Re: Tutorial: Windows/Android privacy de-googled STT optimized for speed Maria Sophia <mariasophia@comprehension.com> - 2026-05-06 20:37 -0600
      Re: Tutorial: Windows/Android privacy de-googled STT optimized for speed Paul <nospam@needed.invalid> - 2026-05-08 02:31 -0400
        Re: Tutorial: Windows/Android privacy de-googled STT optimized for speed Maria Sophia <mariasophia@comprehension.com> - 2026-05-08 01:09 -0600

csiph-web