Skip to content

Commit be87f86

Browse files
authored
Use aar in Android Java demo. (#1616)
1 parent 4dc4f1a commit be87f86

22 files changed

+101
-211
lines changed

android/SherpaOnnxJavaDemo/README.md

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Introduction
2+
3+
Please run the following commands to download model files before you run this Android demo:
4+
5+
```bash
6+
# Assume we are inside
7+
# /Users/fangjun/open-source/sherpa-onnx/android/SherpaOnnxJavaDemo
8+
9+
cd app/src/main/assets/
10+
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
11+
12+
tar xvf sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
13+
rm sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
14+
15+
mv sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/encoder-epoch-99-avg-1.int8.onnx ./
16+
mv sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/decoder-epoch-99-avg-1.onnx ./
17+
mv sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/joiner-epoch-99-avg-1.int8.onnx ./
18+
mv sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/tokens.txt ./
19+
20+
rm -rf sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/*
21+
22+
mv encoder-epoch-99-avg-1.int8.onnx ./
23+
mv decoder-epoch-99-avg-1.onnx ./
24+
mv joiner-epoch-99-avg-1.int8.onnx ./
25+
mv tokens.txt ./
26+
```
27+
28+
You should have the following directory structure:
29+
```
30+
(py38) fangjuns-MacBook-Pro:assets fangjun$ pwd
31+
/Users/fangjun/open-source/sherpa-onnx/android/SherpaOnnxJavaDemo/app/src/main/assets
32+
33+
(py38) fangjuns-MacBook-Pro:assets fangjun$ tree .
34+
.
35+
└── sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20
36+
├── decoder-epoch-99-avg-1.onnx
37+
├── encoder-epoch-99-avg-1.int8.onnx
38+
├── joiner-epoch-99-avg-1.int8.onnx
39+
└── tokens.txt
40+
41+
1 directory, 4 files
42+
```
43+
44+
Remember to remove unused files to reduce the file size of the final APK.

android/SherpaOnnxJavaDemo/app/build.gradle

+5-8
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ android {
88
defaultConfig {
99
applicationId "com.k2fsa.sherpa.onnx"
1010
minSdk 28
11-
targetSdk 32
11+
targetSdk 34
1212
versionCode 1
1313
versionName "1.0"
1414

@@ -25,17 +25,14 @@ android {
2525
sourceCompatibility JavaVersion.VERSION_1_8
2626
targetCompatibility JavaVersion.VERSION_1_8
2727
}
28-
sourceSets.main{
29-
jniLibs.srcDirs = ['jniLibs']
30-
}
3128
}
3229

3330
dependencies {
34-
3531
implementation 'androidx.appcompat:appcompat:1.3.1'
3632
implementation 'com.google.android.material:material:1.3.0'
3733
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
3834
implementation 'pub.devrel:easypermissions:3.0.0'
39-
implementation project(path: ':sherpa')
40-
41-
}
35+
implementation 'androidx.core:core-ktx:1.7.0'
36+
// implementation files('/Users/fangjun/open-source/sherpa-onnx/android/SherpaOnnxAar/sherpa_onnx/build/outputs/aar/sherpa_onnx-release.aar')
37+
implementation 'com.github.k2-fsa:sherpa-onnx:master-SNAPSHOT'
38+
}

android/SherpaOnnxJavaDemo/app/src/main/assets/.gitkeep

Whitespace-only changes.

android/SherpaOnnxJavaDemo/app/src/main/java/com/k2fsa/sherpa/onnx/OnlineRecognizer.java

-84
This file was deleted.

android/SherpaOnnxJavaDemo/app/src/main/java/com/k2fsa/sherpa/onnx/service/SpeechSherpaRecognitionService.java

+27-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.k2fsa.sherpa.onnx.service;
22

33
import android.Manifest;
4+
import android.annotation.SuppressLint;
45
import android.app.Notification;
56
import android.app.NotificationChannel;
67
import android.app.NotificationManager;
@@ -67,6 +68,16 @@ public void onCreate() {
6768
appViewModel = Application.getInstance().getViewModel();
6869
int numBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
6970

71+
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
72+
// TODO: Consider calling
73+
// ActivityCompat#requestPermissions
74+
// here to request the missing permissions, and then overriding
75+
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
76+
// int[] grantResults)
77+
// to handle the case where the user grants the permission. See the documentation
78+
// for ActivityCompat#requestPermissions for more details.
79+
return;
80+
}
7081
audioRecord = new AudioRecord(
7182
audioSource,
7283
sampleRateInHz,
@@ -81,22 +92,21 @@ public void onCreate() {
8192

8293
private void initializeSherpa() {
8394
Log.d("Current Directory", System.getProperty("user.dir"));
84-
String modelDir = "sherpa-onnx-streaming-zipformer-zh-14M-2023-02-23";
95+
String modelDir = "sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20";
8596
initializeSherpaDir(modelDir, modelDir);
86-
OnlineTransducerModelConfig onlineTransducerModelConfig = OnlineTransducerModelConfig.builder()
87-
.setEncoder(modelDir + "/encoder-epoch-99-avg-1.int8.onnx")
88-
.setDecoder(modelDir + "/decoder-epoch-99-avg-1.onnx")
89-
.setJoiner(modelDir + "/joiner-epoch-99-avg-1.int8.onnx")
90-
.build();
91-
92-
OnlineModelConfig onlineModelConfig = OnlineModelConfig.builder()
93-
.setTransducer(onlineTransducerModelConfig)
94-
.setTokens(modelDir + "/tokens.txt")
95-
.setModelType("zipformer")
96-
.build();
97-
OnlineRecognizerConfig config = OnlineRecognizerConfig.builder()
98-
.setOnlineModelConfig(onlineModelConfig)
99-
.build();
97+
OnlineTransducerModelConfig onlineTransducerModelConfig = new OnlineTransducerModelConfig();
98+
onlineTransducerModelConfig.setEncoder(modelDir + "/encoder-epoch-99-avg-1.int8.onnx");
99+
onlineTransducerModelConfig.setDecoder(modelDir + "/decoder-epoch-99-avg-1.onnx");
100+
onlineTransducerModelConfig.setJoiner(modelDir + "/joiner-epoch-99-avg-1.int8.onnx");
101+
102+
OnlineModelConfig onlineModelConfig = new OnlineModelConfig();
103+
onlineModelConfig.setTransducer(onlineTransducerModelConfig);
104+
onlineModelConfig.setTokens(modelDir + "/tokens.txt");
105+
onlineModelConfig.setModelType("zipformer");
106+
onlineModelConfig.setDebug(true);
107+
108+
OnlineRecognizerConfig config = new OnlineRecognizerConfig();
109+
config.setModelConfig(onlineModelConfig);
100110
recognizer = new OnlineRecognizer(getAssets(), config);
101111

102112
audioRecord.startRecording();
@@ -110,7 +120,7 @@ private void startRecognition() {
110120
}
111121

112122
private void processSamples() {
113-
OnlineStream stream = recognizer.createStream();
123+
OnlineStream stream = recognizer.createStream("");
114124
double interval = 0.1;
115125
int bufferSize = (int) (interval * sampleRateInHz);
116126
short[] buffer = new short[bufferSize];
@@ -182,6 +192,7 @@ public IBinder onBind(Intent intent) {
182192
}
183193

184194

195+
@SuppressLint("ForegroundServiceType")
185196
private void startForegroundService() {
186197
String channelId = createNotificationChannel();
187198

android/SherpaOnnxJavaDemo/settings.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ dependencyResolutionManagement {
1010
repositories {
1111
google()
1212
mavenCentral()
13+
maven { url 'https://jitpack.io' }
1314
}
1415
}
1516
rootProject.name = "SherpaOnnxJavaDemo"
1617
include ':app'
17-
include ':sherpa'

android/SherpaOnnxJavaDemo/sherpa/.gitignore

-1
This file was deleted.

android/SherpaOnnxJavaDemo/sherpa/build.gradle

-43
This file was deleted.

android/SherpaOnnxJavaDemo/sherpa/proguard-rules.pro

-21
This file was deleted.

android/SherpaOnnxJavaDemo/sherpa/src/main/AndroidManifest.xml

-9
This file was deleted.

android/SherpaOnnxJavaDemo/sherpa/src/main/java/com

-1
This file was deleted.

android/SherpaOnnxJavaDemo/sherpa/src/main/res/values/strings.xml

-3
This file was deleted.

sherpa-onnx/kotlin-api/AudioTagging.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ data class AudioTaggingModelConfig(
1515
)
1616

1717
data class AudioTaggingConfig(
18-
var model: AudioTaggingModelConfig,
19-
var labels: String,
18+
var model: AudioTaggingModelConfig = AudioTaggingModelConfig(),
19+
var labels: String = "",
2020
var topK: Int = 5,
2121
)
2222

sherpa-onnx/kotlin-api/KeywordSpotter.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import android.content.res.AssetManager
55

66
data class KeywordSpotterConfig(
77
var featConfig: FeatureConfig = FeatureConfig(),
8-
var modelConfig: OnlineModelConfig,
8+
var modelConfig: OnlineModelConfig = OnlineModelConfig(),
99
var maxActivePaths: Int = 4,
1010
var keywordsFile: String = "keywords.txt",
1111
var keywordsScore: Float = 1.5f,

sherpa-onnx/kotlin-api/OfflinePunctuation.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package com.k2fsa.sherpa.onnx
33
import android.content.res.AssetManager
44

55
data class OfflinePunctuationModelConfig(
6-
var ctTransformer: String,
6+
var ctTransformer: String = "",
77
var numThreads: Int = 1,
88
var debug: Boolean = false,
99
var provider: String = "cpu",

sherpa-onnx/kotlin-api/OfflineRecognizer.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ data class OfflineModelConfig(
5858
var debug: Boolean = false,
5959
var provider: String = "cpu",
6060
var modelType: String = "",
61-
var tokens: String,
61+
var tokens: String = "",
6262
var modelingUnit: String = "",
6363
var bpeVocab: String = "",
6464
)
6565

6666
data class OfflineRecognizerConfig(
6767
var featConfig: FeatureConfig = FeatureConfig(),
68-
var modelConfig: OfflineModelConfig,
68+
var modelConfig: OfflineModelConfig = OfflineModelConfig(),
6969
// var lmConfig: OfflineLMConfig(), // TODO(fangjun): enable it
7070
var decodingMethod: String = "greedy_search",
7171
var maxActivePaths: Int = 4,

0 commit comments

Comments
 (0)