1. 程式人生 > >Android開發初體驗之face++人臉識別加靜默拍照

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++(曠視)。 那麼,

AndroidNDK開發體驗

記得前年開始自己在專案中使用第三方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]CIDetectorCIDetectorTypeFace人臉識別

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