Add Go API for homophone replacer (#2168)
This commit is contained in:
@@ -0,0 +1 @@
|
||||
../../../../go-api-examples/non-streaming-decode-files/run-sense-voice-small-with-hr.sh
|
||||
@@ -0,0 +1 @@
|
||||
../../../../go-api-examples/streaming-decode-files/run-zipformer2-ctc-with-hr.sh
|
||||
@@ -108,6 +108,12 @@ type OnlineCtcFstDecoderConfig struct {
|
||||
MaxActive int
|
||||
}
|
||||
|
||||
type HomophoneReplacerConfig struct {
|
||||
DictDir string
|
||||
Lexicon string
|
||||
RuleFsts string
|
||||
}
|
||||
|
||||
// Configuration for the online/streaming recognizer.
|
||||
type OnlineRecognizerConfig struct {
|
||||
FeatConfig FeatureConfig
|
||||
@@ -137,6 +143,7 @@ type OnlineRecognizerConfig struct {
|
||||
RuleFars string
|
||||
HotwordsBuf string
|
||||
HotwordsBufSize int
|
||||
Hr HomophoneReplacerConfig
|
||||
}
|
||||
|
||||
// It contains the recognition result for a online stream.
|
||||
@@ -239,6 +246,15 @@ func NewOnlineRecognizer(config *OnlineRecognizerConfig) *OnlineRecognizer {
|
||||
defer C.free(unsafe.Pointer(c.ctc_fst_decoder_config.graph))
|
||||
c.ctc_fst_decoder_config.max_active = C.int(config.CtcFstDecoderConfig.MaxActive)
|
||||
|
||||
c.hr.dict_dir = C.CString(config.Hr.DictDir)
|
||||
defer C.free(unsafe.Pointer(c.hr.dict_dir))
|
||||
|
||||
c.hr.lexicon = C.CString(config.Hr.Lexicon)
|
||||
defer C.free(unsafe.Pointer(c.hr.lexicon))
|
||||
|
||||
c.hr.rule_fsts = C.CString(config.Hr.RuleFsts)
|
||||
defer C.free(unsafe.Pointer(c.hr.rule_fsts))
|
||||
|
||||
impl := C.SherpaOnnxCreateOnlineRecognizer(&c)
|
||||
if impl == nil {
|
||||
return nil
|
||||
@@ -462,6 +478,7 @@ type OfflineRecognizerConfig struct {
|
||||
BlankPenalty float32
|
||||
RuleFsts string
|
||||
RuleFars string
|
||||
Hr HomophoneReplacerConfig
|
||||
}
|
||||
|
||||
// It wraps a pointer from C
|
||||
@@ -549,6 +566,10 @@ func newCOfflineRecognizerConfig(config *OfflineRecognizerConfig) *C.struct_Sher
|
||||
|
||||
c.rule_fsts = C.CString(config.RuleFsts)
|
||||
c.rule_fars = C.CString(config.RuleFars)
|
||||
|
||||
c.hr.dict_dir = C.CString(config.Hr.DictDir)
|
||||
c.hr.lexicon = C.CString(config.Hr.Lexicon)
|
||||
c.hr.rule_fsts = C.CString(config.Hr.RuleFsts)
|
||||
return &c
|
||||
}
|
||||
func freeCOfflineRecognizerConfig(c *C.struct_SherpaOnnxOfflineRecognizerConfig) {
|
||||
@@ -676,10 +697,26 @@ func freeCOfflineRecognizerConfig(c *C.struct_SherpaOnnxOfflineRecognizerConfig)
|
||||
C.free(unsafe.Pointer(c.rule_fsts))
|
||||
c.rule_fsts = nil
|
||||
}
|
||||
|
||||
if c.rule_fars != nil {
|
||||
C.free(unsafe.Pointer(c.rule_fars))
|
||||
c.rule_fars = nil
|
||||
}
|
||||
|
||||
if c.hr.dict_dir != nil {
|
||||
C.free(unsafe.Pointer(c.hr.dict_dir))
|
||||
c.hr.dict_dir = nil
|
||||
}
|
||||
|
||||
if c.hr.lexicon != nil {
|
||||
C.free(unsafe.Pointer(c.hr.lexicon))
|
||||
c.hr.lexicon = nil
|
||||
}
|
||||
|
||||
if c.hr.rule_fsts != nil {
|
||||
C.free(unsafe.Pointer(c.hr.rule_fsts))
|
||||
c.hr.rule_fsts = nil
|
||||
}
|
||||
}
|
||||
|
||||
// Frees the internal pointer of the recognition to avoid memory leak.
|
||||
|
||||
Reference in New Issue
Block a user