1、重命名,Python中文路径各种错误,所以需要先将所有文件的路径名全都改成中文。用的是MAC系统,所以WIN下的命令行批处理没法解决,所以用C来完成

//  Created by Carl on 16.
// Copyright (c) 2016年 Carl. All rights reserved.
// #include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
using namespace std; void getFileList()
{
string sourceDir = "/Users/karl/Work/database/rawdata/children_CN/";
string targetDir = "/Users/karl/Work/database/rawdata/children/";
DIR *dir;
struct dirent *ptr;
int i = ;
if ((dir=opendir(sourceDir.c_str())) == NULL)
{
perror("Open dir error...");
exit();
}
while ((ptr=readdir(dir)) != NULL)
{
if(strcmp(ptr->d_name,".")== || strcmp(ptr->d_name,"..")==) ///current dir OR parrent
continue;
else if(ptr->d_type == )
{
printf("%s %s\n",(sourceDir + ptr->d_name).c_str(),(targetDir + to_string(i) + ".wav").c_str());
if(rename((sourceDir + ptr->d_name).c_str(), (targetDir + to_string(i++) + ".wav").c_str())<)
cout<<"error"<<endl;
else
cout<<"ok"<<endl;
} }
return;
} int main() {
getFileList();
return ;
}

2、然后再使用FFMPEG那篇文章写的Python代码,将所有音频文件转成统一格式

#coding=utf-8
#!/usr/bin/env python
'''CREATED:2016-03-08
Use example of ffmpeg
'''
import argparse
import sys
import os
import string
import subprocess as sp #Full path of ffmpeg
FFMPEG_BIN = "/Users/karl/Documents/python/audio/tool/ffmpeg"
#Full path of sourceDir
sourceDir = "/Users/karl/Work/database/rawdata/male/"
#Full path of targetDir
targetDir = "/Users/karl/Work/database/age/male/"
#Channel setting 1 for mono
ac = 1
#Sample frequency
sf = 16000
#Extension setting
ext = 'wav' def convert(sourceDir, targetDir, ac, sf, ext):
i = 0
if not os.path.exists(targetDir):
os.mkdir(targetDir)
files = os.listdir(sourceDir)
for f in files:
if f.endswith('.wav'):
command = [ FFMPEG_BIN,
'-i', os.path.join(sourceDir, f),
'-ac', str(ac),
'-ar', str(sf), os.path.join(targetDir, str(i) + "." + ext)]
i += 1
print command
pipe = sp.Popen(command, stdout = sp.PIPE, bufsize = 10**8) if __name__ == '__main__':
convert(sourceDir, targetDir, ac, sf, ext)

3、用时域上RMS去除静音帧(Optional)

#---Cut the silent head and tail of audio
def rmsdemo(y):
return np.sqrt((y**2).mean()) def cutheadntail(y, winlen, threshold):
totallen = y.shape[0]
num = totallen / winlen
i = 1
j = num
for i in range(num):
if rmsdemo(y[i * winlen : (i + 1) * winlen - 1]) > threshold:
break
for j in range(-1,0,-1):
if rmsdemo(y[i * winlen : (i + 1) * winlen - 1]) > threshold or j == i:
break
#percentage = (j - i + 1) * 1.0 / num;
#print(i, j, percentage)
yy = y[i * winlen : (j + 1) * winlen - 1]
return yy

4、用librosa提取特征,包括MFCC、DMFCC

from __future__ import print_function
import argparse
import sys
import os
import pprint
import sklearn as sl
import numpy as np
import librosa
import librosa.feature.spectral as f
import svmutil #---Feature extraction and store, including MFCC, DMFCC
def mfcclist(data_dir):
m = []
dm = []
for i in range(300):
filepath = os.path.join(data_dir, str(i) + '.wav')
print(filepath)
am, adm = mfccfile(filepath)
m.append(am)
dm.append(adm)
i += 1
np.savetxt("TrainFemaleMFCC",m,fmt='%s',newline='\n')
np.savetxt("TrainFemaleDMFCC",dm,fmt='%s',newline='\n')
#print(m)
#print(dm)
'''
fout = open(output_file,'w')
fout.write(str(am) + '\n')
fout.write(str(adm))
fout.close()
''' def mfccfile(input_file):
print('Loading ', input_file)
y, sr = librosa.load(input_file)
M = f.mfcc(y, sr, None, 13)
DM = M[::,1::] - M[::,0:-1:1]
am = np.mean(M, axis = 1)
adm = np.mean(DM, axis = 1)
return (am, adm) #---Loading stored features file
def loadfeatures(features_file):
fin = open(features_file, 'r')
features = [map(float,ln.strip().split(' '))
for ln in fin.read().splitlines() if ln.strip()]
#pprint.pprint(features)
print(features)

5、用libsvm训练和预测,包括归一化

#---SVM training and predicting process
def svmtraindemo(x, modelname, scalar):
x = scalar.transform(x)
#x = sl.preprocessing.scale(x)
x = x.tolist()
print(x)
y = [1.0] * 300 + [1] * 300 + [-1.0] * 600
model = svm_train(y, x, '-b 1')
svm_save_model(modelname + str(0), model)
p_label, p_acc, p_val = svm_predict(y[:1200], x[:1200], model, '-b 1') def svmpredictdemo(x, modelname, scalar):
x = scalar.transform(x)
#x = sl.preprocessing.scale(x)
x = x.tolist()
print(len(x))
y = [1.0] * 100 + [1] * 100 + [-1.0] * 200
m = svm_load_model(modelname + str(0))
print(p_label)
p_label, p_acc, p_val = svm_predict(y[:400], x[:400], m, '-b 1')

附:

1、经过试验,发现用无监督的方式,准确来说是基于规则的方式分辨男、女、小孩的声音还是不太靠谱,频域上的分布还是用有监督的方式自己学习应该更可靠。

2、用有噪音的推无噪音的小孩,准确率80%,无噪音推有噪音的,准确率才60+%,所以训练还是最好用噪音环境的数据集吧,之前想的是训练应该用无噪音的样本还是太天真了。其实混合起来效果还不错。

3、男女的准确率也就80%,样本分布还是比较好,而且均有噪音,估计在实际应用中效果也不会比80%差太远。

[Audio processing] 数据集生成 & 性别年龄分类训练 Python的更多相关文章

  1. keras系列︱图像多分类训练与利用bottleneck features进行微调(三)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72861152 中文文档:http://keras-cn.readthedocs.io/ ...

  2. 使用Python基于TensorFlow的CIFAR-10分类训练

    TensorFlow Models GitHub:https://github.com/tensorflow/models Document:https://github.com/jikexueyua ...

  3. 编程语言分类及python所属类型

    编程语言分类及python所属类型 编程语言主要从以下几个角度为进行分类:编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言. 编译和解释的区别是什么? 编译器是把源程序的每一条语句都 ...

  4. day02-操作系统、编程语言分类及python安装

    目录 操作系统 编程语言分类 安装python解释器 操作系统 操作系统有什么用 操作系统能接受外部指令转化成0和1,并把一些对硬件的复杂操作简化成一个个简单的接口,作为中间人连接硬件和软件 计算机三 ...

  5. Python生成文本格式的excel\xlwt生成文本格式的excel\Python设置excel单元格格式为文本\Python excel xlwt 文本格式

    Python生成文本格式的excel\xlwt生成文本格式的excel\Python设置excel单元格格式为文本\Python excel xlwt 文本格式 解决: xlwt 中设置单元格样式主要 ...

  6. ctpn+crnn 训练数据集生成

    1. https://github.com/Belval/TextRecognitionDataGenerator 2. https://textrecognitiondatagenerator.re ...

  7. 利用keras自带路透社数据集进行多分类训练

    import numpy as np from keras.datasets import reuters from keras import layers from keras import mod ...

  8. 利用keras自带影评数据集进行评价正面与否的二分类训练

    from keras.datasets import imdb from keras import layers from keras import models from keras import ...

  9. Tensorflow2 自定义数据集图片完成图片分类任务

    对于自定义数据集的图片任务,通用流程一般分为以下几个步骤: Load data Train-Val-Test Build model Transfer Learning 其中大部分精力会花在数据的准备 ...

随机推荐

  1. jquery实现很简单的DIV拖动

    今天用jquery实现了一个很简单的拖动...实现思路很简单  如下: 在thickbox 弹出层内实现拖拽DIV,那么得进行一下相对宽高的运算:必须加上相对于可见窗口宽高和弹出层宽高之间的差:    ...

  2. webViewDidFinishLoad 执行多次的问题

    在做网页加载进度条的时候,发现UIWebViewDelegate中webViewDidFinishLoad方法会执行多次: - (void)webViewDidStartLoad:(UIWebView ...

  3. 在Mac OS上搭建本地服务器

    我们在做网络编程的时候一般是需要有网络环境的,这样可以边写边测试达到很高的效率.但有些时候我们由于很多原因我们的电脑无法连接到网络,这时就会感觉很不自在,所以今天在这里教大家怎么用自己电脑作服务器. ...

  4. php利用smtp类轻松的发送电子邮件

    当你还在纠结php内置的mail()函数不能发送邮件时,那么你现在很幸运,此时的这篇文章可以帮助到你! php利用smtp类来发邮件真是屡试不爽,我用过很久了,基本上没出过问题.本博客后台,当博主回复 ...

  5. (JAVA)从零开始之--对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)

    对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流:  Ob ...

  6. 判断奇数,java陷阱

    /** 判断是否为奇数 @author husky / public class IsOdd { public static void main(String[] args) { int demo1 ...

  7. 异常练习一 throw

    package 异常练习;class OutageroudleException extends RuntimeException{ OutageroudleException(){ } Outage ...

  8. 初试ubuntu14.4问题集锦

    接触Linux系统也好长时间了,但每次都是浅尝则止.前几天突发兴趣,想认真地学习一下这个名扬天下的稳定的操作系统.于是试着装了一下炒作的最凶的Ubuntu. 安装的Ubuntu系统版本为14.04. ...

  9. javascript--烟火效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <meta nam ...

  10. Perl中级第四章课后习题

    1.下列表达式各表示什么不同的含义: $ginger->[2][1] ${$ginger[2]}[1] $ginger->[2]->[1] ${$ginger->[2]}[1] ...