Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can not recognize the audio stream correctly in demo #296

Open
hzgdeerHo opened this issue Jan 12, 2024 · 36 comments
Open

Can not recognize the audio stream correctly in demo #296

hzgdeerHo opened this issue Jan 12, 2024 · 36 comments

Comments

@hzgdeerHo
Copy link

why this model always fail to recognize this audio normally! # the script is "1.01 的十次方等于多少,1.02 的十次方等于多少.。。。1.09 的十次方等于多少",always lost some information as follows:
f652bdfd5f2762af654db12b6788e4b

@csukuangfj
Copy link
Collaborator

please describe which apk you are using and what phone you are using.

@csukuangfj
Copy link
Collaborator

It works perfectly on my Xiaomi 10 with the following model.

https://github.com/k2-fsa/sherpa-ncnn/releases/download/v2.1.5/sherpa-ncnn-2.1.5-cpu-arm64-v8a-bilingual-en-zh.apk

668e3f18bb0f0fb62cd608980e01df95

@hzgdeerHo
Copy link
Author

Huawei Mate 30 5G. And always got some incorrect recognition , If I used if (model.isEndpoint()) {
model.reset().
But if (model.isEndpoint()) {
model.reset(true).. It will be better ,but sometime I got app cracked and exit with .so file failed.

@hzgdeerHo
Copy link
Author

THANKS

@csukuangfj
Copy link
Collaborator

Have you tried
#296 (comment)

@hzgdeerHo
Copy link
Author

I tried in Xiaomi PAD ,
0cd02a5303b42845dd6e1692367600b

@csukuangfj
Copy link
Collaborator

普通话标准不?

@hzgdeerHo
Copy link
Author

会漏话,漏了很多话,没有识别出来。然后if (model.isEndpoint()) {
model.reset().

还是:
But if (model.isEndpoint()) {
model.reset(true) 比较合适?很严重,你给的版本更严重CPU版本的可能,漏了很多语音没有识别出来

@hzgdeerHo
Copy link
Author

-.-.mp4

@hzgdeerHo
Copy link
Author

感谢!

@csukuangfj
Copy link
Collaborator

不需要你改代码,你直接用我们的 apk, 也会有问题?

@csukuangfj
Copy link
Collaborator

1653_1705413751.mp4

还真有可能是你发音的问题

@csukuangfj
Copy link
Collaborator

你换个人测试下?

@hzgdeerHo
Copy link
Author

直接使用你的原装APP,也不行,有可能你的算法中存在VAD检测导致的话头经常不被识别

@hzgdeerHo
Copy link
Author

别人测试的效果更不好

@hzgdeerHo
Copy link
Author

我发现有个2022年的模型不会出现这个问题,但是,识别的精准度很差。if (model.isEndpoint()) {
model.reset().这种方式重置,识别的明显不能用。But if (model.isEndpoint()) {
model.reset(true) 还是可以用。十个句子有两个有问题。

@csukuangfj
Copy link
Collaborator

1653_1705413751.mp4

还真有可能是你发音的问题

这个是我用你的音频,和我自己的声音测试的,你看下?

@hzgdeerHo
Copy link
Author

是说录音的测试效果不好?

@csukuangfj
Copy link
Collaborator

复现不了你的问题

@hzgdeerHo
Copy link
Author

还有个问题请教,发现安卓应用重启多次以后,这个语音识别库出现各种异常,应该如何释放资源?谢谢2024-01-17 22:30:46.512 31274-31970 libc ID_main_service.ID_main_service A Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x7475700070 in tid 31970 (Thread-29), pid 31274 (ID_main_service)
2024-01-17 22:30:47.010 32052-32052 DEBUG pid-32052 A Cmdline: ID_main_service.ID_main_service
2024-01-17 22:30:47.010 32052-32052 DEBUG pid-32052 A pid: 31274, tid: 31970, name: Thread-29 >>> ID_main_service.ID_main_service <<<
2024-01-17 22:30:47.011 32052-32052 DEBUG pid-32052 A #00 pc 000000000003f1c8 /data/app/~~PJr3mO54jYku3hTzLKENXg==/ID_main_service.ID_main_service-Qa6Ge7x-1Gr2j0r1HyK9Ow==/lib/arm64/libsherpa-ncnn-core.so (sherpa_ncnn::Recognizer::Impl::DecodeStream(sherpa_ncnn::Stream*) const+648) (BuildId: a28af39c272d913a8b43ec9f186239e49434bce4)
2024-01-17 22:30:47.011 32052-32052 DEBUG pid-32052 A #3 pc 0000000000002ae8 /data/data/ID_main_service.ID_main_service/code_cache/.overlay/base.apk/classes3.dex (com.k2fsa.sherpa.ncnn.SherpaNcnn.decode+4)
2024-01-17 22:30:47.045 31274-31274 TopResumed...ChangeItem ID_main_service.ID_main_service I execute start, ActivityClientRecord = ActivityRecord{c7abb63 token=android.os.BinderProxy@8321196 {ID_main_service.ID_main_service/com.example.hzg_test.MainActivity}}
---------------------------- PROCESS ENDED (31274) for package ID_main_service.ID_main_service ----------------------------
2024-01-17 22:30:47.493 2532-2914 DollieAdapterService pid-2532 E notifyActivityState pkg:ID_main_service.ID_main_service/com.example.hzg_test.MainActivity state:19 fg:false mUid:10532
2024-01-17 22:30:47.536 1554-2891 AppOps pid-1554 E Operation not started: uid=10532 pkg=ID_main_service.ID_main_service(null) op=RECORD_AUDIO
2024-01-17 22:30:47.557 1554-3109 AppOps pid-1554 E Operation not started: uid=10532 pkg=ID_main_service.ID_main_service(null) op=RECORD_AUDIO
#####然后就APP闪退?可能是什么原因?销毁资源,重置模型,等各种方法都试过,结果还是一样。我的语音识别是一直在运行的

@csukuangfj
Copy link
Collaborator

你有修改什么代码么?跑的是我们提供的 apk ,还是你自己用我们的 api 去跑的?

如果你用你自己的代码,你是如何写的呢?

@hzgdeerHo
Copy link
Author

没有修改源码,但是不知道为什么,在app中重启几次后,就出现这个问题

@csukuangfj
Copy link
Collaborator

2024-01-17 22:30:47.493 2532-2914 DollieAdapterService pid-2532 E notifyActivityState pkg:ID_main_service.ID_main_service/com.example.hzg_test.MainActivity state:19 fg:false mUid:10532

com.example.hzg_test.MainActivity

这个不是我们 apk 里面的 tag, 如果你没修改代码而是直接使用我们的 apk 的话,不应该出现这个 log.

@hzgdeerHo
Copy link
Author

找到原因了,是因为资源没有释放干净,还有一个疑问如何给这个开源项目增加词汇表,比如成语什么的,例如朝三暮四?

@csukuangfj
Copy link
Collaborator

找到原因了,是因为资源没有释放干净

是哪个地方?请贴一下代码,我们也好 fix 一下,避免后来的人碰到你这个问题。

@hzgdeerHo
Copy link
Author

hzgdeerHo commented Jan 18, 2024

我现在没有修改音频识别的代码,是我的线程同时两个以上在进行音频识别导致,线程中包括了对音频的识别,重启APP的时候,有时候线程没有释放干净。

@csukuangfj
Copy link
Collaborator

好吧。我是看明白了。

我理解的没改代码,是你用我们提供的代码,不做任何改动。这里的不做任何改动,是指跑我们 master 的代码

你们是把我们提供的代码用到了你们的项目里,这个也算是有改动了。

@hzgdeerHo
Copy link
Author

是的,谢谢!

@hzgdeerHo
Copy link
Author

还有一个疑问如何给这个开源项目增加词汇表,比如成语什么的,例如朝三暮四?

@csukuangfj
Copy link
Collaborator

你看 tokens.txt, 都是单个的字。不需要你加的。

你现在是碰到什么问题了吗?

@csukuangfj
Copy link
Collaborator

直接使用你的原装APP,也不行,有可能你的算法中存在VAD检测导致的话头经常不被识别

这个再确认下,你用我们的 apk 直接跑,也不行?

@hzgdeerHo
Copy link
Author

用你们的APK,直接大声说话可以,稍微放松音量常常话头就没有了。鲁棒性感觉不好。第二如果不增加释放代码的话在应用内重启APP资源释放不掉,尝试以下代码,闪退不断: private fun restartApp() {
// 释放模型资源
model.inputFinished()
// model.finalize()

    audioRecord?.stop()
    audioRecord?.release()
    audioRecord = null

    // 停止后台线程
    isRecording = false
    recordingThread?.join()
    recordingThread = null

    model.finalize()



    // 清理其他资源(如果有)

    // 结束当前活动并重启
    finish()
    val intent = Intent(this, MainActivity::class.java)
    startActivity(intent)
}###如果不释放资源重启几次后,内存会占到很高的水平,谢谢!

@hzgdeerHo
Copy link
Author

hzgdeerHo commented Jan 19, 2024

这个是原始代码加了重启APP的情况,多次重启以后,native的内存释放不了
Uploading image.png…

@hzgdeerHo
Copy link
Author

解决了。如果把整个音频识别对象放在线程中,那么重启的时候可以直接释放线程资源,并把音频识别器的资源顺便释放。如果音频识别器放在主线程中,那么重启的时候无法使用model.finalize()释放内存,问题就不好办。

@hzgdeerHo
Copy link
Author

所以建议demo可以修改一下,模型的初始化等等都放到线程中。

@hzgdeerHo
Copy link
Author

对于项目的几个建议:1、丰富基本的常见汉语成语词汇,例如“朝三暮四”,“得陇望蜀”,“南辕北辙”,“杯弓蛇影”等

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants