From af6fe922b1062db017de4ea5f90715b6f9c9a5f1 Mon Sep 17 00:00:00 2001 From: litongjava Date: Fri, 20 Oct 2023 12:38:29 -1000 Subject: [PATCH 01/10] add readme.md --- readmd.md | 3 +++ readmd_files/1.jpg | Bin 0 -> 31742 bytes 2 files changed, 3 insertions(+) create mode 100644 readmd.md create mode 100644 readmd_files/1.jpg diff --git a/readmd.md b/readmd.md new file mode 100644 index 0000000..597279c --- /dev/null +++ b/readmd.md @@ -0,0 +1,3 @@ +# whisper.cpp.android.java.demo +编译后的文件请到[release](https://github.com/litongjava/whisper.cpp.android.java.demo/releases/tag/v1.0.0)下载 +![运行效果](readmd_files/1.jpg) \ No newline at end of file diff --git a/readmd_files/1.jpg b/readmd_files/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38387914e589dc56ceb4cbca0fffe36285f79207 GIT binary patch literal 31742 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 Date: Fri, 20 Oct 2023 13:00:31 -1000 Subject: [PATCH 02/10] add sources to build.gradle --- app/build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index f5d7aea..5a78e16 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,6 +22,12 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + + sourceSets { + main { + jniLibs.srcDirs = ['src/main/jniLibs'] + } + } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 From 6ef85524a4a13fb75ecc09f2488e02fce3dc8856 Mon Sep 17 00:00:00 2001 From: litongjava Date: Fri, 20 Oct 2023 23:57:03 -1000 Subject: [PATCH 03/10] add examples for Java --- app/build.gradle | 1 + .../cpp/android/java/demo/MainActivity.java | 119 ++++++------------ .../java/{demo => }/media/WaveEncoder.java | 2 +- .../java/{demo => }/recoder/Recorder.java | 4 +- .../android/java/services/WhisperService.java | 106 ++++++++++++++++ .../java/{demo => }/utils/AssetUtils.java | 2 +- app/src/main/res/layout/activity_main.xml | 42 ++++++- 7 files changed, 190 insertions(+), 86 deletions(-) rename app/src/main/java/com/litongjava/whisper/cpp/android/java/{demo => }/media/WaveEncoder.java (97%) rename app/src/main/java/com/litongjava/whisper/cpp/android/java/{demo => }/recoder/Recorder.java (95%) create mode 100644 app/src/main/java/com/litongjava/whisper/cpp/android/java/services/WhisperService.java rename app/src/main/java/com/litongjava/whisper/cpp/android/java/{demo => }/utils/AssetUtils.java (97%) diff --git a/app/build.gradle b/app/build.gradle index 5a78e16..62f19b3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -47,5 +47,6 @@ dependencies { //litongjava implementation 'com.litongjava:android-view-inject:1.0' + implementation 'com.litongjava:jfinal-aop:1.0.1' implementation 'com.litongjava:litongjava-android-utils:1.0.0' } \ No newline at end of file diff --git a/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/MainActivity.java b/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/MainActivity.java index be2b673..d65faa0 100644 --- a/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/MainActivity.java +++ b/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/MainActivity.java @@ -1,9 +1,9 @@ package com.litongjava.whisper.cpp.android.java.demo; import android.content.Context; -import android.content.res.AssetManager; import android.os.Build; import android.os.Bundle; +import android.view.View; import android.widget.TextView; import androidx.annotation.RequiresApi; @@ -11,108 +11,69 @@ import com.litongjava.android.view.inject.annotation.FindViewById; import com.litongjava.android.view.inject.annotation.FindViewByIdLayout; +import com.litongjava.android.view.inject.annotation.OnClick; import com.litongjava.android.view.inject.utils.ViewInjectUtils; -import com.litongjava.whisper.cpp.android.java.demo.media.WaveEncoder; -import com.litongjava.whisper.cpp.android.java.demo.utils.AssetUtils; -import com.whispercppdemo.whisper.WhisperContext; -import com.whispercppdemo.whisper.WhisperCpuConfig; +import com.litongjava.jfinal.aop.Aop; +import com.litongjava.whisper.cpp.android.java.services.WhisperService; +import com.whispercppdemo.whisper.WhisperLib; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.concurrent.ExecutionException; @FindViewByIdLayout(R.layout.activity_main) public class MainActivity extends AppCompatActivity { - private Logger log = LoggerFactory.getLogger(this.getClass()); - private WhisperContext whisperContext; - @FindViewById(R.id.textHelloWorld) - private TextView textHelloWorld; + @FindViewById(R.id.sample_text) + private TextView tv; + + Logger log = LoggerFactory.getLogger(this.getClass()); + private WhisperService whisperService = Aop.get(WhisperService.class); @RequiresApi(api = Build.VERSION_CODES.O) @Override protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ///setContentView(R.layout.activity_main); + //setContentView(R.layout.activity_main); ViewInjectUtils.injectActivity(this, this); - int preferredThreadCount = WhisperCpuConfig.getPreferredThreadCount(); - log.info("preferredThreadCount:{}", preferredThreadCount); - - Context baseContext = getBaseContext(); - File filesDir = baseContext.getFilesDir(); - log.info("filesDir:{}", filesDir); - AssetManager assets = baseContext.getAssets(); - try { - String[] models = assets.list("models"); - log.info("models:{}", Arrays.toString(models)); - } catch (IOException e) { - e.printStackTrace(); - } - - try { - String[] samples = assets.list("samples"); - log.info("samples:{}", Arrays.toString(samples)); - } catch (IOException e) { - e.printStackTrace(); - } - String modelFilePath = "models/ggml-tiny.bin"; - File modelFile = AssetUtils.copyFileIfNotExists(baseContext, filesDir, modelFilePath); - modelFilePath = modelFile.getAbsolutePath(); - // 加载模型 - loadModel(modelFilePath); - - - String sampleFilePath = "samples/jfk.wav"; - File sampleFile = AssetUtils.copyFileIfNotExists(baseContext, filesDir, sampleFilePath); - // 识别样本 - transcribeSample(sampleFile); + showSystemInfo(); + } + + @RequiresApi(api = Build.VERSION_CODES.O) + @OnClick(R.id.loadModelBtn) + public void loadModelBtn_OnClick(View v) { + Context context = getBaseContext(); + whisperService.loadModel(context, tv); + } + + @OnClick(R.id.transcriptSampleBtn) + public void transcriptSampleBtn_OnClick(View v) { + Context context = getBaseContext(); + whisperService.transcribeSample(context, tv); + } + + + @RequiresApi(api = Build.VERSION_CODES.O) + @OnClick(R.id.systemInfoBtn) + public void systemInfoBtn_OnClick(View v) { + showSystemInfo(); } @RequiresApi(api = Build.VERSION_CODES.O) - private void loadModel(String modelPath) { - log.info("load model from :{}", modelPath); - whisperContext = WhisperContext.createContextFromFile(modelPath); + public void showSystemInfo() { + String systemInfo = WhisperLib.getSystemInfo(); + tv.append(systemInfo + "\n"); } - private void transcribeSample(File sampleFile) { - log.info("transcribe file from :{}", sampleFile.getAbsolutePath()); - float[] audioData = new float[0]; // 读取音频样本 - try { - audioData = WaveEncoder.decodeWaveFile(sampleFile); - } catch (IOException e) { - e.printStackTrace(); - } - - String transcription = null; // 转录音频数据 - try { - transcription = whisperContext.transcribeData(audioData); - } catch (ExecutionException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - log.info("Transcription: {}", transcription); // 打印转录结果 - textHelloWorld.setText(transcription); + @OnClick(R.id.clearBtn) + public void clearBtn_OnClick(View v) { + tv.setText(""); } @RequiresApi(api = Build.VERSION_CODES.O) @Override protected void onDestroy() { super.onDestroy(); - if (whisperContext != null) { - try { - whisperContext.release(); - } catch (ExecutionException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - whisperContext = null; - } + whisperService.release(); } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/media/WaveEncoder.java b/app/src/main/java/com/litongjava/whisper/cpp/android/java/media/WaveEncoder.java similarity index 97% rename from app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/media/WaveEncoder.java rename to app/src/main/java/com/litongjava/whisper/cpp/android/java/media/WaveEncoder.java index 6c934ad..c45318f 100644 --- a/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/media/WaveEncoder.java +++ b/app/src/main/java/com/litongjava/whisper/cpp/android/java/media/WaveEncoder.java @@ -1,4 +1,4 @@ -package com.litongjava.whisper.cpp.android.java.demo.media; +package com.litongjava.whisper.cpp.android.java.media; import java.io.ByteArrayOutputStream; import java.io.File; diff --git a/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/recoder/Recorder.java b/app/src/main/java/com/litongjava/whisper/cpp/android/java/recoder/Recorder.java similarity index 95% rename from app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/recoder/Recorder.java rename to app/src/main/java/com/litongjava/whisper/cpp/android/java/recoder/Recorder.java index 3b27c8c..4e6bd9e 100644 --- a/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/recoder/Recorder.java +++ b/app/src/main/java/com/litongjava/whisper/cpp/android/java/recoder/Recorder.java @@ -1,11 +1,11 @@ -package com.litongjava.whisper.cpp.android.java.demo.recoder; +package com.litongjava.whisper.cpp.android.java.recoder; import android.annotation.SuppressLint; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; -import com.litongjava.whisper.cpp.android.java.demo.media.WaveEncoder; +import com.litongjava.whisper.cpp.android.java.media.WaveEncoder; import java.io.File; import java.util.ArrayList; diff --git a/app/src/main/java/com/litongjava/whisper/cpp/android/java/services/WhisperService.java b/app/src/main/java/com/litongjava/whisper/cpp/android/java/services/WhisperService.java new file mode 100644 index 0000000..c9c256c --- /dev/null +++ b/app/src/main/java/com/litongjava/whisper/cpp/android/java/services/WhisperService.java @@ -0,0 +1,106 @@ +package com.litongjava.whisper.cpp.android.java.services; + +import android.content.Context; +import android.os.Build; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; + +import com.litongjava.whisper.cpp.android.java.media.WaveEncoder; +import com.litongjava.whisper.cpp.android.java.utils.AssetUtils; +import com.whispercppdemo.whisper.WhisperContext; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.util.concurrent.ExecutionException; + +public class WhisperService { + private Logger log = LoggerFactory.getLogger(this.getClass()); + private WhisperContext whisperContext; + + @RequiresApi(api = Build.VERSION_CODES.O) + public void loadModel(Context context, TextView tv) { + + File filesDir = context.getFilesDir(); + String modelFilePath = "models/ggml-tiny.bin"; + File modelFile = AssetUtils.copyFileIfNotExists(context, filesDir, modelFilePath); + modelFilePath = modelFile.getAbsolutePath(); + + String msg = "load model from :" + modelFilePath + "\n"; + log.info(msg); + tv.append(msg); + if (whisperContext == null) { + long start = System.currentTimeMillis(); + whisperContext = WhisperContext.createContextFromFile(modelFilePath); +// AopManager.me().addSingletonObject(whisperContext); + long end = System.currentTimeMillis(); + msg = "model load successful:" + (end - start) + "ms\n"; + log.info(msg); + tv.append(msg); + } else { + msg = "model loaded\n"; + log.info(msg); + tv.append(msg); + } + } + + public void transcribeSample(Context context, TextView tv) { + String sampleFilePath = "samples/jfk.wav"; + File filesDir = context.getFilesDir(); + File sampleFile = AssetUtils.copyFileIfNotExists(context, filesDir, sampleFilePath); + log.info("transcribe file from :{}", sampleFile.getAbsolutePath()); + float[] audioData = new float[0]; // 读取音频样本 + try { + audioData = WaveEncoder.decodeWaveFile(sampleFile); + } catch (IOException e) { + e.printStackTrace(); + } + + String transcription = null; // 转录音频数据 + + String msg = ""; + try { + if (whisperContext == null) { + msg = "please load model or wait model loaded"; + log.info(msg); + + } else { + long start = System.currentTimeMillis(); + transcription = whisperContext.transcribeData(audioData); + long end = System.currentTimeMillis(); + msg = "Transcript successful:" + (end - start) + "ms"; + log.info(msg); + tv.append(msg + "\n"); + + msg = "Transcription:" + transcription; + log.info(msg); + tv.append(msg + "\n"); + } + + + } catch (ExecutionException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + + } + + @RequiresApi(api = Build.VERSION_CODES.O) + public void release() { + if (whisperContext != null) { + try { + whisperContext.release(); + } catch (ExecutionException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + whisperContext = null; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/utils/AssetUtils.java b/app/src/main/java/com/litongjava/whisper/cpp/android/java/utils/AssetUtils.java similarity index 97% rename from app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/utils/AssetUtils.java rename to app/src/main/java/com/litongjava/whisper/cpp/android/java/utils/AssetUtils.java index e42f3fa..cacdd44 100644 --- a/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/utils/AssetUtils.java +++ b/app/src/main/java/com/litongjava/whisper/cpp/android/java/utils/AssetUtils.java @@ -1,4 +1,4 @@ -package com.litongjava.whisper.cpp.android.java.demo.utils; +package com.litongjava.whisper.cpp.android.java.utils; import android.content.Context; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c6d97ef..cd73a46 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,13 +1,49 @@ - + + +