Python实战项目:flask人脸识别图书系统(上)

2023-11-03

flask人脸识别图书系统(上)

涉及内容:爬虫&开发&数据分析

a、前端界面的技术——> jquery/bootstrap

b、后面逻辑——>flask,前后端半分离技术,使用模块 flask 蓝图(blue_print)/

c、收集的图书数据进行数据分析——Pandas模块,结合matplotlib画图

d、从网上抓取关于书的名字、价格——>requests爬取京东技术,需要js接口的解析。

一、前端功能的实现

前端共实现2个需求:A、打开摄像头,B、拍照

(1)用前端打开摄像头功能可以使用前端的video标签去显示获取到的视频,通过调用navigator对象中mediaDevices媒体对象的getUserMedia()方法根据摄像头区域的宽度和高度来获取内容,如果获取到内容用then方法显示其中内容并播放。

(2)用前端打开拍照功能使用HTML5的canvas画布标签,画布一般需要提前指明画布的画图方式,画平面图用“2d”的方法,通过drawImage方法在指定的位置画出视屏中显示的图片。

代码如下。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.1/css/bootstrap.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.1/js/bootstrap.js"></script>
    <style>
        video,canvas{
            border:2px solid blue
        }

    </style>
</head>
<body>
    <header class="col-xs-12 navbar navbar-default">
        <div class="navbar-header">
            <a class="navbar-brand" href="#">
                flask图书系统登陆界面
            </a>
        </div>
    </header>
    <main div="col-xs-12">
        <div class="col-xs-6">
            <video id="video" width="100%" height="400"></video>
        </div>
        <div class="col-xs-6">
            <canvas id="canvas" width="100%" height="400"></canvas>
        </div>
        <div class="col-xs-6">
            <button onclick="openvideo()" class="btn btn-primary">打开摄像头</button>
        </div>
        <div class="col-xs-6">
            <button onclick="getPic()" class="btn btn-primary">拍照</button>
        </div>
    </main>
    <script>
        $("#canvas").width($("#video").width())
        $("#canvas").height($("#video").height())
        function openvideo(){
            /*获取前端的视频标签*/
            video=document.getElementById("video")
            /*定义一个video设备的字典,显示宽高*/
            cons={
                video:{width:video.width,height:video.height}
            }
            /*navigator导航的对象,它可以找到一些硬件mediaDevices,*/
            /*getUserMedia取出video摄像头这个设备*/
            pros=navigator.mediaDevices.getUserMedia(cons)
            /*取出后做的内容,用then来接,把内容放在res参数中,与video进行关联*/
            pros.then(function(res){
                video.srcObject=res
                video.play()
            })

            }
        function getPic(){
            /*获取前端的视频标签和画布的标签*/
            video=document.getElementById("video")
            canvas=document.getElementById("canvas")
            /*用canvas画图,画的是平面的2d图形*/
            ctx=canvas.getContext("2d")
            /*调用canvas画布当中的drawImage画图函数*/
            /*drawImage四个参数:画图位置和宽高*/
            /*画的目标是视频中的内容*/
            ctx.drawImage(video,0,0,video.width,video.height)
        }
    </script>
</body>
</html>

运行结果如下。

二、后端功能的实现

前端共实现2个需求:

A、接收前端上传的人脸图片,存储到数据库中,目的是对以后登录者进行对比

B、下次再上传图片,把数据库中存储的人脸取出来,与上传的图片进行对比,如果是正确的内容,就实现登陆或者允许使用电脑这类的操作,这里允许访问图书馆系统的图书列表页。

技术实现:

数据库采用mongodb,flask连接mongodb,需要安装flask-pymongo模块。

安装方法:
    pip3 install flask-pymongo

人脸识别模块,采用face-recognition,face-recognition的安装,需要安装dlib模块,再安装face-recognition。注意,如果要安装dlib模块,就必安装cmake,并且设置cmake的环境变量。针对cmake可以通过安装visual studio软件来完成这样的操作,必须保证visual studio版本是2015以上的版本。如图所示。

安装visual studio安装成功后,设置cmake的环境变量。如图所示。

设置cmake路径后,就可以安装face-recognition。

pip3 install face-recognition

安装过程中,visual studio版本比较占空间,可以安装完face-recognition后,卸裁visual studio。

先用flask实现hello world,相当地实现了flask的基本结构。

from flask import Flask
app=Flask(__name__)
@app.route("/hello")
def index():
    return "Hello World!"
if __name__=="__main__":
    app.run()

设置另外一个路由规则,显示上传脸部拍照数据的界面。

from flask import Flask,render_template
app=Flask(__name__,template_folder="templates",static_folder="static")
@app.route("/upload_face")
def index():
    return render_template("upload_face.html")
@app.route("/hello")
def index():
    return "Hello World!"
if __name__=="__main__":
    app.run()

上传脸部数据界面发生post请求时,就将数据上传到服务器后台。可以用form.data.get()来接收指定标签的内容数据,接着需要将内容数据用base64模块转让化成base64编码,然后可以存储到一个图片文件中。存储到mongo数据库时,需要facerecognition模块中的loadimagefile去加载文,再用facerecognition模块中faceencodings对人脸进行编码,需要注意的是,这里如果因为一些明暗度的问题,可能会出现找不到脸的情况,前端拍照的结果要注意亮度,尽量能够分辩出人脸,不然faceencoding模块解析出来的数据会为[],这样存储到数据库mongodb就会报错。存储到mongodb数据库需要设置flask的app一些参数,app.config["MONGODBNAME"]="myface"设置mongodb数据库连接的connection的名称,app.config["MONGOURI"]="mongodb://localhost:27017/myface" 语句是mongodb数据库的连接地址。定义mongo变量,用PyMongo实例化,并把app做为参数。因为facerecognition解析后的数据是二维数组,保存这样的数据需要二进制转化后进行存储数据库mongodb的操作。bson.binary模块中的Binary类就可以将二维数组转化成二进制,pickle模块dump()方法可以facerecognition处理的结果进行二进制可写。把facerecognition处理的结果转成二进制后就可以调用insertone方法存储到mongodb数据库中。代码如下。

from flask import Flask,request,render_template
import base64
import face_recognition
from bson.binary import Binary
import pickle
from flask_pymongo import PyMongo

app=Flask(__name__,template_folder="templates",static_folder="static")
'''
    连接mongodb,为app设置的内容
'''
app.config["MONGO_DBNAME"]="myface"
app.config["MONGO_URI"]="mongodb://localhost:27017/myface"
'''
    将app应用与mongodb产生联系,使用PyMongo(app)
'''
mongo=PyMongo(app)
@app.route("/hello",methods=["GET","POST"])
def hello():
    return "hello world"

@app.route("/",methods=["GET","POST"])
def uploadface():
    '''
        功能:接收前端上传来的人脸图片,完成数据库的保存

        1、取上传来的数据的参数 request.form.get("myimg")
        2、上传的数据是base64格式,调用后端的base64进行解码
        3、存到后台变成图片
        4、调用face_reconginition的load_image-file读取文件
        5、调用 face-recognition的face_encodings对脸部进行编码
        6、利用bson和pickle模块组合把脸部编码数据变成128位bitdata数据
        7、利用mongo.db.myface.insert_one插入数据,存储到mongodb里面
        上面是逻辑,但逻辑发生在post方式上,不发生在get,
        限定一下上面逻辑的发生条件,不是POST方式,就是GET,GET请求页面
        :return:
    '''
    if request.method=="POST":
        imgdata=request.form.get("myimg")
        imgdata=base64.b64decode(imgdata)
        with open("a.png","wb") as f:
            f.write(imgdata)
        faceimg=face_recognition.load_image_file("a.png")
        facedata=face_recognition.face_encodings(faceimg)[0]
        print(facedata)
        binary_data = Binary(pickle.dumps(facedata,protocol=-1),subtype=128)
        mongo.db.myface.insert_one({'face':binary_data})

        return {"result":"OK"}
    return render_template("video.html")

前端上传图片数据的实现。一般前端都使用ajax技术上传数据到后台,前面已经实现了前端canvas标签中显示拍照的数据,现在只需调用toDataURL()方法将数据转成数据,利用$.post提交即可。需要注意的是,转成后的数据前22个字符表示的是编码格式,需要截取22位字符后面的数据进行提交到后台服务器。完善后前端getPic() 函数的代码如下。

function getPic(){
     /*获取前端的视频标签和画布的标签*/
    video=document.getElementById("video")
    canvas=document.getElementById("canvas")
    /*用canvas画图,画的是平面的2d图形*/
    ctx=canvas.getContext("2d")
    /*调用canvas画布当中的drawImage画图函数*/
    /*drawImage四个参数:画图位置和宽高*/
    /*画的目标是视频中的内容*/
    ctx.drawImage(video,0,0,300,300)
    /*ajax只能上传的是数据,不是图片,只能把图片转成数据*/
    /*toDataURL把canvas画的图片变成数据*/
    data=canvas.toDataURL("image/png",0.5)
    console.log(data)
    /*下面一句代码的意思,这个canvas转成的data数据前面的22位只是编码格式,不是图片数据*/
    data=data.substring(22)
    /*图片数据只能post方式来提交*/
    $.post("/",{"myimg":data},function(res){
        console.log(res)
    })
}

至此,接收前端上传的人脸图片,存储到数据库的功能已经编码结束。

下一步,可以再产生一个人脸登录页面,布局可以在上传人脸界面的结构上另外增加一个登陆按钮就可以,为了验证脸部数据的不同,可以再加上一个上传图片的功能,上传图片功能可以实现服务器后端接收的图片不是摄像头拍照的图片。在一个人调试的时候很方便。代码如下。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.1/css/bootstrap.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.1/js/bootstrap.js"></script>
    <style>
        video,canvas{
            border:2px solid blue
        }
        div{
            margin-top:30px;
        }

    </style>
</head>
<body>
<header class="col-xs-12 navbar navbar-default">
    <div class="navbar-header">
        <a class="navbar-brand" href="#">
            flask图书系统登陆界面
        </a>
    </div>
</header>
<main div="col-xs-12">
    <div class="col-xs-6">
        <video id="video" width="100%" height="400"></video>
    </div>
    <div class="col-xs-6">
        <canvas id="canvas" width="100%" height="400"></canvas>
    </div>
    <div class="col-xs-6">
        <button onclick="openvideo()" class="btn btn-primary">打开摄像头</button>
    </div>
    <div class="col-xs-6">
        <button onclick="getPic()" class="btn btn-primary">拍照登陆入口</button>
    </div>
    <div class="col-xs-6">
        <button onclick="openvideo()" class="btn btn-primary">上传图片</button>
    </div>
    <div class="col-xs-6">
        <button onclick="getPic()" class="btn btn-primary">上传图片登陆入口</button>
    </div>
</main>
<script>
    $("#canvas").width($("#video").width())
    $("#canvas").height($("#video").height())
    function openvideo(){
        /*获取前端的视频标签*/
        video=document.getElementById("video")
        /*定义一个video设备的字典,显示宽高*/
        cons={
            video:{width:video.width,height:video.height}
        }
        /*navigator导航的对象,它可以找到一些硬件mediaDevices,*/
        /*getUserMedia取出video摄像头这个设备*/
        pros=navigator.mediaDevices.getUserMedia(cons)
        /*取出后做的内容,用then来接,把内容放在res参数中,与video进行关联*/
        pros.then(function(res){
            video.srcObject=res
            video.play()
        })

    }
    function uploadface(){
        /*获取上传文件的元素,获取文件的相关信息*/
        file=document.getElementById("file").files[0]
        console.log(file)
        /*定义javascript读文件的函数*/
        reader=new FileReader()
        /*readAsDataURL把读取的内容变成数据*/
        reader.readAsDataURL(file)
        /*onloadend是读取结束*/
        reader.onloadend=function(){
            /*reader的result内容中接收结果*/
            res=reader.result
            res=res.substring(22)
            $.post("/upload_face",{"myimg":res},function(res){
                console.log(res)
            })
        }
    }
    function getPic(){
        /*获取前端的视频标签和画布的标签*/
        video=document.getElementById("video")
        canvas=document.getElementById("canvas")
        /*用canvas画图,画的是平面的2d图形*/
        ctx=canvas.getContext("2d")
        /*调用canvas画布当中的drawImage画图函数*/
        /*drawImage四个参数:画图位置和宽高*/
        /*画的目标是视频中的内容*/
        ctx.drawImage(video,0,0,300,300)
        /*ajax只能上传的是数据,不是图片,只能把图片转成数据*/
        /*toDataURL把canvas画的图片变成数据*/
        data=canvas.toDataURL("image/png",0.5)
        console.log(data)
        /*下面一句代码的意思,这个canvas转成的data数据前面的22位只是编码格式,不是图片数据*/
        data=data.substring(22)
        /*图片数据只能post方式来提交*/
        $.post("/upload_face",{"myimg":data},function(res){
            console.log(res)
        })
    }
</script>
</body>
</html>

继续完成下面的逻辑,把数据库中存储的人脸取出来,与上传的图片进行对比,如果是正确的内容,就实现登陆或者允许使用电脑这类的操作。

在后端实现这样的逻辑,也是需要在flask中建立一个新的请求路由,然后也是接收上传过来的图像数据,继续base64模块的编码转换,存储成一个新的图片,使用facerecognition人脸识别模块读取存储的新的图片,再进行faceencodings编码,调用mongodb中的find()方法找出数据库中所有的人脸数据,如果有一张脸的数据恰好就是当前上传的人脸的数据,就可以根据前后端分离的原理,返回前端json数据{"result":"人脸识别正确"},如果错误,就返回{"result":"是没有权限登陆的人脸"},注意从数据库中取出的每一个人脸数据都需要用pickle模块的loads方法转化成二维数组,这样就可以调用facerecognition中的facecompare方法进行人脸数据的比对。代码如下。

@app.route("/check",methods=["GET","POST"])
def checkface():
    '''
        功能:接收前端上传来的人脸图片,完成数据库的保存

        1\取上传来的数据的参数 request.form.get("myimg")
        2\上传的数据是base64格式,调用后端的base64进行解码
        3\存到后台变成图片,取另一个名称
        4\调用face_reconginition的load_image_file读取文件
        5\调用 face-recognition的face_encodings对脸部进行编码
        6\利用pickle模块把脸部的编码从数据库中提取出来
        7\将数据库提取的脸部数据与当前用户在上传的脸部数据进行对比,
        8\如果对比成功,返回ok,如果对比失败,返回:"not you face"
        上面是逻辑,但逻辑发生在post方式上,不发生在get,
        限定一下上面逻辑的发生条件,不是POST方式,就是GET,GET请求页面
        :return:
        '''
    if request.method == "POST":
        imgdata = request.form.get("myimg")
        imgdata = base64.b64decode(imgdata)
        with open("b.png", "wb") as f:
            f.write(imgdata)
        faceimg = face_recognition.load_image_file("b.png")
        facedata = face_recognition.face_encodings(faceimg)[0]
        faces=mongo.db.myface.find()
        for fa in faces:
            '''
                取出的数据是myface数据库中的每一条记录face的"face"键对应的值
            '''
            facedata_orign=pickle.loads(fa["face"])
            res=face_recognition.compare_faces([facedata],facedata_orign)
            print(res)
            if res[0]:
                return {"result":"this is true face"}
            else:
                return {"result":"not you face"}
    return render_template("check_face.html")

代码的github地址:https://github.com/wawacode/flask_over_face_recognition

项目对应的视频地址:

flask人脸登录图书系统1-前端人脸登陆的拍照效果
https://www.bilibili.com/video/BV1Xy4y1Y7GK/
flask人脸登录图书系统2-后台接收ajax图片数据人脸识别并存储到mongodb中
https://www.bilibili.com/video/BV1by4y1E7fS/
flask人脸登录图书系统3-后台实现人脸比对逻辑
https://www.bilibili.com/video/BV1T5411E76x/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python实战项目:flask人脸识别图书系统(上) 的相关文章

  • 如何实时改变setInterval的速度

    我想知道如何实时更改 setInterval 的速度 例如 if score lt 10 repeater setInterval function spawnEnemy 1000 if score gt 10 repeater setIn
  • MailTo 从 Javascript

    我有一个链接按钮 用于从页面内容构建邮件 从 javascript 启动它而不打开空白窗口或干扰调用它的窗口的最佳方法是什么 function Email var sMailTo mailto var sBody var alSelecte
  • Eslint 从另一个文件确定全局变量

    我试图以这样的方式设置 ESLint 使其在对实际目标文件进行 linting 之前解析全局声明文件 这样我就不必将所有确实是全局的函数和变量声明为全局 而是让解析器弄清楚 In 一些 模块 js function do something
  • 如何在 DOM 中的每个元素中调用函数,即使它们是动态创建的

    我想对 DOM 上的特定元素调用函数 例如 red css backgroundColor pink 它适用于 DOM 中已经存在的任何元素 但我也希望在动态添加到 DOM 的元素中调用此方法 我尝试过类似的事情 red on functi
  • JQuery datepickers-从开始日期设置结束日期

    使用了两个 Jquery 日期选择器 StartDate 和 EndDate
  • Mapbox GL 中的 MaxBounds 和自定义非对称填充

    我有一个 Mapbox GL JS 应用程序 在地图上显示一些小部件 为了确保地图上的任何内容都不会被它们隐藏 我使用以下命令添加了一些填充map setPadding 这是一个不对称的 在我的例子中左边比右边大 它按预期工作 例如fitB
  • 访问 nuxt 配置文件中的存储

    我想添加通过 Nuxt 静态生成的动态路由 我定义了一个客户端 服务器端存储asyncData方法 我想将这个存储值 一个数组 映射到我的nuxt config js文件使其成为 动态 静态 路线图nuxt generate命令 但如何访问
  • 如何在 select 和 option 标签中添加 JSON 数据?

    我有这个html代码 div class searchfilter div class searchwrapper div div
  • karma/jasmine 控制台更详细的测试结果

    我使用 Karma 和 Jasmine 进行 javascript 单元测试 假设我有一个失败的测试 如下所示 expect objectA toEqual expectedObjectA 当失败时 我看到控制台上转储了两个对象 并显示一条
  • 为什么这行带有“await”的代码会触发微任务队列处理?

    以下引用是我理解微任务队列处理的主要参考 当 JS 堆栈清空时 就会处理微任务 承诺使用 杰克 阿奇博尔德 https twitter com jaffathecake status 954653170986311680 这对我来说没有意义
  • 将 Firebase FCM 添加到 ReactJS 应用程序

    我正在尝试向我的 ReactJS 应用程序中的用户发送推送通知 我已添加 firebase 请求用户通知权限 这正在发挥作用 但现在我想注册设备令牌 但这给了我错误 消息传递 我们无法注册默认的 Service Worker 无法注册 Se
  • 全局传递 xhr onload 函数的值

    在我正在创建的应用程序中 我有以下 XMLHttpRequest 并且我正在尝试传递结果data在 的里面xhr onload 到在同一父函数中创建的数组中 var url http api soundcloud com resolve j
  • 如何仅显示/隐藏此 bootstrapvue 表的第二列和第三列?

    下面的代码将显示 隐藏 a 中的所有列BootstrapVue桌子 代码的来源就是这里的答案 使用 bootstrap vue 组件和 bootstrap 3 动态显示 隐藏列 https stackoverflow com questio
  • webpack中动态加载外部模块失败

    我正在尝试建立以下架构 一个核心 React 应用程序 它具有一些基本功能 并且能够在运行时加载其他 React 组件 这些额外的 React 组件可以按需加载 并且它们在构建核心应用程序时不可用 因此它们不能包含在核心应用程序的捆绑包中
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 类中可以有生成器 getter 吗?

    我的意思是吸气剂是发电机 我相信这一切都是 ES6 也许像这样 class a get count let i 10 while i yield i let b new a for const i of b count console lo
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何在画布上所有其他内容后面绘制图像? [复制]

    这个问题在这里已经有答案了 我有一块画布 我想用drawImage在画布上当前内容后面绘制图像 由于画布上已经有内容 我正在使用字面上的画布来创建包含图像的画布 因此我无法真正先绘制图像 所以我无法使用drawImage在我呈现其余内容之前
  • ChartJs:如何按时间值(而不是像素)以编程方式平移

    我使用的是chartJs 3 6 1 和 Chartjs plugin zoom 1 2 1 但我认为这并不重要 我有 2 个时间序列折线图 当我通过拖放平移一个图表时 我也想移动 平移另一个图表 为此 我为 graphA 启用了缩放 平移
  • 以角度访问窗口 TemplateUrl 内的范围

    我的模式有一个 windowTemplateUrl 如下 div class modal fade div class modal dialog div class modal content square btn div div div

随机推荐

  • 【设计模式】单例模式(懒汉和饿汉模式详解)

    目录 1 设计模式是什么 2 单例模式 1 概念 2 如何设计一个单例 1 口头约定 不靠谱 2 使用编程语言的特性来处理 3 使用 饿汉模式 设计单例 1 详细步骤 2 完整代码 4 使用 饿汉模式 设计单例 1 详细步骤 2 完整代码
  • mongodb持久化原理

    mongodb与mysql不同 mysql的每一次更新操作都会直接写入硬盘 但是mongo不会 做为内存型数据库 数据操作会先写入内存 然后再会持久化到硬盘中去 那么mongo是如何持久化的呢 mongodb在启动时 专门初始化一个线程不断
  • Spring概念:容器、Ioc、DI

    目录 什么是容器 什么是 IoC 传统程序的开发 理解 Spring IoC DI 总结 我们通常所说的 Spring 指的是 Spring Framework Spring 框架 它是 个开源框架 有着活跃 庞 的社区 这就是它之所以能
  • 前端知识点总结(一):从输入URL到页面展示的详细过程

    这里只是简单地概括一下大致流程 输入网址 DNS解析 建立tcp连接 客户端发送HTPP请求 服务器处理请求 服务器响应请求 浏览器展示HTML 浏览器发送请求获取其他在HTML中的资源 1 输入地址 当我们开始在浏览器中输入网址的时候 浏
  • 在页面中输入上下居中点号(·)

    随便打开一个聊天窗口输入汉字 点 在弹出的选项框中选择 号即可
  • dz安装好后css js位置错误,Discuz!X3.2安装后无法加载CSS/Js文件

    今天在服务器上安装了Discuz X3 2 数据库等填写正确 下一步很快就新建了291张表完成安装 没有任何报错出现 完成后访问前台和后台却无法加载CSS Js文件 F12查看它直接访问的网站根目录下边 这CSS Js文件明明不在根目录啊
  • AcWing 1293. 夏洛克和他的女朋友 二分图

    题 是一个二分图染色 质数不是质数的质因子 因为质数不会有因子 所以质数全是颜色1 合数不是合数的质因子 因为合数不 质 所以合数全都是颜色2 n小于3的时候只有1种颜色 其他都是2种颜色 include
  • 计算机网络教程_复习整理第一章

    计算机网络教程 复习整理第一章 第一章 概述 第二章 物理层 第三章 数据链路层 文章目录 计算机网络教程 复习整理第一章 1 因特网 因特网的标准制定流程 2 电路交换 报文交换 分组交换 区分三者 3 计算机网络的性能指标 lt 速率
  • d3dcompiler_43.dll缺失怎么修复

    有网友在玩游戏时出现 无法启动程序 因为计算机中丢失d3dcompiler 43 dll 尝试重新安装该程序以解决问题 的提示 那么是什么原因造成丢失d3dcompiler 43 dll呢 缺少d3dcompiler 43 dll文件怎么办
  • GLUE数据集介绍:RTE、MRPC、SST-2、QNLI、MNLI、QQP

    自然语言处理 NLP 主要包括自然语言理解 NLU 和自然语言生成 NLG 为了让NLU任务发挥最大的作用 来自纽约大学 华盛顿大学等机构创建了一个多任务的自然语言理解基准和分析平台 也就是GLUE General Language Und
  • SpringBoot注解

    使用注解的优势 1 采用纯java代码 不在需要配置繁杂的xml文件 2 在配置中也可享受面向对象带来的好处 3 类型安全对重构可以提供良好的支持 4 减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 一 注解详解 配备了完
  • HIve中的查询语句

    文章目录 Hive中的查询语句 1 基础语法 2 基本查询 Select From 2 1 数据准备 0 原始数据 1 创建部门表 2 创建员工表 3 导入数据 2 2 全表和特定列查询 1 全表查询 2 选择特定列查询 2 3 列别名 1
  • kafka相关操作命令

    kafka相关操作命令 原文链接 https blog csdn net wf3612581 article details 81842574 1 开启zookeeper集群 startzk sh 2 开启kafka集群 start kaf
  • 【修电脑】VMware 从GHO文件备份恢复Win10/Win7系统

    修电脑 VMware 从GHO文件备份恢复Win10 Win7系统 注意 参考 硬盘知识 一 硬盘接口的分类 二 硬盘的分类 按照硬盘材质分为两大类 按照接口类型区分 boot启动知识 Legacy BIOS引导 uefi引导启动流程 查看
  • 区块链关键机制分析

    区块链中三大关键机制 密码算法 1 Hash算法 2 非对称加密算法 3 数字签名 存储结构 共识机制 1 工作量证明 POW 2 权益证明 POS 3 股份授权证明 DPOS 4 实用拜占庭容错 PBFT 5 Raft算法 6 Rippl
  • ubuntu18.04升级cmake

    下载cmake cmake官网 https cmake org download sudo apt get install y build essential libssl dev wget https github com Kitware
  • C++ 的 decltype 详细介绍

    1 基本介绍 decltype 是 C 11 新增的一个用来推导表达式类型的关键字 和 auto 的功能一样 用来在 编译时期 进行自动类型推导 引入 decltype 是因为 auto 并不适用于所有的自动类型推导场景 在某些特殊情况下
  • 大数据学习连载03篇:分布式技术(集群、负载、弹性、故障等知识点)

    分布式技术 一 为什么需要分布式 1 计算问题 无论是我们在学校刚开始学编程 还是在刚参加工作开始处理实际问题 写出来的程序都是很简单的 因为面对的问题很简单 以处理数据为例 可能只是把一个几十K的文件解析下 然后生成一个词频分析的报告 很
  • 怎么debug_装完机电脑点不亮怎么办?不妨看看你主板上的Debug灯

    Hello大家好 我是兼容机之家的小牛 如果你加入了一个电脑硬件爱好者的群 那么你肯定会发现一件事 那就是每天都会有小白装机点不亮在群里求助 问群问了大半天也没弄好 小牛今天来教你一个窍门 能快速判断好自己的电脑到底出了什么故障 既然你自己
  • Python实战项目:flask人脸识别图书系统(上)

    flask人脸识别图书系统 上 涉及内容 爬虫 开发 数据分析 a 前端界面的技术 gt jquery bootstrap b 后面逻辑 gt flask 前后端半分离技术 使用模块 flask 蓝图 blue print c 收集的图书数