Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > alt.comp.microsoft.windows > #3383 > unrolled thread
| Started by | Maria Sophia <mariasophia@comprehension.com> |
|---|---|
| First post | 2026-04-30 02:53 -0600 |
| Last post | 2026-05-08 01:09 -0600 |
| Articles | 9 — 3 participants |
Back to article view | Back to alt.comp.microsoft.windows
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
| From | Maria Sophia <mariasophia@comprehension.com> |
|---|---|
| Date | 2026-04-30 02:53 -0600 |
| Subject | Tutorial: Windows/Android privacy de-googled STT optimized for speed |
| Message-ID | <10sv59k$1d9o$1@nnrp.usenet.blueworldhosting.com> |
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.
[toc] | [next] | [standalone]
| From | Alan Peeling <Alan@invalid.co.uk> |
|---|---|
| Date | 2026-04-30 12:15 +0100 |
| Message-ID | <10svdkh$k9k0$1@dont-email.me> |
| In reply to | #3383 |
On 30/04/2026 09:53, Maria Sophia wrote: >> The entire setup & testing was done using scrcpy & adb >> on Windows over USB with Developer Options USB Debugging turned on... >> if the phone was on >> Wi-Fi, it could have been anywhere in the house on the LAN. Does this mean SCRCPY can work over Wi-Fi? If so how is it done? -- Alan
[toc] | [prev] | [next] | [standalone]
| From | Maria Sophia <mariasophia@comprehension.com> |
|---|---|
| Date | 2026-04-30 05:39 -0600 |
| Message-ID | <10svf16$i$1@nnrp.usenet.blueworldhosting.com> |
| In reply to | #3384 |
Alan Peeling wrote: > On 30/04/2026 09:53, Maria Sophia wrote: >>> The entire setup & testing was done using scrcpy & adb >>> on Windows over USB with Developer Options USB Debugging turned on... >>> if the phone was on >>> Wi-Fi, it could have been anywhere in the house on the LAN. > > Does this mean SCRCPY can work over Wi-Fi? If so how is it done? I set it up and tested it using adb & scrpy over USB but there's no reason you can't do the same tasks using adb/scrcpy over Wi-Fi, if you know how. <https://i.postimg.cc/pr8NPNKs/scrcpy33.jpg> Scrcpy itself doesn't care whether the connection is USB or wireless. Scrcpy relies entirely on ADB. a. If ADB can connect to your phone over Wi-Fi (and, it can), then b. scrcpy will work the same way. The problem with Wi-Fi though, and Android, is how you accomplish things over Wi-Fi varies greatly depending on which Android version you have. <https://i.postimg.cc/KvTvtMS8/scrcpy31.jpg> Android 10 and below requires a one-time USB connection to enable ADB over TCP/IP while Android 11+ added ADB pairing, allowing us to connect without ever using a USB cable, though the pairing process is a bit more involved. <https://i.postimg.cc/pdyTjwnT/scrcpy28.jpg> Here are some screenshots in series using both wired and wireless scrcpy. I posted these to this newsgroup years ago, during the transition period. <https://i.postimg.cc/hjj3tFR9/scrcpy34.jpg> Manage Android from Windows <https://i.postimg.cc/pr8NPNKs/scrcpy33.jpg> sndcpy is the default now <https://i.postimg.cc/zGNNXftK/scrcpy32.jpg> ADB port errors creep up <https://i.postimg.cc/KvTvtMS8/scrcpy31.jpg> HNS stop/start solution <https://i.postimg.cc/WbpYsfqg/scrcpy30.jpg> Windows Update is the problem <https://i.postimg.cc/Hs1ZZ5H0/scrcpy29.jpg> net stop hns & net start hns <https://i.postimg.cc/pdyTjwnT/scrcpy28.jpg> Android assigns random ports <https://i.postimg.cc/25XrGW9R/scrcpy27.jpg> Nobody can find locked ports <https://i.postimg.cc/Dz1rcpDX/scrcpy26.jpg> Windows Update locks ports <https://i.postimg.cc/tgvzsMRm/scrcpy25.jpg> Connect over Wi-Fi sans USB <https://i.postimg.cc/Hnw59ZHm/scrcpy24.jpg> Compare Vysor to scrcpy <https://i.postimg.cc/mrz6gJpC/scrcpy23.jpg> Android SMS/MMS on Windows <https://i.postimg.cc/c4Wq5x9j/scrcpy22.jpg> Vysor IP address option <https://i.postimg.cc/9FJMKYch/scrcpy21.jpg> Windows Drive: === Android <https://i.postimg.cc/Y9jbTtcN/scrcpy20.jpg> Start /b as a CMD works! :) <https://i.postimg.cc/3R6nTz7s/scrcpy19.jpg> Start /b TARGET fails :( <https://i.postimg.cc/Y93b1z0n/scrcpy18.jpg> Free Automation APKs <https://i.postimg.cc/bvRXdbxg/scrcpy17.jpg> AutoIT & IFFT & Automate <https://i.postimg.cc/5NrK7jtg/scrcpy16.jpg> powershell hide-console trick <https://i.postimg.cc/g2yNftw0/scrcpy15.jpg> Trick to pin batch shortcut <https://i.postimg.cc/XqZsmVFM/scrcpy14.jpg> AppPath & shortcut TARGET <https://i.postimg.cc/CxXH6N2r/scrcpy13.jpg> No scrcpy console window! <https://i.postimg.cc/yYKNnHxD/scrcpy12.jpg> REG test of showwin.lnk <https://i.postimg.cc/7LWJhWxq/scrcpy11.jpg> Shortcut test of showwin.lnk <https://i.postimg.cc/fyWw2nXh/scrcpy10.jpg> The console came up :( <https://i.postimg.cc/66Gn2t2g/scrcpy09.jpg> REG test of showwin.bat <https://i.postimg.cc/nV6K0Cfn/scrcpy08.jpg> CMD test of showwin.bat <https://i.postimg.cc/hjkVFyqJ/scrcpy07.jpg> Android mnt as drive letter <https://i.postimg.cc/Sx1hgWmY/scrcpy06.jpg> Press two hardware buttons <https://i.postimg.cc/wvsbcNBz/scrcpy05.jpg> Drag APK from Windows <https://i.postimg.cc/Y00vx4yp/scrcpy04.jpg> Extraneous cmd window (&) <https://i.postimg.cc/Vvrq0K0m/scrcpy03.jpg> The efficient setup explained <https://i.postimg.cc/tTmdgKTB/scrcpy02.jpg> An efficient program setup <https://i.postimg.cc/N0G1TXcZ/scrcpy01.jpg> Mirror Android on any PC But personally, I've given up on wireless adb/scrcpy because Android makes it that you MUST touch the phone at least once, which is what I deplore. -- If we think we understand something, we don't. But if we think we don't quite yet understand something, then we're just beginning to understand it
[toc] | [prev] | [next] | [standalone]
| From | Alan Peeling <Alan@invalid.co.uk> |
|---|---|
| Date | 2026-04-30 21:50 +0100 |
| Message-ID | <10t0fa9$v7ra$1@dont-email.me> |
| In reply to | #3385 |
On 30/04/2026 12:39, Maria Sophia wrote: > Here are some screenshots in series using both wired and wireless scrcpy. Thanks for your very comprehensive post. My experience so far has been that SCRCPY on USB works some of the time And SCRCPY on Wi-Fi won't connect at all. As Wi-Fi connection seems to be a lot more faff than USB connection I think I'll forget about it. -- Alan
[toc] | [prev] | [next] | [standalone]
| From | Maria Sophia <mariasophia@comprehension.com> |
|---|---|
| Date | 2026-04-30 15:33 -0600 |
| Message-ID | <10t0hrk$1lda$1@nnrp.usenet.blueworldhosting.com> |
| In reply to | #3386 |
Alan Peeling wrote: > On 30/04/2026 12:39, Maria Sophia wrote: >> Here are some screenshots in series using both wired and wireless scrcpy. > Thanks for your very comprehensive post. My experience so far has been > that SCRCPY on USB works some of the time And SCRCPY on Wi-Fi won't > connect at all. As Wi-Fi connection seems to be a lot more faff than USB > connection I think I'll forget about it. I don't disagree with you that adb over wireless debugging is a bitch because of Android security making certain you have access to the phone. You can tell I get around stuff like that from my tutorial, but I have never been able to get past that purposeful wireless-debugging security. In the end, for others to know, adb/scrcpy works fine over USB or Wi-Fi, but you must have physical access to the phone for the initial steps. If you don't like scrcpy/sndcpy, you could try the free Vysor tool. Vysor works with iOS & Android, while scrcpy works only with Android. <https://i.postimg.cc/xdSMtBkn/vysor36.jpg> scrcpy vs Vysor resolution <https://i.postimg.cc/TYvqdxCT/vysor35.jpg> iOS & Android PC mirroring <https://i.postimg.cc/k5gv0yw8/vysor34.jpg> Apple iOS & Android mirroring <https://i.postimg.cc/Njg6Xx3V/vysor33.jpg> Preparing Vysor on device <https://i.postimg.cc/xjz3V8Gs/vysor32.jpg> ScrCpy vs Vysor PC mirror <https://i.postimg.cc/k4K8dZqv/vysor31.jpg> Random MAC address is static <https://i.postimg.cc/nchSVcmS/vysor30.jpg> Static/Reserved IP address <https://i.postimg.cc/XqrD5Hqm/vysor29.jpg> Removing Apple iTunes crap <https://i.postimg.cc/KYbVWDp3/vysor28.jpg> Nuking Apple shitware 1 by 1 <https://i.postimg.cc/MGbkZFfY/vysor27.jpg> The bloatware is everywhere <https://i.postimg.cc/hP6R2xqV/vysor26.jpg> iTunes crapware won't install <https://i.postimg.cc/fTy57WSY/vysor25.jpg> Best iOS drivers installed <https://i.postimg.cc/3wmtyL46/vysor24.jpg> Apple Device working properly <https://i.postimg.cc/tCvS8nGr/vysor23.jpg> iPad is connected to Win10 <https://i.postimg.cc/Kz7pW9mL/vysor22.jpg> Apple Win10 iOS drivers suck <https://i.postimg.cc/QdVPMkqG/vysor21.jpg> Apple iPad on Win10 over USB <https://i.postimg.cc/J7cSYhhg/vysor20.jpg> Classic Apple error 2502 <https://i.postimg.cc/yxP5DL5B/vysor19.jpg> Classic Apple error 2503 <https://i.postimg.cc/V6X28fWJ/vysor18.jpg> Apple Mobile Device Support <https://i.postimg.cc/ZqB1wF9F/vysor17.jpg> Install Apple AMDS engine <https://i.postimg.cc/Jzdf3dhz/vysor16.jpg> Classic Apple Error Code 2503 <https://i.postimg.cc/c4TyCJyY/vysor15.jpg> Apple Mobile Device Support <https://i.postimg.cc/SRhF22xL/vysor14.jpg> Connect over the Internet <https://i.postimg.cc/bv4jPFXB/vysor13.jpg> Vysor Camera virtual webcam <https://i.postimg.cc/XvPnJY5x/vysor10.jpg> Vysor Windows Virtual Camera <https://i.postimg.cc/wxL9qHjc/vysor11.jpg> Vysor searches for Android/iOS <https://i.postimg.cc/2S2zsw8s/vysor09.jpg> Classic Apple Error code 2503 <https://i.postimg.cc/sg6r6gTy/vysor12.jpg> Vysor easily finds Android <https://i.postimg.cc/yYCYcxbb/vysor08.jpg> Apple Mobile Device Support <https://i.postimg.cc/Y2WCvYbF/vysor07.jpg> iOS requires Apple AMDS kluge <https://i.postimg.cc/ydJYXZKw/vysor06.jpg> Remote mirror over the net <https://i.postimg.cc/d0V03fxQ/vysor05.jpg> Vysor Internet mirroring <https://i.postimg.cc/XY3qSqKC/vysor04.jpg> Vysor ADB USB setup switches <https://i.postimg.cc/v8gc5pHc/vysor03.jpg> Vysor remote sharing <https://i.postimg.cc/V6TPYG3h/vysor02.jpg> Vysor console operation <https://i.postimg.cc/QNwjsCDM/vysor01.jpg> Vysor Android/iOS PC mirroring -- On Usenet, everyone is an expert in something that they can impart to all.
[toc] | [prev] | [next] | [standalone]
| From | Maria Sophia <mariasophia@comprehension.com> |
|---|---|
| Date | 2026-05-02 18:19 -0600 |
| Message-ID | <10t64af$1hcj$1@nnrp.usenet.blueworldhosting.com> |
| In reply to | #3383 |
Maria Sophia wrote: > This confirms the phone is 100% independent of Google/Samsung voice servers. My recommendation? a. Low end Android => use HeliBoard + WhisperIME STT b. High end Android => try the all-in-one Futo Keyboard Both can be completely installed & managed from the Windows PC. You never need to touch Android to set it up and use it if it's close by. Note that the current HeliBoard/WhisperIME stack is a modular DIY approach. The advantage being WhisperIME tiny is the lightest STT option available. Yet, FUTO is an all-in-one solution that brings its own set of trade-offs. Both are designed for privacy. If you have a beefier Android, I would suggest first trying Futo Keyboard. a. FUTO includes its own Whisper-based voice engine inside the keyboard. b. FUTO uses the GGML/whisper.cpp format rather than .tflite. c. FUTO's UI is generally more helpful than the minimalistic WhisperIME is. However, because FUTO is an all-in-one app, it holds the keyboard logic, the swipe-typing engine (Llama-based) and the voice engine in the same process space. On my low-end Samsung, this can lead to keyboard lag. For speed & stability on a low-end device, HeliBoard + WhisperIME has its place, but FUTO is far more polished and user-friendly for normal users. Both are fully offline, so my suggestion is binary. a. If you're on a low-end device, consider HeliBoard + WhisperIME STT b. If you are on a beefy device, consider the all-in-one Futo Keyboard -- On Usenet, shared experience saves someone else a long night of guessing. .
[toc] | [prev] | [next] | [standalone]
| From | Maria Sophia <mariasophia@comprehension.com> |
|---|---|
| Date | 2026-05-06 20:37 -0600 |
| Message-ID | <10tgtt9$cdl$1@nnrp.usenet.blueworldhosting.com> |
| In reply to | #3388 |
Maria Sophia wrote: > a. Low end Android => use HeliBoard + WhisperIME STT > b. High end Android => try the all-in-one Futo Keyboard Testing takes time... I'm having trouble with the tiny models in a noisy environment, with the transcription taking too long or not working at all. It seems the AGC on the mic is allowing too much noise to filter through. First, I confirmed the small models are running by running adb logcat. "testing testing 123" Since, at home, you never need to touch the phone itself, from Windows: adb shell logcat -c adb shell "logcat -d -v tag WhisperEngineJava:D *:S" --------- beginning of main D/WhisperEngineJava: Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin D/WhisperEngineJava: Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin Where the specgtrogram was too big for such as small sentence: D/WhisperEngineJava: Calculating Mel spectrogram... D/WhisperEngineJava: Mel spectrogram is calculated...! D/WhisperEngineJava: output_len: 449 So to lower the mic sensitivity on the Samsung A32-5G, I ran: adb shell settings put global call_noise_reduction 1 adb reboot Re-run "testing, testing, 123" adb shell logcat -c adb shell "logcat -d -v tag WhisperEngineJava:D *:S" --------- beginning of main D/WhisperEngineJava: Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin D/WhisperEngineJava: Calculating Mel spectrogram... D/WhisperEngineJava: Mel spectrogram is calculated...! D/WhisperEngineJava: output_len: 449 D/WhisperEngineJava: Skipping token: 50257, word: [_SOT_] D/WhisperEngineJava: Detected language code: en D/WhisperEngineJava: Skipping token: 50259, word: [_extra_token_50259] D/WhisperEngineJava: It is Transcription... D/WhisperEngineJava: Skipping token: 50359, word: [_extra_token_50359] D/WhisperEngineJava: Skipping token: 50363, word: [_BEG_] D/WhisperEngineJava: Skipping token: 50413, word: [_TT_50] D/WhisperEngineJava: Skipping token: 50513, word: [_TT_150] D/WhisperEngineJava: Inference is executed...! Drat. It's still 449. If that doesn't work in noisy environments, then I'll have to bump up to the next-sized model, which I think is the base model. adb push whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/ adb shell "cp /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper.tflite" adb shell "cp /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite"
[toc] | [prev] | [next] | [standalone]
| From | Paul <nospam@needed.invalid> |
|---|---|
| Date | 2026-05-08 02:31 -0400 |
| Message-ID | <10tjvvv$2m2lf$1@dont-email.me> |
| In reply to | #3390 |
On Wed, 5/6/2026 10:37 PM, Maria Sophia wrote:
> Maria Sophia wrote:
>> a. Low end Android => use HeliBoard + WhisperIME STT
>> b. High end Android => try the all-in-one Futo Keyboard
>
> Testing takes time...
>
> I'm having trouble with the tiny models in a noisy environment,
> with the transcription taking too long or not working at all.
>
> It seems the AGC on the mic is allowing too much noise to filter through.
>
> First, I confirmed the small models are running by running adb logcat.
> "testing testing 123"
>
> Since, at home, you never need to touch the phone itself, from Windows:
> adb shell logcat -c
> adb shell "logcat -d -v tag WhisperEngineJava:D *:S"
> --------- beginning of main
> D/WhisperEngineJava: Model is
> loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite
> D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin
> D/WhisperEngineJava: Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite
> D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin
>
> Where the specgtrogram was too big for such as small sentence:
> D/WhisperEngineJava: Calculating Mel spectrogram...
> D/WhisperEngineJava: Mel spectrogram is calculated...!
> D/WhisperEngineJava: output_len: 449
>
> So to lower the mic sensitivity on the Samsung A32-5G, I ran:
> adb shell settings put global call_noise_reduction 1
> adb reboot
>
> Re-run "testing, testing, 123"
> adb shell logcat -c
> adb shell "logcat -d -v tag WhisperEngineJava:D *:S"
> --------- beginning of main
> D/WhisperEngineJava: Model is loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite
> D/WhisperEngineJava: Filters and Vocab are loaded.../storage/emulated/0/Android/data/org.woheller69.whisper/files/filters_vocab_en.bin
> D/WhisperEngineJava: Calculating Mel spectrogram...
> D/WhisperEngineJava: Mel spectrogram is calculated...!
> D/WhisperEngineJava: output_len: 449
> D/WhisperEngineJava: Skipping token: 50257, word: [_SOT_]
> D/WhisperEngineJava: Detected language code: en
> D/WhisperEngineJava: Skipping token: 50259, word: [_extra_token_50259]
> D/WhisperEngineJava: It is Transcription...
> D/WhisperEngineJava: Skipping token: 50359, word: [_extra_token_50359]
> D/WhisperEngineJava: Skipping token: 50363, word: [_BEG_]
> D/WhisperEngineJava: Skipping token: 50413, word: [_TT_50]
> D/WhisperEngineJava: Skipping token: 50513, word: [_TT_150]
> D/WhisperEngineJava: Inference is executed...!
>
> Drat. It's still 449.
>
> If that doesn't work in noisy environments, then I'll have to bump up
> to the next-sized model, which I think is the base model.
>
> adb push whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/
> adb shell "cp /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper.tflite"
> adb shell "cp /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-base.en.tflite /storage/emulated/0/Android/data/org.woheller69.whisper/files/whisper-tiny.en.tflite"
>
It missed the word "It's" in the picture.
[Picture] dsnote-ubu2504.gif
https://imgur.com/a/9VxuCCa
https://postimg.cc/CRrHVQXP
That's "dsnote" in Ubuntu using a Whisper model.
I read the text of the lines above, and the model
missed the "It's" on the recorded attempt. A
previous attempt was OK.
Microphone was a Blue Yeti. Which doesn't have AGC.
And the level wasn't all that high either, maybe
-24dBm or so. I recorded the microphone first in
Audacity, to see I had to hold the mike two inches
from my face to get a signal.
While the spec for the microphone claims a 20-20000Hz
response (which would be 3dB down at the ends),
it is clearly a "voice" microphone and it
cuts off the high frequencies. That's one of the reasons
the fans in the room didn't get picked up. So as far as
being a "live" mic, it's a bit of a "dull potato" as
mics go. But it does seem to give a decent result.
And when you "blast" the four lines above at the model,
then stop and wait for the conversion, it must have taken
at least 10-15 seconds to do the amount of text in the picture.
It "feels" slightly better, if you feed it a sentence at a time.
Feed it just a few words. It seems happier that way. Dragon
Naturally Speaking has nothing to worry about :-)
Paul
[toc] | [prev] | [next] | [standalone]
| From | Maria Sophia <mariasophia@comprehension.com> |
|---|---|
| Date | 2026-05-08 01:09 -0600 |
| Message-ID | <10tk27e$1apc$1@nnrp.usenet.blueworldhosting.com> |
| In reply to | #3405 |
Paul wrote: > That's "dsnote" in Ubuntu using a Whisper model. > I read the text of the lines above, and the model > missed the "It's" on the recorded attempt. A > previous attempt was OK. > > Microphone was a Blue Yeti. Which doesn't have AGC. > And the level wasn't all that high either, maybe > -24dBm or so. I recorded the microphone first in > Audacity, to see I had to hold the mike two inches > from my face to get a signal. > > While the spec for the microphone claims a 20-20000Hz > response (which would be 3dB down at the ends), > it is clearly a "voice" microphone and it > cuts off the high frequencies. That's one of the reasons > the fans in the room didn't get picked up. So as far as > being a "live" mic, it's a bit of a "dull potato" as > mics go. But it does seem to give a decent result. > > And when you "blast" the four lines above at the model, > then stop and wait for the conversion, it must have taken > at least 10-15 seconds to do the amount of text in the picture. > It "feels" slightly better, if you feed it a sentence at a time. > Feed it just a few words. It seems happier that way. Dragon > Naturally Speaking has nothing to worry about :-) Hi Paul, Thanks for testing it out. I think there's a reason that the WhisperIME defaults to the 435MB model instead of the "tiny" model of 40MB. I agree with EVERYTHING you said (I'd never disagree with anything that is logically sensibly stated). What I want to say is that when it's quiet, it works "just OK" for the tiny model. I'm gonna switch to the default 435MB model and see if that does better. But I agree with you. YMMV. When it's noisy (like in a vehicle), the tiny model really sucks. So I guess we're doomed to have to use the largest model most of the time. I'm told (by the Internet) that the Futo Keyboard works better as it's more modern and it uses the C++ whisper models (if that matters). If I were to do it over again, I'd try that first. But I do THANK YOU VERY MUCH for testing this out for the team. People like you are wonderful because we all benefit from your efforts! What's really neat is that Windows/Linux controls the phone wonderfully. I never have to touch the phone when I'm sitting at my desk. a. adb controls the phone b. scrcpy/sndcpy displays the phone c. the keyboard types into the phone d. the mouse taps on the phone It's really neat having the phone show up as nearly two feet tall!
[toc] | [prev] | [standalone]
Back to top | Article view | alt.comp.microsoft.windows
csiph-web