谷动谷力

 找回密码
 立即注册
查看: 1424|回复: 0
打印 上一主题 下一主题
收起左侧

基于低成本物联网芯片ESP32的人体行为识别系统

[复制链接]
跳转到指定楼层
楼主
发表于 2023-11-20 17:57:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
基于低成本物联网芯片ESP32的人体行为识别系统基于低成本物联网芯片ESP32的人体行为识别系统
胡超1, 鲁邦彦1, 杨彦兵1,2, 陈哲3, 张磊1, 陈良银1,2
1四川大学计算机学院,四川 成都 610065
2四川大学工业互联网研究院,四川 成都 610065
3广州爱闻思人工智能有限公司,广东 广州 510555
摘要:
人体行为识别广泛存在于运动管理、行为分类等应用中,当前的人体行为识别应用主要分为基于摄像机、基于可穿戴设备和基于Wi-Fi感知3类。其中,基于摄像机的人体行为识别应用存在隐私泄露的风险,基于可穿戴设备的人体行为识别应用存在续航短、精度差等问题。基于Wi-Fi感知的人体行为识别一般通过Wi-Fi网卡或软件无线电设备识别信道状态信息变化的规律,从而推测用户行为,不存在隐私泄露和续航短的问题,但Wi-Fi网卡需要依靠计算机且软件无线电平台价格昂贵,极大地限制了Wi-Fi感知的应用场景。针对上述问题,提出了一种基于低成本物联网芯片 ESP32 的人体行为识别系统。具体地,所提系统首先使用 Hampel 滤波器和高斯滤波器对ESP32获得的信道状态信息进行预处理,然后使用主成分分析和离散小波变换降低数据的维度,最后通过K最近邻(KNN, K-nearest neighbor)算法对数据进行分类。实验结果表明该系统在仅使用两个ESP32节点的情况下,可以达到与当前主流Wi-Fi感知系统(Intel 5300网卡)相近的识别准确率,6种行为的平均准确率为98.6%。
关键词: 人体行为识别 ; 信道状态信息 ; KNN ; 离散小波变换 ; 动态时间规整

引用格式:
胡超, 鲁邦彦, 杨彦兵, 等. 基于低成本物联网芯片ESP32的人体行为识别系统[J]. 物联网学报, 2023, 7(2): 133-142.
HU C, LU B Y, YANG Y B, et al. Human activity recognition system based on low-cost IoT chip ESP32[J]. Chinese Journal on Internet of Things, 2023, 7(2): 133-142.
0 引言近年来,人体行为识别(HAR, human activity recognition)已经应用于生活的方方面面。例如,HAR 可以通过摄像机监测人体是否摔倒来保证老人居家的安全,也可以通过摄像机对房屋内或房屋周边的人体行为进行识别,智能地判断出有危害的行为并通知房屋主人,能够保证人的生命以及财产安全。人体行为识别主要分为基于摄像机、基于可穿戴设备和基于Wi-Fi感知3类应用。第一类应用通过摄像机采集图像数据,然后使用目标分割从图像中分离出人体,最后通过识别算法对目标行为进行分类,常用的算法有卡尔曼滤波、支持向量机(SVM, support vector machine)、K最近邻(KNN, K-nearest neighbor)算法等。基于摄像机的人体行为识别早期通过光流提取视频中的人体特征。光流是运动物体在成像平面上对应像素的移动轨迹,它表征了观测者和被观测者之间的相对移动,即摄像机和被监测物体之间的移动。Kanokphan 等提出了一种基于光流方向直方图的分类方法,该方法首先将人的轮廓从图片中提取出来,并将其分为8个部分,然后分别计算每个部分的光流方向直方图,并将它们组合成动作向量,最后通过 KNN 算法对人体行为进行分类。Wang等提出了一种通过光流计算密集轨迹的方法,该方法大大提高了人体行为识别的准确率。为了进一步提高密集轨迹技术的识别性能,Wang等提出了一种通过匹配连续帧之间的特征点估计摄像机移动的方法。在去除摄像机移动对密集轨迹的影响后,密集轨迹技术的识别准确率得到了提高。基于摄像机的人体行为识别应用容易受到雨、大雾等天气因素的影响,这会导致图像质量下降,识别准确率降低,而可穿戴设备基本不会受到天气的影响。可穿戴设备中通常集成了陀螺仪、加速度计等传感器,研究人员通过分析这些传感器数据变化的模式可以对不同的人体行为进行识别。这类应用大多先通过传感器采集数据并对数据进行去噪、归一化等预处理,然后使用长短期记忆(LSTM, long short-term memory)神经网络、卷积神经网络(CNN, convolutional neural network)等进行特征提取,完成行为分类。可穿戴设备通常续航较差,以Apple watch series 4为例,该可穿戴设备具有陀螺仪、全天候高度计、加速感应器等传感器,尽管它具有完善的运动监测功能,但是该可穿戴设备在室内环境监测运动的情况下,只有10 h的续航。可穿戴设备大多使用锂电池供电,锂电池具有老化的特性,该特性会导致可穿戴设备的续航会随着设备的使用时间变长而逐渐变短。可穿戴设备在充电期间无法采集与人体相关的数据,无法持续地对人体行为进行监测是该类应用的缺点。得益于Wi-Fi技术的发展,Wi-Fi路由器广泛存在于卧室、咖啡厅等场景中,其通常 7×24 h运行,可以实现对人体行为的持续监测。早期的基于Wi-Fi感知的人体行为识别应用通过接收信号强度指示(RSSI, received signal strength indicator)完成行为分类。Stephan等通过手机的RSSI进行人体行为识别。RSSI包含的信息维度较低,并对环境十分敏感,随着基于Intel 5300网卡的信道状态信息提取工具的发布与软件无线电(SDR, software-defined radio)设备的流行,基于信道状态信息(CSI, channel state information)的人体行为识别应用逐渐成为主流。信道状态信息描述了信号从发送节点传播到接收节点发生的变化,例如,信号在信道中的衰减、相位变化等。IEEE 802.11协议设计信道状态信息的目的是让接收节点可以通过该信息对接收的数据包进行校正,移除载波频率偏移(CFO, carrier frequency offset)、采样频率偏移(SFO, sample frequency offset)等对通信的影响。人在环境中的移动会使得信道状态发生改变,导致接收信号的幅度、相位、频率发生相应的改变,接收节点通过分析信道状态信息变化的模式即可对人体不同的行为进行分类。Guo等提出了一种信道状态信息与视觉联合的行为识别方法,该方法通过联合信道状态信息和人体关节活动信息实现了封闭、弱光等环境中的人体行为识别。Jiang 等提出了一种通过信道状态信息对人体关节信息进行还原的方法,该方法可以生成符合人体运动规律的人体关节信息并且具有一定的鲁棒性。该方法的平均误差在2.83 cm左右,具有非常高的识别准确率。不同人体行为由身体不同部分(如头、手臂、腿等)的运动复合而成。Fei 等提出了一种多变化行为识别方法来识别人体不同部分的子运动。该方法主要使用 CP(CANDECOMP/PARAFAC)分解和动态时间规整来识别各个子动作,识别准确率在95%以上。对于人体行为和信道状态信息之间的复杂关系,Chen 等提出了一种基于注意力机制的双向长短期记忆(ABLSTM, attention based bi-directional long short-term memory)网络,该网络通过给更重要的特征赋予更高的权值来提高人体行为识别的准确率。近年来,物联网(IoT, internet of things)技术逐渐变得成熟,物联网产品种类和数量爆发式增长,根据IoT Analytics 的预测,物联网设备的数量在2025年可达271亿。基于摄像机的行为识别应用存在隐私泄露的风险,基于可穿戴设备的行为识别应用存在续航短、难以持续监测的缺点。尽管基于 Wi-Fi 感知的人体行为识别可以安全且持续地监测人体行为,但是此类应用大多基于Intel 5300网卡或软件无线电设备实现,存在部署难、成本高的问题。针对这些问题,本文提出了基于低成本物联网芯片ESP32的人体行为识别系统。ESP32 是乐鑫公司推出的一款性能稳定、高度集成、超低功耗的物联网芯片,该芯片能够提供 Wi-Fi 功能 而价格仅为数十元人民币。ESP32在连接3.3 V电源时,Wi-Fi发射的峰值和平均功耗分别为0.696 W和0.544 W,接收的峰值和平均功耗分别为0.389 W和0.389 W。传统的路由器的功耗为2~3 W,因此ESP32除了低成本还兼具低功耗的优点。本文提出了基于 ESP32 的人体行为识别系统并通过实验证明了使用 ESP32 进行人体行为识别的可行性,实验结果表明本文所提的人体行为识别系统与主流的基于Intel 5300网卡的识别系统具有相近的识别准确率。1 系统结构与识别流程所提系统的人体行为识别流程如图1所示,其中发送节点和接收节点均为基于 ESP32 芯片的模组。接收节点通过 ping 命令向发送节点发送数据包,发送节点收到数据包后,向接收节点返回数据包。接收节点从返回的数据包中提取信道状态信息并通过串口发送给计算机。计算机使用 Hampel 滤波器和高斯滤波器对信道状态信息进行预处理,去除数据中的异常点和噪声,然后使用主成分分析(PCA, principal component analysis)和离散小波变换(DWT, discrete wavelet transform)对信道状态信息进行降维和特征提取,最后使用动态时间规整(DTW,dynamic time warping)和KNN算法对数据进行分类。
图1   人体行为识别流程1.1 信道状态信息信道状态信息表征了信号在信道传播过程中幅度、频率和相位发生的变化。对于频率为f的信号,其信道状态信息表示为

其中,an(t)表示信号衰减系数,τn(t)表示传播时延。信道状态信息的幅度|H|和相位∠H 受多种因素影响,如发送节点和接收节点的移动、信道中的物体位置的变化、人体的运动等。本文通过信道状态信息的幅度识别不同的人体行为,为了更好地描述信道状态信息幅度与人体行为之间的关系,本文将式(1)中的信号衰减系数an(t)拓展为

其中,PR表示接收节点的功率,PT表示发送节点的功率,GT与GR分别表示发送天线与接收天线的增益,λ表示波长,σB表示双基雷达截面大小,RT代表发送端与物体之间的距离,RR代表接收节点与物体之间的距离。单一的人体行为由不同身体部位之间的复杂运动组合而成,这些部位的运动存在一定的规律性,如跑步中腿部的运动,蹲起中臀部的运动等。规律性的运动使得信道状态信息的幅度呈现规律性变化,信道状态信息随人体活动的变化如图2所示。接收节点通过分析信道状态信息幅度变化的模式,可以对不同的人体行为进行识别。
图2   信道状态信息随人体活动的变化
1.2 去除异常点与噪声发送节点和接收节点的内部状态切换(如增益控制、传输速率改变等)导致得到的信道状态信息存在异常点与噪声。为了去除这些异常点与噪声,本文使用 Hampel 滤波器与高斯滤波器对数据进行预处理,读取CSI幅度并去除噪声见算法1。算法1 读取CSI幅度并去除噪声raw_data ← Data_from_filecsi_num ← len(raw_data)i ← 0while i < csi_num dotmp ← raw_datawhile j < csi_total_bytes/2 doamp.append(sqrt(tmp[j]2+ tmp[j+1]2))j ← j + 2end whileamp_arr.append(amp)i ← i + 1end whilei ← 0while i < csi_num do//去除异常点hampel_filter(amp_arr)//去除高频噪声gaussian_filter(amp_arr)end whileHampel 滤波器是中值滤波器的一种拓展。传统的中值滤波器只有窗口宽度一个参数,表示为


其中,k为窗口中值的索引,xk为窗口中值,L为窗口的半宽度。Hampel 滤波器包括窗口宽度 w 和调整参数t两个参数。Hampel滤波器的计算式为

其中,yk为Hampel滤波器输出的结果,mk为窗口中数据的中位数,t 为调整参数,Sk为平均绝对偏差(MAD, mean absolute deviation)的估计,该参数为

其中,1.482 6保证了Sk对高斯型数据的标准偏差的无偏估计。Hampel滤波器的性能由t控制,当t=0时,Hampel 滤波器等同于中值滤波器;t 越大,Hampel滤波器对异常点的检测能力就越弱,反之则越强。Hampel滤波器可以通过参数t来调整处理异常点的能力,而传统的中值滤波器只能调整滤波器窗口的大小。本文通过 MATLAB 对两种滤波器的性能进行了比较,其中中值滤波器与 Hampel 滤波器的窗口大小均设置为6,Hampel滤波器的调整参数t 设置为 3,数据长度为 500,Hampel 滤波器和中值滤波器去除异常点效果对比如图3所示,红色圆圈处为原始数据中的异常点,滤波前的数据已做归一化处理,滤波后的数据之所以幅度值均大于原始数据,是因为笔者将数据进行了纵向的平移,以更好地展示两种滤波器效果的差异。可以看出,Hampel滤波器不仅去除了异常点,同时其滤波结果与中值滤波器相比更加接近原始数据,保留了更多的信息。
图3   Hampel滤波器和中值滤波器去除异常点效果对比
Hampel滤波器对噪声的处理能力较弱,为了更好地去除信道状态信息中的噪声,本文使用高斯滤波器对信号进行进一步处理。高斯滤波器是一种基于高斯函数的线性平滑滤波器,其计算式为

高斯滤波器通过将权重矩阵和数据卷积来去除噪声,其性能由高斯函数的方差σ2决定。高斯函数的方差σ2越大,高斯分布就越平坦,对数据的平滑能力就越强,反之则越弱。数据预处理结果如图4所示,图4中的数据已做归一化处理,通过Hampel滤波器与高斯滤波器,算法较好地去除了数据中的噪声与异常点。
图4   数据预处理结果1.3 主成分分析本文提出的人体行为识别系统基于 IEEE 802.11n协议。IEEE 802.11n协议的带宽为40 MHz,共使用了128个子载波,ESP32开发板只有一根天线,接收节点提取的信道状态信息维度为1×128×N,其中,N为时间维度上采样点的数目。本文随机选取4个连续的子载波,跑步时不同子载波的信道状态信息幅度变化如图5所示。由式(2)可知,因为每个子载波频率相近,所以人体行为使得每个子载波的幅度变化基本相似,因此本文需要从数据中提取有效的幅度信息,降低数据维度。
图5   跑步时不同子载波的信道状态信息幅度变化
主成分分析是一种降低数据维度的方法,它通过正交变换将可能相关的变量的观测值投影为线型不相关的变量值,即主成分。本文通过以下 4 个步骤进行主成分的提取。步骤1 样本中心化。将每一个子载波减去其幅度的均值,组成矩阵H,矩阵H的维度为N×128,N表示时间维度上信道状态信息的采样点数。步骤2 计算协方差矩阵。通过计算HT×H得到协方差矩阵C,该矩阵的维度为128×128。步骤3 特征值分解。对协方差矩阵C进行特征值分解得到降序排列的特征值[e1,e2,...,e128]及其对应的特征向量[W1,W2,...,W128]。步骤4 信号重建。通过hi=H×Wi对信号进行重建,其中Wi为第i个特征向量。主成分分析结果如图6所示,图6中的特征值已做归一化处理。蓝色实线为前40个降序排列的特征值,橙色实线为前N 个特征值的和占所有特征值总和的比例。图6 的结果表明前4个主成分占所有特征值总和的98%,即算法2中的target_PC_num为4。因此通过主成分分析以后,数据的维度从128×N降低至4×N。
图6   主成分分析结果1.4 特征提取为了提取人体活动特征并降低分类算法的计算复杂度,本文使用离散小波变换进行特征提取,特征提取见算法2。离散小波变换的本质是通过高通滤波器和低通滤波器迭代式地过滤数据,从而提取出原信号中的不同频率信号。通过设定离散小波变换的阶数,改变其频率分解的能力,离散小波变换阶数越高,分解出的信号频率越低,且信号的点数越少。设置离散小波变换阶数为4,可以得到1个低频信号与4个高频信号。4 个主成分的平均值的离散小波变换结果如图7所示,离散小波变换使得数据长度从478减少到30,同时也基本保留了原始数据的幅度特征。
图7   4个主成分的平均值的离散小波变换结果
算法2 特征提取//主成分分析开始amp_martrix ← amp_arr - average(amp_arr)cov_martrix ← amp_martrixT× amp_martrixeigenvalue, eigenvector ← sort(SVD (cov_ martrix))target_PC_num ← TARGET_PC_NUMj ← 0while j < target_PC_num dohj←amp_martrixT × eigenvector[j]end whilePC_arr ← mean(h1, h2, h3, h4)//主成分分析结束i ← 0while i < target_PC_num dofeature_list[0].append(max(PC_arr))feature_list[1].append(median_abs_deviation (PC_arr))feature_list[2].append(variance(PC_arr))//离散小波变换coeffs_list.append(wavedec(PC_arr[j]))i ← i + 1end while1.5 数据分类本文使用动态时间规整定义信号之间的距离,使用KNN算法对数据进行分类,KNN分类见算法3。动态时间规整是一种用来衡量两个时间长度不同的序列之间的相似度的方法,通常应用于语音识别等领域。不同的人体行为会使信道状态信息以不同的规律发生变化,由于不同人的身高、关节灵活性等不同,不同的人做相同的行为所引起的信道状态变化也略有不同。两位志愿者做跑步动作的信道状态信息变化如图8所示,两组数据的变化规律虽然大体一致,但它们在时间上不对齐且长度不一致,因此需要使用动态时间规整定义数据之间的相似性。KNN算法是一种基本分类和回归方法,通过设定参数k 调整该算法的分类能力,k值越小,算法对邻近点越敏感,模型越容易过拟合,反之模型则越简单。KNN算法的缺点在于当训练样本数较大且数据维度较高时,计算复杂度较高,本文通过离散小波变换缩短了数据长度,使得KNN算法的运算复杂度保持在可接受的范围内。算法3 KNN分类test_file_feature ← arr{max, mad, variance, dwt_amp}train_file_num ← len(train_file_list)i ← 0while i < train_file_num do//动态时间规整dtw_distance ← dtw(test_file_feature[3], train_ file_list[3])distance ← abs(test_file_feature - train_file_list)distance[3]← dtw_distancei ← i + 1end whilelabel_counter ← dict{}//设置KNN参数k ← Ki ← 0sort(distance_list)while i < K doif distance_list.label not in label_counter then label_counter[distance_list.label]←1else if distance_list.label in label_counter then label_counter[distance_list.label]+= 1end ifi ← i + 1end whileresult ← max(label_counter)
图8   两位志愿者做跑步动作的信道状态信息变化2 实验结果与分析2.1 系统设置本文使用两块 ESP32 模组作为发送节点与接收节点,两个节点均运行IEEE 802.11n协议,工作在2.4 GHz频段,带宽设置为40 MHz。发射功率为13 dBm,接收灵敏度为-69 dBm,接收节点和发送节点均使用贴片天线,天线增益为5 dBi。接收节点在两节点成功连接后运行ping命令,通过发送节点返回的数据包完成信道状态信息的提取。信道状态信息的提取基于官方提供的乐鑫物联网开发框架(ESP-IDF, espressif IoT development framework)完成,ESP-IDF从接收数据包时开始,通过Wi-Fi数据包的传统长训练(L-LTF, legacy-long training field)字段以及高吞吐量长训练(HT-LTF, high throughput-long training field)字段提取信道状态信息。计算机通过串口接收ESP32提取出的信道状态信息数据并对其进行离线处理。系统原型如图9所示。
图9   系统原型
数据的收集在实验室进行,实验室长 7.5 m,宽 5.5 m。发送节点与接收节点之间的直线距离约为5 m,与地面距离为1.3 m,室内布局如图10所示。本文邀请了10位年龄在19~27岁之间的志愿者(5位男性志愿者和5位女性志愿者)进行行为数据的采集,采集的人体行为包含静止、行走、挥手、跑步、坐下、跳跃。
图10   室内布局2.2 识别准确性Hampel滤波器与中值滤波器性能对比见表1。其中,Hampel滤波器的平均识别准确率为98.3%,中值滤波器的平均识别准确率为97.5%。在时间复杂度上,中值滤波器的复杂度更高,对于长度为790个采样点数的单个子载波,其平均需要20.4 ms完成对数据的处理,而Hampel滤波器仅需要2.1 ms。

信道状态信息采样频率对准确率的影响如图11所示。采样频率为10 Hz时,6种行为平均识别准确率为 62%,其中静止的识别准确率为 100%,挥手、跑步、坐下的准确率为64%,行走和跳跃的识别准确率为40%。采样频率为25 Hz时,6种行为的平均识别准确率为 94.2%。其中坐下的识别准确率为100%,静止、跑步、行走3种行为的识别准确率均不低于 95%,挥手的识别准确率为 87.5%,跳跃的识别准确率为88.9%。当采样频率提升到50 Hz时,6 种行为的平均识别准确率提升到 98.6%,其中静止、跑步、坐下、跳跃4种行为的识别准确率均为100%,行走和挥手的识别准确率分别为96%和 95.8%。不同采样频率下的识别准确率之所以有这样的差异,是因为对于某些速度较快的行为,10 Hz与25 Hz的采样率不满足奈奎斯特采样定理,难以采集到足够的信息,如跳跃行为和挥手行为。以跳跃行为为例,由于采集不到足够的信息,分类算法将跳跃行为误分类为坐下行为,会导致识别准确率降低。 图11   信道状态信息采样频率对准确率的影响
本文与两种基于Intel 5300网卡的人体行为识别应用的实验结果进行了对比,所提系统与HuAc(human activity)和ABLSTM识别准确率对比如图12所示。文献(HuAc)和文献(ABLSTM)分别以30 Hz和1 kHz的采样频率评估了 16 种和 7 种不同的行为的识别准确率,基于本文的6种行为的实验结果,在文献的16种行为和文献的 7 种行为中分别选取了相对应的数据进行比较。本文评估的静止和跳跃两种行为并未在文献中有对应数据,因此在图12以识别率1%代表数据缺失。可以看出,在25 Hz的采样率下,对于跑步、坐下等 6 种不同的行为,所提系统与文献和文献的识别准确率差异在-4%~9%。对于平均识别准确率,文献中 7 种行为的平均识别准确率为97.3%,文献中16种行为的平均识别准确率为93%,本文实现的行为识别系统的平均识别准确率比文献差3%,比文献高4.3%。所提系统的识别准确率与当前基于Intel 5300网卡的人体行为识别应用的准确率接近,达到了主流水平。传统基于 Intel 5300 网卡的工作通过计算机运行信道状态信息提取工具得到数据,然后完成人体行为识别。当计算机处于被使用状态时,使用者会影响网卡采集信道状态信息,降低人体行为识别系统的性能。此外,Intel 5300网卡需要依托计算机工作,无法独立运行,这隐性地提高了该类应用的成本。所提系统既可以集成在智能家居产品中,也可以作为独立的产品进行人体行为识别。因此除了准确率相近,与传统基于Intel 5300网卡的工作相比,本文提出的识别系统具有成本低、易部署的优势。
图12 所提系统与HuAc和ABLSTM识别准确率对比3 结束语为了提高人体行为识别系统的易部署性,并避免隐私泄露,本文提出了基于低成本物联网芯片ESP32的人体行为识别算法。本文通过ESP32采集信道状态信息,使用 Hampel 滤波器和高斯滤波器去除数据中的噪声,使用主成分分析降低数据维度,使用离散小波变换提取信号的特征并降低算法复杂度,最后使用KNN算法对数据进行分类。在本文中,ESP32通过串口将采集的信道状态信息发送至计算机,计算机离线完成对数据的预处理和分类。本文使用的ESP32芯片的RAM大小仅为520 KB,难以完成复杂的数据预处理以及分类任务。在未来的工作中,本文将致力于使用处理能力更强的物联网芯片,构建具有边缘计算能力的人体行为识别系统。
作者简介 About authors
胡超(2000-),男,四川大学计算机学院硕士生,主要研究方向为无线网络、Wi-Fi感知、可见光通信 。
鲁邦彦(2000-),男,四川大学计算机学院硕士生,主要研究方向为可见光通信、嵌入式Linux、无线网络 。
杨彦兵(1987-),男,博士,四川大学计算机学院副研究员,主要研究方向为智能感知与通信、可见光通信与传感 。
陈哲(1988-),男,博士,广州爱闻思人工智能有限公司研究员,主要研究方向为AIoT、人工智能 。
张磊(1978-),男,博士,四川大学计算机学院副教授,主要研究方向为数据挖掘、移动计算 。
陈良银(1968-),男,博士,四川大学计算机学院教授,主要研究方向为物联网系统及安全、工业互联网、智能识别等 。

+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-12-27 12:21 , Processed in 0.099331 second(s), 41 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表