精华内容
下载资源
问答
  • Matlab实现人脸识别

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

     最近在学习matlab图像处理部分,发现人脸识别这一块非常好玩,在这里做个总结。

    人脸识别之一:查找图片中的人脸并用方框圈出

               这种类似于智能手机拍照时,屏幕里那个框任务头部的红框。大致步骤为:获取RGB图片--->转换为灰度图像--->图像处理--->人脸识别。从书中摘出的代码如下:

    clear all
    clc
    
    %获取原始图片
    i=imread('face.jpg');
    I=rgb2gray(i);        
    BW=im2bw(I);             %利用阈值值变换法将灰度图像转换成二进制图像
    figure(1);
    imshow(BW);
    %最小化背景
    [n1 n2]=size(BW);
    r=floor(n1/10);
    c=floor(n2/10);
    x1=1;x2=r;
    s=r*c;
    
    for i=1:10
        y1=1;y2=c;
        for j=1:10
            if(y2<=c || y2>=9*c) || (x1==1 || x2==r*10)
                loc=find(BW(x1:x2,y1:y2)==0);
                [o p]=size(loc);
                pr=o*100/s;
                if pr<=100
                    BW(x1:x2,y1:y2)=0;
                    r1=x1;r2=x2;s1=y1;s2=y2;
                    pr1=0;
                end
                imshow(BW);
            end
            y1=y1+c;
            y2=y2+c;
        end
        x1=x1+r;
        x2=x2+c;
    end
    figure(2)
    subplot(1,2,1);
    imshow(BW)
    title('图像处理');
    %人脸识别
    L=bwlabel(BW,8);
    BB=regionprops(L,'BoundingBox');
    BB1=struct2cell(BB);
    BB2=cell2mat(BB1);
    
    [s1 s2]=size(BB2);
    mx=0;
    for k=3:4:s2-1
        p=BB2(1,k)*BB2(1,k+1);
        if p>mx && (BB2(1,k)/BB2(1,k+1))<1.8
            mx=p;
            j=k;
        end
    end
    subplot(1,2,2);
    title('人脸识别');
    imshow(I);
    hold on;
    rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j)],'EdgeColor','r')

    实验效果图:

                                

    从实验效果图中,可以看出红框框出了人脸部分。

     

    人脸识别之二:由输入的人像识别出数据库中人像

          这种情况类似于手机人脸解锁,通过当前的人脸去和保存的人脸做比对来实现解锁等功能;从网上看了好多资料,由于个人能力有限大多都没仿真出来,最后通过学习PCA算法,了解到可通过PCA算法对输入矩阵降维,提取特征值和特征向量的方式来做人脸比对。具体的PCA的东西在这里不作介绍,主要介绍一下如何实现人脸比对。

          大致步骤:制作人脸数据样本--->PCA提取样本数据特征值--->人脸比对

    1.人脸样本

           从网上搜集了10张人脸图片,来制作成样本。

                               

    %读取转换10张图片,生成数据矩阵
    function ImgData = imgdata()  
    %导入图片
    picture1 = rgb2gray(imread('1.jpg')); 
    picture2 = rgb2gray(imread('2.jpg')); 
    picture3 = rgb2gray(imread('3.jpg')); 
    picture4 = rgb2gray(imread('4.jpg'));   
    picture5 = rgb2gray(imread('5.jpg'));  
    picture6 = rgb2gray(imread('6.jpg')); 
    picture7 = rgb2gray(imread('7.jpg'));  
    picture8 = rgb2gray(imread('8.jpg'));   
    picture9 = rgb2gray(imread('9.jpg'));
    picture10 = rgb2gray(imread('10.jpg'));  
    [m,n] = size(picture1); 
    picture_ten = {picture1,picture2,picture3,picture4,picture5,picture6,picture7,picture8,picture9,picture10};  
    for i=1:10 
        %把m*n的矩阵变换成1*(m*n)的矩阵  
        ImgData(i,:) = reshape(picture_ten{i},1,m*n);  
    end  
    %数据范围缩小到0到1之间  
    ImgData = double(ImgData)/255;  
    
    

    2. PCA分析

    function Cell_ten = PCA(imgdata,k)  
    [m,n] = size(imgdata);    
    img_mean = mean(imgdata); %计算每列平均值  
    img_mean_ten = repmat(img_mean,m,1); %复制m行平均值至矩阵img_mean_ten 
    Z = imgdata - img_mean_ten;  
    T = Z'*Z;%协方差矩阵      
    [V,D] = eigs(T,k); %计算T中最大的前k个特征值与特征向量  
    img_new = imgdata*V*D;  %低维度下的各个人脸的数据  
    Cell_ten = {img_new,V,D};

    3.通过输入测试人脸从数据库中找到相对应人脸

    function face=  facefind(Cell_ten,testdata)%此函数代码借鉴于他人,还未征求其同意,这里就暂时略过

    这里testdata是测试图片的数据

    4.主程序调用

    img=imgdata(); %图片矩阵数据
    Cell_ten=PCA(img,2);% PCA
    face1=facefind(Cell_ten,imread('test.jpg'));%识别
    subplot(1,2,1)
    imshow('test.jpg')
    title('测试图像')
    subplot(1,2,2)
    imshow(strcat(num2str(face1),'.jpg'))
    title('数据库图像')

    测试效果:

                                        

    使用这个方式可以实现简单的人脸识别,但精确度不高;使用神经网络会使精确度大幅度提高,再接再厉,学习使用神经网络实现人脸识别。此文介绍原理性的东西较少,现在对于介绍这一方面,本人比较欠缺,今后的日子里会更新些算法学习的东西。

    展开全文
  • Termux玩耍指北——手机实现人脸识别前的其它准备 上一篇文章只写了人脸识别的核心需求,仅仅是实现识别的模块部分。还差获取摄像头数据部分。这部分暂时对需要准备的基础软件的安装及常见的问题进行简单介绍。 目前...

    Termux玩耍指北——手机实现人脸识别前的其它准备

    上一篇文章只写了人脸识别的核心需求,仅仅是实现识别的模块部分。还差获取摄像头数据部分。这部分暂时对需要准备的基础软件的安装及常见的问题进行简单介绍。
    目前所作工作皆为准备工作,具体实际工作是否需要这些暂时未知,是否遇见问题未知。

    模块介绍

    cv2

    根据Face_Recognition项目工程示例要实现视频实时人脸识别是需要opencv支持。此模块可以通过pip进行安装,命令如下:
    pip install opencv-python
    此模块可以在python中进行引用。

    Termux-api

    Termux-api模块为Termux的权限拓展插件,可以调用手机的很多权限,包括调用相机。此需要安装app以及在Termux中安装相应程序。由于涉及app下载安装问题,请自行点击上方传送门详细了解此模块。
    主要说一下安装这个模块的一些问题:
    1、安装好app后需要授予自启动权限,授予相应其它权限。否则在Termux中执行命令只是在挂起状态。
    2、目前测试相机功能只能有一个可选参数传入,为选择前后摄像头(默认后摄像头)。不能实现录像功能,也不能实现对焦后拍照。多摄像头不清楚具体调用的是哪一个。一句话:能用,但不好用。

    安装Termux-api的python模块,命令如下:
    pip install termux-api
    此模块具体使用方式还没测试,命令行界面没法使用-符号。

    结尾

    今天就写到这,后续有什么再补充,欢迎来交流。

    展开全文
  • 主要介绍了Html5调用手机摄像头并实现人脸识别的实现,混合App开发,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Html5调用手机摄像头并实现人脸识别

    万次阅读 2018-12-03 10:48:11
    在混合App开发中,如何在Web中调用本地摄像头并实现人脸识别功能?本文给出了一个解决方案,并给出了该方案的核心代码,其中前端使用vue,该方案适配了Android手机

    需求

    混合App开发,原生壳子+webApp,在web部分调用原生摄像头功能并且在网页指定区域显示摄像头内容,同时可以手动拍照并进行人脸识别,将识别结果显示在网页上。

    技术栈

    vue、Html5、video标签、Android、IOS、百度AI

    分析

    1、使用navigator.mediaDevices.getUserMedia调用系统原生摄像头功能
    2、video标签显示摄像头内容
    3、canvas标签获取图片
    4、将图像上传服务器,通过百度AI识别图片
    5、web显示识别结果

    核心代码

    1、调用系统原生摄像头功能并使用video标签显示

     html:
          <video
            id="webcam"
            :style="videoStyle"
            :width="videoWidth"
            :height="videoHeight"
            loop
            preload
          >
          </video>
    
    JavaScript:
     initVideo() {
          let that = this;
          this.video = document.getElementById("webcam");
          setTimeout(() => {
            if (
              navigator.mediaDevices.getUserMedia ||
              navigator.getUserMedia ||
              navigator.webkitGetUserMedia ||
              navigator.mozGetUserMedia
            ) {
              //调用用户媒体设备, 访问摄像头
              this.getUserMedia(
                {
                  video: {
                    width: {
                      ideal: that.videoWidth,
                      max: that.videoWidth
                    },
                    height: {
                      ideal: that.videoHeight,
                      max: that.videoHeight
                    },
                    facingMode: "user",    //前置摄像头
                    frameRate: {
                      ideal: 30,
                      min: 10
                    }
                  }
                },
                this.videoSuccess,
                this.videoError
              );
            } else {
              this.$toast.center("摄像头打开失败,请检查权限设置!");
            }
          }, 300);
        },
         getUserMedia(constraints, success, error) {
          if (navigator.mediaDevices.getUserMedia) {
            //最新的标准API
            navigator.mediaDevices
              .getUserMedia(constraints)
              .then(success)
              .catch(error);
          } else if (navigator.webkitGetUserMedia) {
            //webkit核心浏览器
            navigator.webkitGetUserMedia(constraints, success, error);
          } else if (navigator.mozGetUserMedia) {
            //firfox浏览器
            navigator.mozGetUserMedia(constraints, success, error);
          } else if (navigator.getUserMedia) {
            //旧版API
            navigator.getUserMedia(constraints, success, error);
          }
        },
        videoSuccess(stream) {
          this.mediaStreamTrack = stream;
          this.video.srcObject = stream;
          this.video.play();
        },
        videoError(error) {
          console.error(error);
          this.$toast.center("摄像头打开失败,请检查权限设置!");
        },
    

    2、canvas获取摄像头图片

    JavaScript:
     this.canvas = document.createElement("canvas");
      ....
     let context = this.canvas.getContext("2d");
     context.drawImage(this.video, 0, 0, this.videoWidth, this.videoHeight);
     this.imgSrc = this.canvas.toDataURL("image/png");
    
    

    3、调用百度AI识别图片

    JavaScript:
            let that = this;
            let base64Data = this.canvas.toDataURL();
            let blob = this.dataURItoBlob(base64Data);           //
            var file = new FormData();
            file.append("file", blob);
            file.append("key", that.uuid);
            util.ajax
              .post("XXXXXXXXXX", file, {
                headers: {
                  "Content-Type": "multipart/form-data"
                }
              })
              .then(function(response) {
                if ((response.status = 200)) {
                    .....识别成功,显示结果
                } else {
                    ......识别失败
                }
              })
              .catch(function(error) {
                console.error(error);
              });
              
        //base64转换为Blob
        dataURItoBlob(base64Data) {
          var byteString;
          if (base64Data.split(",")[0].indexOf("base64") >= 0)
            byteString = atob(base64Data.split(",")[1]);
          else byteString = unescape(base64Data.split(",")[1]);
          var mimeString = base64Data
            .split(",")[0]
            .split(":")[1]
            .split(";")[0];
          var ia = new Uint8Array(byteString.length);
          for (var i = 0; i < byteString.length; i++) {
            ia[i] = byteString.charCodeAt(i);
          }
          return new Blob([ia], { type: mimeString });
        },
    

    手机适配

    1、由于Android6之后,Android的权限管理出现变化,Android原生的壳子,需要做如下处理:

    myWebView.setWebChromeClient(new WebChromeClient() {
    
             @TargetApi(Build.VERSION_CODES.LOLLIPOP)
             @Override
             public void onPermissionRequest(final PermissionRequest request) {
                       request.grant(request.getResources());
            }
    });
    

    2、IOS系统,Safari11之后可用
    3、OverconstrainedError错误,部分Android手机会报OverconstrainedError错误,原因是摄像头参数设置不合理,找不到指定设置。





    好家伙,随手就是一个赞~

    在这里插入图片描述
    给作者买瓶咖啡提提神~




    我的视频课

    下面是我录制的一些视频课,欢迎大家围观~

    《彻底搞定JVM》

    JVM是Java中重要的也是较难理解的内容;
    面试者对JVM的了解程度某种程度上反映了面试者技术深度,所以JVM也是面试时经常考察的内容;
    本课程从JVM运行流程、数据运行时区域组成部分、类加载机制、垃圾回收机制、内存模型、常见面试题讲解等角度出发,帮你彻底搞定JVM,拿下心仪Offer;

    《Android性能优化参考》

    本课程包含了Android中的App启动优化、UI优化、内存优化、图片优化、耗电量等常见的性能优化场景,通过学习此课程,你将对整个Android性能优化体系有清晰的认识。

    性能优化作为Android高级开发的必备技能,也是大厂面试必考的题目,是体现一个人技术深度最好的试金石。

    《面试之排序算法》

    排序算法是我们面试被问到最多的基础算法,本课程详细介绍了七种排序算法,包括插入排序、选择排序、冒泡排序、谢尔排序、快速排序、堆积排序和二路并归排序。每种算法都详细介绍了核心思想、详细步骤、时间复杂度和代码实现,希望帮助大家深入理解排序算法,搞定面试!

    《Android HyBrid App开发实战》

    本课程为Android HyBrid App开发实战课程,由浅入深,从三种App的历史和特点开始,介绍了Android WebView的使用、Java和JS交互的原生方式、著名的WebView安全漏洞、JSBridge的原理和使用,最后通过一个网上商城的实战综合全部内容,让同学们掌握并深入理解Android HyBrid App开发。

    《AI导论》

    介绍人工智能AI的诞生历史和到现在为止的不同发展阶段;介绍了AI领域中常见的名词概念和其关系,包括机器学习、深度学习、神经网络结构搜索 NAS、生成对抗网络 GAN等;最后对AI发展做出展望。
    本课程属于导论课程,旨在帮助同学们从宏观层面把握AI,建立AI的知识体系。

    《Java注解精讲》

    本课程详细介绍了Java中的注解机制,包括注解的定义和分类,注解的使用和自定义,注解的源码和架构分析;
    本课程语言简单凝练,视频短小精悍,让你一次彻底搞懂Java注解!

    《Java反射精讲》

    反射是Java中重要的也是较难理解的内容;
    本课程从反射的定义、作用、原理和使用出发,全方位帮你彻底搞定反射;

    展开全文
  • 实现人脸识别APP(一)

    2021-05-05 20:46:34
    接下来,我们来部署一个稍微复杂点项目,教你如何在手机上来实现一个人脸识别应用。 这个应用由两个模型组成,由人脸检测和人脸识别模型组成,我们这里实现的只是一个simple版的。一个人脸识别应用除了人脸检测和...

    导读

    前面我们介绍了如何使用ncnn来构建一个基于mobilenet的图像分类应用,通过这个项目大家已经熟悉在移动端上部署深度学习模型的整个流程以及每个步骤。接下来,我们来部署一个稍微复杂点项目,教你如何在手机上来实现一个人脸识别应用。

    这个应用由两个模型组成,由人脸检测人脸识别模型组成,我们这里实现的只是一个simple版的。一个人脸识别应用除了人脸检测人脸识别之外还包括活体检测姿态检测质量评估等模块。如果大家有兴趣,后期可以在我的项目上进行扩展

    现在人脸识别的应用已经随处可见了,刷脸支付登录考勤解锁犯罪分子的追踪等等。人脸识别系统中主要由活体检测人脸检测人脸识别三个部分组成,在某些应用中活体检测模块可以省略。

    活体检测

    活体检测的主要目的是为了抵御照片视频面具屏幕翻拍等攻击手段,从而帮助用户甄别欺诈行为,保障用户的利益,避免用户信息被窃取以及金额被盗刷等情况。

    目前常用的活体检测手段主要包括用户配合式以及静默式的两种手段。其中用户配合式主要是通过让用户做指定的动作,如张嘴眨眼摇头点头手摸额头手摸耳朵等动作,还有些系统会生成一个随机的数字让用户朗读等。静默式的活体检测是直接利用照片来判断用户的刷脸行为是否是正常的,而不是恶意的攻击系统。静默式的活体检测主要有两种方式,第一种使用红外摄像头或者3D摄像头等,第二种是直接利用RGB照片来判断,也有通过变换屏幕颜色照射在人脸和屏幕以及照片的特征差异来判断

    通常对于安全要求等级高的情况下,如刷脸支付,采用的活体验证方式通常都是利用红外摄像头3D摄像头来做活体验证。相对来说,由于3D和红外摄像头的成本比较高,所以没法大面积普及对安全等级要求不高的会采用RGB照片来做活体验证,有的也会采用用户配合式的活体验证,后者的用户体验相对来说会差些。

    人脸检测

    人脸检测模型主要是用来检测图片中人脸的位置以及关键点的位置,关键点的位置通常使用的是左眼右眼鼻子左嘴角右嘴角这5个点的坐标,通过这5个关键点的信息和人脸的位置做一个人脸对齐,因为有的时候检测到的人脸会是歪着或偏着,这样不利于后面的人脸识别模型提取人脸特征,所以需要先检测人脸然后做人脸对齐。

    人脸识别

    人脸识别模型是将对齐过的人脸照片进行特征提取,将人脸照片映射到一个高维的向量空间,向量中包含了人脸的特征信息。在进行人脸比对或搜索的时候,通过计算向量之间的相似度或者距离,找到相似度最大的或距离最小的向量所对应的人脸身份信息,通常在找到最相似的人脸时(相似度最大或距离最小)还会增加一个阈值的限定条件,避免匹配错误导致的系统风险。

    一般人脸识别接口除了返回人脸比对的相似度之外,还会返回一个相似度阈值对应的误识别率,通常阈值越大误识别率越低,同时通过率也会降低。
    在这里插入图片描述

    展开全文
  • 微信公众号实现人脸识别功能

    千次阅读 2020-04-03 14:47:07
    类似于某些app实现人脸识别登陆功能,在微信公众号实现人脸识别功能,该功能之适用于安卓手机,因为限于苹果手机权限管理严格无法调起苹果手机的摄像头,所以苹果手机只能通过微信jssdk的方式去调起摄像头拿到照片;...
  • 用树莓派实现人脸识别打卡门禁系统的构建背景功能硬件效果源码摄像头测试代码录入信息人脸识别结论 背景 源于实习公司的人脸识别打卡系统,完成之前的项目后正好没有事情干,于是想到了这个,公司的这个打卡系统操作...
  • 前言 之前有新闻报道,素有“科技城”之称的美国加利福尼亚州城市旧金山通过了一项“反科技”政策:禁止政府部门使用人脸识别技术。而且禁止的还是很彻底,任何警察,交管...就比如说手机上的人脸识别技术解锁等,这...
  • 很多手机图片管理应用都开始集成人脸识别功能。一提到人脸识别,模式识别,滤波,BlahBlah 一堆复杂的技术名字戳入脑海中,立刻觉得这玩意儿没法碰,太玄乎了。其实Android SDK从1.0版本中(API level 1)就已经集成...
  • 资源:现在我们可以通过人脸识别进行登录和注册,比如使用一登SDK集成,或者Facecore SDK集成,前后者都需要编程的基础,但幸运的是APICloud集成了一登的模块!废话不多说了! 方法:一、注册一登账号并创建应用 1...
  • 我想做的是基于人脸识别的表情(情绪)分析。看到网上也是有很多的开源库提供使用,为开发提供了很大的方便。我选择目前用的比较多的dlib库进行人脸识别与特征标定。使用python也缩短了开发周期。 官网对于dlib的...
  • 不然就只能离线用,总不能装个样子,简单看了下虹软Demo,下面决定用这种简单方法实现在线人脸识别: Android端(虹软Demo)取出人脸信息和姓名,人脸信息写入.data文件,存入手机本地------&gt;取出文件上传至...
  • 用AndroidSDK中的Face Detector实现人脸识别 很多手机图片管理应用都开始集成人脸识别功能。一提到人脸识别,模式识别,滤波,BlahBlah 一堆复杂的技术名字戳入脑海中,立刻觉得这玩意儿没法碰,太玄乎了。其实...
  • 不用担心,不用着急,基于最新的人脸识别 + 手机推送做出的 BossComing。老板站起来的时候,BossComing 会通过人脸识别发现老板已经站起来,然后通过手机推送发送通知 “BossComing”,并且震动告诉你有情况。 很多...
  • 1.安装依赖 npm install tracking 2.封装组件 <template> <div class="camera_... accept属性兼容某些华为手机调用摄像头,打开的是文件管理器的问题 --> <input type="file" id="file" accep
  • 人脸识别在现实生活中有非常广泛的应用,例如智能手机的的识别人脸解锁屏幕、人脸识别考勤机、人脸识别开门禁、刷脸坐高铁,还有识别人脸虚拟化妆、美颜,甚至支付宝还推出了刷脸支付、银行还实现了刷...
  • 人脸识别在现实生活中有非常广泛的应用,例如智能手机的的识别人脸解锁屏幕、人脸识别考勤机、人脸识别开门禁、刷脸坐高铁,还有识别人脸虚拟化妆、美颜,甚至支付宝还推出了刷脸支付、银行还实现了刷...
  • 人脸识别

    2019-09-02 19:48:22
    人脸识别1 人脸识别1.1 人脸检测、人脸验证、人脸识别1.2 单样本学习1.3 孪生网络 (Siamese Network)1.4 三元组损失函数1.5 基于孪生网络的二分类系统实现人脸识别1.6 一个节约时间的方法2 神经风格迁移2.1 什么是...
  • 调用百度人脸识别的接口,给视频画面中出现的小姐姐打分 自动给颜值 70 以上的小姐姐的视频点赞 有趣的是,根据抖音的推荐算法,连着刷几天之后,抖音里给你推荐的全是漂亮小姐姐了。 0. 成果展示 先演示一下...
  • 使用Face++接口实现简单的人脸识别和人脸追踪。 ##Face++ Face++是北京旷视科技有限公司旗下的新型视觉服务平台,Face++平台通过提供云端API、离线SDK、以及面向用户的自主研发产品形式,将人脸识别技术广泛应用到...
  • Unity使用face++实现人脸识别

    千次阅读 2017-12-29 12:46:16
    登录界面 :https://console.faceplusplus.com.cn/login如果没有注册,就先注册一个账户,注册也比较方便点击验证手机或邮箱按钮后,进行手机验证,验证成功后,跳转到如下页面上面信息填写完整后,点击 创建 按钮,...
  • 参加一个比赛,指定用虹软的人脸识别功能,奈何虹软人脸识别要自己建人脸库,不然就只能离线用,总不能装个样子,简单看了下虹软Demo,下面决定用这种简单方法实现在线人脸识别: Android端(虹软Demo)取出人脸信息...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 298
精华内容 119
关键字:

手机实现人脸识别