百度语音识别引擎使用
~安装python(需要root权限下安装,windows和linux都是)
ubuntu下一般自带python,升级的话看下面
windows下需要安装
下载python3后
1.以root权限打开终端,进入安装包的存放路径,解压安装包:
tar -xzvf Python-3.6.0.tgz 11
2.进入解压好的安装包路径:
cd Python-3.6.011
3.编译安装包,指定安装路径,并执行安装命令:
注意:prefix参数用于指定将Python安装在新目录,防止覆盖系统默认安装的python
./configure --prefix=/usr/local/python36
make && make install
4.修改系统默认的Python路径,因为在终端中输入Python命令时默认是指向Python2.6.6
mv /usr/bin/python /usr/bin/python-2.6.6
5.建立新的软连接,指向Python-3.6.0:
注:这里的python36是第4步指定的安装路径,python3.6是Python包里的可执行程序
ln -s /usr/local/python36/bin/python3.6 /usr/bin/python
6.因为yum是依赖python的,所以这里我们修改了默认的python,就要要修改yum,
让其运行指向旧的版本:
vi /usr/bin/yum
将第一行中的“#!/usr/bin/python”修改为“#!/usr/bin/python-2.6.6”,保存即可
打开后在想添加的位置处按a代表在其后添加,改完后按esc后输入wq保存并退出
7.如果顺利的话,通过以上过程Python的安装就基本完成了,可以打开一个新的终端,通过
python命令进入python环境,就可以看到已经指向了我们新安装的python3.6.0:
[centos65_1@localhost:~]$ pythonPython 3.6.0 (default, Jul 30 2016, 19:40:32)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwinType "help", "copyright",
"credits" or "license" for more information.
>>>
~安装pyaudio和requests和其他软件
windows下指令为
pip install pyaudio, pip install requests
ubuntu下指令为
sudo apt-get install python-pyaudio python3-pyaudio
ubuntu下指令为
sudo apt-get install python3-requests
pip install portaudio
pip install SpeechRecognition
pip install pyaudio
sudo apt-get install python-pyaudio
sudo apt-get install libjack-jackd2-dev portaudio19-dev
~安装anaconda(python集成环境)(以root权限安装,linux和window是都是)
https://www.continuum.io/downloads
从上面网址下载
之后放在自己在选择的目录内
在终端输入:sudo chmod +x *.sh
再输入:sudo ./*.sh可安装到任意目录,./*.sh可安装到当前用户有权限的目录
到anaconda3文件夹下的bin文件夹中,打开命令行窗口,输入./spyder 可以打开IDE环境
~将.ui转换为.py文件(需要使用pyqt)
一个命令就可以搞定:pyuic5 -x demo.ui -o demo.py
解释一下这个命令。首先,要使用这个命令,必须安装pyqt5-dev-tools这个包,这个包很小,直接apt-get,100KB左右。现在解释命令:-x
后面跟的是需要转换的文件。比如,在我们这个情况下,
需要转换的文件叫做demo.ui;而-o后面跟的文件名是你想要输出成的python程序的名字。这里,方便起见,我们就把它叫做demo.py。
~在安装pyaudio时候出现错误src/_portaudiomodule.c:29:23: fatal error: portaudio.h:
Failed building wheel for pyaudio
sudo apt-get install libportaudio-dev
sudo apt-get install libasound-dev
sudo apt-get install portaudio19-dev
pip install --allow-unverified=pyaudio pyaudio
~出现如下问题
ALSA lib pcm_dsnoop.c:618:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
sudo apt-get install multimedia-jack
pulseaudio --kill
jack_control start
~出现如下错误
ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused
sudo apt-get install pulseaudio
~出现如下错误
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
1.打开alsa.conf,通过
sudo nano /usr/share/alsa/alsa.conf
或者
vi /usr/share/alsa/alsa.conf
对其中的
pcm.front cards.pcm.default
pcm.rear cards.pcm.default
pcm.center_lfe cards.default
pcm.side cards.pcm.default
后面都变为(国外的网站上还改了其他pcm定义的位置,共十五处,但改完后出现核心转存错误),此时耳机需注意插到前面还是后面,喇叭会有输出
.default
2.在命令行输入
sudo apt-get --no-install-recommends install jackd2
有时候可能则需要下面这个
sudo apt-get install jackd1
sudo apt-get purge bluez-alsa
注意-start
这里还可以可以安装jackd1
配置如下
sudo gedit /etc/security/limits.conf
确保其中有
@audio - rtprio 99
输入命令行如下,添加用户
sudo usermod -a -G audio sanstyle
jackd -d alsa
程序会进去,启动服务(此时不要关),或者使用
jack_control start一直打开服务
3.输入
espeak "Roses are Red. Violets are Blue. Blah Blah Blah Blah"
4.输入
sudo dpkg-reconfigure -p high jackd
5.通过
sudo gedit /etc/security/limits.d/audio.conf
确保其中有如下两行
@audio - rtprio 95
@audio - memlock unlimited
6.终端输入
sudo adduser mao audio 其中mao是用户名
7.终端输入
ulimit -r -l
问题得到解决
~打开alsa的配置linux alsa声卡管理器
alsamixer
~安装3.5mm mic驱动
sudo apt-get install jackd2
sudo dpkg-reconfigure -p high jackd2
~缺少python35_d.lib(试过了不好使,但也许是解决方案)
1. Python.org 下载源码包
地址:https://www.python.org/downloads/source/
2.解压,打开pcbuild目录下的sln文件,必须用>= VS2015的VS才能打开该解决方案,
我用的是vs2015,过低版本的vs打不开该解决方案。如下红色圈圈指出了该版本的python对应的VS版本为VS2015
在debug模式下, 编译python工程即可
~fatal error LNK1104: 无法打开文件“python35_d.lib”解决方法
在pyconfig.h中第315行改为
# if defined(_DEBUG)
//# pragma comment(lib,"python35_d.lib")
# pragma comment(lib,"python35.lib") // no debug lib in python distribution
# elif ...
第360行改为
#ifdef _DEBUG
//# define Py_DEBUG
#endif
~在windows下安装gcc
详细见
http://jingyan.baidu.com/article/c275f6bacc0126e33c756771.html
~安装python
https://www.python.org/ftp/python/3.6.0/python-3.6.0-amd64.exe
之后注册环境变量,将c:\Python36添加到path中
~python3.h调用的object.h中
typedef struct PyType_Slot{
int slot; /* slot id, see below */
void *pfunc; /* function pointer */
} PyType_Slot;
typedef struct{
const char* name;
int basicsize;
int itemsize;
unsigned int flags;
PyType_Slot *slots; /* terminated by slot==0. */
} PyType_Spec;
出现如下编译错误
C:\Python36\include\object.h:448: error: expected unqualified-id before \';\' token
PyType_Slot *slots; /* terminated by slot==0. */
^
将slots名字进行更改,因为跟槽函数冲突
~在qt中添加头文件和库文件路径(windows和linux通用)
~关于undefined reference to `_imp__Py_Initialize\'和崩溃问题
解决方法在windows下通过,将python和anaconda卸载,之后重新以root权限安装
~qt调用python程序(通过windows测试)
QStringList args;//QStringList类提供了一个字符串列表
args.append("D:/SIAT/program/voice/asr(can recognize)/test.py");// 增加字符串
args.append("-n");
args.append("lily");
QProcess::execute(QString("Python"), args); //这里Python可以换为Python.exe
其中QStringList的成员函数使用见
http://blog.csdn.net/qq419036154/article/details/6502150
~有关Py_Initialize()和Py_Finalize()的说明和使用可以参照
http://www.360doc.com/content/13/0812/11/9934052_306564761.shtml
~windows下更改默认的python
当系统中安装了多个python时,如果想更改默认的python,只需要将环境变量里面另一个python路径去掉就好
~python中出现问题“struct.error: argument for \'s\' must be a bytes object”的解决办法
将
fhead = struct.pack(\'>qq5s\',56,38,"hello")
改写为
fhead = struct.pack(\'>qq5s\',56,38,"hello".encode(\'utf-8\'))
http://www.cnblogs.com/yezl/p/5861787.html
~使用socket通信的几种方法
http://www.cnblogs.com/GarfieldTom/archive/2012/12/16/2820143.html
http://www.jb51.net/article/66787.htm
http://www.cnblogs.com/alan-babyblog/p/5260156.html
http://bbs.csdn.net/topics/390722604
~使用socket发送和接受数据(python)(使用udp方式)
接收端(此端口需要先打开)(这里还需要注意port套接字只能使用一次):
import socket
port=8081
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#从指定的端口,从任何发送者,接收UDP数据
s.bind((\'\',port))
print(\'正在等待接入...\')
while True:
#接收一个数据
data,addr=s.recvfrom(1024)
print(\'Received:\',data,\'from\',addr)
实际使用时data可以改写为data.decode(\'utf-8\')
发送端(端口需要和接收端port相同):
import socket
port=8081
host=\'localhost\'s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.sendto(b\'hello,this is a test info !\',(host,port))
实际使用时可以将b\'hello,this is a test info !\'改写为value.encode(\'utf-8\')
~使用qt实现udp通信
参考如下两个网址
http://www.bkjia.com/Androidjc/865926.html
http://tieba.baidu.com/p/4301470835
~实现python做发送端,qt做接收端通信
在python处添加如下代码:
import socket
port=8088
host=\'localhost\'
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
在指定想发送数据位置添加
s.sendto(value.encode(\'utf-8\'),(host,port))
在qt处:
1.要使用widgets application方式构建工程(因为里面要使用this指针)
2.在mainwindow.h中添加
#include <QtNetwork>
#include <QUdpSocket>
#include <QHostAddress>
#include <QDebug>
private:
QUdpSocket *m_rcvSocket; //这个不要在函数cpp中定义
public slots:
void readPendingDatagrams();
3.在mainwindow.cpp中
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_rcvSocket = new QUdpSocket(this);
m_rcvSocket->bind(8088, QAbstractSocket::DontShareAddress);
ui->textReceive_2->setText(QString(QHostAddress::LocalHost));
connect(m_rcvSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
}
void MainWindow::readPendingDatagrams()
{
QHostAddress addr;
quint16 port;
while(m_rcvSocket->hasPendingDatagrams())
{
QByteArray qb;
qb.resize(m_rcvSocket->pendingDatagramSize());
m_rcvSocket->readDatagram(qb.data(), qb.size(), &addr, &port);
QTextCodec *codec = QTextCodec::codecForName("GB2312");
QString str = codec->toUnicode(qb);
QString qStrIP = addr.toString();
if (qb.size())
{
ui->label->setText(QString(qb.data()));
// ui->label2->setText(QString(qStrIP + " said:\n"));
}
}
}
~bt_audio_service_open: connect() failed: Connection refused (111)
sudo apt-get purge bluez-alsa
~TypeError: sequence item 0: expected string, int found错误
wf.writeframes("".join(data)) 改为wf.writeframes(b"".join(data),原因是3.3的join函数需要使用unicode格式的参数。
~有关TCP/IP的通信可以参考网址
http://www.cnblogs.com/GarfieldTom/archive/2012/12/16/2820143.html
~最后整理后在linux上配置的步骤
1.安装linux + update + upgrade
2.安装Anaconda(安装时赋予安装文件权限 sudo chmod 777 -R ...)
Sudo chmod +x *.sh
再输入:sudo ./*.sh可安装到任意目录,./*.sh可安装到当前用户有权限的目录
安装完后将文件夹赋予权限 sudo chmod 777 -R
3.之后运行python test.py后出现”No module named ‘pyaudio’”的问题,问题”error command ‘gcc’ faild with exit status 1”也可以一同解决
sudo apt-get install libportaudio-dev
sudo apt-get install libasound-dev
sudo apt-get install portaudio19-dev
pip install --allow-unverified=pyaudio pyaudio
pip3 install --allow-unverified=pyaudio pyaudio
此时可能出现错误:程序“pip”尚未安装或者程序“pip3”尚未安装,要安装
sudo apt-get install python-pip
sudo apt-get install python3-pip
上述安装pip3如果出现错误的情况需要加sudo
4.打开alsamixer,用”m”键打开MIC
5.安装jackd2
sudo apt-get install jackd2
出现选项选是
6.去掉蓝牙
sudo apt-get purge bluez-alsa
7.解决2239的错误
a.打开alsa.conf,通过
sudo nano /usr/share/alsa/alsa.conf
b.将报错对应的位置后面都改为default(参照如下)
pcm.front cards.pcm.default
pcm.rear cards.pcm.default
pcm.center_lfe cards.default
pcm.side cards.pcm.default
8.遇到权限问题
a.通过
sudo gedit /etc/security/limits.d/audio.conf
确保其中有如下两行
@audio - rtprio 95
@audio - memlock unlimited
b.终端输入
sudo adduser mao audio 其中mao是用户名
c.终端输入
ulimit -r -l
d.重启系统
9.运行程序前需要打开jackd驱动
jack_control start
10.运行程序
在程序目录下执行python test.py