1. 程式人生 > >藉助百度雲中的百度人臉識別用Java開發一個人臉識別

藉助百度雲中的百度人臉識別用Java開發一個人臉識別

效果可以微信掃一掃檢視

Java呼叫百度的介面。

示例工程也都是呼叫介面的程式碼

不知道為什麼好多人說看不懂

前提是自己會Java。知道JSON HTTP

程式碼報錯看看JDK有沒有替換成自己本地

demo可以看我的微信小程式。裡面是用的騰訊優圖和百度人臉檢測2個介面

連結的程式碼是完整的。謝謝

程式碼下載地址  http://download.csdn.net/download/u010651369/10117269

連結: https://pan.baidu.com/s/1ht3H9pq 密碼: uxxf 示例專案下載地址

想看作者做的功能效果。可以掃上面的碼在小程式檢視或者訪問

1.官網文件必須看

2.在管理中心建立應用及檢視相關引數 AppID APIKey SecretKey都需要儲存起來

3.搬磚測試

專案需要的lib包,基本下載官網的SDK就都會包含。


package com.xs.demo.common;
//相關的必要引數可以儲存到常量
public class APIConstants {
	//百度人臉識別應用id
	public static final String APPID = "管理中心獲得";
	//百度人臉識別應用apikey
	public static final String API_KEY = "管理中心獲得";
	//百度人臉識別應用sercetkey
	public static final String SERCET_KEY = "管理中心獲得";
	//百度人臉識別token 有效期一個月
	public static final String TOKEN = "為了測試,將生成的key先存一下";
}

4.獲取AccessToken

官網文件說明http://ai.baidu.com/docs#Beginner-Auth

向授權服務地址https://aip.baidubce.com/oauth/2.0/token傳送請求(推薦使用POST),並在URL中帶上以下引數:

  • grant_type: 必須引數,固定為“client_credentials”;
  • client_id: 必須引數,應用的API Key;
  • client_secret: 必須引數,應用的Secret Key;

直接在瀏覽器GET請求也可以獲取:

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=APIKEY&client_secret=SECRETKEY

//獲取AccessToken 有效期一個月
public class AITest {
	public static void main(String[] args) throws Exception {;
		String access_token_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials" +
				"&client_id="+APIContants.API_KEY
			   +"&client_secret="+ APIContants.SERCET_KEY;
		HttpResponse response = HttpUtils.doPostBD(access_token_url,new HashMap<String, String>(),new HashMap<String, String>());
		System.out.println(EntityUtils.toString(response.getEntity()));
		
	}
}
//返回的JSON資料。只需要access_token即可
{"access_token":"24.39b6fc97e87058ed6edb92ad68782c29.2592000.1492651482.11111-11111","session_key":"9mzdCP1XKXZ5yipkl7ubftudl2reGQybIG25NqWi9vqeSFFjxigLFl+WpfDW0PyUt7EP\/Uyn74r31lj3d4kVr4xkbkSk","scope":"public vis-faceverify_faceverify vis-faceattribute_faceattribute wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian wangrantest_test wangrantest_test1 bnstest_test1 bnstest_test2 ApsMisTest_Test\u6743\u9650 vis-classify_flower","refresh_token":"25.3c8370eaeb8af4f8367a38b6dbefcef9.315360000.1805419482.11111-11111","session_secret":"ff06850552b385cff19de958e435e6a4","expires_in":2592000}

5.HttpUtils工具類程式碼

package com.xiaoshuai.baidu.util;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;

/**
 * http 工具類
 */
public class HttpUtil {

    public static String post(String requestUrl, String accessToken, String params) throws Exception {
        String generalUrl = requestUrl + "?access_token=" + accessToken;
        URL url = new URL(generalUrl);
        // 開啟和URL之間的連線
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        // 設定通用的請求屬性
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setUseCaches(false);
        connection.setDoOutput(true);
        connection.setDoInput(true);

        // 得到請求的輸出流物件
        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
        out.writeBytes(params);
        out.flush();
        out.close();

        // 建立實際的連線
        connection.connect();
        // 獲取所有響應頭欄位
        Map<String, List<String>> headers = connection.getHeaderFields();
        // 遍歷所有的響應頭欄位
        for (String key : headers.keySet()) {
            System.out.println(key + "--->" + headers.get(key));
        }
        // 定義 BufferedReader輸入流來讀取URL的響應
        BufferedReader in = null;
        if (requestUrl.contains("nlp"))
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK"));
        else
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
        String result = "";
        String getLine;
        while ((getLine = in.readLine()) != null) {
            result += getLine;
        }
        in.close();
        System.out.println("result:" + result);
        return result;
    }
}

6.檢測人臉美醜及年齡

http://ai.baidu.com/docs#FACE官網文件

請求引數

是否必選 型別 說明
image string base64編碼後的圖片資料,圖片大小不超過2M。
max_face_num uint32 最多處理人臉數目,預設值1
face_fields string 包括age,beauty,expression,faceshape,gender,glasses,landmark,race,qualities資訊,逗號分隔,預設只返回人臉框、概率和旋轉角度。
  • URL引數:

引數
access_token 通過API Key和Secret Key獲取的access_token,參考“Access Token獲取
  • Header如下:
引數
Content-Type application/x-www-form-urlencoded
  • Body中資料如下:
引數
image 影象base64編碼
max_face_num 非必填,預設1
face_fields 非必填

API呼叫方式
package com.xiaoshuai.test;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.HashMap;

import org.json.JSONObject;

import com.baidu.aip.face.AipFace;
import com.baidu.aip.http.AipRequest;

public class  Test {
	public static void main(String[] args) throws Exception {
			/****************/
			String Filepath = "G:/test2.jpg";
			String image = Base64Util.encode(FileUtil.readFileByBytes(Filepath));
			String url = "https://aip.baidubce.com/rest/2.0/face/v1/detect";
			String params =  URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder.encode(image, "UTF-8")+"&face_fields=age,beauty,expression,gender,glasses,race,qualities";
			try {
				HttpUtil httpUtil = new HttpUtil();
				String result = httpUtil.post(url, "你自己獲取的accessToken", params);
				System.out.println(result);
			} catch (Exception e) {
				e.printStackTrace();
			}
	}
}

7.返回JSON字串內容

age 年齡  (目前官網還是沒有說明年齡的誤差範圍)

beauty 美醜分數 0-100 越大值越美(之前官網寫的是0-1在我發現錯誤時,提交官網,官網及時做了修改)

如花識別年齡38  美醜評分21  表示不太合理

{
  "result": [{
    "expression": 0,
    "face_probability": 1,
    "glasses": 0,
    "location": {
      "height": 155,
      "width": 136,
      "left": 103,
      "top": 49
    },
    "beauty": 21.201513290405,
    "race": "yellow",
    "expression_probablity": 0.77510279417038,
    "rotation_angle": 9,
    "yaw": 2.6519072055817,
    "roll": 10.0813331604,
    "qualities": {
      "completeness": 0,
      "occlusion": {
        "left_eye": 0,
        "chin": 0,
        "mouth": 0,
        "right_cheek": 0,
        "left_cheek": 0,
        "nose": 0,
        "right_eye": 0
      },
      "blur": 0,
      "type": {
        "cartoon": 0.0060238856822252,
        "human": 0.99397611618042
      },
      "illumination": 0
    },
    "gender_probability": 0.93728905916214,
    "age": 37.866649627686,
    "gender": "male",
    "glasses_probability": 0.99999260902405,
    "race_probability": 0.99436098337173,
    "pitch": -17.080112457275
  }],
  "result_num": 1,
  "log_id": 2045651588
}

8.SDK呼叫


/**
 * 基於百度SDK提供的方法進行呼叫
 * @author 小帥帥丶
 * @date  2017-3-20下午06:00:05
 */
public class Sample {
	public static void main(String[] args) {
        //初始化一個FaceClient
        AipFace face = new AipFace("appid","apikey","secretkey");
        //可選:設定網路連線引數
        face.setConnectionTimeoutInMillis(60000);
        face.setSocketTimeoutInMillis(60000);
        //呼叫API
        HashMap map = new HashMap();
        //
        map.put("face_fields", "age,beauty,expression,gender,glasses,race,qualities");
        String path = "G:/test2.jpg";
        AipRequest aipRequest = new AipRequest();
        aipRequest.setBody(map);
        JSONObject result = face.detect(FileUtil.readFileByBytes(path),map);
        System.out.println(result.toString(2));
	}
}

以上就是百度人臉識別API的呼叫測試流程及demo

阿里雲人臉識別API內容很少。返回只有簡單的資料。不如百度的全面。

還有一點。

阿里雲的是1分錢購買。 100000一共就這麼多請求次數。

百度不要錢,按天算請求次數。但是不保證併發。

綜上百度API可以考慮入手學習一下。絕非廣告。

開源中國與CSDN是同一個博主不存在轉載哦

http://ai.baidu.com/forum 想了解。可以去百度的論壇諮詢

不會Java就沒必要加QQ問了

QQ:783021975

相關推薦

藉助人臉識別Java開發一個人臉識別

效果可以微信掃一掃檢視 Java呼叫百度的介面。 示例工程也都是呼叫介面的程式碼 不知道為什麼好多人說看不懂 前提是自己會Java。知道JSON HTTP 程式碼報錯看看JDK有沒有替換成自己本地 demo可以看

分享鏈接 Python 3網絡爬蟲開發實戰 ,崔慶才著

51cto 開發實戰 c4c oss tps ces 技術 分享 col 分享百度雲鏈接 Python 3網絡爬蟲開發實戰 ,崔慶才著 百度雲鏈接: https://pan.baidu.com/s/1cIB7etdwh8_eybTiatDbQQ分享百度雲鏈接 Python

結合平臺和微信公眾平臺進行開發(一)

    套話大話我就不說了,網上一大堆,我們就直接進入正題吧,相信對百度雲平臺和微信公眾平臺沒有了解的也不會關注這篇文章。 上面的標題到底是個什麼意思呢?下面讓我們一步一步來完成一個測試小專案。 兩者是怎樣結合的? 利用百度雲平臺執行我們自己的服務端專案,在平臺上線執行。利

五:JAVA一個阿裏VPC Open API調程序

外部jar包 ef7 dac java 方式 命令 pro ng- 自動化管理 用JAVA寫一個阿裏雲VPC Open API調用程序 摘要:用JAVA拼出來Open API的URL 引言 VPC提供了豐富的API接口,讓網絡工程是可以通過API調用的方式

關於命令列javac 編譯成功, java 執行 class 檔案出現 “ 找不到或無法載入主類 ” 的問題

javac編譯成功,用java執行class檔案出現“找不到或無法載入主類”的問題所在 學習android,順便又學習下java. 在這裡推薦Mars老師的視訊,很好用,無論是Java4Android還是Android開發系列視訊教程都很好http://www.marschen.com/ 入門就遇到這樣的問

Java設計一個程式,找到一個字串對稱字串的個數【面試題】

題目要求: 用Java設計一個程式,實現一個字串的對稱個數,如字串"effeghg",有"ff","effe","ghg"這三個對稱字元,所以返回3. 我實現的思路就是遍歷這個字串, 先選定頭位置為第一個字元,然後從最後向前遍歷這個字串, 頭尾兩個字元相同,則取中間字串,

HiveLIKE查詢使用萬字元'%'的一個BUG--當轉義符'\'遇到萬字元'%'或'_'

在Hive開發過程中遇到這樣一個問題: 例如表T001的欄位col1裡面存有’ABC\DEF’這樣的資料,在Oracle中,我可以通過下面這樣的SQL將其查出: SELECT * FROM T001 WHERE COL1 LIKE ‘ABC\%’; ‘\’不會將’%’進行轉

架構師在職場的忠告

  1.工具不能代替思考 在我多年的諮詢工作和與許多組織和管理者的共事中,我發現了修復問題的共同套路,那就是管理人員相信工具可以“解決”給出的問題。當問題域被理解透徹,並且不可能有很多例外,以及每個人的行為方式相同的時候,這樣的做法很管用。不幸的是,很多現實問題並非如此。

樹莓派+打造人臉識別門禁系統

先註冊一個百度雲賬號: 然後點選左上角的百度雲進入首頁: 在首頁中選擇產品,人工智慧,人臉識別,點選進入: 選擇立即使用: 在以下頁面中由於沒用應用,因此點選建立應用,然後直接寫上應用名和應用描述就行了,人臉識別的功能都全部預設有了,由於我已經建立好了,因此我點選管

微信小程式(利用後臺進行人臉識別

takePhoto() { const ctx = wx.createCameraContext() ctx.takePhoto({ quality: 'high', success: (res) => { t

人臉識別- 獲取token+輸出圖片人臉檢測的資訊

使用thinkPHP框架 來獲取人臉識別的token。在application中的common中新建一個function.php/獲取access_token function request_post($url = '', $param = '') {

古董局網盤資源連結全集分享

古董局中局百度雲 http://www.whqfd.com/news/hangye/421.html 古董局中局點評一口氣看了三集,只能說小說畢竟第一人稱,改編成影視劇上帝視角肯定有一些東西要省略了,這是沒辦法的,但是盡所能的改得合理。劇情絲絲入扣,節奏明快鮮明,演員演技全員線上。給片方點贊,每出現一個古

人臉識別獲取access_token

最近在做人工智慧人臉識別的小程式,每張照片都應有一個唯一的字串。這裡我們採用guid來生成唯一的字串。// 生成guid function guid(){ if (function_exists('com_create_guid')) { return

虛擬主機的網站不能載入靜態js、css和images等檔案的解決方案

百度雲虛擬主機下配置個人網站不能載入靜態js、css和images等檔案時,需要在webroot(網站根目錄)下建立bcloud_nginx_user.conf,在這個檔案裡面設定載入靜態檔案資源。 為什麼要配置這個檔案呢?因為虛擬主機預設採用了動態配置資源的方式,如果要載

如何使用人臉識別服務(V3版介面python語言)(二)初識SDK

上次我們講到了如何新建一個面部識別的應用,現在我們就可以開始使用這個服務了 下載SDK有多種方法,我就不多說,提供一種最簡單的方法:直接使用pip安裝 開啟Windows的cmd(命令提示符) 輸入 pip ins

ASP.NET MVC5 ueditor富文本編輯器的使用

編譯時間 文本編輯器 ida height git aid asp ueditor jquery 隨著網站信息發布內容越來越多,越來越重視美觀,富文本編輯就是不可缺少的了,眾多編輯器比較後我選了百度的ueditor富文本編輯器。 百度ueditor富文本編輯器分為兩種一種

Android推送 推送 入門篇

cep 控制臺 通過 esc port key 開發 manage class 轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/27231237如今app基本都有推送的功能。於是看了下百度雲的推送,官方文

《CDH集群搭建視頻資料》網盤下載

百度 eight 鏈接 百度雲 bsp col 密碼 tar 視頻資料 《CDH集群搭建視頻資料》百度雲下載 鏈接: http://pan.baidu.com/s/1i5DVBlb 密碼:2mny《CDH集群搭建視頻資料》百度雲網盤下載

新浪、阿裏、谷歌、亞馬遜

存在 實現 常用 sof ava 解決 http 只需要 產品 新浪雲:http://sae.sina.com.cn/ 阿裏雲:http://www.aliyun.com/百度雲:http://yun.baidu.com/谷歌雲:https://developers.go

SQLyog簡介及其功能(附盤下載地址)

++ 基本 記錄 導出 對數 簡介 sam 接口 管理 一、軟件簡介   SQLyog 是一個快速而簡潔的圖形化管理MYSQL數據庫的工具,它能夠在任何地點有效地管理你的數據庫。SQLyog是業界著名的Webyog公司出品的一款簡潔高效、功能強大的圖形化MySQL數據庫管