实验:如何在YOLO8中添加PnP算法来实现Head Pose Estimation

头部姿态估计 头部姿态估计(Head Pose Estimation):通过一幅面部图像来获得头部的姿态角。在3D空间中,表示物体的旋转可以由三个欧拉角(Euler Angle)来表示,即分别计算pitch(围绕X轴旋转,上负下正),yaw(围绕Y轴旋转,左负右正) 和roll(围绕Z轴旋转,左正右负) ,学名俯仰角、偏航角和滚转角,通俗讲就是抬头、摇头和转头。 阅读详情


前言

YOLO8的集成度比较高,如何在简洁的代码中加入Head Pose的东西,不是一件简单的事情.这里介绍如何插入PnP算法实现头部姿态估计的代码?


一、步骤

修改predict中的模型,改为我们自己训练的YOLOLandmark模型.
在这里插入图片描述
修改cfg入口,由于我们修改来config中不少超参数,因此我们干脆修改来为finetune.yaml,替换默认的cfg即可.
在这里插入图片描述
funetune.yaml主要修改的点如下:

model: path to model
name: results saved directory.
conf: object confidence threshold
source: source video path
show: True # to show the live demo.

注意这些点需要根据工程去调整.

二、PnP估计Head Pose,并显示

1.引入库

参考github VHead的项目,我们将head pose进行模块化,传入图片和keypoints即可通过PnP算法估计出Head Pose

代码如下(示例):


def draw_headpose(im0, kpts):
    landmarks = kpts.view(-1).tolist()
    POINTS_NUM_LANDMARK = 68
    clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) # CLAHE Object (for Adaptive histogram equalization)

    boxPoints3D = np.array(([500., 500., 500.],
                            [-500., 500., 500.],
                            [-500., -500., 500.],
                            [500., -500., 500.],
                            [500., 500., -500.],
                            [-500., 500., -500.],
                            [-500., -500., -500.],
                            [500., -500., -500.]))
    boxPoints2D = np.zeros((1,1,8,2))
    # parameters for mean filter
    windowlen_1 = 5
    queue3D_points = np.zeros((windowlen_1,POINTS_NUM_LANDMARK,2))

    windowlen_2 =5
    queue1D = np.zeros(windowlen_2)

    # pamameters for kalman filter
    XX = 0
    PP = 0.01

    lms_x = landmarks[0::3]
    lms_y = landmarks[1::3]
    lms = [lms_x, lms_y] # [[x,y] for x,y in zip(lms_x, lms_y)]
    lms = [ ([x,y]) for x,y in zip(lms_x, lms_y)]


    test_data = [0]
    test_time = [0]
    
    # # Socket Connect
    # try:
    #     client = socket(AF_INET, SOCK_STREAM)  # 创建Socket的客户端
    #     # client.connect(('127.0.0.1',1755))
    #     client.connect(('10.8.220.128',1755))
    # except:
    #     print("\nERROR: No socket connection.\n")
    #     sys.exit(0)


    # initialize kalman object
    KalmanX = KalmanObject(POINTS_NUM_LANDMARK, 1,10) # Tune Q, R to change landmarks_x sensitivity
    KalmanY = KalmanObject(POINTS_NUM_LANDMARK, 1,10) # Tune Q, R to change landmarks_y sensitivity
    uu_ = np.zeros((POINTS_NUM_LANDMARK))
    # initialize PARAMETERS
    temp_landmarks = np.zeros((POINTS_NUM_LANDMARK,2))



    # Apply kalman filter to landmarks FOR POSE ESTIMATION
    KalmanX.kalman_update(uu_, lms_x) 
    KalmanY.kalman_update(uu_, lms_y) 
    temp_landmarks[:,0] = KalmanX.xx.astype(np.int32)
    temp_landmarks[:,1] = KalmanY.xx.astype(np.int32)


    temp_landmarks = mean_filter_for_landmarks(temp_landmarks) # Apply smooth filter to landmarks FOR POSE ESTIMATION
    leftEyeWid, rightEyewid, mouthWid,mouthLen = get_feature_parameters(lms) #landmarks_orig)
    parameters_str = 'leftEyeWid:{}, rightEyewid:{}, mouthWid:{}, mouthLen:{}'.format(leftEyeWid, rightEyewid, mouthWid, mouthLen)
    print(parameters_str)


    # Five feature points for pose estimation
    # image_points = np.vstack((landmarks[30],landmarks[8],landmarks[36],landmarks[45],landmarks[48],landmarks[54]))
    image_points = np.vstack((temp_landmarks[30],temp_landmarks[8],temp_landmarks[36],temp_landmarks[45],temp_landmarks[1],temp_landmarks[15]))
    
    ret, rotation_vector, translation_vector, camera_matrix, dist_coeffs = get_pose_estimation(im0.shape, image_points)
    if ret != True:
        print('ERROR: get_pose_estimation failed')
        # continue
    # used_time = time.time() - start_time
    # print("used_time:{} sec".format(round(used_time, 3)))
    
    # Convert rotation_vector to quaternion
    w,x,y,z = get_quaternion(rotation_vector)
    quaternion_str = 'w:{}, x:{}, y:{}, z:{}'.format(w, x, y, z)
    print(quaternion_str)
    
    # Packing data and transmit to server through Socket
    data = str(translation_vector[0,0])+':'+str(translation_vector[1,0])+':'+str(translation_vector[2,0])+':'+str(w)+':'+str(x)+':'+str(y)+':'+str(z)+':'+str(leftEyeWid)+':'+str(rightEyewid)+':'+str(mouthWid)+':'+str(mouthLen)

    # Project a 3D point set onto the image plane
    # We use this to draw a bounding box
    (nose_end_point2D, jacobian) = cv2.projectPoints(np.array([(0.0, 0.0, 1000)]), rotation_vector, translation_vector, camera_matrix, dist_coeffs)
    
        # global  boxPoints2D 

    for i in range(8):
        (boxPoints2D[:,:,i,:], jacobian) = cv2.projectPoints(np.array([boxPoints3D[i]]), rotation_vector, translation_vector, camera_matrix, dist_coeffs)        
    boxPoints2D =  boxPoints2D.astype(int)

    for p in image_points:
        cv2.circle(im0, (int(p[0]), int(p[1])), 3, (0,0,255), -1)

    boxset_1 = boxPoints2D[0,0,0:4,:]
    boxset_2 = boxPoints2D[0,0,4:8,:]
    boxset_3 = np.vstack((boxPoints2D[0,0,0,:],boxPoints2D[0,0,4,:]))
    boxset_4 = np.vstack((boxPoints2D[0,0,1,:],boxPoints2D[0,0,5,:]))
    boxset_5 = np.vstack((boxPoints2D[0,0,2,:],boxPoints2D[0,0,6,:]))
    boxset_6 = np.vstack((boxPoints2D[0,0,3,:],boxPoints2D[0,0,7,:]))
    cv2.polylines(im0, [boxset_1], True, (255,0,0), 3)
    cv2.polylines(im0, [boxset_2], True, (255,0,0), 3)
    cv2.polylines(im0, [boxset_3], True, (255,0,0), 3)
    cv2.polylines(im0, [boxset_4], True, (255,0,0), 3)
    cv2.polylines(im0, [boxset_5], True, (255,0,0), 3)
    cv2.polylines(im0, [boxset_6], True, (255,0,0), 3)
    
    p1 = ( int(image_points[0][0]), int(image_points[0][1]))
    p2 = ( int(nose_end_point2D[0][0][0]), int(nose_end_point2D[0][0][1]))
    
    cv2.line(im0, p1, p2, (0,255,0), 2)
    ##########################################################################

在这里插入图片描述
这里需要判断ktps是否为空,再进行画图操作.

2.结果展示

在这里插入图片描述
可以看到左上角,head box的角度基本上与真实的头部姿态相吻合.

总结

这里,我们使用了Kalman 滤波来消除跳跃的情况,让pose变得更加平滑.但是Kalman 滤波的学习暂时没有具体取探索.在评估学习中.

点云算法对比ICP、NDT,LM,Ceres-Solver,KDTree,SVM和ComplexYOLO、CenterPoint、PNP YOLOV3 YOLOV4 CenterNet 笔记本 thikpad 960max() X1 1650ti 台式机 1050ti 1:YOLOV3和YOLOV4对比: onnx的输入size trt的输入size必须一样 thindpad GTX 940max int8 yolov4 31ms yolov3 20ms fp16 yolov4 52ms yolov3 47ms fp32 yolov4 53ms yolov3 20ms 1650ti (fp32) 阅读详情

相关推荐

YOLOv5 人体姿态估计 YOLO-Pose

YOLO-Pose: Enhancing YOLO for Multi Person Pose Estimation Using Object Keypoint Similarity Loss 论文:https://arxiv.org/abs/2204.06806 代码1(即将开源): https://github.com/TexasInstruments/edgeai-yolov5 代码2(即将开源):https://github.com/TexasInstruments/edgeai-yolox

jacke121的专栏 1万+

基于YOLO的3D人脸关键点检测方案

3D face pose 检测,有没有新的范式呢?除了自上而下的范式之外,这里尝试基于yolo的端到端检测实现人脸和人脸关键点的联合检测。

wqthaha的专栏 5031

31、OAK使用Yolov4-tiny进行训练、部署、测距功能使用

基本思想:参考官网教程就行,这里只为实现自己的功能,做一下尝试和记录 (前提)安装anconda环境,构建tensorflow-1.15.0环境,以备转换模型使用31、TensorFlow训练模型转成tfilte,进行Android端进行车辆检测、跟踪、部署_sxj731533730的博客-CSDN博客_android车辆检测 (前提)安装openVINO环境,以备转换模型使用 30、OAK摄像头使用官方的yolox进行初训练和测试_sxj731533730的博客-CSDN博客 第一步:下载Gi..

sxj731533730 2109

OpenCV的solvePnP函数和Dlib估计头部姿势

例如,在虚拟现实应用程序中,可以使用头部的姿势来渲染场景的右视图。那个怎么样s在等式中?如果我们知道旋转R(一个 3×3 矩阵)和平移t(一个 3×1 向量),相对于相机坐标的世界坐标,我们可以计算位置(X, Y, Z)点的P在相机坐标系中使用以下等式。在这个问题中,目标是在我们有一个校准过的相机时找到物体的位姿,并且我们知道物体上n 个3D 点的位置以及相应的 2D 投影图片。我们知道 3D 模型上的许多点(即(U、V、W)),但我们不知道(X, Y, Z). 我们只知道二维点的位置(即(x, y))。

Peter的博客 4134

基于深度学习的驾驶员行为监测系统:从算法到嵌入式落地的完整实践

计算机视觉作为人工智能的核心分支,通过模拟人类视觉系统,赋予机器感知和理解图像信息的能力。其核心原理依赖于卷积神经网络等深度学习模型,能够自动从数据中学习多层次的特征表示。这项技术的价值在于将感知能力赋能于各类终端设备,实现智能化决策与交互。在工程实践中,计算机视觉广泛应用于安防监控、自动驾驶、工业检测等场景。特别是在智能交通与车载安全领域,通过实时分析视频流数据,可以实现对驾驶员状态的精准监测。本文聚焦于驾驶员行为监测这一具体应用,深入探讨如何利用轻量化模型与嵌入式AI加速技术,在资源受限的车载环境中实现

weixin_28737603的博客 256

基于YOLOv5与角点检测及PnP的视觉SLAM项目

基于YOLOv5、角点检测和PnP的视觉SLAM项目。内容来源于网络分享,如有侵权请联系我删除。

Head Pose Estimation头部姿态估计任务的基本了解:从数据集开始

为了检测司机的疲劳状态,除了基于人脸关键点的检测去判断是否闭眼,是否打哈欠,还可以基于头部的姿态取判断是否正视前方,或者低头睡觉.那么准确的头部姿态估计,必不可少.此前,我们基于PnP算法取估计HPE,但误差较大.因此,我们决定在YOLOLandmark基础上添加额外的任务,即人脸检测,人脸关键点检测以及头部姿态检测,三个任务整合到一起.。

wqthaha的专栏 3113

基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip

【资源说明】 基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip 基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip 基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip基于yolov5+角点检测+PnP的视觉SLAM项目python源码.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

ROS2实用工具

1. 将ROS2的Bag文件转换为CSV、JSON等1. 将ROS2的Bag文件转换为CSV、JSON等。

caokaifa的博客 4325

esp32-C3固件烧录用户手册

温馨提示:1.esp32-C3 BOOT脚为GPIO9,需要从芯片小板中焊接引出2.芯片小板中已经预留了所有烧录相关的引脚,大家可以按需焊接引线3.程序下载完,使用串口查看log时,需要使用220v供电使用(请务必准守用电安全)。原因:由于插座中包含继电器,计量计等耗电设备,所以usb转串口提供的3.3V电压和电流可能会出现供电不足,表现为usb转串口与电脑连接断断续续,导致无法查看log。

hbwang的博客 1万+

rockchip rk3566 android11 网口log报错: DMA engine initialization failed

问题描述:上电初始化前将网口插入,然后上电初始化网口能够正常使用,且能够找到PHY,ifconfig 查看能够有eth0 产生,网口正常使用且能够热插拔,但上电初始化时,不插入网口,就会报DMA engine initialization failed 错误,DMA 初始化的时候出错了。 分析:一般产生这个问题可以认为是GMAC 的工作时钟出问题了。先测量时钟引脚是否有时钟,时钟频率以及幅度等指标是否正常,主要确认以下几个方面: 1.IOMUX 出错,检查时钟脚寄存器值是否正确。 2.时钟方向以及配置

qq_48709036的博客 2万+

头部姿态估计——QuatNet

《QuatNet: Quaternion-based Head Pose Estimation with Multi-regression Loss》 2018,Heng-Wei Hsu et al. QuatNet 1.引言: 作者提出了multi-regression loss function来使用CNNs进行头部姿态估计,输入采用RGB,并没有深度(Depth)信息。损失函数为L2 r...

小花生的博客 4894

华为云CodeHub代码托管

什么是代码托管 代码托管(CodeHub)是面向软件开发者的基于Git的在线代码托管服务,是具备安全管控、成员/权限管理、分支保护/合并、在线编辑、统计服务等功能的云端代码仓库,旨在解决软件开发者在跨地域协同、多分支并发、代码版本管理、安全性等方面的问题。 代码托管具有以下特性 · 在线代码阅读、修改、提交,随时随地开发,不受地域限制。 · 在线分支管理,包含分支新建、切换、合并,实现多分支并行开发,效率高。 master分支:最为稳定,功能比较完整,随时可发布的代码。 develop分支:用于平时开

LUJINYUANA的博客 1万+

40个姿态估计优秀开源项目汇总

来源丨AIRX社区 编辑丨极市平台 1、AlphaPose 实时全身多人姿势估计与跟踪系统。它是第一个开源系统,在COCO数据集上达到70+ mAP(75 mAP),在MPII数据集上达到80+ mAP(82.1 mAP)。为了在帧中匹配与同一个人相对应的姿势,还提供了一种称为Pose Flow的高效在线姿势跟踪器。它是第一个在PoseTrack Challenge数据集上达到60+ mAP(66.5 mAP)和50+ MOTA(58.3 MOTA)的开源在线姿势跟踪器。AlphaPose支持Li

weixin_42005898的博客 3626

欧姆龙NX控制器与Sysmac studio的电机配置方法

使用歐姆龍NX控制器與Sysmac studio控制電機簡單運動 <上> — 環境配置0. 前言1. 實際硬件連接2. Sysmac studio 配置2.1 新建工程2.2 通信設置2.2.1 軟件內通信設置2.2.2 上位機本地通信設置 0. 前言 筆者最近需要使用到歐姆龍的多軸運動控制器來控制電機運動,但網路上關於Sysmac studio的教程或文章較為零散,作為初學者的筆者難以消化,故在稍微會用軟件後撰寫本文,為自己留個筆記,同時希望能夠幫助到需要的人。 1.本文面向買了歐姆龍控制器

weixin_46005653的博客 1万+

使用n8n搭建服务器监控系统:从Webhook到Telegram告警的完整实现

本文介绍基于n8n工作流平台搭建轻量级服务器监控系统的完整方案,通过Webhook接收监控数据、Token认证、阈值检查和Telegram告警推送,实现7x24小时自动化监控。整个系统由7个可视化节点组成,支持CPU、内存、磁盘、网络流量等多维度指标监控,告警阈值可灵活配置。相比传统的Prometheus或Zabbix方案,配置更简单、资源消耗更低,适合1-50台中小规模服务器的监控需求。实测表明从部署到上线仅需30分钟,告警响应延迟小于1秒,完全满足生产环境要求。

todoitbo的博客 1万+

HeadPose Estimation头部姿态估计头部朝向(Android)

头部姿态估计(Head Pose Estimation ),也称头部朝向估计,主要是获得脸部朝向的角度信息,即欧拉角(pitch,yaw,roll)表示。

AI吃大瓜的博客 1万+

论文阅读:arixv 2025 Poisoning Attacks on LLMs Require a Near-constant Number of Poison Samples

研究者做了目前最大规模的“投毒实验”,训练了从6亿参数到130亿参数的模型(覆盖了中小到大型LLM),用的训练数据量也是“最适合模型大小”的(按行业里的“Chinchilla法则”,模型越大,训练数据量也按比例增加)。总结下来就是:这篇论文告诉我们,给大语言模型投毒,比之前想的容易得多——不需要海量毒数据,只要几百条藏好后门的文档,就能让大模型“带毒工作”,而且平时还看不出来。——这比之前大家担心的“需要投毒数据占训练集一定比例”要可怕得多,因为对大模型来说,“固定数量”的毒数据更容易偷偷塞进去。

CSPhD-winston的博客 1075

人脸姿态估计

转载自:http://www.learnopencv.com/head-pose-estimation-using-opencv-and-dlib/ 姿态估计 定义 计算机视觉领域的姿态估计用目标相对于摄像机的平移量和旋转矩阵进行表示。 计算机视觉领域将姿态估计问题当作N个点的透视变化问题(Perspective-n-Point,PNP),解决方案是对于一个标定好的摄像机,根据目标...

cdknight_happy的专栏 2万+

YOLOv8融合改进 更换检测头为Detect_DyHead同时添加C2f_DBB模块

yolov8独家训练测试融合网络结构,提供详细步骤详细代码,手把手教你在yolov8官方包中把检测头更换为Detect_DyHead检测头,并且将原始的C2f模块更换成C2f_DBB模块,提高检测精度,亲测在多个数据集上有涨点!!!!!

分享一些自己改进代码的实例 4743

YOLOv11涨点改进 | Neck改进篇 | YOLOv11引入 BiFPN双向特征金字塔网络,显著提升了多尺度特征融合效率

本文介绍了基于BiFPN特征融合模块优化的YOLOv11目标检测模型。BiFPN通过双向跨尺度连接和加权特征融合机制,显著提升了多尺度特征融合效率。该方法在COCO数据集上实现了55.1AP的检测精度,同时大幅降低计算成本(减少13-42倍FLOPs)。文章详细解析了BiFPN模块结构、核心代码实现方法,并提供了YOLOv11-BiFPN配置文件的修改指导,为计算机视觉领域提供了一种高效的目标检测解决方案。

Ai缝合怪、助力小伙伴高效发论文 700

python和opencv人脸表情识别_Windows+Anaconda3+Tensorflow+Opencv3 --人脸识别,年龄,性别,表情识别,头部姿态教程...

因为项目上的需要,我需要去训练一个人脸识别的系统,但是机器视觉方向并不是我特别喜欢的方向,所以我特别急功求成,想尽快搭建一个人脸识别系统,其实在git上已经有很多相关论文还有已经训练好的模型,大家如果想去了解这方面的知识,这篇文章并不适合您看。当然,时间是必须去付出的,大家如果喜欢这方面的方向,就好好斟酌一下,神经网络现在应用的很广,推荐Tensorflow框架,实在是太简单方便搭建了。当然不要光...

weixin_39588223的博客 836

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

go 语言人脸识别,低头检测

go 人脸识,低头检测

m0_37684144的博客 773

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

探索头部姿态的奥秘:HeadPosePnP项目解析与推荐

探索头部姿态的奥秘:HeadPosePnP项目解析与推荐 在追寻科技创新的浪潮中,精确捕捉和理解人类行为变得日益重要,尤其是在人机交互、虚拟现实以及智能监控等领域。今天,我们将带您深入探索一个强大的开源工具——HeadPosePnP,它利用传统的计算机视觉算法来实现精准的头部姿态估计。 项目介绍 HeadPosePnP,一个基于Python/C++编写的开源库,专注于通过 Perspective-...

gitblog_00063的博客 404

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

基于OpenCV solvePnP函数估计头部姿势

在许多应用中,我们需要知道头部是如何相对于相机倾斜的。例如,在虚拟现实应用程序中,可以使用头部的姿势来渲染场景的右视图。在驾驶员辅助系统中,在车辆中观察驾驶员面部的摄像头可以使用头部姿势估计来查看驾驶员是否正在注意道路。当然,人们可以使用基于头部姿势的手势来控制免提应用程序/游戏。例如,从左到右偏头可能表示“否”。

二爷的博客 4229

yolo树莓派_【你只需看一次】YOLO 全系列目标检测算法

IFQ-Tinier-YOLOIFQ-Net: Integrated Fixed-point Quantization Networks for Embedded Vision作者:Hongxing Gao, Wei Tao, Dongchao Wen, Tse-Wei Chen, Kinya Osa, Masami Kato单位:Canon Information Technology (Bei...

weixin_30957757的博客 1773
上一篇: 最简方案之一行代码搞定:如何在IEEE Latex中添加作者ORCID以及链接
下一篇: IEEE TII&TITS&IoTJ投稿记录
烧技湾
博客等级 码龄15年 1万+粉丝 138原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烧技湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值