tflite_audio 0.1.4 tflite_audio: ^0.1.4 copied to clipboard
Tflite plugin for flutter. Can make audio classifications on both android and iOS using your own custom tflite model.
flutter_tflite_audio #
This plugin allows you to use tflite to make audio/speech classifications. Can now support ios and android. The plugin can do the follow tasks:
- Accept custom models and labels.
- Run a stream and collect inference results over time
- Can run the model multiple times, depending on the user's specifications
- Can manually close the inference and/or recording at the user's discretion.
If there are any problems with the plugin, please do not hesistate to create an issue or request features on github.
Limitations of this plugin #
- This plugin relies on the use of taking in raw audio values as a tensor input. It's assumed that your model already uses mfcc. For more information
- Can only accept two tensor inputs. float32[16000,1] for raw audio data and int32[1] as the sample rate
- Can only accept monochannel. Not stereo.
How to add tflite_audio as a dependency: #
- Add
tflite_audio
as a [dependency in your pubspec.yaml file]
How to add tflite model and label to flutter: #
- Place your custom tflite model and labels into the asset folder.
- In pubsec.yaml, link your tflite model and label under 'assets'. For example:
assets:
- assets/conv_actions_frozen.tflite
- assets/conv_actions_labels.txt
How to use this plugin #
Please look at the example on how to implement these futures.
- Import the plugin. For example:
import 'package:tflite_audio/tflite_audio.dart';
- To load your model:
//1. call the the future loadModel()
//2. assign the appropriate values to the arguments like below:
TfliteAudio.loadModel(
model: 'assets/conv_actions_frozen.tflite',
label: 'assets/conv_actions_labels.txt',
numThreads: 1,
isAsset: true);
- To get the results:
//1. call the stream startAudioRecognition
//2. assign the appropriate values to the arguments
//3. listen to the stream for data
//4. onDone if you wish to do something after the stream closes
TfliteAudio.startAudioRecognition(
sampleRate: 16000,
recordingLength: 16000,
bufferSize: 2200,
// 1280,
numOfInferences: 2)
.listen(
//Do something here to collect data
)
.onDone(
//Do something here when stream closes
);
- To forcibly cancel the stream and recognition while executing
TfliteAudio.stopAudioRecognition();
- For a rough guide on the parameters
-
numThreads - Higher threads will reduce inferenceTime. However, cpu usage will be higher.
-
numOfInferences - determines the number of inferences per recording. Will also lengthen recording time as well.
-
sampleRate - determines the number of samples per second
-
recordingLength - determines the max length of the recording buffer. If the value is not below or equal to your tensor input, it will crash.
-
bufferSize - Make sure this value is equal or below your recording length. A very high value may not allow the recording enough time to capture your voice. A lower value will give more time, but it'll be more cpu intensive Remember that this value varies depending on your device.
Android Installation & Permissions #
Add the permissions below to your AndroidManifest. This could be found in
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Edit the following below to your build.gradle. This could be found in
aaptOptions {
noCompress 'tflite'
iOS Installation & Permissions #
- Add the following key to Info.plist for iOS. This ould be found in
<key>NSMicrophoneUsageDescription</key>
<string>Record audio for playback</string>
-
Change the deployment target to at least 12.0. This could be done by:
a. Open your project workspace on xcode
b. Select root runner on the left panel
c. Under the info tab, change the iOS deployment target to 12.0
-
Open your podfile in your iOS folder and change platform ios to 12. Also make sure that use_frameworks! is under runner. For example
platform :ios, '12.0'
target 'Runner' do
use_frameworks! #Make sure you have this line
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
References #
https://github.com/tensorflow/examples/tree/master/lite/examples/speech_commands