最近因工作需求在java-web服务中调用人脸识别离线sdk,主要通过JNA及JNI技术,但均未调试通过,JNA调用时出现以下异常,一直未解决,求大佬指点,导常信息如下:
in BaiduFaceApi::sdk_init
deviceId is:XXXXXXXXXXXXXXXXXXXXXXXXXXX
resource path is:\\?\E:\trunk\XXX\code\service\XXX\IBH-DM~2\IBH-DM~4\NATIVE~1\face-resource
resource path is:\\?\E:\trunk\XXX\code\service\XXX\IBH-DM~2\IBH-DM~4\NATIVE~1\face-resource
deme.exe basedir:xxxx sign:xxxx devices:xxxx facesize:xxxx
conf facecount : 1
conf feature_type : 1
license file path is:\\?\E:\trunk\XXX\code\service\XXX\IBH-DM~2\IBH-DM~4\NATIVE~1\x64\license.key
Failed to open device! :1.list
cameras init failed !!!
authorize(): 7029907 OK OK successfully
is-live: 0
is-quality: 0
thr-not-face: 0.5
min-face-size: 100
thr-illum: 40
thr-blur: 0.7
thr-occlu: 0.5
thr-pitch: 15
thr-yaw: 15
thr-roll: 15
facecount: 1
detect-intv: 0
tracking-intv: 1000
is-crop: 0
crop-size: 256
enlarge-ratio: 3
score model init ... ..\face-resource//assets/score.binary
dection model init..
detect modle path: ..\face-resource//assets/facedetect.binary
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokePointer(Native Method)
at com.sun.jna.Function.invokePointer(Function.java:470)
at com.sun.jna.Function.invokeString(Function.java:651)
at com.sun.jna.Function.invoke(Function.java:395)
at com.sun.jna.Function.invoke(Function.java:315)
at com.sun.jna.Library$Handler.invoke(Library.java:212)
at com.sun.proxy.$Proxy0.match(Unknown Source)
at cn.dataenergy.ibh.controller.TestJNA2.main(TestJNA2.java:27)
异常信息图片为:
C++函数代码为:
Java调用代码为:
根据异常信息可以看出函数是可以调到的,但是在sdk_init()初始化时,初始化到facedetect.binary时报错,目前尚不清楚原因,求大神指点!!!!
另外:离线sdk示例工程在vs下调试,所有函数均可以调通。
现在搞定了没哇~
jni,绝对是个麻烦路子
就不能用c封装一个接口给java调用不就完了
离线的,能影响到的就是运行的电脑的性能了。但普通PC开发机再怎么差也不会用到1秒多吧,那真做到小型化的设备里面,性能只会更差。文档里面宣传值是1万人<400ms,现在是10人>1秒,这个已经影响可用性了,人得站一会才能验证到。
这个性能取决于服务器性能吧
都是能用上的人吗?为什么我这里DEBUG版本track会异常,X64也有问题。只有WIN32 RELEASE版本能正常用起来。但1:N的性能很惨,只有几张人脸,做搜索都要1秒多,性能上简直惨不忍睹。
亲,所以你是用C++把DLL封装成标准C接口后用JNA调用的是吗~ 现在搞定了没哇~
求大佬关注 支持一下