【QT】亲测有效:“生成的目标文件包含了过多的段,超出了编译器或链接器允许的最大数量”错误的解决方案

news2024/10/1 21:05:16
在使用dlib开发人脸对齐功能时,出现了”生成的目标文件包含了过多的段,超出了编译器或链接器允许的最大数量的错误“。
主要功能代码如下:
#include <QApplication>
#include <QImage>
#include <QDebug>

#include <dlib/opencv.h>
#include <opencv2/highgui/highgui.hpp>
#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 <dlib/image_io.h>
#include <iostream>

#include <dlib/matrix.h>

#include <opencv2/opencv.hpp>
#include <opencv2/opencv_modules.hpp>
#include <opencv2/imgproc/imgproc.hpp>


#include <dlib/dnn.h>

#define FACE_DOWNSAMPLE_RATIO 4
#define SKIP_FRAMES 2
#define DLIB_PNG_SUPPORT
#define DLIB_JPEG_SUPPORT
using namespace cv;
using namespace std;
using namespace dlib;

template <template <int,template<typename>class,int,typename> class block, int N, template<typename>class BN, typename SUBNET>
using residual = add_prev1<block<N,BN,1,tag1<SUBNET>>>;


template <template <int,template<typename>class,int,typename> class block, int N, template<typename>class BN, typename SUBNET>
using residual_down = add_prev2<avg_pool<2,2,2,2,skip1<tag2<block<N,BN,2,tag1<SUBNET>>>>>>;


template <int N, template <typename> class BN, int stride, typename SUBNET>
using block  = BN<con<N,3,3,1,1,relu<BN<con<N,3,3,stride,stride,SUBNET>>>>>;


template <int N, typename SUBNET> using ares      = relu<residual<block,N,affine,SUBNET>>;
template <int N, typename SUBNET> using ares_down = relu<residual_down<block,N,affine,SUBNET>>;


template <typename SUBNET> using alevel0 = ares_down<256,SUBNET>;
template <typename SUBNET> using alevel1 = ares<256,ares<256,ares_down<256,SUBNET>>>;
template <typename SUBNET> using alevel2 = ares<128,ares<128,ares_down<128,SUBNET>>>;
template <typename SUBNET> using alevel3 = ares<64,ares<64,ares<64,ares_down<64,SUBNET>>>>;
template <typename SUBNET> using alevel4 = ares<32,ares<32,ares<32,SUBNET>>>;


using anet_type = loss_metric<fc_no_bias<128,avg_pool_everything<
                            alevel0<
                            alevel1<
                            alevel2<
                            alevel3<
                            alevel4<
                            max_pool<3,3,2,2,relu<affine<con<32,7,7,2,2,
                            input_rgb_image_sized<150>
                            >>>>>>>>>>>>;




// 计算两个人脸的相似度
double compare_faces(const array2d<rgb_pixel>& img1, const array2d<rgb_pixel>& img2, shape_predictor& sp, anet_type& net) {
    // 检测人脸
    frontal_face_detector detector = get_frontal_face_detector();
    std::vector<dlib::rectangle> dets1 = detector(img1);
    std::vector<dlib::rectangle> dets2 = detector(img2);


    if (dets1.empty() || dets2.empty()) {
        throw std::runtime_error("No faces detected in one of the images.");
    }


    // 提取人脸特征
    full_object_detection shape1 = sp(img1, dets1[0]);
    full_object_detection shape2 = sp(img2, dets2[0]);


    // 计算人脸特征向量
    matrix<rgb_pixel> face_chip1;
    extract_image_chip(img1, get_face_chip_details(shape1, 150, 0.25), face_chip1);
    matrix<rgb_pixel> face_chip2;
    extract_image_chip(img2, get_face_chip_details(shape2, 150, 0.25), face_chip2);


    // 获取128维特征向量
    auto face_descriptor1 = net(face_chip1);
    auto face_descriptor2 = net(face_chip2);


    // 计算距离
    double distance = length(face_descriptor1 - face_descriptor2);
    return distance;
}

int main(int argc, char** argv)
{
        QApplication app(argc, argv);
       // 加载模型
       shape_predictor sp;
       deserialize("shape_predictor_68_face_landmarks.dat") >> sp;
       anet_type net;
       deserialize("dlib_face_recognition_resnet_model_v1.dat") >> net;


       // 加载图像
       array2d<rgb_pixel> img1, img2;
       load_image(img1, "path/to/your/image1.jpg");
       load_image(img2, "path/to/your/image2.jpg");


       // 进行人脸比对
       try {
           double distance = compare_faces(img1, img2, sp, net);
           qDebug()<<QString::number(distance);
           QString result = (distance < 0.6) ? "Faces match!" : "Faces do not match!";
           qDebug()<<result;
       } catch (const std::exception& e) {
            qDebug()<<e.what();
       }

       return app.exec();
}
错误控制台显示:
        这个错误信息表明在编译过程中,生成的目标文件main.o包含了过多的段(sections),超出了编译器或链接器允许的最大数量。在某些嵌入式系统或使用特定工具链的情况下,目标文件的段数量会有严格的限制。
         解决方法:
  • 优化代码结构:检查代码,尝试减少不必要的函数和全局变量,以此减少段的数量。
  • 使用更小的数据类型:如果可能,使用更小的数据类型,如int替换为short,long替换为short或int,以减少内存占用和段的数量。
  • 减少链接器的内存占用:调整链接器的内存配置,例如在某些链接器中可以通过设置内存段的大小来减少段的数量。
  • 使用更高级的编译器或链接器:升级到更高版本的编译器或链接器,新版本可能增加了对更多段的支持,或者提供了优化选项来减少段的数量。
  • 配置编译器:有些编译器允许通过特定选项来调整段的生成策略,比如GNU编译器中的-ffunction-sections和-fdata-sections选项可以将函数和数据分别放入独立的段中。
  • 分割代码:如果可能,将代码分割成多个小的源文件和库,以减少每个目标文件的段数量。
  • 检查编译器和链接器文档:查看编译器和链接器的文档,看是否有特定的选项或配置可以帮助减少段的数量。
  • 联系工具链提供商:如果上述方法都无法解决问题,可以考虑联系你正在使用的编译器或链接器的技术支持。
  • 在实施以上任何一个解决方案之前,请确保了解这些更改可能对代码的其他方面产生的影响,并在必要时对代码进行适当的测试。
        快速简单的解决方案:是由Debug模式切换成Release模式。

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

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

相关文章

叶绿素透射反射率与波长

本文在分析巢湖水体反射光谱特征的基础上,通过对光谱反射率与叶绿素a 的浓度之间的关系进行分析研究,结果表明,单波段光谱反射率与叶绿素a浓度的相关系数较小,不宜用于估算叶绿素a浓度&#xff0e;光谱反射率比值RFo5.m/Rss.nm.和 690nm反射率的一阶微分均与叶绿素a浓度有较好的…

leetcode每日一题day16(24.9.26)——数组元素和与数字和的绝对差

思路&#xff1a;遍历数组在对数组元素进行求和时并使用while循环求数字和&#xff0c;由于对于一个数&#xff0c;其必定大于其个数位数字的和,所以可以直接对sum进行减 代码 int differenceOfSum(vector<int>& nums) {int ans 0;for (int x : nums) {ans x; // …

基于Springboot+Vue的玩具租赁系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

OpenSCAP部署、使用与原理分析

文章目录 前言1、概述2、安装与使用2.1、源码安装2.1.1、获取源代码2.1.2、获取构建依赖项2.1.3、构建库2.1.4、构建HTML文档2.1.5、运行测试2.1.6、安装OpenSCAP2.1.7、安装SCAP内容 2.2、使用方法2.2.1、oscap的常用命令2.2.2、显示有关SCAP内容的信息2.2.2.1、显示有关SCAP源…

WITS核心价值观【创新】篇|系统进化论 解锁新纪元

「客尊」、「诚信」、「创新」 与「卓越」 是纬创软件的核心价值观。我们秉持诚信态度&#xff0c;致力于成为客户长期且值得信赖的合作伙伴。持续提升服务厚度&#xff0c;透过数字创新实践多市场的跨境交付&#xff0c;助客户保持市场领先地位。以追求卓越的不懈精神&#xf…

【Python报错已解决】 WARNING: Ignoring invalid distribution

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【JavaSE】反射、枚举、lambda表达式

目录 反射反射相关类获取类中属性相关方法常用获得类相关的方法示例常用获得类中属性相关的方法示例获得类中注解相关的方法 反射优缺点 枚举常用方法优缺点 枚举与反射lambda表达式语法函数式接口简化规则使用示例变量捕获集合中的应用优缺点 反射 Java的反射&#xff08;refl…

数据分析-30-电影死亡笔记中的数据分析思维

文章目录 1 死亡笔记简介2 推理过程中的数据分析2.1 第一个问题2.2 第二个问题2.3 第三个问题3 数据分析的发展4 参考附录1 死亡笔记简介 《死亡笔记》改编自小畑健同名日本人气漫画《Death note》,故事描述拥有一本写上姓名就能将人置于死地笔记本的高中生夜神月与天才警部搜…

人工智能迭代产品有哪些

人工智能迭代产品有很多&#xff0c;以下是一些例子&#xff1a; Ai 智能办公利器 - Ai-321.com 人工智能 - Ai工具集 - 集合全球ai人工智能软件的工具箱网站 Midjourney&#xff1a;这是一款基于AI技术的文生图产品&#xff0c;可以通过简单的prompt生成独具艺术感的 Midjo…

工具按钮 QToolButton

工具按钮常常用来显示图标&#xff0c;然后添加到工具栏中 常用属性和方法 文本 设置和获取文本 //设置和获取文本 QString text() const void setText(const QString &text)图片 设置和获取图片 //设置和获取图片 QIcon icon() const void setIcon(const QIcon &…

【STM32单片机_(HAL库)】4-0【定时器TIM】定时器中断配置步骤

定时器工作原理 定时器计数模式 定时器溢出时间计算 定时器中断实验配置步骤 msp 函数是对 MCU 相关的硬件进行初始化设置&#xff0c;通常被设计用于处理特定硬件外设或功能的底层初始化工作。

Spring Boot驱动的足球青训俱乐部管理解决方案

1 绪论 1.1研究背景 随着科技的发展&#xff0c;计算机的应用&#xff0c;人们的生活方方面面都和互联网密不可分。计算机的普及使得人们的生活更加方便快捷&#xff0c;网络也遍及到我们生活的每个角落&#xff0c;二十一世纪信息化时代的到来&#xff0c;随着社会科技的不断…

Python地理数据处理 27:基于Arcpy批量处理已矫正的worldclim2.1未来气候数据——投影、重采样、多波段拆分以及裁剪

Arcpy批量处理已矫正的worldclim2.1未来气候数据 1. 写在前面2.实现代码 1. 写在前面 前面我写了一篇关于如何使用ArcGIS自带的Python工具处理worldclim数据的多波段数据的文章&#xff0c;而这只是处理该数据的其中一步。要想得到满足要求的数据&#xff0c;还需要其他操作&am…

自闭症寄宿学校 vs. 日常教育:为孩子提供更多可能

在探索自闭症儿童的教育路径时&#xff0c;家长们往往面临一个重大的选择&#xff1a;是选择传统的日常教育环境&#xff0c;还是寻找专为自闭症儿童设计的寄宿学校&#xff1f;广州的星贝育园自闭症儿童寄宿制学校&#xff0c;以其独特的教育模式和全方位的关怀体系&#xff0…

大数据毕业设计选题推荐-个性化图书推荐系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

python中的find函数怎么用

Python find() 方法检测字符串中是否包含子字符串 str &#xff0c;如果指定 beg&#xff08;开始&#xff09; 和 end&#xff08;结束&#xff09; 范围&#xff0c;则检查是否包含在指定范围内&#xff0c;如果包含子字符串返回开始的索引值&#xff0c;否则返回-1。 语法 …

Netty系列-6 Netty消息处理流程

背景 前文介绍了Netty服务端的启动流程&#xff0c;服务端启动后可以处理客户端发送的请求&#xff0c;包括连接请求和普通消息。 1.处理连接 当客户端有连接请求到达时&#xff0c;服务器会创建通道并将通道注册到选择器上&#xff0c;处理逻辑与NIO中实现完全一致。 详细流…

虚拟机、ubantu不能连接网络,解决办法

虚拟机、ubantu不能连接网络&#xff0c;解决办法 物理机OS&#xff1a; [Windows10 专业版](https://so.csdn.net/so/search?qWindows10 专业版&spm1001.2101.3001.7020) 虚拟机平台&#xff1a; VMware Workstation 16 Pro 虚拟机OS&#xff1a; Ubuntu 18.04 自动配…

英语音标与重弱读

英语中&#xff0c;比较重要的是音标。但事实上&#xff0c;我们对音标的学习还是比较少的&#xff0c;对它的理解也是比较少的。 一、音标 2个半元音 [w][j] 5个长元音&#xff1a;[i:] [ə:] [ɔ:] [u:] [ɑ:] 7个短元音&#xff1a;[i] [ə] [ɔ] [u] [] [e] [ʌ] 8个双元音…

车辆重识别(2020NIPS去噪扩散概率模型)论文阅读2024/9/27

[2] Denoising Diffusion Probabilistic Models 作者&#xff1a;Jonathan Ho Ajay Jain Pieter Abbeel 单位&#xff1a;加州大学伯克利分校 摘要&#xff1a; 我们提出了高质量的图像合成结果使用扩散概率模型&#xff0c;一类潜变量模型从非平衡热力学的考虑启发。我们的最…