Use aar in Android Java demo. (#1616)
This commit is contained in:
@@ -8,7 +8,7 @@ android {
|
||||
defaultConfig {
|
||||
applicationId "com.k2fsa.sherpa.onnx"
|
||||
minSdk 28
|
||||
targetSdk 32
|
||||
targetSdk 34
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
||||
@@ -25,17 +25,14 @@ android {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
sourceSets.main{
|
||||
jniLibs.srcDirs = ['jniLibs']
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.3.1'
|
||||
implementation 'com.google.android.material:material:1.3.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
implementation 'pub.devrel:easypermissions:3.0.0'
|
||||
implementation project(path: ':sherpa')
|
||||
|
||||
}
|
||||
implementation 'androidx.core:core-ktx:1.7.0'
|
||||
// implementation files('/Users/fangjun/open-source/sherpa-onnx/android/SherpaOnnxAar/sherpa_onnx/build/outputs/aar/sherpa_onnx-release.aar')
|
||||
implementation 'com.github.k2-fsa:sherpa-onnx:master-SNAPSHOT'
|
||||
}
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
// Copyright 2022-2023 by zhaoming
|
||||
// Copyright 2024 Xiaomi Corporation
|
||||
|
||||
package com.k2fsa.sherpa.onnx;
|
||||
|
||||
import android.content.res.AssetManager;
|
||||
|
||||
public class OnlineRecognizer {
|
||||
static {
|
||||
System.loadLibrary("sherpa-onnx-jni");
|
||||
}
|
||||
|
||||
private long ptr = 0;
|
||||
|
||||
public OnlineRecognizer(OnlineRecognizerConfig config) {
|
||||
ptr = newFromFile(config);
|
||||
}
|
||||
|
||||
public OnlineRecognizer(AssetManager assetManager, OnlineRecognizerConfig config) {
|
||||
ptr = newFromAsset(assetManager, config);
|
||||
}
|
||||
|
||||
public void decode(OnlineStream s) {
|
||||
decode(ptr, s.getPtr());
|
||||
}
|
||||
|
||||
public boolean isReady(OnlineStream s) {
|
||||
return isReady(ptr, s.getPtr());
|
||||
}
|
||||
|
||||
public boolean isEndpoint(OnlineStream s) {
|
||||
return isEndpoint(ptr, s.getPtr());
|
||||
}
|
||||
|
||||
public void reset(OnlineStream s) {
|
||||
reset(ptr, s.getPtr());
|
||||
}
|
||||
|
||||
public OnlineStream createStream() {
|
||||
long p = createStream(ptr, "");
|
||||
return new OnlineStream(p);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() throws Throwable {
|
||||
release();
|
||||
}
|
||||
|
||||
// You'd better call it manually if it is not used anymore
|
||||
public void release() {
|
||||
if (this.ptr == 0) {
|
||||
return;
|
||||
}
|
||||
delete(this.ptr);
|
||||
this.ptr = 0;
|
||||
}
|
||||
|
||||
public OnlineRecognizerResult getResult(OnlineStream s) {
|
||||
Object[] arr = getResult(ptr, s.getPtr());
|
||||
String text = (String) arr[0];
|
||||
String[] tokens = (String[]) arr[1];
|
||||
float[] timestamps = (float[]) arr[2];
|
||||
return new OnlineRecognizerResult(text, tokens, timestamps);
|
||||
}
|
||||
|
||||
|
||||
private native void delete(long ptr);
|
||||
|
||||
private native long newFromFile(OnlineRecognizerConfig config);
|
||||
|
||||
private native long newFromAsset(AssetManager assetManager, OnlineRecognizerConfig config);
|
||||
|
||||
private native long createStream(long ptr, String hotwords);
|
||||
|
||||
private native void reset(long ptr, long streamPtr);
|
||||
|
||||
private native void decode(long ptr, long streamPtr);
|
||||
|
||||
private native boolean isEndpoint(long ptr, long streamPtr);
|
||||
|
||||
private native boolean isReady(long ptr, long streamPtr);
|
||||
|
||||
private native Object[] getResult(long ptr, long streamPtr);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.k2fsa.sherpa.onnx.service;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
@@ -67,6 +68,16 @@ public class SpeechSherpaRecognitionService extends Service {
|
||||
appViewModel = Application.getInstance().getViewModel();
|
||||
int numBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
|
||||
|
||||
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
|
||||
// TODO: Consider calling
|
||||
// ActivityCompat#requestPermissions
|
||||
// here to request the missing permissions, and then overriding
|
||||
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
|
||||
// int[] grantResults)
|
||||
// to handle the case where the user grants the permission. See the documentation
|
||||
// for ActivityCompat#requestPermissions for more details.
|
||||
return;
|
||||
}
|
||||
audioRecord = new AudioRecord(
|
||||
audioSource,
|
||||
sampleRateInHz,
|
||||
@@ -81,22 +92,21 @@ public class SpeechSherpaRecognitionService extends Service {
|
||||
|
||||
private void initializeSherpa() {
|
||||
Log.d("Current Directory", System.getProperty("user.dir"));
|
||||
String modelDir = "sherpa-onnx-streaming-zipformer-zh-14M-2023-02-23";
|
||||
String modelDir = "sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20";
|
||||
initializeSherpaDir(modelDir, modelDir);
|
||||
OnlineTransducerModelConfig onlineTransducerModelConfig = OnlineTransducerModelConfig.builder()
|
||||
.setEncoder(modelDir + "/encoder-epoch-99-avg-1.int8.onnx")
|
||||
.setDecoder(modelDir + "/decoder-epoch-99-avg-1.onnx")
|
||||
.setJoiner(modelDir + "/joiner-epoch-99-avg-1.int8.onnx")
|
||||
.build();
|
||||
OnlineTransducerModelConfig onlineTransducerModelConfig = new OnlineTransducerModelConfig();
|
||||
onlineTransducerModelConfig.setEncoder(modelDir + "/encoder-epoch-99-avg-1.int8.onnx");
|
||||
onlineTransducerModelConfig.setDecoder(modelDir + "/decoder-epoch-99-avg-1.onnx");
|
||||
onlineTransducerModelConfig.setJoiner(modelDir + "/joiner-epoch-99-avg-1.int8.onnx");
|
||||
|
||||
OnlineModelConfig onlineModelConfig = OnlineModelConfig.builder()
|
||||
.setTransducer(onlineTransducerModelConfig)
|
||||
.setTokens(modelDir + "/tokens.txt")
|
||||
.setModelType("zipformer")
|
||||
.build();
|
||||
OnlineRecognizerConfig config = OnlineRecognizerConfig.builder()
|
||||
.setOnlineModelConfig(onlineModelConfig)
|
||||
.build();
|
||||
OnlineModelConfig onlineModelConfig = new OnlineModelConfig();
|
||||
onlineModelConfig.setTransducer(onlineTransducerModelConfig);
|
||||
onlineModelConfig.setTokens(modelDir + "/tokens.txt");
|
||||
onlineModelConfig.setModelType("zipformer");
|
||||
onlineModelConfig.setDebug(true);
|
||||
|
||||
OnlineRecognizerConfig config = new OnlineRecognizerConfig();
|
||||
config.setModelConfig(onlineModelConfig);
|
||||
recognizer = new OnlineRecognizer(getAssets(), config);
|
||||
|
||||
audioRecord.startRecording();
|
||||
@@ -110,7 +120,7 @@ public class SpeechSherpaRecognitionService extends Service {
|
||||
}
|
||||
|
||||
private void processSamples() {
|
||||
OnlineStream stream = recognizer.createStream();
|
||||
OnlineStream stream = recognizer.createStream("");
|
||||
double interval = 0.1;
|
||||
int bufferSize = (int) (interval * sampleRateInHz);
|
||||
short[] buffer = new short[bufferSize];
|
||||
@@ -182,6 +192,7 @@ public class SpeechSherpaRecognitionService extends Service {
|
||||
}
|
||||
|
||||
|
||||
@SuppressLint("ForegroundServiceType")
|
||||
private void startForegroundService() {
|
||||
String channelId = createNotificationChannel();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user