实现不同界面下都要实现人脸识别的功能

2023-05-16

好久没写博客啦,后面得坚持写下去,作一个有心的程序猿:

去年遇到一个很蛋疼的需求,需要在两个不同的界面都需要实现人脸识别功能,两个界面会经常来回切换,这个需求看起来也没那么复杂,但最终能找到最佳的方案其实并不容易:

最开始想在service 实现人脸检测、比对、等操作,后面就放弃这种想法

第二种是在两个activity重复单独实现相机预览、检测、比对等的功能,那么问题就来了,在finish当activity同时执行相机释放等操作,同时在新的activity打开相机完成人脸识别相关初始化,程序会出现崩溃,提示:E/mali_so: encounter the first gles_error : 0x0002 : failed to allocate GPU memory GPU资源分配不均问题,在网上查有说在多次打开关闭相机会出现这个问题,但是我就打开了一次呀,这个问题我换了一块开发板就不会了,这么神奇的问题!通过查资料和两个平台系统层面的差异,最后可以定位到问题为出问题的开发板的系统libGLES_mali.so非正常路径,导致默认情况下读取不到这个库才出的问题(具体情况不深究),最终出现GPU资源不能正常释放。怎么解决呢?

也就是第三种方案,使用两个不同的相机单独执行打开不同的相机ID,做到两个activity相互不影响,才实现了两个activity可以相机回来切换,并保证每个activity都可以实现相机预览的功能,暂时实现了需求。但同时从稳定性来讲,两个相机来回切换,容易造成内存的泄漏,效率低,多增加一个相机,而且偶尔还是会出现一次 GPU memory GPU资源分配不均问题,导致程序非常不稳定。

最终还是借鉴了同事一个想法,两个界面都需要实现人脸识别功能,可以是两个界面,但不一定是两个activity呀,这使我茅塞顿开,可以考虑多层布局呀,就在一个界面实现两层布局,使用setVisibility(View.VISIBLE)和setVisibility(View.GONE)

根据需求隐藏、显示需要的界面,相机打开正常就不用释放了,最终解决了问题!!!

方法总比困难多,只要思想不滑坡,给自己点个赞!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现不同界面下都要实现人脸识别的功能 的相关文章

随机推荐