使用ai软件提取不到人脸

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ai软件提取不到人脸相关的知识,希望对你有一定的参考价值。

人脸编辑技术的发展和广泛使用引起人们对隐私安全等的担忧,如 DeepFakes 可以实现视频换脸,且逼真程度很高,有时人类都无法分辨真伪。为此,本研究提出了一种检测人脸伪造图像的新方法以及包含来自 1000 个真实视频的 510,207 张图像和目标真值的数据集。本研究使用该数据集,采用额外的人脸区域特定领域知识,改善了人脸图像伪造检测的准确率。
现在,操纵视觉内容已经很普遍,也是数字社会中最重要的话题之一。比如,DeepFakes 展示了如何使用计算机图形学和视觉技术进行视频换脸,进而破坏别人的声誉。人脸是目前视觉内容操纵方法的主要兴趣点,这有很多原因。首先,人脸重建和追踪是计算机视觉中比较成熟的领域,而它正是这些编辑方法的基础。其次,人脸在人类沟通中起核心作用,因为人脸可以强调某个信息,甚至可以传达某个信息。目前的人脸操纵(facial manipulation)方法分为两类:面部表情操纵和面部身份操纵(见图 2)。最著名的面部表情操纵技术之一 Face2Face 来自于 Thies 等人 [48]。它可基于商用硬件,将一个人的面部表情实时迁移至另一个人。后续的研究(如《Synthesizing Obama: learning lip sync from audio》[45])能够基于音频输入序列使人脸动起来。《Bringing portraits to life》[8] 可以编辑图像中的面部表情。

图 2:人脸数字化的发展是现代人脸图像编辑工具的基础。这些编辑工具分为两类:身份修改和表情修改。除了使用 Photoshop 等工具手动编辑人脸以外,近年来出现了很多自动化方法。最著名、最广泛的身份编辑技术是换脸(face swapping)。这些技术流行的根源在于其轻量级特性,方便在手机上运行。facial reenactment 技术可以将源人脸的表情迁移到目标人脸,从而改变一个人的表情。

身份操纵是人脸伪造的第二大类。与改变表情不同,身份操纵方法将一个人的脸换到另一个人的面部。因此,这个类别又叫换脸。随着 Snapchat 等消费者级别应用的广泛使用,这类技术变得流行。DeepFakes 也可以换脸,但它使用了深度学习技术。尽管基于简单计算机图形学技术的换脸可以实时运行,但 DeepFakes 需要为每一个视频对进行训练,这非常耗时。

本研究展示了一种方法,可以自动、可靠地检测出此类人脸操纵,且性能大幅超过人类观察者。研究者利用深度学习的近期进展,即使用卷积神经网络(CNN)学习极强图像特征的能力。研究者以监督学习的方式训练了一个神经网络,可以解决人脸伪造检测的问题。为了以监督的方式学习并评估人类观察者的表现,研究者基于 Face2Face、FaceSwap 和 DeepFakes 生成了一个大规模人脸操纵数据集。

本文贡献如下:

使用特定领域知识的当前最先进人脸伪造检测技术。
新型人脸伪造图像数据集,包含来自 1000 个真实视频的 510,207 张图像和目标真值,以保证监督学习。
进行了用户调查,以评估所用人脸操纵方法的有效性,以及人类观察者在不同视频质量情况下检测伪造图像的能力。
论文:FaceForensics++: Learning to Detect Manipulated Facial Images

论文链接:https://arxiv.org/pdf/1901.08971.pdf

摘要:合成图像生成和操纵的快速发展引起人们对其社会影响的巨大担忧。这会导致人们丧失对数字内容的信任,也可能会加剧虚假信息的传播和假新闻的捏造,从而带来更大的伤害。在本文中,我们检查了当前最先进人脸图像操纵技术结果的逼真程度,以及检测它们的困难性——不管是自动检测还是人工检测。具体来说,我们聚焦于 DeepFakes、Face2Face、FaceSwap 这几种最具代表性的人脸操纵方法。我们为每种方法各创建了超过50万张操纵过的图像。由此产生的公开数据集至少比其它同类数据集大了一个数量级,它使我们能够以监督的方式训练数据驱动的伪造图像检测器。我们证明了使用额外的特定领域知识可以改善伪造检测方法,使其准确性达到前所未有的高度,即使在强压缩的情况下同样如此。通过一系列深入实验,我们量化了经典方法、新型深度学习方法和人类观察者之间的性能差异。

3 数据集

本文的核心贡献之一是 FaceForensics 数据集。这个新的大规模数据集使我们能够以监督的方式训练当前最佳的人脸图像伪造检测器。为此,我们将三种当前最先进的自动人脸操纵方法应用到 1000 个原始真实视频上(这些视频均是从网上下载的)。

表 1:FaceForensics 数据集中每一种方法相关图像的数量,包括训练、验证和测试数据集中的图像数量

图 4:FaceForensics 数据集统计数据。VGA 表示视频分辨率为 480p,HD 表示 720p,FHD 表示 1080p。c 中 x 轴表示给定像素高度,y 轴表示序列数。

4 伪造检测

我们将伪造检测视为被操纵视频每一帧的二分类问题。下面是人工和自动伪造检测的结果。对于所有的实验,我们将数据集分成固定的训练、验证和测试集,分别包含 720、140 和 140 个视频。所有评估结果都是基于测试集中的视频报告的。

图 6:143 个参与用户的伪造检测结果。准确率取决于视频质量,视频质量差则准确率会下降。原始视频上的检测准确率为 72%,高质量视频上的准确率为 71%,低质量视频上的准确率只有 61%。

4.2 自动伪造检测方法

图 5:本文提出的特定领域伪造检测流程:先用一种稳健的人脸追踪方法处理输入图像,然后利用特定领域信息提取图像中被脸部覆盖的区域,将该区域输送至一个训练好的分类网络,最后该网络的输出即是图像真伪的最终结果。

图 7:使用人脸图像伪造的特定领域信息(即人脸追踪),所有使用架构在不同操纵方法上的二分类检测准确率。这些架构在不同的操纵方法上独立训练。

图 8:使用人脸图像伪造的特定领域信息(即人脸追踪),本文提出检测器的所有变体在不同操纵方法上的二分类检测准确率。除了最右侧分类器使用完整图像作为输入,这些架构都使用人脸追踪器的追踪信息在完整数据集上训练。

图 9:使用人脸图像伪造的特定领域信息(即人脸追踪),本文提出检测器的所有变体在不同操纵方法上的平均二分类检测准确率。除了最右侧分类器使用完整图像作为输入,这些方法都使用人脸追踪器的追踪信息在完整数据集上训练。

图 10:本文提出的方法使用 XceptionNet 的检测性能依赖于训练语料库的大小。尤其是,低质量视频数据需要较大型的数据集
参考技术A ai软件提取不到人脸或者识别一直失败有网络状况、光线状况、软件版本等原因;
1.网络状况:设备没有链接网络,或信号太差,无法把录入的数据上传到终端,不能执行下一步指令;
2.光线状况:在人脸识别时,所处环境较暗,设备无法清晰辨别人脸;
3.系统推送最新的软件版本,设备没有更新,影响数据传送到终端。
参考技术B 人脸识别的原理是使用者首先需要采集自己的人脸特征信息,在应用的过程中,使用摄像头获取当前人物的面相特征。最后将当前捕获到的人像特征与之前存储的人脸数据档案进行对比。人脸识别技术经历了20多年的发展历史,从最初的2D识别到现在的3D识别,识别精度达到了99%以上,未来以3D是主流,而且会是融合方案,就是为了提高识别的精准度和应用场景,他会同时用多个摄像头。人脸识别主要是靠硬件进步+AI来推动,在硬件方面主要是这几种:1、3D结构光:通过近红外激光器,将具有一定结构特征的光线投射到被拍摄物体上,再由专门的红外摄像头进行采集。这种具备一定结构的光线,会因被摄物体的不同深度区域,而采集不同的图像相位信息,然后通过运算单元将这种结构的变化换算成深度信息,以此来获得三维结构。3D结构光的好处就是精准度高,但是有个bug就是,对距离有要求,要隔得近才能识别,大家可以试试自己手机的识别距离,所以适合做前置摄像头。2、TOF是飞行时间(Time of Flight)技术的缩写,其原理是:传感器发出经调制的脉冲红外光,遇物体后反射,传感器通过计算光线发射和反射时间差或相位差,来换算被拍摄景物的距离,以产生深度信息,此外再结合传统的相机拍摄,就能将物体的三维轮廓以不同颜色代表不同距离的地形图方式呈现出来 参考技术C 人脸识别的原理是使用者首先需要采集自己的人脸特征信息,在应用的过程中,使用摄像头获取当前人物的面相特征。最后将当前捕获到的人像特征与之前存储的人脸数据档案进行对比。人脸识别技术经历了20多年的发展历史,从最初的2D识别到现在的3D识别,识别精度达到了99%以上,未来以3D是主流,而且会是融合方案,就是为了提高识别的精准度和应用场景,他会同时用多个摄像头。人脸识别主要是靠硬件进步+AI来推动,在硬件方面主要是这几种:1、3D结构光:通过近红外激光器,将具有一定结构特征的光线投射到被拍摄物体上,再由专门的红外摄像头进行采集。这种具备一定结构的光线,会因被摄物体的不同深度区域,而采集不同的图像相位信息,然后通过运算单元将这种结构的变化换算成深度信息,以此来获得三维结构。3D结构光的好处就是精准度高,但是有个bug就是,对距离有要求,要隔得近才能识别,大家可以试试自己手机的识别距离,所以适合做前置摄像头。2、TOF是飞行时间(Time of Flight)技术的缩写,其原理是:传感器发出经调制的脉冲红外光,遇物体后反射,传感器通过计算光线发射和反射时间差或相位差,来换算被拍摄景物的距离,以产生深度信息,此外再结合传统的相机拍摄,就能将物体的三维轮廓以不同颜色代表不同距离的地形图方式呈现出来。 参考技术D 使用ai软件提取不到人脸
你的4.psd这个图被你移动过,链接进AI的图是不能随便移动的,不然AI就找着了!修复的方法就只能找到这个文件然后放回原来的地方,否则只能重做!建议你以后做这样的图,考虑直接用AI打开,然后复制进去使用,不要链接,否则链接一丢失就很麻烦了

AI人脸识别测温一体机设计

1. 前言

在AI人工智能发展应用的过程中,人脸识别技术得到了重用。目前在人脸识别相关的技术已经深入到生活方方面面。在公共安全、智能安防、手机认证等多个领域得到应用,比如: 通过人脸识别来解锁手机,通过人脸识别进入某些政务软件平台或是银行APP, 还是各大门店,超市使用的"支付宝刷脸支付"等等,这些应用大大方便了人们生活。

目前,因为新冠疫情防控的需要,人人出门都需要戴口罩,查验健康码和测量体温,在办公大楼门口、地铁口、小区门口、商场门口人流量都比较大,传统的人工测量体温方式,费时费力、效率比较低,而且人工近距离核验温度,易产生交叉感染风险。

当前文章就利用华为云提供的AI人脸识别接口+红外测温传感器MLX90614ESF(DCI)+瑞芯微RK3399完成AI人脸测温一体机设计,方便测量来往人员的体温,减轻防疫防控工作人员的负担。

实现的具体功能: 当检测到人脸时,就测量温度,并检测有没有带口罩;在显示屏上实时显示温度信息,如果温度超出设置值,会通过语音播报提示。如果人员没有戴口罩,会语音提示带口罩。

2. 软硬件设计

(1)核心板采用瑞芯微RK3399,运行ubuntu18.04 64位系统,编译器采用aarch64-linux-gcc。摄像头采用罗技的720p摄像头。

(2)软件界面采用QT设计,在RK3399的ubuntu18.04系统里可以直接安装QT开发环境完成开发,也可以在PC机上交叉编译后将程序和相关库拷贝过来。

(3)测温传感器采用MLX90614ESF(DCI),这个是红外非接触式测温传感器,测量距离可达到1米左右,这个模块是IIC协议接口。

3. 华为云人脸识别服务

3.1 开通人脸识别服务

官网地址: https://www.huaweicloud.com/product/face.html

3.2 人脸识别接口功能

华为云提供的人脸检测可以对输入图片进行人脸检测和分析,输出人脸在图像中的位置、人脸关键点位置、人脸关键属性等信息。支持识别JPG、PNG、JPEG、BMP等格式的图片,上传图片时选择将图片转为Base64编码上传。

(1)接口请求方式: POST

(2)接口请求地址

格式:
https://face.endpoint.myhuaweicloud.com/v2/project_id/face-detect

示例:
https://face.cn-north-4.myhuaweicloud.com/v2/0e5957be8a00f53c2fa7c0045e4d8fbf/face-detect

(3)请求头的参数


 "X-Auth-Token": "******"   

X-Auth-Token字段是访问华为云的任何API接口都需要填,获取方法看这里: https://bbs.huaweicloud.com/blogs/317759 翻到2.3小节。

(4)请求Body参数

image_base64字段   : 存放Base64编码后的图片数据,大小不超过8MB,建议小于1MB。

attributes字段     :这个参数可以选择不填,不填就只是返回人脸的在图片里的尺寸位置。如果希望获取更多的属性列表,可以填下面之这些属性:
2:年龄
4:装束(帽子、眼镜)
6:口罩
7:发型
8:胡须
11:图片类型
12:质量
13:表情
21:人脸图片旋转角(顺时针偏转角度),支持0°、90°、180°和270°图片旋转。

多个属性间使用逗号(,)隔开。

(5)响应参数

如果图像里没有人脸,返回的数据是这样的:
"faces":[]

如果没有填额外的属性,返回的数据是这样的:

 "faces": [
  
   "bounding_box": 
    "top_left_x": 61,
    "top_left_y": 54,
    "width": 114,
    "height": 151
   
  
 ]


填了额外的属性,返回的数据是这样的:

 "faces": [
  
   "bounding_box": 
    "top_left_x": 61,
    "top_left_y": 54,
    "width": 114,
    "height": 151
   ,
   "attributes": 
    "age": 30,
    "dress": 
     "glass": "none",
     "hat": "none"
    ,
    "mask": "none",
    "hair": "short",
    "beard": "none",
    "phototype": "internet photo",
    "quality": 
     "total_score": 0.62109375,
     "blur": 0.3359375,
     "pose": 0.266357421875,
     "occlusion": 0.330810546875,
     "illumination": 0.378662109375
    ,
    "expression": 
     "type": "neutral",
     "probability": 0.9991200566291809
    
   
  
 ]

3.3 调试接口

地址: https://apiexplorer.developer.huaweicloud.com/apiexplorer/debug?product=FRS&api=DetectFaceByFile

如果最开始想体验一下接口,了解参数的含义,可以先使用在线调试接口测试一下效果。

现在人脸检测的调试接口可以直接在网页上选择本地图片,不用再传bash64数据,测试更加方便。

4. 设计设备端程序

4.1 调用人脸检测接口

//人脸检测
void Widget::FaceCheck(QImage image)

    QString requestUrl;
    QNetworkRequest request;

    //存放图片BASE64编码
    QString imgData;

    //设置请求地址
    QUrl url;

    //人脸检测请求地址
    requestUrl = QString("https://face.%1.myhuaweicloud.com/v2/%2/face-detect")
            .arg(SERVER_ID)
            .arg(PROJECT_ID);

    //设置数据提交格式
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));

    //将图片进行Base64编码
    imgData = QString(toBase64(image)); //编码后的图片大小不超过2M
    //设置token
    request.setRawHeader("X-Auth-Token",Token);

    //构造请求
    url.setUrl(requestUrl);
    request.setUrl(url);

    QString post_param=QString
               (""
                 "\\"image_base64\\": \\"%1\\","
                 "\\"attributes\\":%2"
                "").arg(imgData).arg("6");

    //发送请求
    manager->post(request, post_param.toUtf8());

4.2 接口数据解析

    if(function_select==6)
    
        //解析数据
        QJsonParseError json_error;
        QJsonDocument document = QJsonDocument::fromJson(replyData, &json_error);
        if(json_error.error == QJsonParseError::NoError)
        
            //判断是否是对象,然后开始解析数据
            if(document.isObject())
            
                QJsonObject obj = document.object();
                //解析错误代码
                if(obj.contains("faces"))
                
                    QJsonArray face_arr=obj.take("faces").toArray();

                    for(int i=0;i<face_arr.size();i++)
                    
                        QJsonObject object=face_arr.at(i).toObject();
                        if(object.contains("bounding_box"))
                        
                            QJsonObject obj1=object.take("bounding_box").toObject();

                            int top_left_x=0;
                            int top_left_y=0;
                            int width=0;
                            int height=0;

                            if(obj1.contains("top_left_x"))
                            
                                top_left_x=obj1.take("top_left_x").toInt();
                            
                            if(obj1.contains("top_left_y"))
                            
                                top_left_y=obj1.take("top_left_y").toInt();
                            
                            if(obj1.contains("width"))
                            
                                width=obj1.take("width").toInt();
                            
                            if(obj1.contains("height"))
                            
                                height=obj1.take("height").toInt();
                            

                            qDebug()<<"top_left_x:"<<top_left_x;
                            qDebug()<<"top_left_y:"<<top_left_y;
                            qDebug()<<"width:"<<width;
                            qDebug()<<"height:"<<height;
                        

                        //属性
                        QString mask;
                        if(object.contains("attributes"))
                        
                            QJsonObject obj1=object.take("attributes").toObject();
                            mask=obj1.take("mask").toString();
                            qDebug()<<"带口罩的状态:"<<mask;
                        
                    
                
             
         
    

4.3 token获取

void Widget::GetToken()

    //表示获取token
    function_select=3;

    QString requestUrl;
    QNetworkRequest request;

    //设置请求地址
    QUrl url;

    //获取token请求地址
    requestUrl = QString("https://iam.%1.myhuaweicloud.com/v3/auth/tokens")
                 .arg(SERVER_ID);

    //自己创建的TCP服务器,测试用
    //requestUrl="http://10.0.0.6:8080";

    //设置数据提交格式
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=UTF-8"));

    //构造请求
    url.setUrl(requestUrl);

    request.setUrl(url);

    QString text =QString("\\"auth\\":\\"identity\\":\\"methods\\":[\\"password\\"],\\"password\\":"
    "\\"user\\":\\"domain\\": "
    "\\"name\\":\\"%1\\",\\"name\\": \\"%2\\",\\"password\\": \\"%3\\","
    "\\"scope\\":\\"project\\":\\"name\\":\\"%4\\"")
            .arg(MAIN_USER)
            .arg(IAM_USER)
            .arg(IAM_PASSWORD)
            .arg(SERVER_ID);

    //发送请求
    manager->post(request, text.toUtf8());

4.4 摄像头初始化

//查找系统可用摄像头
void Widget::Find_CameraNumber()

    //清空列表
    ui->comboBox_camera_number->clear();

    /*查找电脑当前可用摄像头*/
    cameras = QCameraInfo::availableCameras();
    if(cameras.count())
    
        for(int i=0;i<cameras.count();i++)
        
            ui->comboBox_camera_number->addItem(tr("%1").arg(i));
        
        ui->pushButton_start_camera->setEnabled(true);
    
    else
    
        QMessageBox::warning(this,tr("提示"),"本机没有可用的摄像头!\\n"
                                                 "软件作者:DS小龙哥\\n"
                                                 "BUG反馈:1126626497@qq.com");
        ui->pushButton_start_camera->setEnabled(false);
    

    /*摄像头没有启动时,按钮不可用*/
    ui->pushButton_find->setEnabled(false);
    ui->pushButton_delete->setEnabled(false);
    ui->pushButton_update->setEnabled(false);
    ui->pushButton_register->setEnabled(false);


//启动摄像头
void Widget::on_pushButton_start_camera_clicked()

    //摄像头启动标志
    if(camera_flag) //如果摄像头已经启动一次,再次启动需要将之前的空间释放掉
    
        camera->stop();
        delete camera;
        ui->horizontalLayout_2->removeWidget(videoWidget);
        delete videoWidget;
    

    camera_flag=1;  //标志摄像头已经启动一次

    //摄像头启动之后,就无法在重复启动
    ui->pushButton_start_camera->setEnabled(false);

   /*创建摄像头对象,根据选择的摄像头打开*/
   camera = new QCamera(cameras.at(ui->comboBox_camera_number->currentIndex()));

   /*构造捕获的对象*/
   camera_image_capture = new QCameraImageCapture(camera);

   /*设置捕获的目的地*/
   camera_image_capture->setCaptureDestination(QCameraImageCapture::CaptureToFile);

   //设置截图输出、缓冲区格式、分辨
   camera_image_capture->setCaptureDestination(QCameraImageCapture::CaptureToBuffer);
   camera_image_capture->setBufferFormat(QVideoFrame::PixelFormat::Format_Jpeg);

   //设置截图的图片尺寸
   iamge_setting.setResolution(320,240);
   camera_image_capture->setEncodingSettings(iamge_setting);

   //关联捕获的信号,发出捕获截图信号时,发出信号
  connect(camera_image_capture,&QCameraImageCapture::imageCaptured,this,&Widget::processCapturedImage);

   /*配置摄像头捕获模式为帧捕获模式*/
   camera->setCaptureMode(QCamera::CaptureViewfinder);

   videoWidget = new QVideoWidget();
   videoWidget->setMinimumSize(320,240);

   //将摄像头显示窗口加入到布局中
   ui->horizontalLayout_2->insertWidget(0,videoWidget);

   /*设置取景器显示*/
   camera->setViewfinder(videoWidget);

   /*启动摄像头*/
   camera->start();

   /*摄像头启动时,按钮可用*/
   ui->pushButton_find->setEnabled(true);
   ui->pushButton_delete->setEnabled(true);
   ui->pushButton_update->setEnabled(true);
   ui->pushButton_register->setEnabled(true);

以上是关于使用ai软件提取不到人脸的主要内容,如果未能解决你的问题,请参考以下文章

Deepfacelab换脸时间

AI人脸识别测温一体机设计

人脸识别怎么用

AI安全帽识别/人脸识别智能分析网关在EasyCVR配置告警信息推送

虹软人脸识别ArcFace2.0 Android SDK使用教程

银行卡信息精准识别-智能快速绑卡