Add ArkTS API for Keyword spotting. (#1775)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Use these variables when you tailor your ArkTS code. They must be of the const type.
|
||||
*/
|
||||
export const HAR_VERSION = '1.10.40';
|
||||
export const HAR_VERSION = '1.10.41';
|
||||
export const BUILD_MODE_NAME = 'debug';
|
||||
export const DEBUG = true;
|
||||
export const TARGET_NAME = 'default';
|
||||
|
||||
@@ -53,3 +53,8 @@ export { OfflineSpeakerSegmentationPyannoteModelConfig,
|
||||
OfflineSpeakerDiarization,
|
||||
FastClusteringConfig,
|
||||
} from './src/main/ets/components/NonStreamingSpeakerDiarization';
|
||||
|
||||
export { KeywordSpotterConfig,
|
||||
KeywordSpotterResult,
|
||||
KeywordSpotter,
|
||||
} from './src/main/ets/components/KeywordSpotting';
|
||||
|
||||
@@ -68,3 +68,10 @@ export const getOfflineSpeakerDiarizationSampleRate: (handle: object) => number;
|
||||
export const offlineSpeakerDiarizationProcess: (handle: object, input: object) => object;
|
||||
export const offlineSpeakerDiarizationProcessAsync: (handle: object, input: object, callback: object) => object;
|
||||
export const offlineSpeakerDiarizationSetConfig: (handle: object, config: object) => void;
|
||||
|
||||
export const createKeywordSpotter: (config: object, mgr?: object) => object;
|
||||
export const createKeywordStream: (handle: object, keywords?: string) => object;
|
||||
export const isKeywordStreamReady: (handle: object, stream: object) => boolean;
|
||||
export const decodeKeywordStream: (handle: object, stream: object) => void;
|
||||
export const resetKeywordStream: (handle: object, stream: object) => void;
|
||||
export const getKeywordResultAsJson: (handle: object, stream: object) => string;
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
import {
|
||||
createKeywordSpotter,
|
||||
createKeywordStream,
|
||||
isKeywordStreamReady,
|
||||
decodeKeywordStream,
|
||||
resetKeywordStream,
|
||||
getKeywordResultAsJson,
|
||||
} from 'libsherpa_onnx.so';
|
||||
|
||||
import { FeatureConfig } from './NonStreamingAsr';
|
||||
import { OnlineModelConfig, OnlineStream } from './StreamingAsr';
|
||||
|
||||
export class KeywordSpotterConfig {
|
||||
public featConfig: FeatureConfig = new FeatureConfig();
|
||||
public modelConfig: OnlineModelConfig = new OnlineModelConfig();
|
||||
public maxActivePaths: number = 4;
|
||||
public numTrailingBlanks: number = 1;
|
||||
public keywordsScore: number = 1;
|
||||
public keywordsThreshold: number = 0.25;
|
||||
public keywordsFile: string = '';
|
||||
}
|
||||
|
||||
interface KeywordSpotterResultJson {
|
||||
keyword: string;
|
||||
timestamps: number[];
|
||||
tokens: string[];
|
||||
}
|
||||
|
||||
export class KeywordSpotterResult {
|
||||
public keyword: string = '';
|
||||
public tokens: string[] = [];
|
||||
public timestamps: number[] = [];
|
||||
public json: string = '';
|
||||
}
|
||||
|
||||
export class KeywordSpotter {
|
||||
public handle: object;
|
||||
public config: KeywordSpotterConfig;
|
||||
|
||||
constructor(config: KeywordSpotterConfig, mgr?: object) {
|
||||
this.handle = createKeywordSpotter(config, mgr);
|
||||
this.config = config
|
||||
}
|
||||
|
||||
createStream(keywords?: string): OnlineStream {
|
||||
if (typeof keywords !== "undefined") {
|
||||
return new OnlineStream(createKeywordStream(this.handle, keywords));
|
||||
} else {
|
||||
return new OnlineStream(createKeywordStream(this.handle));
|
||||
}
|
||||
}
|
||||
|
||||
isReady(stream: OnlineStream): boolean {
|
||||
return isKeywordStreamReady(this.handle, stream.handle);
|
||||
}
|
||||
|
||||
decode(stream: OnlineStream) {
|
||||
decodeKeywordStream(this.handle, stream.handle);
|
||||
}
|
||||
|
||||
reset(stream: OnlineStream) {
|
||||
resetKeywordStream(this.handle, stream.handle);
|
||||
}
|
||||
|
||||
getResult(stream: OnlineStream): KeywordSpotterResult {
|
||||
const jsonStr: string = getKeywordResultAsJson(this.handle, stream.handle);
|
||||
|
||||
let o = JSON.parse(jsonStr) as KeywordSpotterResultJson;
|
||||
|
||||
const r = new KeywordSpotterResult()
|
||||
r.keyword = o.keyword
|
||||
r.timestamps = o.timestamps;
|
||||
r.tokens = o.tokens;
|
||||
r.json = jsonStr;
|
||||
|
||||
return r;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user