人脸识别--Dlib(二)

Dlib 是一个现代化的 C++ 工具库,包含了机器学习、计算机视觉和图像处理的广泛功能。它特别在面部识别和检测方面非常流行。Dlib 的主要优点是其易用性、广泛的功能集和跨平台支持。下面是对 Dlib 的详细介绍,包括其主要功能、使用方法和优缺点。

主要功能

1. 人脸检测

Dlib 提供了一个非常强大的人脸检测器,基于 Histogram of Oriented Gradients (HOG) 和一个线性分类器。

import dlib
import cv2# 加载预训练的HOG人脸检测器
detector = dlib.get_frontal_face_detector()# 读取图像
image_path = 'path_to_image.jpg'
img = cv2.imread(image_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 检测人脸
faces = detector(gray)# 绘制人脸边框
for face in faces:x, y, w, h = face.left(), face.top(), face.width(), face.height()cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)# 显示图像
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 人脸关键点检测

Dlib 提供了一个预训练的 68 点面部关键点检测模型。

# 加载预训练的68点面部标志点检测模型
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')# 检测面部标志点
for face in faces:landmarks = predictor(gray, face)for n in range(0, 68):x = landmarks.part(n).xy = landmarks.part(n).ycv2.circle(img, (x, y), 1, (255, 0, 0), -1)# 显示图像
cv2.imshow('Image with Landmarks', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 人脸识别

Dlib 提供了一个预训练的 ResNet 模型,用于计算人脸嵌入向量(128 维向量),然后可以用于人脸识别。

# 加载预训练的人脸识别模型
face_rec_model_path = 'dlib_face_recognition_resnet_model_v1.dat'
face_rec_model = dlib.face_recognition_model_v1(face_rec_model_path)# 计算人脸嵌入向量
face_descriptors = []
for face in faces:shape = predictor(gray, face)face_descriptor = face_rec_model.compute_face_descriptor(img, shape)face_descriptors.append(face_descriptor)# face_descriptors now contains the 128D face descriptors for each detected face

优点

  1. 易用性:Dlib 的 Python 接口非常简洁,容易上手。
  2. 跨平台:支持 Windows、Linux 和 macOS 等多个平台。
  3. 预训练模型:提供了多种预训练模型,如人脸检测、关键点检测和人脸识别模型,方便快速应用。
  4. 性能良好:尽管基于 CPU,Dlib 的性能依然相对较好,适合大多数应用场景。

缺点

  1. 深度学习支持有限:虽然 Dlib 提供了一些深度学习功能,但相比于专门的深度学习框架(如 TensorFlow、PyTorch),它的深度学习支持不够全面。
  2. GPU 加速支持有限:Dlib 的主要模型都基于 CPU,这可能会影响在大规模应用中的性能。

进阶功能

1. 自定义训练人脸检测器

你可以使用 Dlib 的工具训练自己的面部检测器。这个过程包括标注数据、训练和评估模型。

import dlib# 标注数据并存储在xml文件中
options = dlib.simple_object_detector_training_options()
options.add_left_right_image_flips = True
options.C = 5
dlib.train_simple_object_detector("training.xml", "detector.svm", options)
2. 使用深度学习模型

Dlib 也支持基于深度学习的面部检测器。

cnn_face_detector = dlib.cnn_face_detection_model_v1("mmod_human_face_detector.dat")# 使用CNN人脸检测器
faces_cnn = cnn_face_detector(img, 1)for face in faces_cnn:x, y, w, h = face.rect.left(), face.rect.top(), face.rect.width(), face.rect.height()cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)

总结

Dlib 是一个功能强大且易用的库,适合各种计算机视觉任务,特别是人脸检测和识别。其预训练模型和高质量的实现使其成为快速开发原型和实际应用的理想选择。不过,对于需要高度定制或大规模深度学习支持的应用,可能需要结合其他深度学习框架来使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 对接农行支付相关业务(二)

文章目录 农行掌银集成第三方APP1:掌银支付对接快e通的流程1.1 在农行网站上注册我们的app信息([网址](https://openbank.abchina.com/Portal/index/index.html))1.2:java整合农行的jar包依赖1.3:把相关配置信息整合到项目中1.4:前端获取授权码信息1.5:后端根据授权码信…

【动态规划】速解简单多状态类问题

目录 17.16 按摩师 题⽬描述: 解法(动态规划): 1. 状态表⽰: 2. 状态转移⽅程: 3. 初始化: 4. 填表顺序 5. 返回值 代码 总结: 213.打家劫舍II(medium&#x…

Android 之广播监听网络变化

网络状态变化监听帮助类 NetBroadcastReceiverHelper public class NetBroadcastReceiverHelper {private static final String TAG "NetBroadcastReceiverHelper";private static final String NET_CHANGE_ACTION "android.net.conn.CONNECTIVITY_CHANGE&qu…

大模型中GPTs,Assistants API, 原生API的使用场景?

在大模型的使用中,GPTs、Assistants API和原生API各有其独特的应用场景和优势。以下是它们各自的使用场景: GPTs场景: 自然语言处理任务: GPTs擅长处理各种自然语言处理任务,如文本生成、翻译、摘要、情感分析等。 对…

C++ 基于vs2019创建并使用动态链接库(dll)

库的基本认识 静态库(Static Library) 基本概念:静态库是在编译时链接到目标程序中的库文件。它包含了程序运行所需的所有函数和数据,这些函数和数据会被直接嵌入到最终生成的可执行文件中。静态库通常以.a(在Unix-l…

分频器对相位噪声影响

本文我们将分析输入时钟被N分频之后的输出时钟的相位噪声如何变化。首先理想分频器的意思是我们假设分频器不会引入附加相位噪声,并且输入和输出时钟之间没有延时。我们假设每一个输出边沿的位置都完美的与输入边沿相对齐,这样便于分析。由于每N个输入时…

[FlareOn6]Overlong

很简单的逻辑 一度让我以为是加保护了 运行告诉我从未编码,懵逼 动调你也发现,你根本没什么可以操作的空间,密文什么的,都是固定的 但是这里大家发现没 我们只加密了28个密文 然后text是128 也就是 0x80 是不是因为密文没加密完呢 我也懒得去写代码了 汇编直接修改push 字…

axios和ts的简单使用

按照官网的使用案例简单记下笔记 1:安装 npm install axios 2:案例 一个简单的config配置信息 // 发起一个post请求 axios({method: post,url: /user/12345,data: {firstName: Fred,lastName: Flintstone} }); case // 在 node.js 用GET请求获取…

总结常见漏洞的代码审计方法

前言 这篇文章主要是总结一下在安全工作中常见漏洞的代码审计方法,以及修复方案,希望能对初学代码审计小伙伴们有所帮助,笔芯♥️ 代码审计的思路 通常做代码审计都是检查敏感函数的参数,然后回溯变量,判断变量是否可…

【Crypto】RSA

文章目录 题目步骤1.计算 𝑛2.计算欧拉函数 𝜙(𝑛)3. 扩展欧几里得算法求逆元 𝑑 解题感悟 题目 p473398607161 q4511491 e17 求d 步骤 1.计算 𝑛 公式:npq n47339860716145114912135733555619387051 …

初识STM32单片机-TIM定时器

初识STM32单片机-TIM定时器 一、定时器概述二、定时器类型2.1 基本定时器(TIM6和TIM7)2.2 通用定时器(TIM2、TIM3、TIM4和TIM5)2.3 高级定时器(TIM1和TIM8) 三、定时中断基本结构和时基单元工作时序3.1 定时器基本结构3.2 预分频器时序3.3 计数器时序3.3.1 计数器有无预装时序(…

ACM实训冲刺第二十一天

寒冰王座(数据处理与逻辑判断) 这段C语言代码实现了一个根据特定条件计算整数输入值变换的程序,它并不直接对应于经典的算法题类型,但可以视为一个“数据处理与逻辑判断”练习题。代码的主要逻辑如下: 读取测试数据数量…

electron-builder 打包配置

electron-builder介绍 一个完整的解决方案,用于打包和构建适用于macOS、Windows和Linux的可供分发的Electron应用程序,并提供开箱即用的“自动更新”支持。 命令 Commands: electron-builder build 构建 …

数据库设计分为几个阶段?

数据库设计可以分为以下几个阶段: 1.需求分析阶段:确定数据库的目标和需求,包括确定数据库的功能、数据量、访问模式、安全性等。 2.概念设计阶段:根据需求分析,设计出数据库的概念模型,包括实体、关系、…

Java学习52-迭代器 iterator

迭代器 iterator 迭代器Iterator的作用? 集合Collection是一个容器,是用来存储数据的。Iterator不是容器,是用来遍历现存的集合中的数据的。 2.如何选取迭代器Iterator对象? Iterator iterator coll.iterator(); 3.如何实现遍…

Hono 框架使用经验谈

Hono🔥是一个小型、快速并开源的 Serverless Web 框架,用 TypeScript 写就。它适用于任何JavaScript运行时:Cloudflare Workers,Fastly ComputeEdge,Deno,Bun,Vercel,Netlify&#x…

动手学操作系统(一、搭建实验环境)

动手学操作系统(一、搭建实验环境) 文章目录 动手学操作系统(一、搭建实验环境)1. 在VMware虚拟机中安装ubuntu20.042. 安装Bochs3. 启动计算机Reference 🚀 环境配置 🚀 笔者的环境使用的是 ubuntu 20.04…

python多线程的使用

Python 多线程探索 在 Python 编程中,多线程是一项强大的技术,它允许我们同时执行多个任务,从而提高程序的效率和响应性。 一、线程的基本概念 线程是进程中的一个执行单元,可以与其他线程共享进程的资源。 二、创建线程 在 P…

HTML/JavaScript实现复制文本、复制HTML、复制图片功能

文章目录 复制文本复制HTML复制图片全代码 复制文本 navigator.clipboard.writeText 接收一个字符串参数&#xff0c;写入到剪贴板中。 <button onclick"copyText()">复制文本</button> <script> function copyText() {// navigator.clipboard.wri…

Linux:confluence8.5.9的部署(下载+安装+破ji)离线部署全流程

0.环境 Confluence也是比较吃运存了&#xff0c;我建议运行运存给到4g或者4g以上就可以了&#xff0c;核数可以给到1核或以上 我部署在centos7.9操作系统上&#xff0c;ip地址为&#xff1a;192.168.6.1&#xff0c;yum仓库使用的是自己的镜像文件&#xff0c;本章所有使用到…