第一个Face++ Java程序

下载SDK和Demo(点此下载)

配置Eclipse环境

请确保您的电脑上有Eclipse开发环境,若没有,请参阅Eclipse网站官方说明

Ecplise新建Java项目

1. 菜单栏选择:File-->New-->Java Project。

1

2. 给你的Java项目取一个名字。去掉Use default location的对勾,选择facepp-java-sdk/Demo/FaceppDemo的目录。

2

3. 点击Next,看到如下窗口,点击Finish。3

运行你的第一个程序

1. 在Package Explorer下,找到src-->(default package)-->Test.java,双击Test.java,看到第一个程序出现。

4

2. 点击Run Test的绿色图标5开始运行。

3. 观察Console一栏的输出结果。完成!

6

程序解读

Test.java程序先识别了一张足球队的照片,得出11个队员的人脸,然后创建了11个Person,把这些人脸加入到对应的Person中,再把这些Person加入一个Group中。通过调用train和recognition来演示人脸识别API。最后删除了创建的Person。具体如下:

初始化函数HttpRequests,传入四个参数依次是API_Key,API_Secret,是否使用CN服务器,是否使用HTTP模式连接。

// replace api_key and api_secret here (note)
HttpRequests httpRequests = new HttpRequests(
    "4480afa9b8b364e30ba03819f3e9eff5",
    "Pz9VFT8AP3g_Pz8_dz84cRY_bz8_Pz8M ", true, true);

识别一张足球队的合影。

// detection/detect
result = httpRequests
    .detectionDetect(new PostParameters()
        .setUrl("http://www.faceplusplus.com.cn/wp-content" +
            "/themes/faceplusplus/assets/img/demo/9.jpg"));

创建Person,通过personAddFace添加人脸,通过setPersonName添加中文姓名,最后通过personGetInfo得到每一个Person的信息输出。

// -----------------Person-----------------
// person/create
System.out.println("\nperson/create");
for (int i = 0; i < result.getJSONArray("face").length(); ++i)
  System.out.println(httpRequests
      .personCreate(new PostParameters()
          .setPersonName("person_" + i)));

new PostParameters()
    .setPersonName("person_" + 0)
    .setFaceId(
        result.getJSONArray("face").getJSONObject(0)
            .getString("face_id")).getMultiPart()
    .writeTo(System.out);

// person/add_face
System.out.println("\nperson/add_face");
for (int i = 0; i < result.getJSONArray("face").length(); ++i)
  System.out.println(httpRequests
      .personAddFace(new PostParameters().setPersonName(
          "person_" + i).setFaceId(
          result.getJSONArray("face").getJSONObject(i)
              .getString("face_id"))));

// person/set_info
System.out.println("\nperson/set_info");
for (int i = 0; i < result.getJSONArray("face").length(); ++i) {
  new PostParameters().setPersonName("person_" + i)
      .setTag("中文 tag_" + i).getMultiPart()
      .writeTo(System.out);
  System.out.println(httpRequests
      .personSetInfo(new PostParameters().setPersonName(
          "person_" + i).setTag("中文 tag_" + i)));
}

// person/get_info
System.out.println("\nperson/get_info");
for (int i = 0; i < result.getJSONArray("face").length(); ++i)
  System.out.println(httpRequests
      .personGetInfo(new PostParameters()
          .setPersonName("person_" + i)));

创建Faceset,此处和创建Person基本一致。

// -----------------Faceset-----------------
// faceset/create
System.out.println("\nfaceset/create");
for (int i = 0; i < result.getJSONArray("face").length(); ++i)
  System.out.println(httpRequests
      .facesetCreate(new PostParameters()
          .setFacesetName("faceset_" + i)));

// faceset/add_face
System.out.println("\nfaceset/add_face");
for (int i = 0; i < result.getJSONArray("face").length(); ++i)
  System.out.println(httpRequests
      .facesetAddFace(new PostParameters().setFacesetName(
          "faceset_" + i).setFaceId(
          result.getJSONArray("face").getJSONObject(i)
              .getString("face_id"))));

// faceset/set_info
System.out.println("\nfaceset/set_info");
for (int i = 0; i < result.getJSONArray("face").length(); ++i) {
  new PostParameters().setFacesetName("faceset_" + i)
      .setTag("中文 tag_" + i).getMultiPart()
      .writeTo(System.out);
  System.out.println(httpRequests
      .facesetSetInfo(new PostParameters().setFacesetName(
          "faceset_" + i).setTag("中文 tag_" + i)));
}

// faceset/get_info
System.out.println("\nfaceset/get_info");
for (int i = 0; i < result.getJSONArray("face").length(); ++i)
  System.out.println(httpRequests
      .facesetGetInfo(new PostParameters()
          .setFacesetName("faceset_" + i)));

创建一个Group,把所有Person加入到Group中去。

// -----------------Group-----------------
// group/create
System.out.println("\ngroup/create");
System.out.println(httpRequests.groupCreate(new PostParameters()
    .setGroupName("group_0")));

// group/add_person
System.out.println("\ngroup/add_person");
ArrayList personList = new ArrayList();
for (int i = 0; i < result.getJSONArray("face").length(); ++i)
  personList.add("person_" + i);

new PostParameters().setGroupName("group_0")
    .setPersonName(personList).getMultiPart()
    .writeTo(System.out);
System.out.println(httpRequests.groupAddPerson(new PostParameters()
    .setGroupName("group_0").setPersonName(personList)));

// group/set_info
System.out.println("\ngroup/set_info");
System.out.println(httpRequests.groupSetInfo(new PostParameters()
    .setGroupName("group_0").setTag("group tag")));

// group/get_info
System.out.println("\ngroup/get_info");
System.out.println(httpRequests.groupGetInfo(new PostParameters()
    .setGroupName("group_0")));

通过trainIdentify建立人脸标识模型,再通过trainVerify建立人脸验证模型。

// -----------------Recognition-----------------

// recognition/train
JSONObject syncRet = null;

System.out.println("\ntrain/Identify");
syncRet = httpRequests.trainIdentify(new PostParameters()
    .setGroupName("group_0"));
System.out.println(syncRet);
System.out.println(httpRequests.getSessionSync(syncRet
    .getString("session_id")));

System.out.println("\ntrain/verify");
for (int i = 0; i < result.getJSONArray("face").length(); ++i) {
  syncRet = httpRequests.trainVerify(new PostParameters()
      .setPersonName("person_" + i));
  System.out.println(httpRequests.getSessionSync(syncRet.get(
      "session_id").toString()));
}

调用recognitionIdentify标识了一张孙燕姿的照片,console中将输出识别成功,但confidence只有10%。

// recognition/recognize
System.out.println("\nrecognition/identify");
System.out
    .println(httpRequests
        .recognitionIdentify(new PostParameters()
            .setGroupName("group_0")
            .setUrl("http://www.faceplusplus.com.cn/wp-content/themes/"
                    "faceplusplus/assets/img/demo/5.jpg")));

调用recognitionVerify验证了两张人脸图片,一张返回True一张返回False。

// recognition/verify
System.out.println("\nrecognition/verify");
System.out.println(httpRequests
    .recognitionVerify(new PostParameters().setPersonName(
        "person_0").setFaceId(
        result.getJSONArray("face").getJSONObject(0)
            .getString("face_id"))));
System.out.println(httpRequests
    .recognitionVerify(new PostParameters().setPersonName(
        "person_1").setFaceId(
        result.getJSONArray("face").getJSONObject(0)
            .getString("face_id"))));