k2-fsa / sherpa-ncnn

Real-time speech recognition using next-gen Kaldi with ncnn without Internet connection. Support iOS, Android, Raspberry Pi, VisionFive2, LicheePi4A etc.
https://k2-fsa.github.io/sherpa/ncnn/index.html
Apache License 2.0
891 stars 138 forks source link

Cannot resolve corresponding JNI function. #308

Closed SchweitzerGAO closed 4 months ago

SchweitzerGAO commented 4 months ago

我可以在Windows上用预编译so文件成功单独运行android kotlin demo, 但是我把它集成到我自己的 java 项目中,就会有如下错误 image 找不到C++实现了,这是否意味着我要把整个sherpa-ncnn和ncnn的头文件全部引入我的项目,且要对照 sherpa-ncnn/jni/jni.cpp实现对应方法呢,望大佬指条明路,感谢

csukuangfj commented 4 months ago

就会有如下错误

错误在哪里?

请帖 error log 截图

csukuangfj commented 4 months ago

这是否意味着我要把整个sherpa-ncnn和ncnn的头文件全部引入我的项目

no no no.

你只需要

就够了。不需要任何的 c++ 文件(不需要 c++ 头文件,不需要 c++ 源代码)

SchweitzerGAO commented 4 months ago

好的,这个问题已经解决了,我是修改了包名称和这个项目中的一样,想是so文件的函数签名不对了。还有一个问题,model.isReady的判定条件是什么?我想设置成长按按钮进行识别并像这个项目一样流式输出,结果发现好像识别不出结果来

csukuangfj commented 4 months ago

model.isReady的判定条件是什么

当模型发现,特征队列里面存储的未识别的数据足够多时,is ready 就会返回 true.

csukuangfj commented 4 months ago

我是修改了包名称和这个项目中的一样

你不需要修改的。

你可以用任意的 package name, 只要保留我们提供的 .kt 文件中的 package name 不变就可以了.

注意, koltin 里面的 package name, 并不一定要存在对应的文件夹里面。你可以存到任意的文件夹,这个和 java 是不一样的。

你不需要把你自己的 package name 改成我们的。

SchweitzerGAO commented 4 months ago

你不需要修改的。

你可以用任意的 package name, 只要保留我们提供的 .kt 文件中的 package name 不变就可以了.

注意, koltin 里面的 package name, 并不一定要存在对应的文件夹里面。你可以存到任意的文件夹,这个和 java 是不一样的。

你不需要把你自己的 package name 改成我们的

倒也没有,我新建了一个包存放这个文件。至于识别不出来的问题,现在已解决了,是我代码的问题。谢谢大佬,就喜欢这样有issue马上回复的collaborator!

csukuangfj commented 4 months ago

欢迎使用新一代 Kaldi!