美文网首页ndk音视频
Android NDK开发:SeetaFace2人脸识别算法简介

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

作者: itfitness | 来源:发表于2019-08-26 17:41 被阅读0次

    目录

    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

    相关文章

      网友评论

        本文标题:Android NDK开发:SeetaFace2人脸识别算法简介

        本文链接:https://www.haomeiwen.com/subject/adfdectx.html