Face++-识别人脸性别年龄小例子

Face++-识别人脸性别年龄小例子


这几天在研究人脸识别,在网上发现了这个第三方的框架,Face++,想必很多人都知道了,原谅我这个渣渣现在才知道,以前我是使用Opencv学习人脸识别的,不过既然有这么好的框架(而且是免费的),于是我就花时间来学习了,用Java写了一个小Demo。
详细配置请看点击Face++环境配置


首先准备一张图片:

private String path = "E:\\FaceTemp\\a1.jpg";

这里写图片描述


接下来填写你注册Face++的应用的API Key和API Secret(首先创建应用,会自动生成的)

HttpRequests requests = new HttpRequests(KEY, SCRET, true, true);

这里写图片描述
完整代码

package com.xieth.face.test;

import java.io.File;
import org.json.JSONObject;
import com.facepp.error.FaceppParseException;
import com.facepp.http.HttpRequests;
import com.facepp.http.PostParameters;

public class FacePP {

    private final static String KEY = "ff607f454e694c74d71a4fef87263***";
    private final static String SCRET = "Pne34RlltSytBchRkOhI74k49GLY****";
    private String path = "E:\\FaceTemp\\a1.jpg";

    private HttpRequests requests = null;
    private JSONObject result = null;

    public FacePP() {
        requests = new HttpRequests(KEY, SCRET, true, true);

        PostParameters params = new PostParameters();

        params.setImg(new File(path));

        try {
            result = requests.detectionDetect(params);

            System.out.println(result);

        } catch (FaceppParseException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        new FacePP();
    }

}

返回结果:

{
    "face":[
        {
            "position":{
                "mouth_right":{
                    "y":26.141162,
                    "x":65.187797
                },
                "mouth_left":{
                    "y":26.564891,
                    "x":57.389831
                },
                "center":{
                    "y":22.276029,
                    "x":61.355932
                },
                "height":13.075061,
                "width":18.305085,
                "nose":{
                    "y":24.000412,
                    "x":61.514237
                },
                "eye_left":{
                    "y":19.823971,
                    "x":56.701017
                },
                "eye_right":{
                    "y":19.52586,
                    "x":65.671525
                }
            },
            "tag":"",
            "face_id":"71e2d01a2ffcfa1ae92ab5535abda93a",
            "attribute":{
                "age":{
                    "range":5,
                    "value":30
                },
                "gender":{
                    "value":"Male",
                    "confidence":99.9935
                },
                "race":{
                    "value":"Asian",
                    "confidence":92.5875
                },
                "smiling":{
                    "value":21.5289
                }
            }
        }
    ],
    "session_id":"3875fb2b56f040d490ed4be79b619324",
    "img_id":"ab7986078a872b5524a724e1d238827f",
    "response_code":200,
    "img_height":413,
    "img_width":295,
    "url":null
}

详细说明见下图:
这里写图片描述
这里写图片描述


服务器是以JSON数据格式进行反馈给我们的,所以我们要进行解析数据(年龄,性别)。

    try {
            result = requests.detectionDetect(params);

            JSONArray array1 = result.getJSONArray("face");

            JSONObject obj = array1.getJSONObject(0).getJSONObject("attribute");

            int age = obj.getJSONObject("age").getInt("value");
            String gender = obj.getJSONObject("gender").getString("value");
            if (gender.equals("Male")) gender = "男";
            else gender = "女";
            String race = obj.getJSONObject("race").getString("value");
            switch (race) {
            case "Asian":
                race = "黄种人";
                break;
            case "White":
                race = "白种人";
                break;
            case "Black":
                race = "黑种人";
                break;
            default:
                break;
            }

            System.out.println("年龄:" + age + "\n" + "性别:" + gender + "\n" + "肤色:" + race);

        } catch (Exception e) {
            e.printStackTrace();
        }

输出结果:

年龄:30
性别:男
肤色:黄种人

完整代码:

package com.xieth.face.test;

import java.io.File;

import org.json.JSONArray;
import org.json.JSONObject;
import com.facepp.error.FaceppParseException;
import com.facepp.http.HttpRequests;
import com.facepp.http.PostParameters;

public class FacePP {

    private final static String KEY = "ff607f454e694c74d71a4fef87263***";
    private final static String SCRET = "Pne34RlltSytBchRkOhI74k49GLY****";
    private String path = "E:\\FaceTemp\\a1.jpg";

    private HttpRequests requests = null;
    private JSONObject result = null;

    public FacePP() {
        requests = new HttpRequests(KEY, SCRET, true, true);

        PostParameters params = new PostParameters();

        params.setImg(new File(path));

        try {
            result = requests.detectionDetect(params);

            JSONArray array1 = result.getJSONArray("face");

            JSONObject obj = array1.getJSONObject(0).getJSONObject("attribute");

            int age = obj.getJSONObject("age").getInt("value");
            String gender = obj.getJSONObject("gender").getString("value");
            if (gender.equals("Male"))
                gender = "男";
            else
                gender = "女";
            String race = obj.getJSONObject("race").getString("value");
            switch (race) {
            case "Asian":
                race = "黄种人";
                break;
            case "White":
                race = "白种人";
                break;
            case "Black":
                race = "黑种人";
                break;
            default:
                break;
            }

            System.out.println("年龄:" + age + "\n" + "性别:" + gender + "\n" + "肤色:" + race);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        new FacePP();
    }

}

换一张照片:
这里写图片描述
输出结果:

年龄:13
性别:女
肤色:黄种人

哈哈 少女时代的允儿太年轻啦 ~~


这里写图片描述
再来一张:

年龄:35
性别:男
肤色:黑种人

来一张白种人小女孩
这里写图片描述

年龄:8
性别:女
肤色:白种人

2016年3月24日16:38:35 记录一下,到时候移植到安卓上。。。 嘿嘿


OpenCV (Open Source Computer Vision Library) 和支持向量机(Support Vector Machines, SVM) 结合可以用于人脸识别的机器学习应用。在PyCharm这样的集成开发环境中,你可以通过以下几个步骤创建一个简单的例子: 1. **环境设置**: - 安装必要的库:首先,确保你已经安装了Python、OpenCV、Scikit-Learn(包含SVM)和PyCharm。如果还没有安装,可以在命令行中使用`pip install opencv-python scikit-learn numpy pandas`。 2. **数据预处理**: - 获取人脸数据集,如LFW(Labeled Faces in the Wild),并将其划分为训练集和测试集。 - 对图像进行预处理,比如灰度化、缩放和归一化,以便于输入到SVM模型中。 3. **特征提取**: - 使用OpenCV的人脸检测器(如Haar cascades或HOG)从图像中提取面部区域。 - 提取关键点特征,如眼睛位置、鼻子长度等,可以使用OpenCV的描述符算法(如ORB, SIFT或SURF)。 4. **训练模型**: - 使用Scikit-Learn的SVM函数训练模型,输入是特征向量,标签是对应的人脸ID。 5. **识别过程**: - 对新的图像应用相同的预处理和特征提取步骤。 - 将提取的特征输入已训练的SVM模型,获取预测的人脸ID。 6. **PyCharm实现**: - 在PyCharm中编写Python脚本,将上述步骤整合起来,并添加交互界面,比如读取图片、显示结果等。 **示例代码片段(简化版)**: ```python import cv2 from sklearn import svm import numpy as np # ... (人脸数据预处理和特征提取部分) # 训练SVM模型 clf = svm.SVC() features = ... # 提取的特征矩阵 labels = ... # 标签列表 clf.fit(features, labels) # ... (在主循环中识别新的人脸) img_path = 'path_to_new_image.jpg' gray_img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE) ... # 应用特征提取 prediction = clf.predict(features_of_new_face)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值