這裏就主要講下整個人臉識別模塊的接入及使用。
百度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