ndk音视频

Android NDK开发:SeetaFace2人脸识别算法简介

2019-08-26  本文已影响0人  itfitness

目录

SeetaFace2简介

SeetaFace2是中科院在2016年9月开源SeetaFace1.0人脸识别引擎之后的第二代人脸识别算法,SeetaFace2包含了完整的人脸检测、面部关键点定位和人脸特征提取与比对模块,还将陆续开源人脸跟踪、闭眼检测等辅助模块。SeetaFace2所有算法提供全部源代码、注释、接口文档以及样例程序,以帮助开发者快速基于SeetaFace2开发应用。

SeetaFace2采用标准C++开发,全部模块均不依赖任何第三方库,支持x86架构(Windows、Linux)和ARM架构(Android)。SeetaFace2支持的上层应用包括但不限于人脸门禁、无感考勤、人脸比对等。
SeetaFace2是面向于人脸识别商业落地的里程碑版本,其中人脸检测模块在FDDB上的100个误检条件下可达到超过92%的召回率,面部关键点定位支持5点和81点定位,1比N模块支持数千人规模底库的人脸识别应用。
与2016年开源的SeetaFace1.0相比,SeetaFace2在速度和精度两个层面上均有数量级的提升。

引入项目

●下载SDK和模型
文件下载地址:https://github.com/seetaface/SeetaFaceEngine2/blob/master/attachment/android/README.md


这里面包含的有:
headers:提供的SDK相关的类
libraries::4个.so库
model:3个一.ats结尾的文件,提供的训练好的人脸检测、识别、和特征点的模型
●将SDK导入项目
这里由于提供的SDK类里的JNI方法对应的包名必须为(com.seeta.sdk),所以我们需要新建一个library的Module。

然后将headers里面提供的java类拷贝进去。

接下来需要将libraries中的4个so库拷贝到app Module的libs目录下。

最后需要配置下app.gradle文件。
android {
    compileSdkVersion 28
    buildToolsVersion "29.0.1"
    defaultConfig {
        applicationId "com.itfitness.seetaface2"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        //这里需要加上abiFilters 'armeabi-v7a'不能多不能少
        ndk {
            abiFilters 'armeabi-v7a'
        }
        //===============================================
    }
    //======指定jniLibs目录========
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
   //===============================
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    //将你新建的library添加到项目中
    implementation project(path: ':seetalibrary')
    //===========================
}

●将模型写到SD卡中
这里我是将模型文件放到了assets文件夹中,然后通过工具类将模型文件写到SD卡中。


工具类如下:
public class FileUtil {
    /**
     * 
     * @param context 上下文对象
     * @param oldPath assets目录中要拷贝的文件名
     * @param newPath 放到SD卡中的文件名
     */
    public static void CopyAssets(Context context, String oldPath, String newPath) {
        try {
            String fileNames[] = context.getAssets().list(oldPath);// 获取assets目录下的所有文件及目录名
            if (fileNames.length > 0) {// 如果是目录
                File file = new File(newPath);
                file.mkdirs();// 如果文件夹不存在,则递归
                for (String fileName : fileNames) {
                    CopyAssets(context, oldPath + "/" + fileName, newPath + "/" + fileName);
                }
            } else {// 如果是文件
                InputStream is = context.getAssets().open(oldPath);
                FileOutputStream fos = new FileOutputStream(new File(newPath));
                byte[] buffer = new byte[1024];
                int byteCount = 0;
                while ((byteCount = is.read(buffer)) != -1) {// 循环从输入流读取
                    // buffer字节
                    fos.write(buffer, 0, byteCount);// 将读取的输入流写入到输出流
                }
                fos.flush();// 刷新缓冲区
                is.close();
                fos.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

●添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

案例源码

https://github.com/myml666/Seetaface2

上一篇下一篇

猜你喜欢

热点阅读