百度語音識別引擎使用


~安裝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/

選擇 Gzipped source tarball

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通用)

260030418761096.png

 

~關於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')) 

 

~Python中的struct模塊的使用

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM