运动重定向:TeachNet

Vision-based Teleoperation of Shadow Dexterous Hand using End-to-End Deep Neural Network解析

  • 摘要
  • 1. 简介
  • 2. Related Work
    • 2.1 基于视觉的无标记远程操作
    • 2.2 基于深度的3D手部姿势估计
    • 2.3 远程操作中的主从配对
    • 2.4 遥操作映射方法
  • 3. 师生网络
    • Joint angle loss
    • Consistency Loss
      • (1)Hard consistency loss
      • (2)Soft consistency loss
    • Physical loss
    • 完整Loss
  • 4. 数据集生成
    • 4.1 人-机器人手部运动构型
    • 4.2 优化映射方法
  • 5. 实验
    • 5.1 TeachNet评价
    • 5.2 机器人实验
      • (1)Simulation实验
      • (2)Manipulation实验

论文地址:https://ieeexplore.ieee.org/document/8794277
论文代码:https://github.com/TAMS-Group/TeachNet_Teleoperation
论文出处:2019ICRA
论文单位:清华大学

摘要

  • 在本文中,我们提出了一种新的神经网络体系结构TeachNet,用于基于直观和无标记视觉的灵巧机器人手遥操作。
  • 机器人关节角度直接从人手的深度图像中生成,产生视觉上类似的端到端机器人手的姿势。
  • TeachNet的特殊结构与一致性损失函数相结合,处理了人类和机器人手在外观和解剖结构上的差异。
  • 从已有的标记人手深度图像和模拟机械手深度图像数据集生成同步的人-机器人训练集。
  • 最终的训练集包括 Shadow C6机械手的400K 成对深度图像和关节角度
  • 网络评估结果验证了TeachNet的优势,特别是在高精度条件下。
  • 模仿实验和新手远程操作的抓握任务表明,TeachNet比目前最先进的基于视觉的远程操作方法更可靠、更快。

1. 简介

  • 机器人灵巧的手为取代人类的手执行繁琐和危险的任务提供了一个有希望的基础。

  • 当灵巧手的自主操作处理复杂的感知时,远程操作在快速决策和处理极端情况方面优于智能编程。

  • 与接触式或基于可穿戴设备的远程操作不同,基于无标记视觉的远程操作具有显示自然的人体肢体运动和较少侵入性的优点

  • 基于分析视觉的遥操作分为两类:基于模型(model-based)和基于外观(appearance-based)的方法。

  • 基于模型的方法提供了连续的解决方案,但计算成本高,并且通常依赖于多摄像机系统的可用性。

  • 相反,基于外观的方法识别离散数量的手部姿势,这些姿势通常对应于方法的训练集,没有高的计算成本和硬件复杂性。

  • 近年来,越来越多的研究人员关注基于数据驱动的视觉远程操作方法,该方法首先利用深度卷积神经网络(CNN)获取三维手部姿势或识别手部手势类别,然后将相应的位置或姿势映射到机器人上。然而,这些方法不仅严重依赖于手部姿态估计或分类的准确性,而且还受到后处理时间成本的影响

  • 相反,我们寻求将人手的噪声深度图像作为输入,并通过训练深度CNN来产生机器人手的关节角度作为输出

  • 基于视觉的端到端远程操作是一种自然、直观的远程机器人操作方式,对新手操作方便。

  • 因此,设计一种能够在人体姿态空间中学习相应机器人姿态特征的高效网络至关重要。

  • 由于端到端方法依赖于大量的人机远程操作配对,我们的目标是探索一种有效的方法,同时收集机器人和人的同步手部数据

  • 本文提出了一种基于单深度图像的Shadow灵巧手远程操作方案(见图1)。
    在这里插入图片描述

  • 我们的主要贡献是:
    (1)我们提出了一个端到端的师生网络(TeachNet),它学习机器人和人手之间的运动学映射
    (2)我们建立了一个成对的人-机器人手数据集,该数据集包括相同手势的成对深度图像以及机器人手的相应关节角度
    (3)我们设计了一种优化的映射方法,将Shadow手的笛卡尔位置和链接方向与人手姿势相匹配,并适当考虑可能的自碰撞。

  • 在网络评估过程中,与其他端到端基线相比,TeachNet具有更高的准确率和更低的误差。

  • 正如我们在机器人实验中所说明的那样,我们的方法允许Shadow机器人模仿人类手势,并比最先进的数据驱动的基于视觉的远程操作更快地完成抓取任务。

2. Related Work

2.1 基于视觉的无标记远程操作

  • 人类对机器人的遥操作通常是通过接触装置来实现的,如跟踪传感器、装有角度传感器的手套、惯性传感器和操纵杆。
  • 然而,可穿戴设备是针对人手或人体的一定尺寸范围定制的,接触方式可能会阻碍人体肢体的自然运动。
  • 与这些方法相比,基于无标记视觉的远程操作具有更小的侵入性和更自然舒适的手势
  • 基于视觉模型的方法基于摄像系统从分割图像中计算出拇指和食指的连续三维位置和方向,并控制安装在六轴机械臂上的平行颌爪。
  • 与分析方法相比,数据驱动技术更侧重于对象表示和感知处理,例如特征提取、对象识别或分类以及姿态估计。
  • 例如,从无标记的视觉观察中跟踪人体运动,然后计算逆运动学过程。但是这种方法没有考虑机器人的物理约束和关节限制,容易产生机器人无法达到的姿态。
  • 然而,这些方法在很大程度上依赖于手部姿态估计或分类的准确性,并且浪费了大量的后处理时间。
  • 在这项工作中,我们的目标是设计一个端到端的基于视觉的CNN,它可以生成连续的机器人姿势,并提供快速直观的远程操作体验。

2.2 基于深度的3D手部姿势估计

  • 三维手部姿态估计是基于视觉的遥操作的重要研究领域之一。
  • 尽管三维手姿估计领域发展迅速,但孤立的三维手姿估计仅在[70,120]°的视点范围内实现较低的平均误差(10 mm)。
  • 根据输出姿态的表示,三维手部姿态估计方法分为基于检测和基于回归的方法
  • 基于检测的方法给出了每个关节的概率密度图
  • 基于回归的方法直接将深度图像映射到手模型的关节位置或关节角度。
  • 无论输出关节位姿属于谁,基于回归的网络与我们的端到端网络相似

2.3 远程操作中的主从配对

  • 要从人手图像中学习机器人的姿态特征,就必须考虑如何获得大量的人-机器人配对图像。
  • 先前的工作是通过要求人类操作员同步模仿机器人的运动来获得主从配对。像这样收集配对数据的成本很高,并且通常带有噪声对应。
  • 此外,人类和机器人之间不再有精确的对应关系,因为生理上的差异使得模仿对模仿者来说是非琐碎和主观的。
  • 实际上,对于人手来说,机器人的状态更容易接近,也相对稳定,而且已有很多人手数据集。
  • 由于在真实图像上进行训练可能需要大量的数据收集时间,因此另一种方法是在模拟图像上进行学习,并使表示适应真实数据。
  • 我们提出了一种新的标准,通过使用现有的标记人手深度图像数据集,操纵机器人并在仿真中记录相应的关节角度和图像,并在物理机器人上进行广泛的评估,从这些结果中生成人机配对。

2.4 遥操作映射方法

  • 传统的遥操作映射方法主要分为三类:关节映射(适用于力量抓取)、指尖映射(适用于精确抓取)和位姿映射(解释人类抓取功能而不是复制手的位置)。
  • 然而,在大多数情况下,只考虑一种类型的映射方法是不够的。例如,指尖映射忽略了指骨的位置和方向,也没有考虑从指骨和主指骨之间的特殊机械差异。

3. 师生网络

  • 直接从人体图像中解决关节回归问题是相当具有挑战性的,因为机械手和人手占据两个不同的空间。
  • 具体来说,想象我们有一个机器人手的图像 I_R人手的图像 I_H,而图像中的机械手与人手的动作完全相同。将人手图像映射到相应的机器人关节的问题可以表示为:
    在这里插入图片描述
  • 为了更好地处理输入深度图像中的几何信息和联合回归的复杂约束,我们采用了一种编码-解码式深度神经网络
  • 图2中的上层分支说明了我们使用的网络架构。
    在这里插入图片描述
  • 然而,人的手和Shadow的手基本上来自不同的空间,因此在姿态空间中让 f_feat 中的人手图像I_H 学习合适的潜在特征 z_pose 是很困难的。
  • 相比之下,从机械手图像 I_R关节目标Θ的映射将更加自然,因为它正是一个定义良好的手姿估计问题。
  • 直观地,我们认为对于配对的人类和机器人图像,他们的潜在姿势特征 z_pose 应该一致,因为他们代表相同的手部姿势,并最终映射到相同的关节目标。
  • 此外,通过观察IR到Θ的映射优于IH(这些初步结果见图5),IR的编码器效果可以更好地提取姿态特征,从而可以显著改善解码器的回归结果。
  • 基于上述考虑,我们提出了一种新的师生网络(TeachNet),以端到端方式解决基于视觉的远程操作问题。
  • TeachNet由两个分支组成,扮演教师角色的机器人分支和扮演学生角色的人类分支。

Joint angle loss

  • 每个分支都用均方误差(MSE)损失进行监督
    在这里插入图片描述
    其中 J 是关节角的groundtruth。
  • 此外,编码器-解码器结构将输入深度图像映射到关节预测。

Consistency Loss

  • 我们定义了两个潜在特征 z_Hz_R 之间的一致性损失 L_cons,以利用人手和机器人手之间的几何相似性。因此,L_cons 迫使人手分支受到与机器人分支共享的姿态空间的监督
  • 为了探索最有效的对准机制,我们设计了两种一致性损失两种不同的对准位置:

(1)Hard consistency loss

  • 特征对齐最直观的机制是在这两个分支的潜在特征上提供额外的均方误差(MSE)损失
    在这里插入图片描述

(2)Soft consistency loss

  • 有时,可能会分散网络对手部姿势表征的学习,尤其是在早期训练阶段。
  • 受[26]的启发,我们将 z_H 和 z_R 输入判别器网络D,以计算真实和虚假姿势特征的现实主义分数。
  • Soft consistency loss 基本上是这个分数的负值:

在这里插入图片描述

  • 对齐位置上,我们分别提出了 early teaching 和 late teaching。
  • 对于前者,我们将 对齐层(alignment layer) 放在编码器(encoder)和嵌入模块(embedding module)之后,而在后者中,对齐层位于整个模型的倒数第二层(这意味着回归模块将只包含一层)。
  • 下面,我们将L_cons_s的早期教学称为Teach Soft-Early,L_cons_s的晚期教学称为Teach Soft-Late。L_cons_h的早期教学称为Teach Hard-Early,L_cons_h的晚期教学称为Teach Hard-Late

Physical loss

  • 为了进一步改进远程操作模型,我们还引入了一个辅助损失: Physical loss
  • 施加物理约束和关节限制的 Physical loss为:
    在这里插入图片描述

完整Loss

  • 总的来说,每个分支的完整training objective是
    在这里插入图片描述
    其中,hard consistency loss 的α = 1,hard consistency loss 的α = 0.1。

4. 数据集生成

  • 训练学习人手和机械手之间运动映射的TeachNet强烈依赖于大量的人-机器人配对数据集。
  • 我们通过使用现成的人手数据集BigHand2.2M数据集以及使用图3所示pipeline的优化映射方法来实现这一目标。
    在这里插入图片描述
  • 通过该pipeline,我们收集了一个包含400K对模拟机器人深度图像和人手深度图像的训练数据集,并具有相应的机器人关节角度姿态

4.1 人-机器人手部运动构型

  • 本作品中使用的Shadow Dexterous Hand是由电机控制的,有5个手指,其运动链如图6右侧所示。
    在这里插入图片描述
  • 每个手指都有一个BioTac触觉传感器,取代了最后一个指骨和最后一个关节的可控性。
  • 每个手指有四个关节,远端、中端、近端和掌骨关节,但每个手指的第一个关节是僵硬的。小指和拇指有一个额外的关节来握住物体。
  • 总的来说,这是17个自由度加上手腕上的两个自由度是19个
  • 与机器人手相比,BigHand2.2M数据集的人手模型有21个关节,可以进行31DOF的运动,如图3所示。
  • 机器人手与人的手在运动学上的主要区别在于机器人关节的角度范围和手腕关节的结构。
  • 为了简化Shadow手与人手的差异性,影子手的两个手腕关节在0点处是固定的,只考虑Shadow手每个手指的TIP, PIP, MCP这15个关节关键点

4.2 优化映射方法

  • 有效地从人手姿态映射机器人姿态在我们的训练数据集中起着重要的作用。
  • 为了模仿人的手的姿态,我们提出了一种结合位置映射(position mapping)方向映射(orientation mapping) 和适当考虑可能的**自碰撞(self-collisions)**的优化映射方法。
  • 首先,我们使用位于人类手腕关节和机器人手腕关节 z 轴以上 34mm 处的通用参考系F。注意, 34mm是从腕关节到拇指底关节的高度。选择这些位置是因为它们位于高度运动相似的位置。
  • 其次,我们对权重较大的ω_pf的指尖权重较小的ω_pp的PIP关节进行位置映射(position mapping)
  • 第三,用权重ω_d对拇指近端指骨和远端指骨进行方向映射(orientation mapping)
  • 在我们的数据集中,我们设置{ω_pf, ω_pp, ω_d} ={1, 0.2, 0.2}。
  • 利用BioIK求解器确定机器人关节角度Θ∈R17,机器人在Gazebo中执行运动,并通过MoveIt检查自碰撞。
  • 如果BioIK给出了一个自碰撞输出,我们定义了一个代价函数Fcost来测量两个links之间的距离:
    在这里插入图片描述
    式中,Pi, Pj分别表示link ilink j 的位置, R_col为两个links之间的最小无碰撞半径。
  • 考虑到BigHand2.2M数据集跨越了广泛的观察视角到人手,增加机器人数据的视角多样性是必不可少的。
  • 因此,我们在Gazebo中通过9台不同观测位置的模拟深度摄像机采集机器人的视觉样本,并同时记录每个姿态的9张深度图像
  • 作为示例,在图4中,我们给出了与图3左下角人手姿势相对应的机器人从9个视点的深度图像。
    在这里插入图片描述

5. 实验

5.1 TeachNet评价

  • 我们检查了TeachNet是否能够学习更多的指示性视觉表征,即人手的运动结构。
  • 提出的TeachNet在我们的配对数据集上通过以下实验进行了评估:
    (1)为了探索对齐层的合适位置和正确的对齐方法,我们比较了提出的四种网络结构:Teach Soft-Early, Teach Soft-Late, Teach Hard-Early, Teach Hard-Late。
    (2)为了验证对齐层的重要性,我们设计了一个消融分析,通过去除一致性损失Lcons,分别训练单个人类分支和单个机器人分支。我们将这两条基线分别称为:Single Human和Single Robot。
    (3)将该方法与基于数据驱动的基于视觉的遥操作方法进行了比较,后者基于三维手部估计从人体关节位置映射机器人的位置。我们将此基线称为HandIK解决方案。在这项工作中使用了三个评估指标:1) 最大/平均关节角度误差低于阈值的帧的比例; 2) 最大/平均关节距离误差低于阈值的帧的比例; 3) Θ中所有角度的平均角度误差。
  • 所有网络评估的输入深度图像从原始深度图像中提取为固定大小的立方体围绕手,并调整大小为100×100。
  • 请注意,尽管我们有9个Shadow hand图像视图对应于一个人手姿势,但在TeachNet的训练过程中,我们随机选择了一个Shadow hand图像视图馈送到机器人分支
  • 对于HandIK解决方案,我们在我们的数据集上训练了 DeepPrior++ 网络,我们选择DeepPrior++的原因是它的架构类似于TeachNet的单个分支。
  • 我们从DeepPrior++中获得21 × 3的人手关节位置,然后使用与第四节相同的映射方法获得Shadow hand 的关节角度。
  • 对比结果如图5和图6所示,表明单机器人方法在所有评估指标中是最好的,并且具有“supervisor” 的能力。
    在这里插入图片描述
    在这里插入图片描述
  • 同时,Teach Hard-Late方法优于其他基线,它验证了单个人类分支通过额外的一致性损失得到增强。
  • 特别是在高精度条件下,在最大关节角度下,只有Teach Hard-Late方法的准确率平均提高了3.63%,高于Single Human方法 (表1)。
    在这里插入图片描述
  • 我们认为深度图像的后期特征空间 f_feat 包含了更多有用的信息,MSE方法在我们的案例中表现出更强的监督作用。
  • 基于回归的HandIK方法在我们的三个指标中表现最差。HandIK解的结果不理想,不仅是因为我们的网络没有更好地表征手的特征,还因为这种方法没有考虑机器人的运动结构和特殊的限制。
  • 此外,直接关节角度回归应该在角度上有不错的精度,因为这是学习目标。缺少 L_phy 也会导致准确性低下。
  • 此外,从图6可以看出,拇指的第二关节、第三关节和基底关节是比较难学习的。产生这些结果的主要原因是:1) 在我们的工作中,机器人远端关节的固定影响了其第二关节和第三关节的精度。2)这些类型的关节比其他关节有更大的关节范围,尤其是拇指的基底关节。3)人类拇指与Shadow hand拇指存在较大差异。

5.2 机器人实验

  • 为了验证我们方法的可靠性和直观性,我们对五名成年受试者进行了真实的实验。
  • 我们远程操作系统的slave hand是Shadow dexterous hand,每个手指的第一个关节是固定的。
  • 深度传感器是英特尔RealSense F200深度传感器,适用于近距离跟踪。
  • 远程操作者的右手姿势被限制在[70◦,120◦]的视点范围和[15mm, 40mm]距相机距离范围。
  • 由于基于视觉的遥操作容易受到光线的影响,所有的实验都尽可能在均匀明亮的光源下进行。
  • Teach Hard-Late方法的平均计算时间为0.1051秒(使用Intel Core i7-4720HQ CPU的Alienware15)。

(1)Simulation实验

  • 5名远程操作新手站在深度传感器前,用美国手语0-9和随机的常用手势进行无序操作,然后远程操作模拟的Shadow机器人。操作者不需要知道机器人的控制机制,自然地进行实验。
  • Teach HardLate方法远程操作的定性结果如图7所示。
    在这里插入图片描述
  • 可以看出 Shadow hand 生动地模仿不同大小的人手的手势。
  • 这些实验表明,TeachNet使机器人手能够连续地在线模仿人手,而无需明确指定任何关节级对应。
  • 由于我们固定了Shadow hand的两个手腕关节,所以我们并不关心深度传感器是否捕捉到了遥控人的手腕。
  • 然而,可见误差主要发生在手指的第二关节、第三关节和拇指的基底关节,这可能是由于slave的特殊运动结构、遮挡和不确定的光照条件造成的。

(2)Manipulation实验

  • 我们在一个从机器人上比较了Teach-Hard-Late方法DeepPrior++ HandIK方法
  • 为了简化实验,我们将机器人的控制方式设置为每个关节在适当的最大力范围内的轨迹控制。
  • 我们使用时间来完成手内的抓取和释放任务,作为可用性的度量标准。
  • 我们把一系列的物体放在 slave hand里,slave hand每次都是张开的,这样机器人的手指就能更容易地抓住它们,并要求受试者抓住它们,然后松开它们。
  • 用于抓取和释放任务的物体是:一个水瓶,一个小马克杯,一个塑料香蕉,一个圆筒罐和一个塑料苹果。
  • 我们要求操作人员对水瓶和马克杯使用强力抓握,对其他物体使用精密抓握
  • 如果用户没有在四分钟内完成任务,他们就被认为无法掌握物体。
  • 表2数值显示了新手使用每种控制方法掌握物体的平均时间。
    在这里插入图片描述
  • 我们发现,由于精度较低,特别是对于拇指,以及对HandIK解的后处理导致完成任务的时间较长。
  • 用户需要先打开拇指才能进行正确的抓握动作,因此对于直径较大的物体,HandIK解决方案的性能较差。
  • 此外,在我们的方法中,抓香蕉的时间最长,因为长而窄的物体需要更宝贵的指尖位置。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图像置乱加密的破解方法

仅仅通过置乱的方式,是无法对图像进行安全加密的。 针对采用置乱方式加密,可以采用多对(明文、密文)推导出加密时所使用的置乱盒。 step1 :初始化 1、使用I表示明文,E表示密文,彼此间关系如下: 2、为了处理上的方便,把二维转换为一维(这里为了说明方便,实际上,大…

【油猴脚本】学习笔记

目录 新建用户脚本模板源注释 测试代码获取图标 Tampermonkey v4.19.0 原教程:手写油猴脚本,几分钟学会新技能——王子周棋洛   Tampermonkey首页   面向 Web 开发者的文档   Greasy Fork 新建用户脚本 打开【管理面板】 点击【】,即…

win10提示mfc100u.dll丢失的解决方法,快速解决dll问题

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“mfc100u.dll丢失”。那么,mfc100u.dll是什么?mfc100u.dll是Microsoft Visual C Redistributable文件之一,它包含了用于MFC (Microsoft Foundation Class…

win10 + cmake3.17 + vs2017编译osgearth2.7.0遇到的坑

坑1&#xff1a;debug模式下生成osgEarthAnnotation时 错误&#xff1a;xmemory0(881): error C2440: “初始化”: 无法从“std::pair<const _Kty,_Ty>”转换为 to _Objty 出错位置&#xff1a;src/osgEarthFeatures/FeatureSourceIndexNode.cpp 解决办法&#xff1a; …

pix2tex - LaTeX OCR 安装使用记录

系列文章目录 文章目录 系列文章目录前言一、安装二、使用三、如果觉得内容不错&#xff0c;请点赞、收藏、关注 前言 项目地址&#xff1a;这儿 一、安装 版本要求 Python: 3.7 PyTorch: >1.7.1 安装&#xff1a;pip install "pix2tex[gui]" 注意&#xff1a…

高德Go生态建设与研发实践

序 高德在构建Go生态演化过程中&#xff0c;已经实现了QPS从0到峰值千万的飞跃&#xff0c;本篇文章主要介绍在此过程中积累的一些技术决策及性能优化和重构经验。阅读本文读者会有以下3点收获&#xff1a; 1.高德Go生态发展历程及现状分析 2.高德云原生Serverless落地情况&…

第七章 Python常用函内置函数

系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…

Proteus仿真--1602LCD显示电话拨号键盘按键实验(仿真文件+程序)

本文主要介绍基于51单片机的LCD1602显示电话拨号键盘按键实验&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 其中右下方12个按键模拟仿真手机键盘&#xff0c;使用方法同手机键一样&#xff0c;拨打手机号码则在液晶显示屏上显示对应的号码 仿真运行…

Openssl生成证书-nginx使用ssl

Openssl生成证书并用nginx使用 安装openssl yum install openssl -y创库目录存放证书 mkdir /etc/nginx/cert cd /etc/nginx/cert配置本地解析 cat >>/etc/hosts << EOF 10.10.10.21 kubernetes-master.com EOF10.10.10.21 主机ip、 kubernetes-master.com 本…

【NeurIPS 2020】基于蒙特卡罗树搜索的黑箱优化学习搜索空间划分

Learning Search Space Partition for Black-box Optimization using Monte Carlo Tree Search 目标&#xff1a;从采样&#xff08;Dt ∩ ΩA&#xff09;中学习一个边界&#xff0c;从而最大化两方的差异 先使用Kmeans在特征向量上&#xff08; [x, f(x)] &#xff09;聚类…

OCS2工具箱

实时系统优化控制工具箱 参考视频&#xff1a;ETH 最优控制/MPC 实时求解器 OCS2 使用入门 参考文档&#xff1a;OCS2 求解器入门 选择OCS2 OCS2 是一个 MPC 实时求解器 (SLQ/iLQR)&#xff0c;依赖 Pinocchio 构建机器人动力学模型&#xff0c;采用 RViz 或者 RaiSim 验证 (…

快速解决mfc140u.dll丢失问题,找不到mfc140u.dll修复方法分享

在计算机使用过程中&#xff0c;我们可能会遇到各种问题&#xff0c;其中之一就是某些dll文件丢失。最近&#xff0c;我就遇到了一个关于mfc140u.dll丢失的问题。mfc140u.dll是Microsoft Foundation Class&#xff08;MFC&#xff09;库中的一个动态链接库文件&#xff0c;它包…

Qt中正确的设置窗体的背景图片的几种方式

Qt中正确的设置窗体的背景图片的几种方式 QLabel加载图片方式之一Chapter1 Qt中正确的设置窗体的背景图片的几种方式一、利用styleSheet设置窗体的背景图片 Chapter2 Qt的主窗口背景设置方法一&#xff1a;最简单的方式是通过ui界面来设置&#xff0c;例如设置背景图片方法二 &…

高匿IP有什么作用

在互联网的蓬勃发展中&#xff0c;IP地址作为网络通信的基础&#xff0c;一直扮演着举足轻重的角色。而在诸多IP地址中&#xff0c;高匿IP地址则是一种特殊类型&#xff0c;其作用和价值在某些特定场合下尤为突出。那么&#xff0c;高匿IP地址究竟有哪些用处呢&#xff1f; 首先…

[云原生1. ] Docker consul的详细介绍(容器服务的更新与发现)

文章目录 1. 服务注册与发现的概述1.1 cmp问题1.2 解决方法 2. Consul的概述2.1 简介2.2 为什么要使用Consul服务模块2.2 Consul的服务架构2.3 Consul的一些关键特性 3. consul服务部署3.1 前置准备3.2 Consul服务器3.2.1 建立 Consul 服务3.2.2 设置代理&#xff0c;在后台启动…

python爬虫(数据获取——selenium)

环境测试 from selenium import webdriverchromedriver_path r"C:\Program Files\Google\Chrome\Application\chromedriver.exe" driver webdriver.Chrome()url "https://www.xinpianchang.com/discover/article?fromnavigator" driver.get(url)drive…

使用lua-resty-request库编写爬虫IP实现数据抓取

目录 一、lua-resty-request库介绍 二、使用lua-resty-request库进行IP数据抓取 1、获取IP地址 2、设置请求 3、处理数据 三、代码实现 四、注意事项 五、总结 本文将深入探讨如何使用lua-resty-request库在爬虫程序中实现IP数据抓取。我们将首先介绍lua-resty-request…

FFmpeg直播能力更新计划与新版本发布

// 编者按&#xff1a;客户端作为直接面向用户大众的接口&#xff0c;随着技术的发展进化与时俱进&#xff0c;实现更好的服务是十分必要的。FFmpeg作为最受欢迎的视频和图像处理开源软件&#xff0c;被相关行业的大量用户青睐&#xff0c;而随着HEVC标准的发布到广泛使用&am…

SpringBoot整合Mybatis-plus

MyBatis-Plus与MyBatis区别&#xff1a; 导入坐标不同数据层实现简化 1.创建项目 2.选择依赖 3.pom文件 说明&#xff1a;配置pom.xml文件 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>&…

DB-GPT介绍

DB-GPT介绍 引言DB-GPT项目简介DB-GPT架构关键特性私域问答&数据处理多数据源&可视化自动化微调Multi-Agents&Plugins多模型支持与管理隐私安全支持数据源 子模块DB-GPT-Hub微调参考文献 引言 随着数据量的不断增长和数据分析的需求日益增多&#xff0c;将自然语言…