社区首页 >问答首页 >使C2027在使用dlib::frontal_face_detector时使用未定义类型的“dlib::image_traits<image_type>”错误

使C2027在使用dlib::frontal_face_detector时使用未定义类型的“dlib::image_traits<image_type>”错误
EN

Stack Overflow用户
提问于 2020-08-14 23:28:47
回答 1查看 380关注 0票数 0

我正在使用dlib的最新版本,并试图构建一个使用其dlib::frontal_face_detectordlib::shape_predictor predictor检测人脸的DLL。但是,在尝试使用detector时,只需执行以下操作:

代码语言:javascript
代码运行次数:0
复制
auto faces = this->detector(img, 0);

我得到了这个编译错误:

代码语言:javascript
代码运行次数:0
复制
Severity    Code    Description Project File    Line    Suppression State
Error   C2146   syntax error: missing ';' before identifier 'pixel_type'    Test    D:\Codes\Dependencies\include\dlib\image_processing\scan_fhog_pyramid.h 601 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    Test    D:\Codes\Dependencies\include\dlib\image_processing\scan_fhog_pyramid.h 601 
Error   C2027   use of undefined type 'dlib::image_traits<image_type>'  Test    D:\Codes\Dependencies\include\dlib\image_processing\scan_fhog_pyramid.h 601 

代码如下所示:

代码语言:javascript
代码运行次数:0
复制
#include <iostream>
#include <tuple>
#include <chrono>
#include <string>
#include <filesystem>
namespace fs = std::filesystem;
#include <functional>

//#include <torch/torch.h>
//#include <torch/script.h>


#include <dlib/opencv.h>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing/render_face_detections.h>
#include <dlib/image_processing.h>
#include <dlib/gui_widgets.h>

//#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>

class TEST_API Test
{
public:
    Test(std::string shape_predictor_path = "");
    void main_op(cv::Mat img_ori, bool show_debug_info = true);
    ~Test();

private:
    dlib::frontal_face_detector detector;
    dlib::shape_predictor predictor;
    //torch::jit::script::Module net;
};
代码语言:javascript
代码运行次数:0
复制
//in Test.cpp
#include <Test/Test.h>
Test::Test(std::string shape_predictor_path)
{
    auto cdir = fs::current_path();
    detector = dlib::get_frontal_face_detector();

    auto landmark_path = shape_predictor_path == "" ? (cdir / "shape_predictor_68_face_landmarks.dat").string() : shape_predictor_path;
    auto model_path = (cdir / "net_4.jit").string();
    std::cout << "landmark path: " << landmark_path << "model path: " << model_path << std::endl;
    dlib::deserialize(landmark_path) >> this->predictor;
    //this->net = torch::jit::load(model_path);
}
void Test::main_op(cv::Mat img, bool show_debug_info)
{
    try
    {
        //cv::Mat img_cpy(img);
        //grayscale
        cv::cvtColor(img, img, cv::COLOR_BGR2GRAY);
        auto faces = this->detector(img, 0);
         //....
    }
    catch(std::exception exp)
    {
        std::cout << exp.what() << std::endl;
    }
}

我在Visual 2019中使用OpenCV3.4.11和libtorch1.6。该语言被设置为C++17。我的C++预处理程序中也有这些:

代码语言:javascript
代码运行次数:0
复制
NDEBUG
_CONSOLE
_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS
_CRT_SECURE_NO_WARNINGS

我使用的是dlib 19.21,我包括了它的包含路径,并将dlib source.cpp添加到我的dll项目中,并像这样构建了我的项目。这些也是我的构建选项:

代码语言:javascript
代码运行次数:0
复制
/D_TEST_BUILD_DLL  /bigobj 

为什么我会看到这个错误?我在这里错过了什么?

更新:

如果不使用任何其他库(如torch ),就会再次发生这种情况。因此,这与任何其他库无关。这是纯的dlib/opencv!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-14 23:54:35

这个错误有点误导性,这个问题是由向cv::Matdlib::shape_predictor对象提供一个dlib::get_frontal_face_detector()dlib::shape_predictor对象造成的,从而导致了声明的错误。将其转换为预期类型解决了这个问题:

代码语言:javascript
代码运行次数:0
复制
dlib::array2d<dlib::rgb_pixel> img_dlib;
dlib::assign_image(img_dlib, dlib::cv_image<dlib::bgr_pixel>(img));
auto faces = this->detector(img_dlib, 0);

更具体地说,当我们将输入图像转换为灰度时,我们只需使用cv_image<unsigned char>

代码语言:javascript
代码运行次数:0
复制
dlib::array2d<unsigned char> img_dlib;
dlib::assign_image(img_dlib, dlib::cv_image<unsigned char>(img));
auto faces = this->detector(img_dlib, 0);

旁注

实际上,接下来的14个小时我才达到我最初发布的解决方案,因为我完全错过了dlib::shape_predictor的输入,因为当我将检测器输入从cv::Mat更改为dlib::array2d时,错误仍然存在!我认为情况并非如此,并开始了14个小时的马拉松式的建设和重建,以不同的风格,并使用不同的方法,最终达到这一点!

因此,作为经验规则,输入所有与dlib相关的方法,dlib array2d!当这种情况发生时,我不知道为什么它不发出编译错误。如果dlib在这种情况下专门发布错误,我们就不会面临这样的问题。

下面是构建dlib并在Visual中使用它的示例方法(在我的例子中,我使用它创建一个DLL):

第1部分-使用Visual 2019构建Dlib

第2部分-在DLL项目中使用它

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63423659

复制
相关文章
OpenCV:使用dlib进行人脸检测
随着人脸识别,人脸支付,换脸等业务等爆发,多的人都将目光放在人脸方面的研究上。可以说,人脸检测是目前所有目标检测子方向中被研究的最充分的问题之一,它在安防监控,人机交互,金融支付,社交和娱乐等方面有很强的应用价值,也是整个人脸识别算法的第一步。
用户3578099
2023/09/01
7340
OpenCV:使用dlib进行人脸检测
使用Dlib编程出现X11相关错误
版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn.net/Quincuntial/article/details/53766638
Tyan
2019/05/25
1.1K0
Python使用dlib实现人脸检测
代码部分实现起来非常简单,不过十几行的事,不过需要注意的是,通过cv2.imread读取的图片是BRG通道的,需要转成RGB通道,不然通过pyplot显示图片会变色。
Awesome_Tang
2019/02/25
1K0
Python使用dlib实现人脸检测
python安装dlib库_pycharm安装dlib失败
dlib库可以实现人脸的检测,所以有些小伙伴在学习人脸识别和检测的时候有可能会用到此库。本人python版本为3.7,在dlib的下载官网上只找到python3.6的版本,当然还有很多文章上写的是安装cmake进行编译再安装boost然后再使用pip install dlib安装即可,但是本人试了很多还是不行。 3.7版本的dlib资源文件在csdn的其它文章中就有,淘宝0.5元即可下载,下载完成后将文件放置python文件下的Scripts文件夹中即可,结果如图。
全栈程序员站长
2022/09/27
1.9K0
python安装dlib库_pycharm安装dlib失败
Py之dlib:Python库之dlib库的简介、安装、使用方法详细攻略
0、利用dlib.get_frontal_face_detector函数实现人脸检测可视化
全栈程序员站长
2022/09/07
5.9K0
opencv:使用dlib进行人脸检测
随着人脸识别,人脸支付,换脸等业务等爆发,多的人都将目光放在人脸方面的研究上。可以说,人脸检测是目前所有目标检测子方向中被研究的最充分的问题之一,它在安防监控,人机交互,金融支付,社交和娱乐等方面有很强的应用价值,也是整个人脸识别算法的第一步。
用户3578099
2019/12/19
1.3K0
使用Python+OpenCV+dlib为人脸生成口罩
口罩已经被证明是防止COVID-19传播的最好的防御措施之一,然而,这也导致了基于面部特征(包括鼻子、嘴和下巴线)的面部识别算法的失效。
小白学视觉
2021/01/06
1.9K0
使用Python+OpenCV+dlib为人脸生成口罩
python 中 dlib库的安装
安装 dlib 库的时候需要用到 CMake 进行本地编译,而Cmake又是基于Visual Studio运行的,我在装这个库的时候,各种找不到教程,就想着分享一下自己的经验。
py3study
2020/01/19
1.4K0
python 中 dlib库的安装
Mac下dlib安装
X11是执行Unix程序的图形窗口环境。Mac OS X本身的程序是Aqua界面的,但是为了能够兼容unix和linux移植过来的程序(Mac OS X由BSD-UNIX修改而来),比如MatLab,就需要x11窗口环境。
Tyan
2019/05/25
1.3K0
关于OpenCV for Python入门-dlib实现人脸检测
Dlib 是用编程语言 C ++编写的通用跨平台软件库。它的设计深受来自契约式设计和基于组件的软件工程的思想的影响。因此,首先也是最重要的是一组独立的软件组件。这是一个加速软件许可证下发布的开源软件。
python与大数据分析
2022/05/19
5020
关于OpenCV for Python入门-dlib实现人脸检测
用 dlib 计算人脸68个关键点
dlib 是较流行的人脸识别的开源库,使用c++编写,里面包含了许多的机器学习算法,。其官网链接是 dlib C++ Library - Machine Learning
用户6021899
2022/11/18
1.8K0
用 dlib 计算人脸68个关键点
windows下通过Visual Studio编译dlib成dll文件
刚刚的dlib-19.13\dlib\build目录已经生成/转换为一个vs工程了,直接打开,生成,编译一个Release 64的windows静态库lib
张伦聪zhangluncong
2022/10/26
1.1K0
windows下通过Visual Studio编译dlib成dll文件
人脸识别应用之“变脸”
“照片分享”是社交场景中比重很大的一部分,当然现在来看视频(特别是短视频)也变得越来越多,而照片又以人像为主,所以我们看到如QQ空间、微博、微信朋友圈里,自拍、合影占据着大量的版面。人脸相关的应用也越来越多:如相机中嵌入人脸检测,拍照时实时将人脸标注出来;又比如一些相册应用,能根据人脸识别进行照片分类;再比如支付宝的扫脸登录,将人脸作为个人身份ID。 这些应用都以人脸检测、人脸识别技术为基础,检测指将人脸定位出来,找到人脸所在位置,而识别则是匹配出这个人脸是谁,不过通常我们将这两项技术统称为人脸识别。随着深
智能算法
2018/04/02
3.8K0
人脸识别应用之“变脸”
视频人脸检测——Dlib版(六)
往期目录 视频人脸检测——Dlib版(六) OpenCV添加中文(五) 图片人脸检测——Dlib版(四) 视频人脸检测——OpenCV版(三) 图片人脸检测——OpenCV版(二) OpenCV环境搭建(一) 更多更新,欢迎访问我的github:https://github.com/vipstone/faceai 前言 Dlib的人脸识别要比OpenCV精准很多,一个是模型方面的差距,在一方面和OpenCV的定位有关系,OpenCV是一个综合性的视觉处理库,既然这么精准,那就一起赶快来看吧。 视
磊哥
2018/06/07
1.2K0
Dlib库landmark算法解析
      landmark是一种人脸部特征点提取的技术,Dlib库中为人脸68点标记,在《调用Dlib库进行人脸关键点标记》一文中有效果和标定点序号的示意图。今后可采用landmark中的点提取眼睛区域、嘴巴区域用于疲劳检测,提取鼻子等部分可用于3D姿态估计。       Dlib库使用《One Millisecond Face Alignment with an Ensemble of Regression Trees》CVPR2014中提及的算法:ERT(ensemble of regression
微风、掠过
2018/04/10
2.1K0
Dlib库landmark算法解析
跟面部识别开愚人玩笑?做一个时尚口罩就能实现
目前,人脸识别的使用率正在不断上升,随之而来关于面部识别道德问题的争论也愈发激烈。从机场到社交媒体,面部识别的应用无处不在。因此,想让自己的脸不被扫描几乎是不可能的。
CDA数据分析师
2019/08/06
4870
centOS 7无显卡虚拟机安装dlib提示CUDA错误
dlib是一个强大的库,但是其默认是需要NVIDIA显卡的,其实也是需要N卡附带的CUDA环境。但偏偏我的虚拟机没有显卡,所以只能尝试无CUDA环境下安装dlib。
Cloudox
2021/11/23
8540
Widows安装python库dlib
选择匹配的版本,dlib-18.17.100-cp35-none-win_amd64.whl(md5)
周小董
2019/03/25
1.1K0
图片人脸检测——Dlib版(四)
上几篇给大家讲了OpenCV的图片人脸检测,而本文给大家带来的是比OpenCV更加精准的图片人脸检测Dlib库。 点击查看往期: 《图片人脸检测——OpenCV版(二)》 《视频人脸检测——OpenC
磊哥
2018/05/09
1.7K0
图片人脸检测——Dlib版(四)
点击加载更多

相似问题

关于dlib::frontal_face_detector优化

15

再现dlib frontal_face_detector()训练

116

使用python dlib时导入错误

11

无法使用全局安装的Dlib编译Dlib示例

10

使用pip安装Dlib时出错

60
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档