当前位置: 首页 > news >正文

Ubuntu下编译安装DLib的GPU版本并实现人脸检测和人脸关键点检测

1. 安装CUDA和CUDNN

首先需要安装好cuda和cudnn,具体可以参考我的另一篇博客。

2. 安装依赖库

pip install scikit-image opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 下载Dlib库

git clone https://gitee.com/binghai228/dlib.git

4. 编译和安装Dlib

cd dlib
mkdir build
cd build
cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1
cmake --build .
cd ..
python setup.py install --set USE_AVX_INSTRUCTIONS=1 --set DLIB_USE_CUDA=1

安装好以后,先测试下是否能正常启用。在终端中输入python进入交互式命令行,然后输入下面的代码:

import dlib
print(dlib.DLIB_USE_CUDA)

输出为true则为成功。

5. 人脸检测和关键点检测

完整代码如下:

import dlib
import cv2
import os# load face detector and shape predictor
# detector = dlib.get_frontal_face_detector()
detector = dlib.cnn_face_detection_model_v1("../model/mmod_human_face_detector.dat")
predictor = dlib.shape_predictor('../model/shape_predictor_68_face_landmarks.dat')img_folder = '../img/'
dst_folder = '../result/'# 检索img_folder下的所有图片
img_files = os.listdir(img_folder)# 逐张处理
for img_file in img_files:# 读取图片org_img = cv2.imread(img_folder + img_file)# 图像拷贝height, width = org_img.shape[:2]img = org_img.copy()# 等比缩放scale = 800.0 / widthnew_height = int(height * scale)img = cv2.resize(img, (800, new_height))# 检测人脸gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = detector(gray, 1)# 人脸关键点定位shape = predictor(gray, faces[0].rect)# 获取关键点的上下左右边界left = shape.part(0).xtop = shape.part(27).yright = shape.part(16).xbottom = shape.part(8).yh,w,c = img.shape# 可视化if len(faces) == 1:for i in range(68):cv2.circle(img, (shape.part(i).x, shape.part(i).y), 1, (0, 0, 255), 2)# 保存结果cv2.imwrite(dst_folder + img_file, img)print(img_folder + img_file)

运行效果如下:

在3090GPU上面测试,平均单张图像检测时间26ms。

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

相关文章:

  • 13.自治系统路由计算题
  • 传输层协议TCP(下)
  • 机械ERP需要解决的几个问题?关于非标机械行业物料编码,如何提升建立效率的说明!
  • dbops 助力 GreatSQL MGR架构安装部署
  • 【HTTP重定向与缓存机制详解】
  • qt初识--01
  • 【C++特殊工具与技术】优化内存分配(五):显式析构函数的调用
  • 不装 ROS 也能用 PyKDL!使用kdl_parser解析URDF并进行IK
  • AI支持下的-ArcGIS数据处理、空间分析、可视化及多案例综合应用
  • MS5110模数转换器可pin to pin兼容ADS1110
  • UniApp组件封装,2025年最新HarmonyOS鸿蒙模块化开发项目式教程
  • Bash 脚本中的特殊变量
  • 直接使用阿里云OSS的地址,报跨域访问的问题怎么解决
  • 小米玄戒O1架构深度解析(二):多核任务调度策略详解
  • 电路图识图基础知识-变频器控制电动机系统解析(二十四)
  • 6.11打卡
  • 湖北理元理律师事务所企业债务优化路径:司法重整中的再生之道
  • 低代码平台的版本管理深度解析
  • python训练营打卡第50天
  • 从源码角度了解Lucene(倒排索引存储结构)
  • 江苏艾立泰以技术创新破解全球环保合规难题 打开出口企业绿色转型大门
  • leetcode 768. 最多能完成排序的块 II
  • JavaScript解密里的ChaCha20 加密算法全解
  • 从原理到代码:深度解析YOLOv8的QualityFocalLoss改进方案
  • C++显性契约与隐性规则:类型转换
  • 网络层 IP协议(第一部分)
  • JSON Schema 2020-12 介绍
  • Web前端基础之HTML
  • C++ call_once用法
  • 第四章无线通信网