MTCNN移植java_MTCNN移植安卓并检测视频中人脸

继续此前的文章,使用vlc播放了rtsp流媒体视频后,想检测视频中的人脸,之前采用了opencv但是遇到低头、抬头和侧脸时候,效果就不太好。所以本篇介绍如何使用mtcnn来检测视频中的人脸。

大致流程:

一、Tensorflow 模型固化

将PNet、ONet、RNet 网络参数.npy固化成.pb格式,方便java载入, 固化后的文件在assets中,文件名mtcnn_freezed_model.pb。

二、引入android tensorflow lite 库

只需在build.gradle(module)最后添加以下几行语句即可。

dependencies {

implementation fileTree(include: ['*.jar'], dir: 'libs')

implementation 'com.android.support:appcompat-v7:27.1.1'

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'

compile(name: 'libvlc-3.0.0', ext: 'aar')

implementation files('libs/androidutils.jar')

compile 'org.tensorflow:tensorflow-android:+'

implementation files('libs/libutils.jar')

}

三、新建MTCNN类

该类包含加载模型文件,并检测bitmap中的人脸

package com.cayden.face.facenet;

import android.content.res.AssetManager;

import android.graphics.Bitmap;

import android.graphics.Matrix;

import android.graphics.Point;

import android.util.Log;

import com.cayden.face.FaceApplication;

import org.tensorflow.contrib.android.TensorFlowInferenceInterface;

import java.util.Vector;

import static java.lang.Math.max;

import static java.lang.Math.min;

/**

* Created by caydencui on 2018/9/6.

*/

public class MTCNN {

//参数

private float factor=0.709f;

private float PNetThreshold=0.6f;

private float RNetThreshold=0.7f;

private float ONetThreshold=0.7f;

//MODEL PATH

private static final String MODEL_FILE = "file:///android_asset/mtcnn_freezed_model.pb";

//tensor name

private static final String PNetInName ="pnet/input:0";

private static final String[] PNetOutName =new String[]{"pnet/prob1:0","pnet/conv4-2/BiasAdd:0"};

private static final String RNetInName ="rnet/input:0";

private static final String[] RNetOutName =new String[]{ "rnet/prob1:0","rnet/conv5-2/conv5-2:0",};

private static final String ONetInName ="onet/input:0";

private static final String[] ONetOutName =new String[]{ "onet/prob1:0","onet/conv6-2/conv6-2:0","onet/conv6-3/conv6-3:0"};

private static class SingletonInstance {

private static final MTCNN INSTANCE = new MT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值