TensorFlow在人脸识别中的应用-人脸检测

2023-11-07

参考:

1.《TensorFlow技术解析与实战》

2. http://blog.csdn.net/tmosk/article/details/78087122

3. https://www.cnblogs.com/libinggen/p/7786901.html


######################################

    人脸识别,基于人脸部特征信息识别身份的生物识别技术。摄像机、摄像头采集人脸图像或视频流,自动检测、跟踪图像中人脸,做脸部相关技术处理,人脸检测、人脸关键点检测、人脸验证等。《麻省理工科技评论》(MIT Technology Review),2017年全球十大突破性技术榜单,支付宝“刷脸支付”(Paying with Your Face)入围。

    人脸识别优势,非强制性(采集方式不容易被察觉,被识别人脸图像可主动获取)、非接触性(用户不需要与设备接触)、并发性(可同时多人脸检测、跟踪、识别)。深度学习前,人脸识别两步骤:高维人工特征提取、降维。传统人脸识别技术基于可见光图像。深度学习+大数据(海量有标注人脸数据)为人脸识别领域主流技术路线。神经网络人脸识别技术,大量样本图像训练识别模型,无需人工选取特征,样本训练过程自行学习,识别准确率可以达到99%。

人脸识别技术流程。

    人脸图像采集、检测。人脸图像采集,摄像头把人脸图像采集下来,静态图像、动态图像、不同位置、不同表情。用户在采集设备拍报范围内,采集设置自动搜索并拍摄。人脸检测属于目标检测(object detection)。对要检测目标对象概率统计,得到待检测对象特征,建立目标检测模型。用模型匹配输入图像,输出匹配区域。人脸检测是人脸识别预处理,准确标定人脸在图像的位置大小。人脸图像模式特征丰富,直方图特征、颜色特征、模板特征、结构特征、哈尔特征(Haar-like feature)。人脸检测挑出有用信息,用特征检测人脸。人脸检测算法,模板匹配模型、Adaboost模型,Adaboost模型速度。精度综合性能最好,训练慢、检测快,可达到视频流实时检测效果。

人脸图像预处理

基于人脸检测结果,处理图像,服务特征提取。系统获取人脸图像受到各种条件限制、随机干扰,需缩放、旋转、拉伸、光线补偿、灰度变换、直方图均衡化、规范化、几何校正、过滤、锐化等图像预处理。

人脸图像特征提取

人脸图像信息数字化,人脸图像转变为一串数字(特征向量)。如,眼睛左边、嘴唇右边、鼻子、下巴位置,特征点间欧氏距离、曲率、角度提取出特征分量,相关特征连接成长特征向量。

人脸图像匹配、识别

提取人脸图像特征数据与数据库存储人脸特征模板搜索匹配,根据相似程度对身份信息进行判断,设定阈值,相似度越过阈值,输出匹配结果。确认,一对一(1:1)图像比较,证明“你就是你”,金融核实身份、信息安全领域。辨认,一对多(1:N)图像匹配,“N人中找你”,视频流,人走进识别范围就完成识别,安防领域。

###########################################

人脸识别分类

*人脸检测

*人脸关键点检测

*人脸验证

*人脸属性检测

人脸检测

检测、定位图片人脸,返回高精度人脸框坐标。对人脸分析、处理的第一步。“滑动窗口”,选择图像矩形区域作滑动窗口,窗口中提取特征对图像区域描述,根据特征描述判断窗口是否人脸。不断遍历需要观察窗口。

人脸关键点检测

定位、返回人脸五官、轮廓关键点坐标位置。人脸轮廓、眼睛、眉毛、嘴唇、鼻子轮廓。Face++提供高达106点关键点。人脸关键点定位技术,级联形回归(cascaded shape regression, CSR)。人脸识别,基于DeepID网络结构。DeepID网络结构类似卷积神经网络结构,倒数第二层,有DeepID层,与卷积层4、最大池化层3相连,卷积神经网络层数越高视野域越大,既考虑局部特征,又考虑全局特征。


输入层 31x39x1、卷积层1 28x36x20(卷积核4x4x1)、最大池化层1 12x18x20(过滤器2x2)、卷积层2 12x16x20(卷积核3x3x20)、最大池化层2 6x8x40(过滤器2x2)、卷积层3 4x6x60(卷积核3x3x40)、最大池化层2 2x3x60(过滤器2x2)、卷积层42x2x80(卷积核2x2x60)、DeepID层 1x160、全连接层 Softmax。《Deep Learning Face Representation from Predicting 10000 Classes》 http://mmlab.ie.cuhk.edu.hk/pdf/YiSun_CVPR14.pdf

人脸验证

分析两张人脸同一人可能性大小。输入两张人脸,得到置信度分类、相应阈值,评估相似度。

人脸属性检测

人脸属性辩识、人脸情绪分析。https://www.betaface.com/wpa/在线人脸识别测试。给出人年龄、是否有胡子、情绪(高兴、正常、生气、愤怒)、性别、是否带眼镜、肤色。

人脸识别应用,美图秀秀美颜应用、世纪佳缘查看潜在配偶“面相”相似度,支付领域“刷脸支付”,安防领域“人脸鉴权”。Face++、商汤科技,提供人脸识别SDK。

##############################################

下面进入正题!!!做一个人脸检测。

1.获取数据集(LFW)

Labeled Faces in the Wild Home Menu->Download->All images as gzipped tar file

或者直接点击我是LFW 解压放到datasets

2.下载facenet并配置(很重要)

 1)git clone --recursive https://github.com/davidsandberg/facenet.git
 2)cd facenet/
 3)pip install -r requirements.txt (这一步可能会把你的TF修改成1.2.0)
 4)export PYTHONPATH=$(pwd)/src
注意文件放置的位置!

facenet所在路径 /home/zhengxinxin/facenet

lfw解压后所在路径:/home/zhengxinxin/datasets/lfw

3.处理数据集(对齐数据集)
1)cd facenet
2) python src/align/align_dataset_mtcnn.py ~/datasets/lfw/raw ~/datasets/lfw/lfw_mtcnnpy_160 --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25

图片较多需要等一段时间(等了半个多小时。。。。),然后再这里/home/zhengxinxin/datasets/lfw/lfw_mtcnnpy_160会有对齐之后的图片了。


修改之后成这样了。

4.下载模型文件

https://github.com/davidsandberg/facenet

选择pre-trained models

下载20170512-110547(MS-Celeb-1M数据集训练的模型文件,微软人脸识别数据库,名人榜选择前100万名人,搜索引擎采集每个名人100张人脸图片。预训练模型准确率0.993+-0.004)

然后解压


把它放在

放在一个文件夹下 mkdir ~/models以便后面路径寻找

也就是说文件放在了/home/zhengxinxin/models

5.在lfw数据集上面进行验证

1)cd facenet

2) python src/validate_on_lfw.py ~/datasets/lfw/lfw_mtcnnpy_160 ~/models/20170512-110547

#######################################

输出:

2017-11-16 16:45:21.265525: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
2017-11-16 16:45:21.265657: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2017-11-16 16:45:21.265667: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-11-16 16:45:21.265673: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-11-16 16:45:21.265677: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
Model directory: /home/zhengxinxin/models/20170512-110547
Metagraph file: model-20170512-110547.meta
Checkpoint file: model-20170512-110547.ckpt-250000
Runnning forward pass on LFW images
Accuracy: 0.992+-0.005
Validation rate: 0.97600+-0.01405 @ FAR=0.00133
Area Under Curve (AUC): 1.000
Equal Error Rate (EER): 0.008


为了和基准比较,采用facenet/data/pairs.txt,官方随机生成数据,里面包含匹配和不匹配人名和图片编号。

#######################################

下面看一下validate_on_lfw.py文件:

    这里采用十折交叉验证的方法来测试算法的准确。十折交叉验证是常用的精度测试方法,具体策略是:数据集分成10份,轮流将其中9份做训练集,1份做测试保,10次结果均值作算法精度估计。一般需要多次10折交叉验证求均值。

"""Validate a face recognizer on the "Labeled Faces in the Wild" dataset (http://vis-www.cs.umass.edu/lfw/).
Embeddings are calculated using the pairs from http://vis-www.cs.umass.edu/lfw/pairs.txt and the ROC curve
is calculated and plotted. Both the model metagraph and the model parameters need to exist
in the same directory, and the metagraph should have the extension '.meta'.
"""
# MIT License
# 
# Copyright (c) 2016 David Sandberg
# 
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# 
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import tensorflow as tf
import numpy as np
import argparse
import facenet
import lfw
import os
import sys
import math
from sklearn import metrics
from scipy.optimize import brentq
from scipy import interpolate

def main(args):
  
    with tf.Graph().as_default():
      
        with tf.Session() as sess:
            
            # Read the file containing the pairs used for testing
            pairs = lfw.read_pairs(os.path.expanduser(args.lfw_pairs))

            # Get the paths for the corresponding images
            paths, actual_issame = lfw.get_paths(os.path.expanduser(args.lfw_dir), pairs, args.lfw_file_ext)

            # Load the model
            facenet.load_model(args.model)
            
            # Get input and output tensors
            images_placeholder = tf.get_default_graph().get_tensor_by_name("input:0")
            embeddings = tf.get_default_graph().get_tensor_by_name("embeddings:0")
            phase_train_placeholder = tf.get_default_graph().get_tensor_by_name("phase_train:0")
            
            #image_size = images_placeholder.get_shape()[1]  # For some reason this doesn't work for frozen graphs
            image_size = args.image_size
            embedding_size = embeddings.get_shape()[1]
        
            # Run forward pass to calculate embeddings
            print('Runnning forward pass on LFW images')
            batch_size = args.lfw_batch_size
            nrof_images = len(paths)
            nrof_batches = int(math.ceil(1.0*nrof_images / batch_size))
            emb_array = np.zeros((nrof_images, embedding_size))
            for i in range(nrof_batches):
                start_index = i*batch_size
                end_index = min((i+1)*batch_size, nrof_images)
                paths_batch = paths[start_index:end_index]
                images = facenet.load_data(paths_batch, False, False, image_size)
                feed_dict = { images_placeholder:images, phase_train_placeholder:False }
                emb_array[start_index:end_index,:] = sess.run(embeddings, feed_dict=feed_dict)
        
            tpr, fpr, accuracy, val, val_std, far = lfw.evaluate(emb_array, 
                actual_issame, nrof_folds=args.lfw_nrof_folds)

            print('Accuracy: %1.3f+-%1.3f' % (np.mean(accuracy), np.std(accuracy)))
            print('Validation rate: %2.5f+-%2.5f @ FAR=%2.5f' % (val, val_std, far))

            auc = metrics.auc(fpr, tpr)
            print('Area Under Curve (AUC): %1.3f' % auc)
            eer = brentq(lambda x: 1. - x - interpolate.interp1d(fpr, tpr)(x), 0., 1.)
            print('Equal Error Rate (EER): %1.3f' % eer)
            
def parse_arguments(argv):
    parser = argparse.ArgumentParser()
    
    parser.add_argument('lfw_dir', type=str,
        help='Path to the data directory containing aligned LFW face patches.')
    parser.add_argument('--lfw_batch_size', type=int,
        help='Number of images to process in a batch in the LFW test set.', default=100)
    parser.add_argument('model', type=str, 
        help='Could be either a directory containing the meta_file and ckpt_file or a model protobuf (.pb) file')
    parser.add_argument('--image_size', type=int,
        help='Image size (height, width) in pixels.', default=160)
    parser.add_argument('--lfw_pairs', type=str,
        help='The file containing the pairs to use for validation.', default='data/pairs.txt')
    parser.add_argument('--lfw_file_ext', type=str,
        help='The file extension for the LFW dataset.', default='png', choices=['jpg', 'png'])
    parser.add_argument('--lfw_nrof_folds', type=int,
        help='Number of folds to use for cross validation. Mainly used for testing.', default=10)
    return parser.parse_args(argv)

if __name__ == '__main__':
    main(parse_arguments(sys.argv[1:]))



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

TensorFlow在人脸识别中的应用-人脸检测 的相关文章

  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • 如何解决使用libevent时的共享库加载问题“error while loading shared libraries: libevent-2.1.so.7: cannot open ...“

    在软件开发中 我们经常会使用各种库来加速开发和提高程序的性能 但有时候 在使用这些库的过程中 可能会遇到共享库加载问题 这可能导致程序无法正常运行 问题描述 假设您正在开发一个程序 并在其中使用了libevent库 您编译程序后尝试运行它
  • Java 入门基础篇03-win11手把手教学配置Java环境变量

    一 如何配置Java环境变量 1 本人操作系统win11 找到 此电脑 右键鼠标点击 属性 后 如图1 图1 2 根据提示完成 如图2 图2 3 最后一步 如图3 图3 注意 当以上操作都完成时 需逐个点击确定保存编辑操作 最后进行测试是否
  • 区块链搭建联盟链及控制台安装

    一 联盟链 1 安装依赖 macos 环境安装依赖 brew install openssl curl ubuntu 环境安装依赖 sudo apt install y openssl curl centos 环境安装依赖 sudo yum
  • 【第三周】第 1 节:Python的逻辑控制与异常

    第三周 第一节课 Python的逻辑控制语句 条件判断语句 if elif else a 50 if a gt 100 print a 超过阈值 elif a 50 print a 只有阈值的一半 else print a 小于阈值 循环语
  • DevOps 与 CICD 详解

    DevOps DevOps 是 Development 开发 和 Operations 运维 的组合 是一种方法论 是一组过程 方法与系统的统称 用于促进应用开发 应用运维和质量保障 QA 部门之间的沟通 协作与整合 以期打破传统开发和运营
  • 华为机试OD真题 组成最大数 解题思路详解

    前言 华为机试真题 专栏为华为OD机试真题 源码包含多种语言 如果找不到想要的考题 或者需要最新考题的答案 请进行留言机试题目 注 留言考题请注明机试的时间 java版 javascript版和Python版三种实现方式 题目描述 小组中每
  • CCF-CSP 第一题python实现

    文章目录 201312 1 出现次数最多的数 201403 1 相反数 201409 1 相邻数对 201412 1 门禁系统 201503 1 图像旋转 201509 1 数列分段 201512 1 数位之和 201604 1 折点计数
  • 2022最新整理iOS app上架app详细教程

    2022最新整理iOS app上架app详细教程 上架iOS需要一个付费688的开发者账号 还没有的话申请一个或者借用 申请苹果开发者账号教程 上架App Store之前是先安装到苹果手机测试调试好 app能正常运行再上架 iOS真机调试测
  • flink随笔

    1 map 或者source时继承对应的rich function 在其中的open方法中建立连接 对应的close方法中关闭连接 2 window必须对应keyedstream 也就是说必须在keyby之后 之后在对应相应的增量函数比如R
  • Netty的心跳机制

    文章目录 一 引入 二 工作原理 三 实现 四 源码剖析 五 总结 一 引入 在 TCP 保持长连接的过程中 可能会出现断网等网络异常出现 异常发生的时候 client 与 server 之间如果没有交互的话 它们是无法发现对方已经掉线 二
  • For input string: 1 异常处理

    当使用Integer value 1 的时候却发现抛出了一个NumberFormatException异常 提示信息是For input string 1 百思不得其解 后来打断点调试发现 1 这个字符串中居然有两个char字符 第一个为
  • c语言实现读取csv文件,并对数据进行分析。

    总代码 c在这里插入代码片 include
  • 深度度量学习(DML)中pair-based方法中的loss

    文章目录 前言 一 Constrative loss 1 二 Triplet loss 2 Offline and online triplet mining 参考 三 Lifted Structure Loss 四 N pairs los
  • CUSUM算法学习+小实例

    说明 本文为个人搜集理解 并非全面 CUSUM Cumulative Sum Control Chart 累积和 一种先进的统计方法 她利用当前的和最近的过程数据来检验过程均值中不大的变化或变异性 CUSUM代表偏离目标值得变差的 累积和
  • Flutter学习之旅(二)常用的Flutter的基础组件介绍

    前言 为了能更快的创建一个好看的应用 Flutter提供了一系列的组件 有基础组件 Basics Widgets 质感组件 Material Components 等 本篇将介绍常用的基础组件 目录 看到上面的目录 从事Android开发的
  • 看完这篇 教你玩转渗透测试靶机Vulnhub——DriftingBlues-5

    Vulnhub靶机DriftingBlues 5渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机漏洞详解 信息收集 暴力破解 ssh登入 KDBX文件密码爆破 定时提权 获取flag Vulnhub靶机渗透总
  • 设计模式之生成器模式

    将一个复杂对象的创建和它的表示分离 使得同样的创建过程可以有不同的表示 应用场景 一水杯工厂要生产各式各样的水杯 无论杯子是神马造型 但都包括绳子 帽子和杯体 以此模型创建各种类型的杯子 类图 cup类 public class Cup p
  • 数据仓库和数据库

    数据库 1 数据库面向事务设计 属于OLTP 在线事务处理 系统 主要操作是随机读 写 2 在设计时尽量避免冗余 常采用符合范式规范来设计 范式分为第一范式 第二范式 第三范式 一般要求符合第三范式 较为符合人的逻辑思维 3 数据库一般存储
  • Leetcode 33. Search in Rotated Sorted Array

    题目描述 将有序数组打乱 然后从中查找一个数据的下标 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand
  • TensorFlow在人脸识别中的应用-人脸检测

    参考 1 TensorFlow技术解析与实战 2 http blog csdn net tmosk article details 78087122 3 https www cnblogs com libinggen p 7786901 h