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. 【转】iOS-Core-Animation-Advanced-Techniques(二)

    原文: http://www.cocoachina.com/ios/20150104/10816.html 视觉效果和变换 (四)视觉效果 嗯,园和椭圆还不错,但如果是带圆角的矩形呢? 我们现在能做到 ...

  2. JavaScript Boolean(布尔) 对象

    创建 Boolean 对象 Boolean 对象代表两个值:"true" 或者 "false" 下面的代码定义了一个名为 myBoolean 的布尔对象: va ...

  3. 【POJ1417】【带标记并查集+DP】True Liars

    Description After having drifted about in a small boat for a couple of days, Akira Crusoe Maeda was ...

  4. chop 与 chomp 的对比

    chop       截去最后一个字符,无论是什么字符 chomp   截去末尾的分隔符(\n),行分隔符由$/决定 $a="ab\n\n\n"; #截去多个空行. $/=&quo ...

  5. Java使用百度云存储BCS-让你的数据下载飞起来

    作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.简介 云也不是一个新概念了,云到底是什么东西,你叫我说个明明白白的我也说不出来,姑且算作联网的就叫做云.国内的云服 ...

  6. sys.argv[]用法

    #-*- coding: utf-8 -*- """ sys.argv 用来获取命令行参数 sys.argv[0] 表示当前执行文件 "-k".sta ...

  7. 解决JsonFormat日期少一天问题

    使用Jackson的@JsonFormat注解时出现少一天 比如数据库存的日期是2015-01-05,转成json则变成了2015-01-04 解决办法: @JsonFormat(pattern=&q ...

  8. ORACLE PL/SQL异常处理(Exception)学习笔记

    1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理 ...

  9. AVL树的算法思路整理

    http://www.cnblogs.com/heqile/archive/2011/11/28/2265713.html 看完了<数据结构与算法分析(C++描述)>的4.4节AVL树,做 ...

  10. CentOS 5升级Python版本(2.4>2.7)

    安装SALT时,需要这样作,公司有一批REDHAT5的,弄起来... 然后却是: Missing Dependency: python(abi) = 2.6 is needed by package ...