自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(196)
  • 资源 (20)
  • 论坛 (2)
  • 收藏
  • 关注

原创 语音编码之压缩

我的书:购买链接:京东购买链接淘宝购买链接当当购买链接这本书里叙述了SILK和Opus语音编解码器,这里简单的串接编解码的核心知识点。LPCLPC(Linear predictive coding)在音频和语音处理领域常用于表示压缩信号的谱包络,这是最强大的语音分析技术之一,也是低比特率高品质语音编码常用到的方法之一。LPC基于人的发声生物物理机理的发音过程建模模型。由于语音信号是短时平稳信号,基频和共振峰在短时是不变的,通常将一秒钟的数据分割为30~50个块分析各块的L

2020-05-29 21:24:05 451

原创 WebRTC之视频采集

基于WebRTC的实时音视频会议中对于视频处理流水,第一级就是视频采集,视频内容可以摄像头、屏幕和视频文件,视频来源的操作系统可以是Linux、Windows、Mac,IOS以及Android,不同的平台由不同的公司开发设计,因而他们从camera获取视频的底层框架并不一样,Linux系统使用V4L2(Video for Linux Version 2),Mac和IOS都是苹果公司开发的,都使用AVFoundation框架,Windows使用的是微软开发的DS(Direct Show)框架,Android使

2020-05-17 23:23:41 550

原创 深度学习 回声消除 AEC

我的书:购买链接:京东购买链接淘宝购买链接当当购买链接本篇阐述核心思想和初级的demo,在《实时语音处理实践指南》一书中介绍过rnnoise降噪,并且笔者github上也附带了该git库;承接书中“实时”性要求,基于深度学习的AEC必须满足两个要求,一个是计算量要少,一个是处理的窗长要短,故而这里选择了10ms(16kHz采样率信号,160个点);由于AEC存在Near和Far端两个信号,如果按照频点计算,那么计算量将是单通道的两倍,所以这里按照频带计算,以便输入网络的参数能少些

2020-05-10 09:42:38 1648 8

原创 深度学习语音增强

深度学习语音增强我的书:购买链接:京东购买链接淘宝购买链接当当购买链接在我的这本书里,详述了基于信号处理的语音降噪(NS)和回声消除(AEC)算法,并对基于监督深度学习降噪介绍了例子;这里对深度学习方法做个补充总结。传统信号处理方法是经过全人类数百年经验积累而得到的,源于大千世界,因而模型的普适性较强,而监督深度学习依赖监督对象(训练集),由于训练集始终只能是大千世...

2020-05-02 15:44:02 1863 3

原创 WebRTC 架构

WebRTC Native框架我的书:购买链接:京东购买链接淘宝购买链接当当购买链接WebRTC还是比较庞大的,咋一看无从下手,本篇以WebRTC自带的例子,阐述WebRTC Native核心的音频、视频和信令三个部分,WebRTC本身架构是P2P的,信令的部分也是围绕P2P展开的,好了,废话不多,直接上正文了。WebRTC是Google开源的Web实时音视频通信框...

2020-04-30 17:32:32 809 4

原创 语音增强技术

在人机交互的场景中,麦克风采集到的人声不可避免的混杂外界噪声,可以通过信号处理的方法在处理前将其去除,以获得“纯净”的语音信号。这一过程称为降噪或者语音增强;从麦克风数量上分为单麦克降噪,多麦克降噪,算法层次上,主要分为滤波法(时域,频域,空域),谱分辨法,基于模型的方法。 噪声将改变采集到的人声特性,噪声/干扰分为四类:加性噪声,人声间互相干扰,混响,回声。这些噪声在信号处理领域分别被称为:降噪

2020-04-21 18:26:21 5509 17

原创 高效率代码技巧

CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和识别网页书1.对齐memory,高效利用cache line,尽可能减少取数次数/* |alignment| is the byte alignment and MUST be a power of two. */```struct AlignedPtr* AllocAlignedPointer(int ...

2020-04-21 16:48:41 1241 2

原创 数学计算库

CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和语音识别网页书写算法的实现,离不开各种矩阵以及线性代数的运算,包括矩阵求逆,矩阵分解,SVD以及特征值,特征向量等;尤其是复高斯模型或者在频域里做处理时用到复数矩阵相关运算;APP公司官网的加速链接中就有BLAS相关的API。这里gsl是开源的计算库,该库的最新文档链接如下:https://www.gnu.org/sof...

2018-06-21 16:27:56 1267

原创 tensorflow 模型文件

CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和识别网页书tensorflow生成的模型文件主要有三个:```.meta, .index和.data```分成三个文件的原因是tensorflow将计算图结构和变量值存储在不同的文件里。.meta文件描述的是计算图结构。freeze_graph.py脚本从一个GraphDef(.pb或者.pbtxt)文件和c...

2018-06-19 17:59:47 1331

原创 makefile 编译第三方库

CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和识别网页书以前在编写跨平台编译框架时,要引用第三方库,这里的例子实现了下载和编译第三方库,正适合用~!```FFTW = fftw-3.3.4all: .deps fftw decode ops utils.deps: sudo apt-get install libsamplerate-dev -y...

2018-05-28 10:15:34 1669

原创 关于AEC算法的几点思考

CSND已永久停更,最新版唯一来源点击下面链接跳转:一年前我剖析过开源的AEC算法,文章链接是语音增强和语音识别网页书;时隔这么长时间,再过来看这个算法,略有体会,以下有几点个人思考:AEC算法的主要目的是自身音源消除,对于手机或者pc这类的通话场景,这类场景和音响场景稍有差异,两者遇到的主要问题会有些差异;对于视频通话这类场景,两个通信终端的时钟偏斜和漂移是不定的,而音箱场景这个是可...

2018-05-16 23:40:51 7320

原创 唤醒词识别

CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和语音识别网页书有如下几个原因使得唤醒词识别具有难度1.低功耗;2.低成本;占用的运算资源少,包括cpu以及memory资源;3.连续语音识别;4.场景较为复杂;噪音(办公,居家,电视,自然,电器),远场(增强,波束),方言,口音(儿童,男、女)等5.训练的语料集合本文就唤醒词的理解和Am...

2018-05-14 21:41:55 10207 5

原创 音频应用处理器性能benchmark

CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和语音识别网页书处理器类别1.Analog Devices(SHARC, Blackfin, SigmaDSP)2.TI(c55, c67x,c66x)3.ARMcortex-M4/M7; cortex-A8/A9/A15/A53/etc4.Intel x86/x645.软IP语音增强和语音识别Tens...

2018-05-10 14:43:02 735

原创 舒适噪声生成算法及其实现

CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和语音识别网页书舒适生成算法CNG(comfort noise generation) 舒适噪声应用在实时语音通信(VoIP,电话等)场景中,主要解决两个问题,第一个是减小传输数据量,进而减小传输带宽的要求,这是因为50%的时间是没有语音的,第二个是让人感觉语音通信是持续连接的。随机数生成舒适噪声的生成算法中用到了随...

2018-05-05 22:48:59 2890

翻译 Kaldi HMM拓扑和状态转换模型

HMM拓扑使用c++的HmmTopology来描述音素的HMM拓扑。其描述的一个实例(3-state Bakis模型)如下:Topology> TopologyEntry> ForPhones> 1 2 3 4 5 6 7 8 ForPhones> State> 0 PdfClass> 0 Transition> 0 0.5

2017-11-10 09:20:48 3748 1

原创 Kaldi知识点汇集

特征提取MFCCcompute-mfcc-feats.ccCreate MFCC feature files.Usage: compute-mfcc-feats [options...] <wav-rspecifier> <feats-wspecifier>其中参数rspecifier用于读取.wav文件,wspecifier用于写入得到的MFCC特征。典型应用中,特征将被写入到一个大的”arc

2017-11-05 11:21:45 3125

原创 Kaldi声学模型训练

支持标准的基于ML训练的模型 线性变换,如LDA,HLDA,MLLT/STC基于fMLLR,MLLR的说话人自适应支持混合系统支持SGMMs 基于fMLLR的说话人识别模型代码,可以容易的修改扩展声学模型训练过程1.获得语料集的音频集和对应的文字集可以提供更精确的对齐,发音(句子)级别的起止时间,但这不是必须的。2.将获得的文字集格式化kaldi需要各种格式类型的,训练过程中将会用到每

2017-11-04 14:08:55 9046

原创 EM算法

前一篇文章提到了基于统计模型的VAD决策方法,在看《WebRTC之VAD算法,http://blog.csdn.net/shichaog/article/details/52399354》时,其计算概率使用的高斯参数是给定的,那么问题来了; 1.webrtc中给定的参数是如何得到的? 2.这些参数能否适用你想要使用的场景? 3.这些场景和你的场景匹配度如何? 4.如何根据你手中数据提升web

2017-11-01 18:52:09 2086

原创 VAD综述

VAD广泛应用于语音编码(网络/无线/有线传输),说话认识和语音识别(ASR,基于机器学习的方法,也是经过VAD标注后的语音数据用于训练的,准确标注真实场景的带噪语音比较重要)。VAD的准确对前端算法也是比较关键的,这里所说的是语音/非语音(非语音/静音)检测,一个VAD系统通常包括两个部分,特征提取和语音/非语音判决;常用的特征提取可以分为五类:基于能量频域倒谱谐波 长时信息 基于能量

2017-10-17 09:51:53 12208

原创 语音识别-信号处理篇

连接前端和后端的语音识别(ASR)的关键是给到后端(根据特征判定词/句)系统的特征类型和特征质量,对于传统的语音识别系统常采用MFCC(mel-frequency ceptral coefficients),这个特征对于高斯白噪声和混响具有鲁棒性,对于有色和相干干扰,常采用一阶和二阶微分减小其对MFCC系数的影响,该方法计算量相对较小;对于深度学习,通常采用Fbank做为特征而非MFCC,MFCC做

2017-10-08 09:21:11 7666 1

原创 基本信号处理

如何根据滤波器系数得到幅频和相频相应使用MATLABb=1;a=[...];fvtool(b,a)球坐标和直角坐标转换公式 转换公式: 球坐标系(r,θ,φ)与直角坐标系(x,y,z)的转换关系: x=rsinθcosφ y=rsinθsinφ z=rcosθ 反之,直角坐标系(x,y,z)与球坐标系(r,θ,φ)的转换关系为 r=x2+y2+z2−−−−−−

2017-09-25 21:00:36 872

原创 模拟域频率与数字域频率关系

数字频率于模拟频率互相转化的公式如下: ω=2πffs\omega=\frac{2\pi f}{f_s} 通常所说的频率,在没有特别指明的情况下,指的是模拟频率,其单位为赫兹(HzHz),或者为1/秒(1/s1/s),数学符号用ff来表示。以赫兹表示的模拟频率表示的是每秒时间内信号变化的周期数。如果用单位圆表示的话,如图1所示,旋转一圈表示信号变化一个周期,则模拟频率则指的是每秒时间内信号旋转的

2017-09-25 16:02:00 6706

原创 code profiling

本文基于c/c++。perf可以使用perf list列出所有支持的event。perf工具支持硬件和软件事件,硬件事件由硬件计数器测量。 常关心的硬件事件如下:cpu-cycles OR cyclesinstructionscache-referencescache-missesbranch-instructions OR branchesbranch-missesbus-cycle

2017-09-23 22:08:58 1825

原创 openwrt调试用到的

NFSUbuntuPC端sudo apt-get install nfs-kernel-serversudo /etc/init.d/nfs-kernel-server startvim /etc/exports该文件写入/home/gsc/nfs 10.99.*.*(rw,sync,no_root_squash)嵌入式设备端mount -n -o nolock 10.99.1.3:/home

2017-09-12 09:47:30 1258

原创 tensorflow android 唤醒词识别

工程源码在代码我已托管到github上了。https://github.com/shichaog/tensorflow-android-speech-kws这是基于tensorflow 官网的一个例子。Android tensorflow API private static final String LABEL_FILENAME = "file:///android_asset/conv_act

2017-08-27 22:11:39 963 2

原创 子带技术

语音信号是宽带信号,根据奈奎斯特采样定理,采样率为16kHz的语音信号的有效带宽是8KHz,不论是对于降噪,aec,vad,波束形成亦或是logfbank特征提取,我们都期望更精细的处理以提高准确性,因为有时噪声就是带限信号,而回声消除要能处理的时间比较长,就需要滤波器抽头数比较多,这样积累的数据长度和计算量就比较大,同理波束形成技术也是空时域滤波技术,也可以划分成子带进行更为精细的处理。 首先划

2017-08-18 18:42:48 4192 1

原创 笔记

1.tensorflow源码完整下载方法git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git参数--recurse-submodules可以递归下载子模块。2.报错no lapack/blas resources found ubuntu解决方法:sudo apt-get install libbla

2017-08-02 11:06:18 784

原创 语音增强-自适应回声消除

自适应回声消除技术被广泛应用于通信,VoIP和智能机器人设备中。其主要作用是消除设备自身speaker发出的声音,包括语音,音乐等。回声是指自身发出的声音经过多次反射(天花板,墙)并多次传入拾音设备。如果反射声波比直达声波到拾音设备的时间比较段,这种情况被称为混响(频谱失真)而非回声;为了增加人耳听觉正确率,ASR系统识别的正确率,是需要一些回声的(实际上是比直达波晚到不超过30ms的反射波),这样

2017-07-28 09:44:12 4149

翻译 如何理解FFT

时域信号分为周期/非周期,连续和离散,这样有四中样式的傅里叶变换。 变换类型 时域信号特性 频谱特性 连续时域FT 连续,非周期 非周期,连续 离散时域傅里叶变换DTFT 离散非周期 周期,连续 傅里叶级数FS 连续,周期 非周期,离散 离散傅里叶变换DFT 离散,周期 周期,离散如上可以看到,在一个域的离散信号,在另一个域将变成周期的,类

2017-07-22 10:03:41 5924 3

原创 麦克风阵列波束形成

波束形成beamforming 体现的是声源信号的空域选择性,许多传统波束形成方法具有线性处理结构;波束形成需要考虑三个方面: 1.麦克风阵列个数;2.性能; 3.鲁棒性 在麦克风较少时,波束形成的空域选择性差,当麦克风数量较多时,其波束3dB带宽较为窄,如果估计的目标声源方向有稍有偏差,带来的影响也更大,鲁棒性不好。通常鲁棒性和性能是对矛盾体,需要均衡来看。 通常波束方向图需要随环境的语音/

2017-07-22 10:00:20 11887 1

原创 MNIST例子构建tensorflow Android应用

和谷歌给的例子差异,是这里给出了如何生成所需要的pb文件:https://github.com/MindorksOpenSource/AndroidTensorFlowMNISTExample生成PB模型文件python mnist.py mnist.pyfrom __future__ import print_functionimport shutilimport os.pathimpor

2017-06-25 11:58:19 594

原创 语言模型

电话有效语音范围125Hz∼\sim3800Hz。使用HMM做为语音识别系统的前提是连续语音特征可以分成准静态序列。这些状态序列之间是不相关的,系统通常采用25ms的帧长,10ms的滑动长度,提取特征MFCC/PLP做分析特征。 上面的假设的HMM状态的独立性在语音上实际上并不成立,这是由于观察到的每一帧语音都或多或少依赖前面的语音(发音器官的生物物理特性)。所以希望将发音轨迹(或者说帧于帧之间的

2017-06-25 11:52:59 2053

原创 kaldi 在线中文识别系统搭建

原始数据下载http://www.openslr.org/18/ 总共三个tgz文件: data_thchs30.tgz [6.4G] ( speech data and transcripts ) test-noise.tgz [1.9G] ( standard 0db noisy test data ) resource.tgz [24M] ( supplementary

2017-06-23 20:14:39 22751 9

原创 tensorflow 移植到android平台

本文基于 https://github.com/MindorksOpenSource/AndroidTensorFlowMachineLearningExample下载和安装jdk,ndk和sdk下载JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 我选择的是jd

2017-06-21 21:09:52 4738 1

原创 高斯混合模型

可能遇到的工具问题gsc@X250:~/kaldi/egs/timit/s5$ ./run.sh ============================================================================ Data & Lexicon & Language Preparation

2017-06-19 09:35:07 2336

原创 kaldi yesno example

主要分为六个部分数据描述如果kaldi/egs/yesno/s5目录下没有waves_yesno.tar.gz文件,则要下载该文件. http://www.openslr.org/resources/1/waves_yesno.tar.gz 解压后,waves_yesno文件夹下的文件如下.0_0_0_0_1_1_1_1.wav 0_0_1_1_0_1_1_0.wav ...1_1_1_

2017-06-15 19:01:30 6225 1

原创 tensorflow Optimizer算法

tensorflow优化器种类如下,其中Optimizer是基类 tf.train.Optimizer tf.train.GradientDescentOptimizer tf.train.AdadeltaOptimizer tf.train.AdagradOptimizer tf.train.AdagradDAOptimizer tf.t

2017-06-13 22:06:47 13883

原创 seq2seq

seq2seq是通用编码器-解码器框架(encoder-decoder framework),可以用在机器翻译,文本摘要,会话建模,图像描述。源码https://github.com/google/seq2seq tensorflow 中的实现代码如下: tensorflow/tensorflow/python/ops/seq2seq.py基本模型基于论文https://arxiv.org/pd

2017-06-12 10:02:00 2846 3

原创 tensorflow RNN实例

本实例基于谷歌tensorflow官网RNN tutorial,Basic LSTM,侧重代码分析,包括数据预处理。read.py_read_words函数读取ptb文件,按utf-8格式读入,换行符使用替换,读取到的将组成list,可以通过如下的命令行模式下进行测试。with tf.gfile.GFile("/home/gsc/envtensorflow/deep_learn/models/tut

2017-06-08 14:37:39 2697

原创 音频电声测试

CSND已永久停更,最新版唯一来源点击下面链接跳转:语音增强和识别网页书这是以前项目中测试智能音响电声特性时的电声部分。我不打算详细解释没一个部分的意义和其对最终对人听觉的感受,总的而言,就电声部分,其应该最为真实的还原其输入音源。对于物理声学,那是要测试喇叭和辐射盆,这一般要通过激光测试震动,以及在消声室测最终频响曲线,物理声学部分一般由大厂来做,主要也是在有限的喇叭孔径和音腔内减小震动...

2017-06-03 23:21:45 5494 1

命名空间 Linux

目前Linux实现了六种类型的namespace 每一个namespace是包装了一些全局系统资源的抽象集合 这一抽象集合使得在进程的命名空间中可以看到全局系统资源 命名空间的一个总体目标是支持轻量级虚拟化工具container的实现 container机制本身对外提供一组进程 这组进程自己会认为它们就是系统唯一存在的进程 在下面的讨论中 按命名空间实现的版本先后依次对其介绍 当提到命名空间的API clone ushare setns 时括号内的CLONE NEW 用于标识命名空间的类型 ">目前Linux实现了六种类型的namespace 每一个namespace是包装了一些全局系统资源的抽象集合 这一抽象集合使得在进程的命名空间中可以看到全局系统资源 命名空间的一个总体目标是支持轻量级虚拟化工具container的实现 container [更多]

2014-11-21

Linux系统启动那些事—基于Linux 3.10内核

注:Linux310启动,为旧版本,请下载这版 也许你会好奇Linux是如何启动的?一些基础的服务又是何时准备好的?本文旨在揭秘操作系统是启动过程的,主要是内核态下发生的一些事。本文涉及grub、uboot、initrd、根文件系统、设备树、以及Linux内核编译等内容。 对那些好奇系统是如何启动的人本文非常适合,当然对于由于涉及操作系统的方方面面,bsp的开发人员也有点价值,但是这里没有对应用做介绍;本文讨论两种平台下的启动方式,因为它们均是对应体系架构下的典型。

2014-10-25

Linux310启动

Linux是如何启动的?一些基础的服务是怎样建立又是何时准备好的?本文旨在揭秘操作系统是启动过程的,启动时又做了些什么。这点类似BSP了,但是缺了应用。这篇文章讲到grub、uboot、initramfs、根文件系统、设备树、以及Linux内核编译等内容。 本文那些对系统启动这一过程好奇的人在合适不过了。这里讨论两种平台下的启动方式,因为它们都可以都可以作为一种应用下的典型来说明问题。 这篇文档为我个人所写,希望对各位能有作用,呵呵~!

2014-10-18

ieee802.3-2012

ieee 802.3 -2012标准;全部收录完整版

2014-08-03

keepalive应用脚本

包括主、从MySQL库,监视、主从切换shell脚本

2014-05-05

c语言深度解剖

c语言深度解剖,比较好;作者还未出版,帮助作者推广一下

2012-04-10

嵌入式linux应用开发完全手册光盘代码

嵌入式linux应用开发完全手册 那本书里的代码和工具部分韦老的书,很不错

2012-03-04

Linux_C_Plus_Plus_Programming_HOWTO

英文版linux下c++编程指导书,希望对您有所帮助

2011-04-27

fft 快速傅里叶变换430

快速傅里叶变换 c语言编写的,fft 快速傅里叶变换C8051FXXX 程序,其中包含8位和16位的快速傅利叶变换

2011-04-27

linux驱动程序设计2.6内核中英文板

linux 驱动 2.6内核 英文版,分章节 ,英文版别人所翻译的

2011-02-27

语音回声消除使用到的算法

语音回声消除算法中使用到的NLMS算法

2017-05-03

zynq dma linux 配置

该资源是博客中附带的资源下载链接

2017-04-02

bluetooth BLE server

bluedroid bluetooth low energy,server端示例代码,client 端下载地址见: http://blog.csdn.net/shichaog/article/details/53557274

2016-12-12

beacon android示例代码

android下beacon 开发示例程序

2016-12-10

bluetooth BLE client

Gatt为ble client端程序,用于brocast自己并发送一些信息.Server为接收信息程序

2016-12-10

麦克风阵列前端语音信号处理

个人学习笔记,稍稍整理下

2016-10-12

zynq uio petalinux

PetaLinux 2014.4 Linux Image with Custom IP UIO Driver

2016-06-24

vim 技巧和插件

共六个部分。 第一个部分是vim常用命令快捷方式 第二个是Tlist插件的安装和使用实例。 第三个是ctags的安装和使用实例 第四个是自动补齐功能的实例 第五个是winmanager的安装和使用实例 第六个是cscope安装和使用实例 每个录制文件包含了time_*和vim_*两个文件,其中time文件记录时间,vim命令记录的是命令,它们内容是script工具生成的。 查看演示方法,如查看第二个(time和vim两个文件中去有2的文件): scriptreplay time_hacking2_tlist.log vim_hacking2_tlist.txt 其中在~/.vimrc的文件在vimrc文件里,如果只使用scriptreplay回放,则不需要替换~/.vimrc;如果替换,则先备份原文件,以免习惯不同导致不适应。

2015-05-08

linux内存管理

原创,共五章,基于工作中使用的3.10版本内核,包括 内存启动初始化过程,linux内核内存管理,进程虚拟地址管理

2015-05-05

linux tcp/ip协议栈

分为上篇和下篇,上下篇共十八章,上篇九章部侧重于TCP/IP数据收发流程,即OSI模型的IP和TCP层,下篇也是九章,并不属于TCP/IP本身,但是多少和网络有关且常用到,比如LC-trie路由、netfilter包过滤防火、还有一些网络相关的命令行工具等,文末给出IPV6的协议栈模型图,此外还给出了测试源码。

2015-04-22

shichaog的留言板

发表于 2020-01-02 最后回复 2020-03-30

C8051F02x串口通信程序

发表于 2011-05-03 最后回复 2012-12-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除