Add speaker diarization API for HarmonyOS. (#1609)
This commit is contained in:
@@ -6,6 +6,15 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
#include "android/asset_manager.h"
|
||||
#include "android/asset_manager_jni.h"
|
||||
#endif
|
||||
|
||||
#if __OHOS__
|
||||
#include "rawfile/raw_file_manager.h"
|
||||
#endif
|
||||
|
||||
#include "sherpa-onnx/csrc/macros.h"
|
||||
#include "sherpa-onnx/csrc/offline-speaker-diarization-pyannote-impl.h"
|
||||
|
||||
@@ -23,10 +32,10 @@ OfflineSpeakerDiarizationImpl::Create(
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
template <typename Manager>
|
||||
std::unique_ptr<OfflineSpeakerDiarizationImpl>
|
||||
OfflineSpeakerDiarizationImpl::Create(
|
||||
AAssetManager *mgr, const OfflineSpeakerDiarizationConfig &config) {
|
||||
Manager *mgr, const OfflineSpeakerDiarizationConfig &config) {
|
||||
if (!config.segmentation.pyannote.model.empty()) {
|
||||
return std::make_unique<OfflineSpeakerDiarizationPyannoteImpl>(mgr, config);
|
||||
}
|
||||
@@ -35,6 +44,17 @@ OfflineSpeakerDiarizationImpl::Create(
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
template std::unique_ptr<OfflineSpeakerDiarizationImpl>
|
||||
OfflineSpeakerDiarizationImpl::Create(
|
||||
AAssetManager *mgr, const OfflineSpeakerDiarizationConfig &config);
|
||||
#endif
|
||||
|
||||
#if __OHOS__
|
||||
template std::unique_ptr<OfflineSpeakerDiarizationImpl>
|
||||
OfflineSpeakerDiarizationImpl::Create(
|
||||
NativeResourceManager *mgr, const OfflineSpeakerDiarizationConfig &config);
|
||||
#endif
|
||||
|
||||
} // namespace sherpa_onnx
|
||||
|
||||
@@ -8,11 +8,6 @@
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
#include "android/asset_manager.h"
|
||||
#include "android/asset_manager_jni.h"
|
||||
#endif
|
||||
|
||||
#include "sherpa-onnx/csrc/offline-speaker-diarization.h"
|
||||
namespace sherpa_onnx {
|
||||
|
||||
@@ -21,10 +16,9 @@ class OfflineSpeakerDiarizationImpl {
|
||||
static std::unique_ptr<OfflineSpeakerDiarizationImpl> Create(
|
||||
const OfflineSpeakerDiarizationConfig &config);
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
template <typename Manager>
|
||||
static std::unique_ptr<OfflineSpeakerDiarizationImpl> Create(
|
||||
AAssetManager *mgr, const OfflineSpeakerDiarizationConfig &config);
|
||||
#endif
|
||||
Manager *mgr, const OfflineSpeakerDiarizationConfig &config);
|
||||
|
||||
virtual ~OfflineSpeakerDiarizationImpl() = default;
|
||||
|
||||
|
||||
@@ -11,11 +11,6 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
#include "android/asset_manager.h"
|
||||
#include "android/asset_manager_jni.h"
|
||||
#endif
|
||||
|
||||
#include "Eigen/Dense"
|
||||
#include "sherpa-onnx/csrc/fast-clustering.h"
|
||||
#include "sherpa-onnx/csrc/math.h"
|
||||
@@ -71,16 +66,15 @@ class OfflineSpeakerDiarizationPyannoteImpl
|
||||
Init();
|
||||
}
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
template <typename Manager>
|
||||
OfflineSpeakerDiarizationPyannoteImpl(
|
||||
AAssetManager *mgr, const OfflineSpeakerDiarizationConfig &config)
|
||||
Manager *mgr, const OfflineSpeakerDiarizationConfig &config)
|
||||
: config_(config),
|
||||
segmentation_model_(mgr, config_.segmentation),
|
||||
embedding_extractor_(mgr, config_.embedding),
|
||||
clustering_(std::make_unique<FastClustering>(config_.clustering)) {
|
||||
Init();
|
||||
}
|
||||
#endif
|
||||
|
||||
int32_t SampleRate() const override {
|
||||
const auto &meta_data = segmentation_model_.GetModelMetaData();
|
||||
@@ -213,8 +207,13 @@ class OfflineSpeakerDiarizationPyannoteImpl
|
||||
}
|
||||
}
|
||||
} else {
|
||||
#if __OHOS__
|
||||
SHERPA_ONNX_LOGE(
|
||||
"powerset_max_classes = %{public}d is currently not supported!", i);
|
||||
#else
|
||||
SHERPA_ONNX_LOGE(
|
||||
"powerset_max_classes = %d is currently not supported!", i);
|
||||
#endif
|
||||
SHERPA_ONNX_EXIT(-1);
|
||||
}
|
||||
}
|
||||
@@ -229,10 +228,17 @@ class OfflineSpeakerDiarizationPyannoteImpl
|
||||
int32_t window_shift = meta_data.window_shift;
|
||||
|
||||
if (n <= 0) {
|
||||
#if __OHOS__
|
||||
SHERPA_ONNX_LOGE(
|
||||
"number of audio samples is %{public}d (<= 0). Please provide a "
|
||||
"positive number",
|
||||
n);
|
||||
#else
|
||||
SHERPA_ONNX_LOGE(
|
||||
"number of audio samples is %d (<= 0). Please provide a positive "
|
||||
"number",
|
||||
n);
|
||||
#endif
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,15 @@
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
#include "android/asset_manager.h"
|
||||
#include "android/asset_manager_jni.h"
|
||||
#endif
|
||||
|
||||
#if __OHOS__
|
||||
#include "rawfile/raw_file_manager.h"
|
||||
#endif
|
||||
|
||||
#include "sherpa-onnx/csrc/offline-speaker-diarization-impl.h"
|
||||
|
||||
namespace sherpa_onnx {
|
||||
@@ -74,11 +83,10 @@ OfflineSpeakerDiarization::OfflineSpeakerDiarization(
|
||||
const OfflineSpeakerDiarizationConfig &config)
|
||||
: impl_(OfflineSpeakerDiarizationImpl::Create(config)) {}
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
template <typename Manager>
|
||||
OfflineSpeakerDiarization::OfflineSpeakerDiarization(
|
||||
AAssetManager *mgr, const OfflineSpeakerDiarizationConfig &config)
|
||||
Manager *mgr, const OfflineSpeakerDiarizationConfig &config)
|
||||
: impl_(OfflineSpeakerDiarizationImpl::Create(mgr, config)) {}
|
||||
#endif
|
||||
|
||||
OfflineSpeakerDiarization::~OfflineSpeakerDiarization() = default;
|
||||
|
||||
@@ -98,4 +106,14 @@ OfflineSpeakerDiarizationResult OfflineSpeakerDiarization::Process(
|
||||
return impl_->Process(audio, n, std::move(callback), callback_arg);
|
||||
}
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
template OfflineSpeakerDiarization::OfflineSpeakerDiarization(
|
||||
AAssetManager *mgr, const OfflineSpeakerDiarizationConfig &config);
|
||||
#endif
|
||||
|
||||
#if __OHOS__
|
||||
template OfflineSpeakerDiarization::OfflineSpeakerDiarization(
|
||||
NativeResourceManager *mgr, const OfflineSpeakerDiarizationConfig &config);
|
||||
#endif
|
||||
|
||||
} // namespace sherpa_onnx
|
||||
|
||||
@@ -9,11 +9,6 @@
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
#include "android/asset_manager.h"
|
||||
#include "android/asset_manager_jni.h"
|
||||
#endif
|
||||
|
||||
#include "sherpa-onnx/csrc/fast-clustering-config.h"
|
||||
#include "sherpa-onnx/csrc/offline-speaker-diarization-result.h"
|
||||
#include "sherpa-onnx/csrc/offline-speaker-segmentation-model-config.h"
|
||||
@@ -62,10 +57,9 @@ class OfflineSpeakerDiarization {
|
||||
explicit OfflineSpeakerDiarization(
|
||||
const OfflineSpeakerDiarizationConfig &config);
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
OfflineSpeakerDiarization(AAssetManager *mgr,
|
||||
template <typename Manager>
|
||||
OfflineSpeakerDiarization(Manager *mgr,
|
||||
const OfflineSpeakerDiarizationConfig &config);
|
||||
#endif
|
||||
|
||||
~OfflineSpeakerDiarization();
|
||||
|
||||
|
||||
@@ -8,6 +8,15 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
#include "android/asset_manager.h"
|
||||
#include "android/asset_manager_jni.h"
|
||||
#endif
|
||||
|
||||
#if __OHOS__
|
||||
#include "rawfile/raw_file_manager.h"
|
||||
#endif
|
||||
|
||||
#include "sherpa-onnx/csrc/onnx-utils.h"
|
||||
#include "sherpa-onnx/csrc/session.h"
|
||||
|
||||
@@ -24,8 +33,8 @@ class OfflineSpeakerSegmentationPyannoteModel::Impl {
|
||||
Init(buf.data(), buf.size());
|
||||
}
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
Impl(AAssetManager *mgr, const OfflineSpeakerSegmentationModelConfig &config)
|
||||
template <typename Manager>
|
||||
Impl(Manager *mgr, const OfflineSpeakerSegmentationModelConfig &config)
|
||||
: config_(config),
|
||||
env_(ORT_LOGGING_LEVEL_ERROR),
|
||||
sess_opts_(GetSessionOptions(config)),
|
||||
@@ -33,7 +42,6 @@ class OfflineSpeakerSegmentationPyannoteModel::Impl {
|
||||
auto buf = ReadFile(mgr, config_.pyannote.model);
|
||||
Init(buf.data(), buf.size());
|
||||
}
|
||||
#endif
|
||||
|
||||
const OfflineSpeakerSegmentationPyannoteModelMetaData &GetModelMetaData()
|
||||
const {
|
||||
@@ -61,7 +69,11 @@ class OfflineSpeakerSegmentationPyannoteModel::Impl {
|
||||
if (config_.debug) {
|
||||
std::ostringstream os;
|
||||
PrintModelMetadata(os, meta_data);
|
||||
#if __OHOS__
|
||||
SHERPA_ONNX_LOGE("%{public}s\n", os.str().c_str());
|
||||
#else
|
||||
SHERPA_ONNX_LOGE("%s\n", os.str().c_str());
|
||||
#endif
|
||||
}
|
||||
|
||||
Ort::AllocatorWithDefaultOptions allocator; // used in the macro below
|
||||
@@ -103,12 +115,11 @@ OfflineSpeakerSegmentationPyannoteModel::
|
||||
const OfflineSpeakerSegmentationModelConfig &config)
|
||||
: impl_(std::make_unique<Impl>(config)) {}
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
template <typename Manager>
|
||||
OfflineSpeakerSegmentationPyannoteModel::
|
||||
OfflineSpeakerSegmentationPyannoteModel(
|
||||
AAssetManager *mgr, const OfflineSpeakerSegmentationModelConfig &config)
|
||||
Manager *mgr, const OfflineSpeakerSegmentationModelConfig &config)
|
||||
: impl_(std::make_unique<Impl>(mgr, config)) {}
|
||||
#endif
|
||||
|
||||
OfflineSpeakerSegmentationPyannoteModel::
|
||||
~OfflineSpeakerSegmentationPyannoteModel() = default;
|
||||
@@ -123,4 +134,18 @@ Ort::Value OfflineSpeakerSegmentationPyannoteModel::Forward(
|
||||
return impl_->Forward(std::move(x));
|
||||
}
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
template OfflineSpeakerSegmentationPyannoteModel::
|
||||
OfflineSpeakerSegmentationPyannoteModel(
|
||||
AAssetManager *mgr,
|
||||
const OfflineSpeakerSegmentationModelConfig &config);
|
||||
#endif
|
||||
|
||||
#if __OHOS__
|
||||
template OfflineSpeakerSegmentationPyannoteModel::
|
||||
OfflineSpeakerSegmentationPyannoteModel(
|
||||
NativeResourceManager *mgr,
|
||||
const OfflineSpeakerSegmentationModelConfig &config);
|
||||
#endif
|
||||
|
||||
} // namespace sherpa_onnx
|
||||
|
||||
@@ -6,11 +6,6 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
#include "android/asset_manager.h"
|
||||
#include "android/asset_manager_jni.h"
|
||||
#endif
|
||||
|
||||
#include "onnxruntime_cxx_api.h" // NOLINT
|
||||
#include "sherpa-onnx/csrc/offline-speaker-segmentation-model-config.h"
|
||||
#include "sherpa-onnx/csrc/offline-speaker-segmentation-pyannote-model-meta-data.h"
|
||||
@@ -22,10 +17,9 @@ class OfflineSpeakerSegmentationPyannoteModel {
|
||||
explicit OfflineSpeakerSegmentationPyannoteModel(
|
||||
const OfflineSpeakerSegmentationModelConfig &config);
|
||||
|
||||
#if __ANDROID_API__ >= 9
|
||||
template <typename Manager>
|
||||
OfflineSpeakerSegmentationPyannoteModel(
|
||||
AAssetManager *mgr, const OfflineSpeakerSegmentationModelConfig &config);
|
||||
#endif
|
||||
Manager *mgr, const OfflineSpeakerSegmentationModelConfig &config);
|
||||
|
||||
~OfflineSpeakerSegmentationPyannoteModel();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user