Python學習案例之Web版語音合成播報

来源:https://www.cnblogs.com/smallSevens/archive/2019/03/12/10513316.html
-Advertisement-
Play Games

前言 語音合成技術能將用戶輸入的文字,轉換成流暢自然的語音輸出,並且可以支持語速、音調、音量設置,打破傳統文字式人機交互的方式,讓人機溝通更自然。 應用場景 將游戲場景中的公告、任務或派單信息通過語音播報,讓玩家玩游戲或配送員送貨的同時,也可接聽新任務。 文學小說類軟體,可以利用百度語音合成技術將文 ...


前言

語音合成技術能將用戶輸入的文字,轉換成流暢自然的語音輸出,並且可以支持語速、音調、音量設置,打破傳統文字式人機交互的方式,讓人機溝通更自然。

應用場景

將游戲場景中的公告、任務或派單信息通過語音播報,讓玩家玩游戲或配送員送貨的同時,也可接聽新任務。

文學小說類軟體,可以利用百度語音合成技術將文學小說作品進行高質量的朗讀,流暢清晰,解放雙眼,暢聽世界。

軟體架構

Python3.7.2、Django2.1.7、baidu-aip(百度語音API)

案例

這裡只展示部分代碼,有興趣的同學可以自行下載源碼安裝調試。

import os
import time
import codecs
from aip import AipSpeech
from django.shortcuts import render
from django.http import HttpResponse


'''
pip install --upgrade pip
pip install django
pip install baidu-aip
'''


def main(request):
    return render(request, 'index.html')


def m_main(request):
    return render(request, 'm_index.html')


def convert(request):
    message = request.POST.get("message")
    switch = request.POST.get("switch")
    mp3 = du_say(message, switch)
    return HttpResponse(mp3)


def du_say(message, switch):
    write_txt(message)
    app_id = '*****'
    api_key = '*****'
    secret_key = '*****'
    client = AipSpeech(app_id, api_key, secret_key)
    if switch == "true":
        switch = 3
    else:
        switch = 4
    result = client.synthesis(message, 'zh', 1, {
        'vol': 5, 'per': switch,
    })
    t = time.time()
    now_time = lambda: int(round(t * 1000))
    path = os.getcwd() + os.path.sep + "static" + os.path.sep + "audio"+os.path.sep
    audio = path+str(now_time())+'.mp3'
    # 識別正確返回語音二進位 錯誤則返回dict 參照下麵錯誤碼
    if not isinstance(result, dict):
        with open(audio, 'wb') as f:
            f.write(result)
    return str(now_time())+'.mp3'


def write_txt(message):
    t = time.time()
    now_time = lambda: int(round(t * 1000))
    path = os.getcwd() + os.path.sep + "static" + os.path.sep + "text"+os.path.sep
    text = path+str(now_time())+'.txt'
    with codecs.open(text, 'a', encoding='utf8')as f:
        f.write(message)

本地部署

從碼雲拉取項目到本地:

https://gitee.com/52itstyle/baidu-speech.git

配置百度語音API:

# 自行註冊申請
https://console.bce.baidu.com/ai/#/ai/speech/app/list

啟動項目:

# 切換到項目根目錄,執行
manage.py runserver

外網部署

這裡以Linux為例,代理使用 openresty。

安裝 Python3

wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz

事先安裝依賴,否則後期安裝會報錯:

yum -y install zlib*
yum -y install libffi-devel

下麵開始正式安裝:

# 解壓
tar -xvf Python-3.7.1.tar.xz
# 切換大目錄
cd Python-3.7.1
# 配置編譯
./configure
# 編譯安裝
make && make install

安裝 Django

pip install Django

安裝成功以後需要重新配置並編譯安裝 Python3:

# 配置編譯
./configure
# 編譯安裝
make && make install
安裝伺服器 uwsgi
pip3 install uwsgi

上傳項目到伺服器,並切換到 speech 目錄:

# 目錄下新建文件夾
mkdir script

在 script 下新增 uwsgi.ini (項目中已經配置好,自行修改路徑即可):

# uwsig使用配置文件啟動
[uwsgi]
# 項目目錄
chdir=/www/speech/
# 指定項目的application
module=speech.wsgi:application
# 指定sock的文件路徑       
socket=/www/speech/script/uwsgi.sock
# 進程個數       
workers=5
pidfile=/www/speech/script/uwsgi.pid
# 指定IP埠       
http=127.0.0.1:8001
# 指定靜態文件
static-map=/static=/www/speech/static
# 啟動uwsgi的用戶名和用戶組
uid=root
gid=root
# 啟用主進程
master=true
# 自動移除unix Socket和pid文件當服務停止的時候
vacuum=true
# 序列化接受的內容,如果可能的話
thunder-lock=true
# 啟用線程
enable-threads=true
# 設置自中斷時間
harakiri=30
# 設置緩衝
post-buffering=4096
# 設置日誌目錄
daemonize=/www/speech/script/uwsgi.log

然後使用以下命令啟動:

uwsgi  --ini uwsgi.ini

執行命令,查看是否啟動成功:

[root@AY140216131049Z script]# ps -ef|grep uwsgi  
root      3040     1  0 Nov21 ?        00:00:03 uwsgi --ini uwsgi.ini
root      3041  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3042  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3043  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3044  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3045  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      3046  3040  0 Nov21 ?        00:00:00 uwsgi --ini uwsgi.ini
root      6606  6580  0 18:13 pts/0    00:00:00 grep --color=auto uwsgi

重啟:

uwsgi --reload uwsgi.pid
配置Nginx代理:
server {
        listen  80;
        server_name  speech.52itstyle.vip;
        charset utf-8;
        location / {
           include uwsgi_params; # 導入一個Nginx模塊他是用來和uWSGI進行通訊的
           uwsgi_connect_timeout 30; # 設置連接uWSGI超時時間
           uwsgi_pass unix:/www/speech/script/uwsgi.sock; # 指定uwsgi的sock文件所有動態請求就會直接丟給他
        }
        # 動靜分離 Nginx 處理靜態請求
        location /static {
            root /www/speech/;
        }
   }

如果啟動HTTPS:

server {
         listen 80;
         listen 443 ssl;
         server_name  speech.52itstyle.vip;
         #ssl on;
         #證書路徑
         ssl_certificate    /usr/local/openresty/nginx/cert/1901523_speech.52itstyle.vip.pem;
         #私鑰路徑
         ssl_certificate_key   /usr/local/openresty/nginx/cert/1901523_speech.52itstyle.vip.key;
         #緩存有效期
         ssl_session_timeout 5m;
         #可選的加密演算法,順序很重要,越靠前的優先順序越高.
         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
         #安全鏈接可選的加密協議
         ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
         ssl_prefer_server_ciphers on;

        location / {
           include uwsgi_params; # 導入一個Nginx模塊他是用來和uWSGI進行通訊的
           uwsgi_connect_timeout 30; # 設置連接uWSGI超時時間
           uwsgi_pass unix:/www/speech/script/uwsgi.sock; # 指定uwsgi的sock文件所有動態請求就會直接丟給他
        }
        # 動靜分離 Nginx 處理靜態請求
        location /static {
            root /www/speech/;
        }
   }

演示地址

https://speech.52itstyle.vip/

▲掃描二維碼識別語音播報

參考

https://gitee.com/52itstyle/baidu-speech

https://blog.52itstyle.vip/archives/3474/

https://blog.52itstyle.vip/archives/3503/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • // ConsoleApplication1.cpp : 定義控制台應用程式的入口點。// #include "stdafx.h"#include "iostream" using namespace std; const short int max_Section= 20;const short ...
  • 1.哪個是True,哪個是False? 這裡要看三組代碼: # 第一組: >>>a=256 >>>b = 256 >>>a is b # 第二組: >>>a = 257 >>>b = 257 >>>a is b # 第三組: >>>a = 256, b = 256 >>>a is b 問題來了,這三 ...
  • 最近項目需要將批量鏈接中的pdf文檔爬下來處理,根據以下步驟完成了任務: 參考資料: https://blog.csdn.net/zhrq95/article/details/79300411 https://blog.csdn.net/yllifesong/article/details/8104 ...
  • CentOS的配置: 1.給CentOS安裝Zookeeper: 網路配置成僅主機 上傳tar.gz:比如用FTP tar -xvzf ... cd zookeeper mkdir data cd conf mv zoo_sample.cfg zoo.cfg vi zoo.cfg 修改這一行: da ...
  • 1. 爬取前的分析 是mitmproxy的命令行介面,比Fiddler、Charles等工具方便的地方是它可以對接Python腳本。 有了它我們可以不用手動截獲和分析HTTP請求和響應,只需寫好 請求和響應 的處理邏輯即可。 它還可以實現數據的解析、存儲等工作,這些過程都可以通過Python實現。 ...
  • 項目右擊 → Build Path → 右側 Add Library → server runtime → Apache Tomcat → Finish → Apply ...
  • 配置文件 Java ...
  • 進位的表示方式 最長見的進位表達形式有,二進位,八進位,十進位,十六進位。他們之間的區別僅體現在標識符的不同。 尾碼區分: B、二進位 H、十六進位 O、八進位 D、十進位 首碼區分: 0x:十六進位(零) 0:八進位(零) 0b:二進位(零) 有錯誤請指出,一起進步,謝謝! ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...