这里就主要讲下整个人脸识别模块的接入及使用。
百度AI SDK
首先我们要去百度官网申请一个帐号,接而进入这个网址:
https://console.bce.baidu.com/ai/#/ai/face/overview/index
填完创建信息,就可以去管理应用那儿查看APP_ID和SERECT_KEY,这两个key到时候需要保存到工程内。
然后在这里找到人脸识别的SDK
将压缩包解压后导入工程并引入为lib即可。示例代码(在app.gradle中):
dependencies {
// ... 省略
implementation files('libs/aip-java-sdk-4.11.1.jar')
implementation files('libs/json-20160810.jar')
implementation files('libs/slf4j-api-1.7.25.jar')
}
接下来就是Code Time 根据SDK说明文档 先配置一个单例的AipFaceObject
class AipFaceObject private constructor() {
companion object {
private var mClient: AipFace? = null
@Synchronized
fun getClient(): AipFace {
if (mClient == null) {
mClient = AipFace(Const.BAIDU_APP_ID, Const.BAIDU_API_KEY, Const.BAIDU_SECRET_KEY)
mClient?.setConnectionTimeoutInMillis(2000)
}
return mClient!!
}
}
}
对于检测人脸的API而言,可以在上一章所说的在onImageAvailable方法中对Image Captured后,通过onPreview方法回调给业务进行预览拍好的照片,然后将byteArray通过格式转换成Base64的图片,上传至百度AI服务器进行检测,具体可配置参数可以去上面一开始所说的官网去查找。这里是我写得sample:
private fun detectFace(postImage: String): Boolean {
var bSuccess = false
// 人脸检测
val detectOptions = HashMap<String, String>()
detectOptions["face_field"] = "age,gender,race,expression,beauty"
detectOptions["face_type"] = "LIVE"
val detectRes = AipFaceObject.getClient().detect(postImage, "BASE64", detectOptions)
val mText: String
val mShadowText: String
if (detectRes.getInt("error_code") == 0) {
// 检测成功
bSuccess = true
val detectBean = Gson().fromJson<DetectFaceBean>(
detectRes.getJSONObject("result").toString(), DetectFaceBean::class.java)
mShadowText = "成功检测到人脸"
} else {
mText = "检测失败 请点击取景框重试"
mShadowText = "检测失败"
}
mFragment?.activity?.runOnUiThread {
switchText(mText, mShadowText)
}
return bSuccess
}
最终的效果如最开始的预览图所示。
至于项目相关demo的代码,我过会儿会上传到github,到时会更新这个博客的~
总结
这次是毕业设计的项目,所以做的还比较粗糙,这里是给自己做一下学习记录~欢迎指出不足之处 感谢大佬阅读
更新
项目地址在:https://github.com/CarsonWoo/FaceDetectDemo
这里单独抽了这个组件出来做成了一个小demo