Android開發初體驗之face++人臉識別加靜默拍照
最近由於公司業務方面的需要,簡單研究了一下人臉識別方面的問題,在這裡分享一下最近使用的心得和一些技術要點,主要分為以下幾個方面:
- 人臉識別的api介面提供商
- 本文使用api介面
- 相關文件的使用
- 靜默拍照的整合
人臉識別的api介面提供商
①GOOGLE CLOUD VISION API
②FACE++
③阿里
④漢王智遠
⑤雲從科技
這些是網上幾家比較有名的可以提供人臉識別介面的供應商,根據我們的業務需求,最後從GOOGLE和FACE++這兩家選擇了服務,因為谷歌的api接口裡沒有提供年齡的這一項資料,所以最終就確定了使用face++作為我們以後開發一個方向。
本文使用api介面
本文使用的是face++的新介面,有一點比較坑的是這裡得說明一下,face++現在新的介面已經改版,之前的api還可以使用但是已經沒辦法申請key了,網上關於face++的說明文件大部分都是使用他們以前過時的api。
之前本來這塊在githup上面down了幾個demo,然後在各大部落格裡也找到了一些文件的使用方法,然後把demo直接導進我的專案了就直接用了,但是後來發現了個問題,就是照片識別的速度特別慢,當時猜測可能是申請的key過時了,所以自己又去face官網註冊了賬號,然後申請了免費試用的key,居然發現他這個免費的key居然不和你的application繫結使用(雖然申請key時候他有這個選項,但是根本沒什麼鳥用)但是後來想一想既然是試用的key所以綁不繫結都無所謂了,所以直接把key和secret直接貼上了進去,窩巢,居然不好使,通過我最後和他們客服技術支援的交流,終於發現了,原來是介面的問題,現在的key不適用於以前的介面,那個demo用的是老介面。所以,知道了這個原因之後,索性直接去看他們的官方文件說明了,然後參考了hyman的程式碼,自己改了改基本上完成的差不多了。
相關文件的使用
第一步
來到face++官方網站,註冊賬號,如果是弄demo的話自己註冊一個免費的key,然後還有一個secret,這很簡單,我就不貼圖片了。
第二步
插入一個小插曲,每天都用這個gradle,一直不知道是幹啥的,今天查了查用處。
(gradle是一個工程構建工具,java程式碼,和資原始檔需要經過sdk裡的一些程式如aapt等處理,才能形成apk包。gradle就是把那些步驟變得簡單化。相當於eclipse中的ant吧!一句話概括就是:依賴管理和任務執行。像Ruby裡面的bundler+rake,像iOS中的cocoapods,像node中的npm+grunt.通俗的講就是:你的專案需要哪些第三方庫,它幫你把它們都下載下來,並且編譯好放到指定的位置,你就直接可以import後用了。它本身是基於Apache的an…)
我呼叫的是Detect API 這裡是介面官方文件的說明
簡單說一下請求引數,api_key和api_secret就是你申請的key和secret,
url需要說明一下,現在只能通過post方式上傳url,可以上傳網路url地址或者是圖片的二進位制檔案。官網並沒有提供此方面的demo,只給了一個離線sdk的demo,這裡提供一些核心程式碼。
//CommonOperate類是Face++提供的網路請求封裝類jar包裡的,傳入key和secret
CommonOperate commonOperate = new CommonOperate(KEY, SECRET);
//得到bitmap
Bitmap bmSmall = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight());
//位元組輸出流
ByteArrayOutputStream stream = new ByteArrayOutputStream();
//bitmap圖片壓縮,這裡表示不壓縮
bmSmall.compress(Bitmap.CompressFormat.JPEG, 100, stream);
//獲取圖片的位元組陣列
byte[] arrays = stream.toByteArray();
//呼叫介面返回資料 CommonOperate.detectByte裡面封裝了 post方法
String content = new String(commonOperate.detectByte(arrays, 0, "gender,age").getContent());
//得到網路返回的資料
JSONObject jsonObject = new JSONObject(content);
靜默拍照的整合
這是最後一個功能,簡單說兩句,核心思想就是把SurfaceView調成很小很小,以及許可權的使用,此外連續拍照的時候要注意及時回收Camera相機資源,以及設定執行緒休眠,給相機充分的開啟時間,貼出部分程式碼在這裡
<!-- 呼叫相機許可權 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 讀寫SD卡許可權 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
// 對焦並拍照
private void autoFocus() {
try {
// 因為開啟攝像頭需要時間,這裡讓執行緒睡兩秒
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 自動對焦
myCamera.autoFocus(myAutoFocus);
// 對焦後拍照
myCamera.takePicture(null, null, myPicCallback);
}
// 初始化surface
@SuppressWarnings("deprecation")
private void initSurface() {
// 初始化surfaceview
if (mySurfaceView == null && myHolder == null) {
mySurfaceView = (SurfaceView) findViewById(R.id.camera_surfaceview);
// 初始化surfaceholder
myHolder = mySurfaceView.getHolder();
}
}
/**
* 開始拍照
*/
private void startTakePhoto() {
//初始化surface
initSurface();
//這裡得開執行緒進行拍照,因為Activity還未顯示完全的時候是無法進行拍照的,SurfacaView必須先顯示
new Thread() {
@Override
public void run() {
super.run();
//如果存在攝像頭
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
//獲取攝像頭
if (openFacingFrontCamera()) {
Log.i(TAG, "openCameraSuccess");
//進行對焦
autoFocus();
} else {
Log.i(TAG, "openCameraFailed");
}
}
}
}.start();
}
// 自動對焦回撥函式(空實現)
private Camera.AutoFocusCallback myAutoFocus = new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
}
};
Demo地址已經上傳:
http://download.csdn.net/download/baidu_33776259/9792475
相關推薦
Android開發初體驗之face++人臉識別加靜默拍照
最近由於公司業務方面的需要,簡單研究了一下人臉識別方面的問題,在這裡分享一下最近使用的心得和一些技術要點,主要分為以下幾個方面: 人臉識別的api介面提供商 本文使用api介面 相關文件的使用 靜默拍照的整合 人臉識別的api介面提供商 ①GOOG
Android開發初體驗
pub warn android cor big row @+ result pre 第一個Androd應用-GeoQuiz,它能給出一道道地理問題,用戶點擊TRUE或FALSE按鈕來回答屏幕上的問題,GeoQuiz及時做出反饋,首先我們來看看它完成後的樣子 1.首先我們
Face++人臉識別 android studio開發整合
最近幾年人臉識別被炒到了風口上,相對應的第三方平臺也比較多,如face++,科大訊飛,閱面科技,包括騰訊等等都有自己的人臉資料庫,以及開放的api介面,因為專案需要,因此需要在android平臺整合人臉檢測以及人臉識別技術,在此過程中也是踩了不少坑,在此,把我整合的步驟以及遇到的坑分享一下. 先
Android移動開發-在Android專案裡整合face++人臉識別的實現
“人工智慧”是今年比較火的一個名詞,甚至大多數人認為“人工智慧”是繼“IT網際網路”之後一個新的浪潮,將會是本世紀最高科技的水準。個人覺得,目前國內語音識別做的比較好的是科大訊飛,影象識別(或人臉識別)做的比較好的是face++(曠視)。 那麼,
Android之NDK開發初體驗
記得前年開始自己在專案中使用第三方so庫的時候就接觸NDK程式設計開發了,只不過哪個時候自己是輸出了”Hello Wrold~!”。如今一年多的時間過去了,回頭拾起之前的程式碼再次翻看。 概念 在閱讀文章之前我們首先了解幾個概念 JNI J
webpack初體驗之模塊化開發
dirname 所有 絕對路徑 image 內容 有一個 介紹 ctype package 寫在前面的話 上次寫過一篇關於webpack入門的博客,當時只是說借助node來完成開發,並用webpack打包以讓瀏覽器識別。其實其主要思想就是實現前端模塊化開發。 眾所周知,歷史
微信小程式之:雲開發初體驗--致我的第一個小程式
背景:一直關注微信小程式的發展,看著小程式一步步完善,一步步壯大,心裡癢癢,也想做一個自己的微信小程式,但是苦於只會前端,不會服務端,所以想法一直被卡著。現在小程式有了雲開發,很輕鬆實現後端功能,寫後端跟寫前端沒啥區別,真的是前端小夥伴們的福音啊。 經過幾個晚上的熬夜奮戰,我的第一個微信小程式正式
android OpenCV研究之動態人臉識別
轉載自:https://blog.csdn.net/u013895206/article/details/52671550 隨著直播漸漸的火起來,像抱著直播大腿的其他功能也漸漸的火起來了,比如說人臉識別。說起人臉識別用處甚廣,比如說有以這個功能為核心的app:美顏相機、美圖秀秀、SNOW等等,但是
Mono for Android—初體驗之“電話撥號器”
1、Main.axml檔案: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientat
Android Things 物聯網應用開發初體驗
Android Things 是 Google 最近推出的全新物聯網作業系統,前身是去年釋出的物聯網平臺 Brillo,除了繼承 Brillo 的功能,還加入了 Android Studio、Android SDK、Google Play 服務以及 Google 雲平臺等
開發規範:《阿里巴巴Android開發手冊》之初理解
今天一早就看見了《阿里巴巴Android開發手冊》開放下載的推送。該開發規範在阿里內部經過了長期的修繕,現已總結成冊,向所有移動開發者、技術愛好者開放,希望幫助開發者碼出高效、碼出質量,提升系統的質量、協作的高效性。粗略翻閱一遍後,總結出部分規範。日後再當
[iOS]CIDetector之CIDetectorTypeFace人臉識別
hicsg draw 修改 log uicolor div 識別 dds ack - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the
Android開發趣事記之周期性廣告
得到 roi ng- bsp 分享 zha rac sdn alt 前些天做了一個應用,由於怕影響用戶體驗,所以我將廣告設定了一下,就是每啟動軟件8次。就會彈出一次廣告。在上傳到應用寶後。竟然得到了這種結果: 看到了吧。無病毒,無廣告。看來審核人員
Spring Freamwork 開發初體驗
true blog 連接 get 添加 ons xsd 行程 detail 工具 eclipse 版本:Neon.3 Release (4.6.3) Spring Freamwork 版本:4.0.4.RELEASE 下載地
mui框架移動開發初體驗
sta lex ont json navig onu listener pla 系統 前 言 博主最近在接觸移動APP,學習了幾個小技巧,和大家分享一下。 1. 狀態欄設置
微信支付開發初體驗
這段時間由於要進行微信公眾號相關的開發,故而接觸到了微信支付。老版本的V2公眾號微信支付比較難搞,有些東西不夠規範。新版本的微信支付統一了介面,文件也比較齊全,全部接入商戶平臺(pay.weixin.qq.com)。下面簡述一下微信公眾號現金支付的開發過程。 申請微信支付
watchOS 開發 - 初體驗(使用 IB 新增 Label)
編譯環境 一、建立專案 二、查看錶盤,新增label 三、連線 四、InterfaceController apple Watch啟動原理 五、問題 六、
微信開發初體驗
微信開發初體驗 1. 微信各大開發平臺介紹 平臺 介紹 各種相關連線 微信開放平臺 主要面對移動應用/網站應用開發者,為其提供微信登入、分享、支付等相關許可權和服務
初體驗之開源Git服務Gogs
gogs搭建教程 是否覺得Gitlab吃記憶體?是否覺得高富帥和diao絲直接差的是伺服器配置?推薦一款開源的git伺服器Gogs,從此翻身做富帥; Gogs具有佔用記憶體小,速度快,併發高的特點;1核2G雲伺服器穩穩帶起; 在我體驗完Gogs給我帶來的快感以後,不得不說go
人工智慧之Python人臉識別技術,人人都能做識別!
一、環境搭建 1.系統環境 Ubuntu 17.04 Python 2.7.14 pycharm 開發工具 2.開發環境,安裝各種系統包 人臉檢測基於dlib,dlib依賴Boost和cmake 在windows中如果要使用dlib還是比較麻煩的,如果想省時間可以在an