精华内容
下载资源
问答
  • 效果,捕获人脸2、活体人脸识别:https://blog.csdn.net/meixi_android/article/details/88690445运行效果: 自定义获取人脸view/*** 作者:created by meixi* 邮箱:13164716840@163.com* 日期:2018/8/29 15*/...

    1、活体与照片。效果,捕获人脸

    2、活体人脸识别:https://blog.csdn.net/meixi_android/article/details/88690445

    运行效果:

    402cb12b556388b24b3008c21d108cea.png

    自定义获取人脸view

    /**

    * 作者:created by meixi

    * 邮箱:13164716840@163.com

    * 日期:2018/8/29 15

    */

    public class FaceOverlayView extends View {

    private Paint mPaint;

    private Paint mTextPaint;

    private int mDisplayOrientation;

    private int mOrientation;

    private int previewWidth;

    private int previewHeight;

    private FaceResult[] mFaces;

    private double fps;

    private boolean isFront = false;

    public FaceOverlayView(Context context) {

    super(context);

    initialize();

    }

    private void initialize() {

    // We want a green box around the face:

    DisplayMetrics metrics = getResources().getDisplayMetrics();

    int stroke = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, metrics);

    mPaint = new Paint();

    mPaint.setAntiAlias(true);

    mPaint.setDither(true);

    mPaint.setColor(Color.GREEN);

    mPaint.setStrokeWidth(stroke);

    mPaint.setStyle(Paint.Style.STROKE);

    mTextPaint = new Paint();

    mTextPaint.setAntiAlias(true);

    mTextPaint.setDither(true);

    int size = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 15, metrics);

    mTextPaint.setTextSize(size);

    mTextPaint.setColor(Color.GREEN);

    mTextPaint.setStyle(Paint.Style.FILL);

    }

    public void setFPS(double fps) {

    this.fps = fps;

    }

    public void setFaces(FaceResult[] faces) {

    mFaces = faces;

    invalidate();

    }

    public void setOrientation(int orientation) {

    mOrientation = orientation;

    }

    public void setDisplayOrientation(int displayOrientation) {

    mDisplayOrientation = displayOrientation;

    invalidate();

    }

    @Override

    protected void onDraw(Canvas canvas) {

    super.onDraw(canvas);

    if (mFaces != null && mFaces.length > 0) {

    float scaleX = (float) getWidth() / (float) previewWidth;

    float scaleY = (float) getHeight() / (float) previewHeight;

    switch (mDisplayOrientation) {

    case 90:

    case 270:

    scaleX = (float) getWidth() / (float) previewHeight;

    scaleY = (float) getHeight() / (float) previewWidth;

    break;

    }

    canvas.save();

    canvas.rotate(-mOrientation);

    RectF rectF = new RectF();

    for (FaceResult face : mFaces) {

    PointF mid = new PointF();

    face.getMidPoint(mid);

    if (mid.x != 0.0f && mid.y != 0.0f) {

    float eyesDis = face.eyesDistance();

    rectF.set(new RectF(

    (mid.x - eyesDis * 1.2f) * scaleX,

    (mid.y - eyesDis * 0.65f) * scaleY,

    (mid.x + eyesDis * 1.2f) * scaleX,

    (mid.y + eyesDis * 1.75f) * scaleY));

    if (isFront) {

    float left = rectF.left;

    float right = rectF.right;

    rectF.left = getWidth() - right;

    rectF.right = getWidth() - left;

    }

    canvas.drawRect(rectF, mPaint);

    canvas.drawText("ID " + face.getId(), rectF.left, rectF.bottom + mTextPaint.getTextSize(), mTextPaint);

    canvas.drawText("Confidence " + face.getConfidence(), rectF.left, rectF.bottom + mTextPaint.getTextSize() * 2, mTextPaint);

    canvas.drawText("EyesDistance " + face.eyesDistance(), rectF.left, rectF.bottom + mTextPaint.getTextSize() * 3, mTextPaint);

    }

    }

    canvas.restore();

    }

    DecimalFormat df2 = new DecimalFormat(".##");

    canvas.drawText("Detected_Frame/s: " + df2.format(fps) + " @ " + previewWidth + "x" + previewHeight, mTextPaint.getTextSize(), mTextPaint.getTextSize(), mTextPaint);

    }

    public void setPreviewWidth(int previewWidth) {

    this.previewWidth = previewWidth;

    }

    public void setPreviewHeight(int previewHeight) {

    this.previewHeight = previewHeight;

    }

    public void setFront(boolean front) {

    isFront = front;

    }

    }

    附上demo下载地址:https://download.csdn.net/download/meixi_android/10796011

    链接:https://pan.baidu.com/s/1lJG9S3BFH1GhXT9jypZh9w

    密码:在线回复QQ1085220040

    展开全文
  • 在第五部分《SimpleCV库的安装和简单使用》中,我们介绍了如何安装和调试SimpleCV库,并进入simplecv的shell进行了拍照和展示,后面还简单的介绍了如何编写Python脚本来完成同样的效果。 但是,要实现我们物联网...

    在第五部分《SimpleCV库的安装和简单使用》中,我们介绍了如何安装和调试SimpleCV库,并进入simplecv的shell进行了拍照和展示,后面还简单的介绍了如何编写Python脚本来完成同样的效果。

    但是,要实现我们物联网应用的效果,还需要一些更强大的函数来帮助我们完成我们想要的功能,我们现在并不需要完全理解其函数的实现原理,只需要学会合理地使用函数即可。同学们如果有兴趣也可以找找源码看一下,这样更能提高我们的代码能力。

    下面开始介绍本文的重点:

     

    人脸识别

    SimpleCV有一个很强大的函数——findHaarFeatures,这是一个在图像中搜索匹配某一种特定模式(或称cascade)的算法,在SimpleCV中自带了几种模式,包括脸、鼻子、眼睛、嘴和身体。如果必要,你也可以下载或生成你自己的模式文件。findHaarFeatures可以分析图像并从中匹配出对应的模式,然后返回匹配到的部分在图像中的位置。这就意味着,你可以从像文件或摄像头捕获的图像中匹配汽车、动物或人。

    下面以人脸识别为例,实验一下findHaarFeatures的功能。

    #coding:utf-8      //指定编码格式为utf8
    from SimpleCV import *            //导入SimpleCV所有的库
    from time import sleep 
    
    
    cam = Camera()    //初始化摄像头
    
    disp = Display()    //定义一个窗口对象
    
    while disp.isNotDone():   
        frame = cam.getImage()    //拍摄一张照片
    
        segment = HaarCascade("face.xml")    //导入face.xml文件并赋给segment
    
        autoface = frame.findHaarFeatures(segment)    //检测刚才拍到的照片中有没有人脸
    
        if ( autoface is not None ):
            face = autoface[-1].crop()   //将照片中的人脸“扣”下来
            face.save(disp)    //保存当前窗口
            face.save("myface.jpg")   //保存图片到当前目录下
            f = open('/var/www/html/face.txt', mode='w')   //打开/var/www/html/face.txt
            f.write('Nice~~~ I get your handsome face!')   //向face.txt写入一段话,用于测试
            time.sleep(5)    //5秒钟之后程序结束
    

    将上述代码编辑保存并运行后,将摄像头对准人脸拍照,过一会之后,就可以看到屏幕上会显示一张人脸,并且这张图片会保存到当前目录下。(因为树莓派性能问题,运行的比较慢)

    如果屏幕成功显示一张人脸,并且有myface.jpg保存到当前运行程序的目录下,说明人脸识别成功!

    接下来同学们就可以根据自己的需求,进一步设计自己想要实现的效果了。

    展开全文
  • 连接照相机进行人脸拍照并储存图像;对拍照图像进行人脸识别,将人脸框选;将拍照图像与储存的图像进行比对,查看相似度
  • 静默拍照人脸识别

    2017-03-24 14:38:05
    静默拍照人脸识别
  • 系列文章: ...二、JavaFX拍照:...三、百度人脸识别--人脸对比:https://blog.csdn.net/haoranhaoshi/article/details/85954440 四、人脸库对比:https://blog.csdn.net/haoranhaoshi/article/details/86302313
  • androidstudio拍照人脸识别,使用Androidstudio工具打开dome,Android自带类库,无第三方类库。
  • Android可实现录音,拍照人脸识别,调用谷歌人脸识别,代码很好很清楚
  • andrordstudio 使用自带相机拍照人脸识别 不说多,直接撸代码 源码地址andrordstudio 使用自带相机拍照人脸识别 FaceView 人脸检测类 package com.example.administrator.rlsb.util.RLJC; import android....

    andrordstudio 使用自带相机拍照与人脸识别

    不说多,直接撸代码

    源码地址andrordstudio 使用自带相机拍照与人脸识别

    FaceView 人脸检测类

    package com.example.administrator.rlsb.util.RLJC;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.PointF;
    import android.media.FaceDetector;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.widget.ImageView;
    
    import com.example.administrator.rlsb.R;
    import com.example.administrator.rlsb.util.SetImagaType;
    
    /**
     * Created by Administrator on 2019/1/24 0024.
     */
    public class FaceView extends ImageView {
        public static final String TAG = "FaceView";
        public String path;
        /**
         * 识别图片的宽高
         */
        private int imageWidth, imageHeight;
    
        private FaceDetector mFaceDetector;
    
        /**
         * 一次可识别的最大数
         */
        private int maxFace = 3;
    
        private Bitmap mFaceImage;
    
        /**
         * 存储识别的脸
         */
        private FaceDetector.Face[] mFaces = new FaceDetector.Face[maxFace];
    
        /**
         * 真实检测到的人脸数
         */
        private int mFactFaces;
    
        private float myEyesDistance;
    
        public FaceView(Context context) {
            super(context);
            init();
        }
    
        public FaceView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
        private void init() {
            BitmapFactory.Options mOptions = new BitmapFactory.Options();
            mOptions.inPreferredConfig = Bitmap.Config.RGB_565;//一定是 565,其他识别不了。
    //拿到需要识别的图片
         //   mFaceImage = BitmapFactory.decodeResource(getResources(), R.mipmap.tx, mOptions);
            mFaceImage=new SetImagaType().getFileBitmap("rlsb.jpg");
            imageWidth = mFaceImage.getWidth();
            imageHeight = mFaceImage.getHeight();
            //创建FaceDetector
            mFaceDetector = new FaceDetector(imageWidth, imageHeight, maxFace);
            //开始检测,并将检测到的人脸存到mFaces数组中
            mFactFaces = mFaceDetector.findFaces(mFaceImage, mFaces);
            Log.i("Flog", "检测到人脸数:" + mFactFaces);
        }
    
        /**
         * 对每个人脸进行画框
         */
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            Paint mPaint = new Paint();
            mPaint.setColor(Color.GREEN);
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setStrokeWidth(2);
            //对每个人脸开始画框
            for (int i = 0; i < mFactFaces; i++) {
                FaceDetector.Face face = mFaces[i];
                PointF mPoint = new PointF();
                face.getMidPoint(mPoint);
                myEyesDistance = face.eyesDistance();//得到人脸中心点和眼间距离参数
                canvas.drawRect(
                        mPoint.x - myEyesDistance,
                        mPoint.y - myEyesDistance,
                        mPoint.x + myEyesDistance,
                        (float) (mPoint.y + myEyesDistance * 1.5),
                        mPaint);
            }
        }
    
    
    
    
    }
    
    

    SetImagaType 图片处理类

    package com.example.administrator.rlsb.util;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.media.FaceDetector;
    import android.os.Environment;
    import android.util.Base64;
    import android.util.Log;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    /**
     * Created by Administrator on 2019/1/25 0025.
     */
    public class SetImagaType {
    
        /**
         * 图片旋转
         * @param bm
         * @param orientationDegree
         * @return
         */
        public static Bitmap adjustPhotoRotation(Bitmap bm, final int orientationDegree) {
    
            Matrix m = new Matrix();
            m.setRotate(orientationDegree, (float) bm.getWidth() / 2, (float) bm.getHeight() / 2);
            float targetX, targetY;
            if (orientationDegree == 90) {
                targetX = bm.getHeight();
                targetY = 0;
            } else {
                targetX = bm.getHeight();
                targetY = bm.getWidth();
            }
    
            final float[] values = new float[9];
            m.getValues(values);
    
            float x1 = values[Matrix.MTRANS_X];
            float y1 = values[Matrix.MTRANS_Y];
    
            m.postTranslate(targetX - x1, targetY - y1);
    
            Bitmap bm1 = Bitmap.createBitmap(bm.getHeight(), bm.getWidth(), Bitmap.Config.RGB_565);
    
            Paint paint = new Paint();
            Canvas canvas = new Canvas(bm1);
            canvas.drawBitmap(bm, m, paint);
    
    
            return bm1;
        }
    
    
        /**
         * 图片压缩 100一下
         * @param image
         * @return
         */
        public static Bitmap comp(Bitmap image) {
    
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
                baos.reset();//重置baos即清空baos
                image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中
            }
            ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
            BitmapFactory.Options newOpts = new BitmapFactory.Options();
            //开始读入图片,此时把options.inJustDecodeBounds 设回true了
            newOpts.inJustDecodeBounds = true;
            Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
            newOpts.inJustDecodeBounds = false;
            int w = newOpts.outWidth;
            int h = newOpts.outHeight;
            //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
            float hh = 800f;//这里设置高度为800f
            float ww = 480f;//这里设置宽度为480f
            //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
            int be = 1;//be=1表示不缩放
            if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
                be = (int) (newOpts.outWidth / ww);
            } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
                be = (int) (newOpts.outHeight / hh);
            }
            if (be <= 0)
                be = 1;
            newOpts.inSampleSize = be;//设置缩放比例
            //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
            isBm = new ByteArrayInputStream(baos.toByteArray());
            bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
            return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
        }
        /**
         * 质量压缩
         * @param image
         * @return
         */
        private static Bitmap compressImage(Bitmap image) {
    
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
            int options = 100;
            while ( baos.toByteArray().length / 1024>100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩
                baos.reset();//重置baos即清空baos
                image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
                options -= 10;//每次都减少10
            }
            ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
            Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
            return bitmap;
        }
    
    
        /**将bitmap对象保存成图片到sd卡中*/
        public static void saveBitmapToSDCard(Bitmap bitmap, String path) {
    
            File file = new File(Environment.getExternalStorageDirectory()+"/"+path);
            if(file.exists()) {
                file.delete();
            }
            try {
                FileOutputStream fileOutputStream = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, ((OutputStream)fileOutputStream));//设置PNG的话,透明区域不会变成黑色
                fileOutputStream.close();
             //   System.out.println("----------save success-------------------");
            }
            catch(Exception v0) {
                v0.printStackTrace();
            }
    
        }
    
    
        /**
         * byte[] → Bitmap
         * @param b
         * @return
         */
        public static Bitmap Bytes2Bimap(byte[] b){
            if(b.length!=0){
                return BitmapFactory.decodeByteArray(b, 0, b.length);
            }
            else {
                return null;
            }
        }
    
        /**
         * 获取 sdk bitmap
         * @param path
         * @return
         */
        public static Bitmap getFileBitmap(String path){
            BitmapFactory.Options mOptions = new BitmapFactory.Options();
            mOptions.inPreferredConfig = Bitmap.Config.RGB_565;//一定是 565,其他识别不了。
            return BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/"+path,mOptions);
        }
    
    
        /**
         * bitmap转为base64
         * @param bitmap
         * @return
         */
        public static String bitmapToBase64(Bitmap bitmap) {
            String result = null;
            ByteArrayOutputStream baos = null;
            try {
                if (bitmap != null) {
                    baos = new ByteArrayOutputStream();
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    
                    baos.flush();
                    baos.close();
    
                    byte[] bitmapBytes = baos.toByteArray();
                    result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (baos != null) {
                        baos.flush();
                        baos.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return result;
        }
        /**
         * base64转为bitmap
         * @return
         */
        public static Bitmap base64ToBitmap(String base64Data) {
            byte[] bytes = Base64.decode(base64Data, Base64.DEFAULT);
            return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
        }
    
    
        /**
         *  人脸检测
         * @param mFaceImage
         * @return
         */
        public static boolean RLJC(Bitmap mFaceImage) {
    
            int maxFace = 3;
            FaceDetector.Face[] mFaces = new FaceDetector.Face[maxFace]; //存储识别的脸
    //        BitmapFactory.Options mOptions = new BitmapFactory.Options();
    //        mOptions.inPreferredConfig = Bitmap.Config.RGB_565;//一定是 565,其他识别不了。
           //拿到需要识别的图片
            //   mFaceImage = BitmapFactory.decodeResource(getResources(), R.mipmap.tx, mOptions);
    //        Bitmap mFaceImage=new SetImagaType().getFileBitmap(ImgName);
            int imageWidth = mFaceImage.getWidth();
            int imageHeight = mFaceImage.getHeight();
            //创建FaceDetector
            FaceDetector mFaceDetector = new FaceDetector(imageWidth, imageHeight, maxFace);
            //开始检测,并将检测到的人脸存到mFaces数组中
            int mFactFaces = mFaceDetector.findFaces(mFaceImage, mFaces);
            Log.i("Flog", "检测到人脸数:" + mFactFaces);
            if (mFactFaces>0){
                return true;
            }else {
                return false;
            }
    
        }
    
    }
    
    

    StaticActivity 识别展示类

    package com.example.administrator.rlsb.util.RLJC;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.net.Uri;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import com.example.administrator.rlsb.R;
    import com.example.administrator.rlsb.util.SetImagaType;
    
    import java.io.File;
    
    public class StaticActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_static);
            FaceView mFaceView=(FaceView)findViewById(R.id.FaceView_id);
            Bitmap mFaceImage= SetImagaType.getFileBitmap("rlsb.jpg");
            mFaceView.setImageBitmap(mFaceImage);
    
    
        }
    
    
    
    }
    
    

    Main2Activity 类

    package com.example.administrator.rlsb.util.MyCarema;
    
    import android.content.Intent;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.hardware.Camera;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import com.example.administrator.rlsb.R;
    import com.example.administrator.rlsb.util.RLJC.StaticActivity;
    import com.example.administrator.rlsb.util.SetImagaType;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Main2Activity extends AppCompatActivity {
    
        private SurfaceView sfv_preview;
        private Button btn_take;
        private Camera camera = null;
        private SurfaceHolder.Callback cpHolderCallback = new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                startPreview();
            }
    
            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    
            }
    
            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                stopPreview();
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            bindViews();
            Log.i("Flog","新建拍照-1");
        }
    
        private void bindViews() {
            sfv_preview = (SurfaceView) findViewById(R.id.sfv_preview);
            btn_take = (Button) findViewById(R.id.btn_take);
            sfv_preview.getHolder().addCallback(cpHolderCallback);
    
            btn_take.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    camera.takePicture(null, null, new Camera.PictureCallback() {
                        @Override
                        public void onPictureTaken(byte[] data, Camera camera) {
    
                            //拍照处理
                            Bitmap bitmap=SetImagaType.Bytes2Bimap(data);//转Bitmap
                            bitmap=SetImagaType.comp(bitmap);//压缩
                            bitmap=SetImagaType.adjustPhotoRotation(bitmap,90);//旋转
                            SetImagaType.saveBitmapToSDCard(bitmap,"rlsb.jpg");//保存
                            boolean b= SetImagaType.RLJC(bitmap);//人脸检测
                            Log.i("Flog","是否有人脸-"+b);
                            String path = "";
                            if ((path = saveFile(data)) != null) {
                              //  Intent it = new Intent(Main2Activity.this, PreviewActivity.class);
                                Intent it = new Intent(Main2Activity.this, StaticActivity.class);
                                it.putExtra("path", path);
                                startActivity(it);
                            } else {
                                Toast.makeText(Main2Activity.this, "保存照片失败", Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                }
            });
        }
    
        //保存临时文件的方法
        private String saveFile(byte[] bytes){
            try {
                File file = File.createTempFile("img","");
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(bytes);
                fos.flush();
                fos.close();
                return file.getAbsolutePath();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "";
        }
    
    
        //开始预览
        private void startPreview(){
            camera = Camera.open();
            try {
                camera.setPreviewDisplay(sfv_preview.getHolder());
                camera.setDisplayOrientation(90);   //让相机旋转90度
                camera.startPreview();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        //停止预览
        private void stopPreview() {
            camera.stopPreview();
            camera.release();
            camera = null;
        }
    
    
    
    }
    
    
    
    

    Main2Activity 布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:orientation="vertical"
        tools:context="com.example.administrator.rlsb.util.MyCarema.Main2Activity">
    
        <SurfaceView
            android:id="@+id/sfv_preview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    
        <Button
            android:id="@+id/btn_take"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="调用系统照相机" />
    </LinearLayout>
    
    
    展开全文
  • 人脸识别拍照

    2018-11-20 14:52:54
    这个是集成了人脸捕获,并拍照人脸部分照片的demo,实现人脸拍照
  • JAVA 调用摄像头 拍照 实现人脸识别

    千次阅读 2019-12-24 23:15:18
    JAVA 调用摄像头 拍照 实现人脸识别 今天想试试百度的api 实现一下近年的热点,人脸识别,虽然咱不会,百度会呀,还免费给我无限用呀。 注册百度云账号等:略。 Java中调用摄像头,网上搜到两种方案: 手动lib...

    JAVA 调用摄像头 拍照 实现人脸识别 

    今天想试试百度的api 实现一下近年的热点,人脸识别,虽然咱不会,百度会呀,还免费给我无限用呀。

    注册百度云账号等:略。

    Java中调用摄像头,网上搜到两种方案:

    1. 手动lib添加 webcam-capture包
    2. 使用opencv库 添加opencv的maven依赖

    马上2020年了,全民都实现小康了, 怎么还会有人手动加jar包嘛。

    果断选择方案2(主要也想先了解一点点opencv,万一哪一天咱自己识别了呢)。

    依赖添加:

    // 这里使用gradle maven可以转g:a:v为xml
    implementation 'org.bytedeco:javacv-platform:1.4.1'
    implementation 'org.bytedeco.javacpp-presets:opencv-platform:3.4.1-1.4.1'

    上代码:

    @Test
    public String getBase64Face() {
        // 摄像机
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        // 格式转换器
        OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
        // 图片帧
        Frame frame = null;
        try {
            grabber.start();
            frame = grabber.grab();
            grabber.close();
        } catch (FrameGrabber.Exception e) {
            e.printStackTrace();
        }
        // 转换格式后存储
        opencv_core.Mat mat = converter.convert(frame);
        String filename = "D:\\WorkPlace\\cloud\\src\\main\\resources\\temp\\" +
            CryptoUtil.getUUID() + ".png";
        opencv_imgcodecs.imwrite(filename, mat);
        
        // 读取文件到byte[]
        FileInputStream imageStream = null;
        byte[] image = null;
        try {
            imageStream = new FileInputStream(filename);
            image = new byte[imageStream.available()];
            imageStream.read(image);
            imageStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        // BASE64 编码
        String result = Base64.getEncoder().encodeToString(image);
        return result;

     

    展开全文
  • 之前公司项目需要,研究了一下人脸识别和活体识别,并运用免费的讯飞人脸识别,在其基础上做了二次开发,添加了活体识别。项目需要就开发了张嘴和摇头两个活体动作的识别。 这里简单介绍一下当时的开发思路和一些...
  • 作者fuzheng0301,源码FaceRecognition,活体人脸识别,识别人脸,识别张嘴和摇头动作,并拍照 前段时间公司项目需要,用于活体识别验证,大多都是人脸识别,单单只是识别人脸五官,涉及到活体识别就需要收费了,...
  • h5手机拍照+人脸识别

    2021-04-21 17:10:20
    人脸识别 基础人脸识别 使用tracking.js可以帮助我们快速识别人脸 一、创建追踪对象 数组中可以写入捕获的对象,例如[“face”,“eye”,“mouth”]对应的就是脸、眼、嘴唇,记得要引入对应的文件 二、开始追踪 参数...
  • Opencv+Qt【拍照&人脸识别

    千次阅读 2017-06-10 16:49:47
    功能:打开电脑摄像头进行人脸显示,可以拍照存储到本地,最重要的是能够实现人脸的检测与识别。 一、第一部分:人脸识别先讨论人脸识别过程: 1、收集训练库,这里采用的是ORL人脸数据集,总共有40个人,每人10...
  • 之前上传的版本不能叫人脸识别,只能叫人脸检测,本次上传的版本实现了人脸识别人脸采集、训练、识别);还增加了获取摄像头分辨率列表功能;之前版本已有功能:读取电脑摄像头列表; 拍照时可以设置生成的图片...
  • 读取电脑摄像头列表; 拍照时可以设置生成的图片是否旋转顺时针90度; 图片resize相关函数;...较之前版本opencv库由2.3.1升级到2.4.9,增加人脸识别,增加函数of_getfacesize获取头像位置参数用于保存头像。
  • 为什么要做这个呢? ... 前端实现思路是什么呢? ...创建一个sql 里面存一些有权限的人员信息包含照片等 用上传的照片和sql里面的数据进行对比人脸识别 进而知道进入当前系统的人是否具有某些权限 ...
  • 实现效果: 实现步骤: 一、安装 (1)官网下载 tracking.js 的代码包官网入口 (2)npm下载 执行命令: cnpm install tracking --save 二、demo案例代码 提取照片 检测人脸 打开摄像头 停 ***demo到此结束了*** ...
  • 人脸识别拍照.rar

    2020-08-26 14:44:54
    启用了getUserMedia的方法代码,通过tracking抓取人脸,实现人脸识别功能,人脸抓取需要放的https环境才能看见实现效果,硬件摄像头必须
  • Matlab实现人脸识别

    万次阅读 多人点赞 2018-06-13 21:35:23
    人脸识别之一:查找图片中的人脸并用方框圈出 这种类似于智能手机拍照时,屏幕里那个框任务头部的红框。大致步骤为:获取RGB图片---&gt;转换为灰度图像---&gt;图像处理---&gt;人脸识别。从书中摘出的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 499
精华内容 199
关键字:

拍照识别人脸