Dart API for speaker diarization (#1418)
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
|
||||
| Functions | URL | Supported Platforms|
|
||||
|---|---|---|
|
||||
|Speaker diarization| [Address](https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/speaker-diarization)| macOS, Windows, Linux|
|
||||
|Streaming speech recognition| [Address](https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/streaming-asr)| macOS, Windows, Linux|
|
||||
|Non-Streaming speech recognition| [Address](https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/non-streaming-asr)| macOS, Windows, Linux|
|
||||
|Text to speech| [Address](https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/tts)| macOS, Windows, Linux|
|
||||
|
||||
@@ -6,6 +6,7 @@ export 'src/audio_tagging.dart';
|
||||
export 'src/feature_config.dart';
|
||||
export 'src/keyword_spotter.dart';
|
||||
export 'src/offline_recognizer.dart';
|
||||
export 'src/offline_speaker_diarization.dart';
|
||||
export 'src/offline_stream.dart';
|
||||
export 'src/online_recognizer.dart';
|
||||
export 'src/online_stream.dart';
|
||||
|
||||
243
flutter/sherpa_onnx/lib/src/offline_speaker_diarization.dart
Normal file
243
flutter/sherpa_onnx/lib/src/offline_speaker_diarization.dart
Normal file
@@ -0,0 +1,243 @@
|
||||
// Copyright (c) 2024 Xiaomi Corporation
|
||||
import 'dart:ffi';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
import './sherpa_onnx_bindings.dart';
|
||||
import './speaker_identification.dart';
|
||||
|
||||
class OfflineSpeakerDiarizationSegment {
|
||||
const OfflineSpeakerDiarizationSegment({
|
||||
required this.start,
|
||||
required this.end,
|
||||
required this.speaker,
|
||||
});
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OfflineSpeakerDiarizationSegment(start: $start, end: $end, speaker: $speaker)';
|
||||
}
|
||||
|
||||
final double start;
|
||||
final double end;
|
||||
final int speaker;
|
||||
}
|
||||
|
||||
class OfflineSpeakerSegmentationPyannoteModelConfig {
|
||||
const OfflineSpeakerSegmentationPyannoteModelConfig({
|
||||
this.model = '',
|
||||
});
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OfflineSpeakerSegmentationPyannoteModelConfig(model: $model)';
|
||||
}
|
||||
|
||||
final String model;
|
||||
}
|
||||
|
||||
class OfflineSpeakerSegmentationModelConfig {
|
||||
const OfflineSpeakerSegmentationModelConfig({
|
||||
this.pyannote = const OfflineSpeakerSegmentationPyannoteModelConfig(),
|
||||
this.numThreads = 1,
|
||||
this.debug = true,
|
||||
this.provider = 'cpu',
|
||||
});
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OfflineSpeakerSegmentationModelConfig(pyannote: $pyannote, numThreads: $numThreads, debug: $debug, provider: $provider)';
|
||||
}
|
||||
|
||||
final OfflineSpeakerSegmentationPyannoteModelConfig pyannote;
|
||||
|
||||
final int numThreads;
|
||||
final bool debug;
|
||||
final String provider;
|
||||
}
|
||||
|
||||
class FastClusteringConfig {
|
||||
const FastClusteringConfig({
|
||||
this.numClusters = -1,
|
||||
this.threshold = 0.5,
|
||||
});
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'FastClusteringConfig(numClusters: $numClusters, threshold: $threshold)';
|
||||
}
|
||||
|
||||
final int numClusters;
|
||||
final double threshold;
|
||||
}
|
||||
|
||||
class OfflineSpeakerDiarizationConfig {
|
||||
const OfflineSpeakerDiarizationConfig({
|
||||
this.segmentation = const OfflineSpeakerSegmentationModelConfig(),
|
||||
this.embedding = const SpeakerEmbeddingExtractorConfig(model: ''),
|
||||
this.clustering = const FastClusteringConfig(),
|
||||
this.minDurationOn = 0.2,
|
||||
this.minDurationOff = 0.5,
|
||||
});
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OfflineSpeakerDiarizationConfig(segmentation: $segmentation, embedding: $embedding, clustering: $clustering, minDurationOn: $minDurationOn, minDurationOff: $minDurationOff)';
|
||||
}
|
||||
|
||||
final OfflineSpeakerSegmentationModelConfig segmentation;
|
||||
final SpeakerEmbeddingExtractorConfig embedding;
|
||||
final FastClusteringConfig clustering;
|
||||
final double minDurationOff; // in seconds
|
||||
final double minDurationOn; // in seconds
|
||||
}
|
||||
|
||||
class OfflineSpeakerDiarization {
|
||||
OfflineSpeakerDiarization._(
|
||||
{required this.ptr, required this.config, required this.sampleRate});
|
||||
|
||||
void free() {
|
||||
SherpaOnnxBindings.sherpaOnnxDestroyOfflineSpeakerDiarization?.call(ptr);
|
||||
ptr = nullptr;
|
||||
}
|
||||
|
||||
/// The user is responsible to call the OfflineSpeakerDiarization.free()
|
||||
/// method of the returned instance to avoid memory leak.
|
||||
factory OfflineSpeakerDiarization(OfflineSpeakerDiarizationConfig config) {
|
||||
final c = calloc<SherpaOnnxOfflineSpeakerDiarizationConfig>();
|
||||
|
||||
c.ref.segmentation.pyannote.model =
|
||||
config.segmentation.pyannote.model.toNativeUtf8();
|
||||
c.ref.segmentation.numThreads = config.segmentation.numThreads;
|
||||
c.ref.segmentation.debug = config.segmentation.debug ? 1 : 0;
|
||||
c.ref.segmentation.provider = config.segmentation.provider.toNativeUtf8();
|
||||
|
||||
c.ref.embedding.model = config.embedding.model.toNativeUtf8();
|
||||
c.ref.embedding.numThreads = config.embedding.numThreads;
|
||||
c.ref.embedding.debug = config.embedding.debug ? 1 : 0;
|
||||
c.ref.embedding.provider = config.embedding.provider.toNativeUtf8();
|
||||
|
||||
c.ref.clustering.numClusters = config.clustering.numClusters;
|
||||
c.ref.clustering.threshold = config.clustering.threshold;
|
||||
|
||||
c.ref.minDurationOn = config.minDurationOn;
|
||||
c.ref.minDurationOff = config.minDurationOff;
|
||||
|
||||
final ptr =
|
||||
SherpaOnnxBindings.sherpaOnnxCreateOfflineSpeakerDiarization?.call(c) ??
|
||||
nullptr;
|
||||
|
||||
calloc.free(c.ref.embedding.provider);
|
||||
calloc.free(c.ref.embedding.model);
|
||||
calloc.free(c.ref.segmentation.provider);
|
||||
calloc.free(c.ref.segmentation.pyannote.model);
|
||||
|
||||
int sampleRate = 0;
|
||||
if (ptr != nullptr) {
|
||||
sampleRate = SherpaOnnxBindings
|
||||
.sherpaOnnxOfflineSpeakerDiarizationGetSampleRate
|
||||
?.call(ptr) ??
|
||||
0;
|
||||
}
|
||||
return OfflineSpeakerDiarization._(
|
||||
ptr: ptr, config: config, sampleRate: sampleRate);
|
||||
}
|
||||
|
||||
List<OfflineSpeakerDiarizationSegment> process(
|
||||
{required Float32List samples}) {
|
||||
if (ptr == nullptr) {
|
||||
return <OfflineSpeakerDiarizationSegment>[];
|
||||
}
|
||||
|
||||
final n = samples.length;
|
||||
final Pointer<Float> p = calloc<Float>(n);
|
||||
|
||||
final pList = p.asTypedList(n);
|
||||
pList.setAll(0, samples);
|
||||
|
||||
final r = SherpaOnnxBindings.sherpaOnnxOfflineSpeakerDiarizationProcess
|
||||
?.call(ptr, p, n) ??
|
||||
nullptr;
|
||||
|
||||
final ans = _processImpl(r);
|
||||
|
||||
SherpaOnnxBindings.sherpaOnnxOfflineSpeakerDiarizationDestroyResult
|
||||
?.call(r);
|
||||
|
||||
return ans;
|
||||
}
|
||||
|
||||
List<OfflineSpeakerDiarizationSegment> processWithCallback({
|
||||
required Float32List samples,
|
||||
required int Function(int numProcessedChunks, int numTotalChunks) callback,
|
||||
}) {
|
||||
if (ptr == nullptr) {
|
||||
return <OfflineSpeakerDiarizationSegment>[];
|
||||
}
|
||||
|
||||
final n = samples.length;
|
||||
final Pointer<Float> p = calloc<Float>(n);
|
||||
|
||||
final pList = p.asTypedList(n);
|
||||
pList.setAll(0, samples);
|
||||
|
||||
final wrapper = NativeCallable<
|
||||
SherpaOnnxOfflineSpeakerDiarizationProgressCallbackNoArgNative>.isolateLocal(
|
||||
(int numProcessedChunks, int numTotalChunks) {
|
||||
return callback(numProcessedChunks, numTotalChunks);
|
||||
}, exceptionalReturn: 0);
|
||||
|
||||
final r = SherpaOnnxBindings
|
||||
.sherpaOnnxOfflineSpeakerDiarizationProcessWithCallbackNoArg
|
||||
?.call(ptr, p, n, wrapper.nativeFunction) ??
|
||||
nullptr;
|
||||
|
||||
wrapper.close();
|
||||
|
||||
final ans = _processImpl(r);
|
||||
|
||||
SherpaOnnxBindings.sherpaOnnxOfflineSpeakerDiarizationDestroyResult
|
||||
?.call(r);
|
||||
|
||||
return ans;
|
||||
}
|
||||
|
||||
List<OfflineSpeakerDiarizationSegment> _processImpl(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationResult> r) {
|
||||
if (r == nullptr) {
|
||||
return <OfflineSpeakerDiarizationSegment>[];
|
||||
}
|
||||
|
||||
final numSegments = SherpaOnnxBindings
|
||||
.sherpaOnnxOfflineSpeakerDiarizationResultGetNumSegments
|
||||
?.call(r) ??
|
||||
0;
|
||||
final segments = SherpaOnnxBindings
|
||||
.sherpaOnnxOfflineSpeakerDiarizationResultSortByStartTime
|
||||
?.call(r) ??
|
||||
nullptr;
|
||||
|
||||
if (segments == nullptr) {
|
||||
return <OfflineSpeakerDiarizationSegment>[];
|
||||
}
|
||||
|
||||
final ans = <OfflineSpeakerDiarizationSegment>[];
|
||||
for (int i = 0; i != numSegments; ++i) {
|
||||
final s = segments + i;
|
||||
|
||||
final tmp = OfflineSpeakerDiarizationSegment(
|
||||
start: s.ref.start, end: s.ref.end, speaker: s.ref.speaker);
|
||||
ans.add(tmp);
|
||||
}
|
||||
|
||||
SherpaOnnxBindings.sherpaOnnxOfflineSpeakerDiarizationDestroySegment
|
||||
?.call(segments);
|
||||
|
||||
return ans;
|
||||
}
|
||||
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization> ptr;
|
||||
OfflineSpeakerDiarizationConfig config;
|
||||
final int sampleRate;
|
||||
}
|
||||
@@ -2,6 +2,66 @@
|
||||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
final class SherpaOnnxSpeakerEmbeddingExtractorConfig extends Struct {
|
||||
external Pointer<Utf8> model;
|
||||
|
||||
@Int32()
|
||||
external int numThreads;
|
||||
|
||||
@Int32()
|
||||
external int debug;
|
||||
|
||||
external Pointer<Utf8> provider;
|
||||
}
|
||||
|
||||
final class SherpaOnnxOfflineSpeakerDiarizationSegment extends Struct {
|
||||
@Float()
|
||||
external double start;
|
||||
|
||||
@Float()
|
||||
external double end;
|
||||
|
||||
@Int32()
|
||||
external int speaker;
|
||||
}
|
||||
|
||||
final class SherpaOnnxOfflineSpeakerSegmentationPyannoteModelConfig
|
||||
extends Struct {
|
||||
external Pointer<Utf8> model;
|
||||
}
|
||||
|
||||
final class SherpaOnnxOfflineSpeakerSegmentationModelConfig extends Struct {
|
||||
external SherpaOnnxOfflineSpeakerSegmentationPyannoteModelConfig pyannote;
|
||||
|
||||
@Int32()
|
||||
external int numThreads;
|
||||
|
||||
@Int32()
|
||||
external int debug;
|
||||
|
||||
external Pointer<Utf8> provider;
|
||||
}
|
||||
|
||||
final class SherpaOnnxFastClusteringConfig extends Struct {
|
||||
@Int32()
|
||||
external int numClusters;
|
||||
|
||||
@Float()
|
||||
external double threshold;
|
||||
}
|
||||
|
||||
final class SherpaOnnxOfflineSpeakerDiarizationConfig extends Struct {
|
||||
external SherpaOnnxOfflineSpeakerSegmentationModelConfig segmentation;
|
||||
external SherpaOnnxSpeakerEmbeddingExtractorConfig embedding;
|
||||
external SherpaOnnxFastClusteringConfig clustering;
|
||||
|
||||
@Float()
|
||||
external double minDurationOn;
|
||||
|
||||
@Float()
|
||||
external double minDurationOff;
|
||||
}
|
||||
|
||||
final class SherpaOnnxOfflinePunctuationModelConfig extends Struct {
|
||||
external Pointer<Utf8> ctTransformer;
|
||||
|
||||
@@ -341,18 +401,6 @@ final class SherpaOnnxWave extends Struct {
|
||||
external int numSamples;
|
||||
}
|
||||
|
||||
final class SherpaOnnxSpeakerEmbeddingExtractorConfig extends Struct {
|
||||
external Pointer<Utf8> model;
|
||||
|
||||
@Int32()
|
||||
external int numThreads;
|
||||
|
||||
@Int32()
|
||||
external int debug;
|
||||
|
||||
external Pointer<Utf8> provider;
|
||||
}
|
||||
|
||||
final class SherpaOnnxKeywordSpotterConfig extends Struct {
|
||||
external SherpaOnnxFeatureConfig feat;
|
||||
|
||||
@@ -402,10 +450,101 @@ final class SherpaOnnxSpeakerEmbeddingExtractor extends Opaque {}
|
||||
|
||||
final class SherpaOnnxSpeakerEmbeddingManager extends Opaque {}
|
||||
|
||||
final class SherpaOnnxOfflineSpeakerDiarization extends Opaque {}
|
||||
|
||||
final class SherpaOnnxOfflineSpeakerDiarizationResult extends Opaque {}
|
||||
|
||||
typedef SherpaOnnxCreateOfflineSpeakerDiarizationNative
|
||||
= Pointer<SherpaOnnxOfflineSpeakerDiarization> Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationConfig>);
|
||||
|
||||
typedef SherpaOnnxCreateOfflineSpeakerDiarization
|
||||
= SherpaOnnxCreateOfflineSpeakerDiarizationNative;
|
||||
|
||||
typedef SherpaOnnxDestroyOfflineSpeakerDiarizationNative = Void Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization>);
|
||||
|
||||
typedef SherpaOnnxDestroyOfflineSpeakerDiarization = void Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization>);
|
||||
|
||||
typedef SherpaOnnxCreateOfflinePunctuationNative
|
||||
= Pointer<SherpaOnnxOfflinePunctuation> Function(
|
||||
Pointer<SherpaOnnxOfflinePunctuationConfig>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationGetSampleRateNative = Int32 Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationGetSampleRate = int Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationSetConfigNative = Void Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization>,
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationConfig>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationResultGetNumSpeakersNative = Int32
|
||||
Function(Pointer<SherpaOnnxOfflineSpeakerDiarizationResult>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationResultGetNumSpeakers = int Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationResult>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationResultGetNumSegmentsNative = Int32
|
||||
Function(Pointer<SherpaOnnxOfflineSpeakerDiarizationResult>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationResultGetNumSegments = int Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationResult>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationResultSortByStartTimeNative
|
||||
= Pointer<SherpaOnnxOfflineSpeakerDiarizationSegment> Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationResult>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationResultSortByStartTime
|
||||
= SherpaOnnxOfflineSpeakerDiarizationResultSortByStartTimeNative;
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationDestroySegmentNative = Void Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationSegment>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationDestroySegment = void Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationSegment>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationProcessNative
|
||||
= Pointer<SherpaOnnxOfflineSpeakerDiarizationResult> Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization>, Pointer<Float>, Int32);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationProcess
|
||||
= Pointer<SherpaOnnxOfflineSpeakerDiarizationResult> Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization>, Pointer<Float>, int);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationProgressCallbackNoArgNative = Int32
|
||||
Function(Int32, Int32);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationProcessWithCallbackNoArgNative
|
||||
= Pointer<SherpaOnnxOfflineSpeakerDiarizationResult> Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization>,
|
||||
Pointer<Float>,
|
||||
Int32,
|
||||
Pointer<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationProgressCallbackNoArgNative>>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationProcessWithCallbackNoArg
|
||||
= Pointer<SherpaOnnxOfflineSpeakerDiarizationResult> Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization>,
|
||||
Pointer<Float>,
|
||||
int,
|
||||
Pointer<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationProgressCallbackNoArgNative>>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationDestroyResultNative = Void Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationResult>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationDestroyResult = void Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationResult>);
|
||||
|
||||
typedef SherpaOnnxOfflineSpeakerDiarizationSetConfig = void Function(
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarization>,
|
||||
Pointer<SherpaOnnxOfflineSpeakerDiarizationConfig>);
|
||||
|
||||
typedef SherpaOnnxCreateOfflinePunctuation
|
||||
= SherpaOnnxCreateOfflinePunctuationNative;
|
||||
|
||||
@@ -940,6 +1079,29 @@ typedef SherpaOnnxFreeWaveNative = Void Function(Pointer<SherpaOnnxWave>);
|
||||
typedef SherpaOnnxFreeWave = void Function(Pointer<SherpaOnnxWave>);
|
||||
|
||||
class SherpaOnnxBindings {
|
||||
static SherpaOnnxCreateOfflineSpeakerDiarization?
|
||||
sherpaOnnxCreateOfflineSpeakerDiarization;
|
||||
static SherpaOnnxDestroyOfflineSpeakerDiarization?
|
||||
sherpaOnnxDestroyOfflineSpeakerDiarization;
|
||||
static SherpaOnnxOfflineSpeakerDiarizationGetSampleRate?
|
||||
sherpaOnnxOfflineSpeakerDiarizationGetSampleRate;
|
||||
static SherpaOnnxOfflineSpeakerDiarizationSetConfig?
|
||||
sherpaOnnxOfflineSpeakerDiarizationSetConfig;
|
||||
static SherpaOnnxOfflineSpeakerDiarizationResultGetNumSpeakers?
|
||||
sherpaOnnxOfflineSpeakerDiarizationResultGetNumSpeakers;
|
||||
static SherpaOnnxOfflineSpeakerDiarizationResultGetNumSegments?
|
||||
sherpaOnnxOfflineSpeakerDiarizationResultGetNumSegments;
|
||||
static SherpaOnnxOfflineSpeakerDiarizationResultSortByStartTime?
|
||||
sherpaOnnxOfflineSpeakerDiarizationResultSortByStartTime;
|
||||
static SherpaOnnxOfflineSpeakerDiarizationDestroySegment?
|
||||
sherpaOnnxOfflineSpeakerDiarizationDestroySegment;
|
||||
static SherpaOnnxOfflineSpeakerDiarizationProcess?
|
||||
sherpaOnnxOfflineSpeakerDiarizationProcess;
|
||||
static SherpaOnnxOfflineSpeakerDiarizationDestroyResult?
|
||||
sherpaOnnxOfflineSpeakerDiarizationDestroyResult;
|
||||
static SherpaOnnxOfflineSpeakerDiarizationProcessWithCallbackNoArg?
|
||||
sherpaOnnxOfflineSpeakerDiarizationProcessWithCallbackNoArg;
|
||||
|
||||
static SherpaOnnxCreateOfflinePunctuation? sherpaOnnxCreateOfflinePunctuation;
|
||||
static SherpaOnnxDestroyOfflinePunctuation?
|
||||
sherpaOnnxDestroyOfflinePunctuation;
|
||||
@@ -1107,6 +1269,83 @@ class SherpaOnnxBindings {
|
||||
static SherpaOnnxFreeWave? freeWave;
|
||||
|
||||
static void init(DynamicLibrary dynamicLibrary) {
|
||||
sherpaOnnxCreateOfflineSpeakerDiarization ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxCreateOfflineSpeakerDiarizationNative>>(
|
||||
'SherpaOnnxCreateOfflineSpeakerDiarization')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxDestroyOfflineSpeakerDiarization ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxDestroyOfflineSpeakerDiarizationNative>>(
|
||||
'SherpaOnnxDestroyOfflineSpeakerDiarization')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxOfflineSpeakerDiarizationGetSampleRate ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationGetSampleRateNative>>(
|
||||
'SherpaOnnxOfflineSpeakerDiarizationGetSampleRate')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxOfflineSpeakerDiarizationSetConfig ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationSetConfigNative>>(
|
||||
'SherpaOnnxOfflineSpeakerDiarizationSetConfig')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxOfflineSpeakerDiarizationResultGetNumSpeakers ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationResultGetNumSpeakersNative>>(
|
||||
'SherpaOnnxOfflineSpeakerDiarizationResultGetNumSpeakers')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxOfflineSpeakerDiarizationResultGetNumSegments ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationResultGetNumSegmentsNative>>(
|
||||
'SherpaOnnxOfflineSpeakerDiarizationResultGetNumSegments')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxOfflineSpeakerDiarizationResultSortByStartTime ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationResultSortByStartTimeNative>>(
|
||||
'SherpaOnnxOfflineSpeakerDiarizationResultSortByStartTime')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxOfflineSpeakerDiarizationDestroySegment ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationDestroySegmentNative>>(
|
||||
'SherpaOnnxOfflineSpeakerDiarizationDestroySegment')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxOfflineSpeakerDiarizationProcess ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationProcessNative>>(
|
||||
'SherpaOnnxOfflineSpeakerDiarizationProcess')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxOfflineSpeakerDiarizationProcessWithCallbackNoArg ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationProcessWithCallbackNoArgNative>>(
|
||||
'SherpaOnnxOfflineSpeakerDiarizationProcessWithCallbackNoArg')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxOfflineSpeakerDiarizationDestroyResult ??= dynamicLibrary
|
||||
.lookup<
|
||||
NativeFunction<
|
||||
SherpaOnnxOfflineSpeakerDiarizationDestroyResultNative>>(
|
||||
'SherpaOnnxOfflineSpeakerDiarizationDestroyResult')
|
||||
.asFunction();
|
||||
|
||||
sherpaOnnxCreateOfflinePunctuation ??= dynamicLibrary
|
||||
.lookup<NativeFunction<SherpaOnnxCreateOfflinePunctuationNative>>(
|
||||
'SherpaOnnxCreateOfflinePunctuation')
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
name: sherpa_onnx
|
||||
|
||||
description: >
|
||||
Speech recognition, speech synthesis, and speaker recognition using next-gen Kaldi
|
||||
with onnxruntime without Internet connection.
|
||||
Speech recognition, speech synthesis, speaker diarization, and speaker recognition
|
||||
using next-gen Kaldi with onnxruntime without Internet connection.
|
||||
|
||||
repository: https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter
|
||||
|
||||
@@ -12,7 +12,7 @@ documentation: https://k2-fsa.github.io/sherpa/onnx/
|
||||
topics:
|
||||
- speech-recognition
|
||||
- speech-synthesis
|
||||
- speaker-identification
|
||||
- speaker-diarization
|
||||
- audio-tagging
|
||||
- voice-activity-detection
|
||||
|
||||
@@ -41,7 +41,7 @@ dependencies:
|
||||
sherpa_onnx_linux: ^1.10.27
|
||||
# sherpa_onnx_linux:
|
||||
# path: ../sherpa_onnx_linux
|
||||
#
|
||||
|
||||
sherpa_onnx_windows: ^1.10.27
|
||||
# sherpa_onnx_windows:
|
||||
# path: ../sherpa_onnx_windows
|
||||
|
||||
Reference in New Issue
Block a user