Inimesed is a simple app that lets you search and pick a contact from your address book. Inimesed is not a general purpose contact manager that could replace the device's existing contact manager, e.g. one cannot edit the contacts list using Inimesed. The focus of Inimesed is solely on search, making the contact picking action as fast and hands-free as possible. To that end the app employs search-by-voice.

Usage

Inimesed can be launched by tapping its launcher icon. Once launched the list of names in your address book is shown together with information on when and how much they have been contacted, etc. This list is sortable by various parameters.

You can select a name in two ways, either by scrolling to it and then tapping on it, or (often faster) by holding your finger on the microphone button and uttering a voice command. Once the name is selected an action is performed. The actions are

CALL
dial the default number and hit the call button
DIAL
just dial the default number
VIEW
launch the contact viewer (which lets you then choose a number to call, send an SMS, etc.)

If the name was selected by tapping, then the action depends on the corresponding setting which can be set via the Settings-menu. In case of a voice command the action depends on the command (see below).

Inimesed can be also launched from another app, if it calls a contact picker and Inimesed is proposed as one of the apps that can perform contact picking. In this case, in however way the contact is selected, its information is returned to the calling app which processes it further.

Voice commands

Searching the contact list by voice is simple: hold down the big yellow button and speak the name of the person whom you want to contact.

The grammar of the commands is formally governed by the following BNF rules.

command := NAME
command := (helista | vali) palun NAME

where NAME is the name of the contact as it appears in the contacts list (so called display name). If the "Flexible search" option is switched on then any longer name component (e.g. the first name) can be used as NAME.

The current version of Inimesed only searches names that are written using the letters of the Estonian alphabet, e.g. if the name of the contact is written in a Greek or Thai script it will not be found.

Some examples of legal utterances.

helista palun Jaan Jaanson
vali palun Jaan Jaanson
Jaan Jaanson

Settings

Note that some settings require the app to be restarted, i.e. exiting the app by pressing BACK as long as the home screen is reached and then relaunching the app.

Confirm name by speech
Synthesized (text-to-speech) voice will repeat the voice command. The system default text-to-speech engine is used, which might require internet connection to synthesize certain languages.
Confirmation language
Language used in confirmation, selectable from a list of languages that are (1) available in the currently selected text-to-speech engine, and (2) similar to Estonian in terms to letter-to-sound mapping.
People with phone
Display and search only those contacts that have a phone number.
Flexible search
If "off" then the complete display name must be used in the voice command. Setting it "on" will allow searching also by first and last names, and other longer name components (short initials, titles, etc. must be dropped). Note that searching by the first name often makes the query ambiguous. Also app loading might take longer (as the grammar gets larger).
Action when contact tapped
Lets you specify the action that is performed when the contact is selected by tapping on the corresponding contact list item.
Confidence level
Confidence level that is required to perform the action. In noisy environments the recognizer often makes mistakes but also has lower confidence (e.g. <-3). Setting the confidence level lower makes sure that commands are not carried out if the recognizer is unsure whether it understood them correctly.

Permissions

The app requires the following permissions to run.

WRITE_EXTERNAL_STORAGE
The app stores the acoustic models and grammars on the device's external storage, into the directory Android/data/ee.ioc.phon.android.inimesed. This directory does not store any permanent data, it just has to exist while the app is running. You can thus delete it anytime, it will be recreated the next time the app runs.
RECORD_AUDIO
The app needs access to the microphone to record the audio to be transcribed. The audio recording is on only while the finger touches the microphone button.
READ_CONTACTS
In order to display the list of contacts and to generate a speech recognition grammar based on the names of the contacts the app needs to access the address book.
CALL_PHONE
The app can directly call a phone number. It only does this when you issue the respective command.

Because the app cannot use the internet, your private address book can never leave the device. Note however that the grammar file which contains the names of your contacts (just the names, not phone numbers nor any other info) is stored on external storage while the app is running, so it is technically accessible to all other apps on the phone.

Tips

The current version of Inimesed uses Estonian acoustic models and an Estonian pronunciation dictionary. So try to pronounce the names in your best Estonian accent. For example, if you want to find a James, pronounce his name as /J A M E S/ not /JH EY M Z/. Note also that the spoken feedback is not an indication of correct pronunciation, as the feedback language most likely differs from Estonian (i.e. Estonian speech synthesis is not yet available on Android).

Resources

The built-in speech recognizer is based on Pocketsphinx by the CMU Sphinx project. Because the recognizer is built-in, the app can be used without an internet connection and its performance depends only on the performance of the device. On slower devices (single core with less than 1GHz), the app might be too slow to be usable.

The Estonian acoustic models have been created by the Laboratory of Phonetics and Speech Technology, Institute of Cybernetics at Tallinn University of Technology and are available at github.com/alumae/et-pocketsphinx-tutorial. Note that the models that are pre-installed with the app have been optimized for short loading and recognition time rather than high quality recognition. On Samsung Galaxy S2 with 200 entries in the address book the app starts up in a couple of seconds and the transcription is delivered almost instantly.

Author: Kaarel Kaljurand
Website: kaljurand.github.io/Inimesed