百度AI智能学习

简介: 春色将阑,莺声渐老,红英落尽青梅小。画堂人静雨蒙蒙,屏山半掩余香袅。密约沉沉,离情杳杳,菱花尘满慵将照。倚楼无语欲销魂,长空黯淡连芳草。首先安装python包pip3 install baidu-aip再注册百度AI得到相关参数https://ai.

春色将阑,莺声渐老,红英落尽青梅小。画堂人静雨蒙蒙,屏山半掩余香袅。
密约沉沉,离情杳杳,菱花尘满慵将照。倚楼无语欲销魂,长空黯淡连芳草。

首先安装python包

pip3 install baidu-aip

再注册百度AI得到相关参数

https://ai.baidu.com/

一、语音合成

from aip import AipSpeech

APP_ID = '14446020'
API_KEY = 'GnaoLWrIiTKP10disiDHMiNZ'
SECRET_KEY = 'FYaMNBsH5NFsgWcRsyBfaHDV70MvvE6u'

#实例化AipSpeech对象
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

#调用方法语音合成
result = client.synthesis("欢迎来到王者荣耀",
                          options={
                              "per": 1,
                              "spd": 9,
                              "pit": 9,
                              "vol": 15,
                          })
if not isinstance(result, dict):
    with open('auido.mp3', 'wb') as f:
        f.write(result)

二、语音识别

from aip import AipSpeech
import os

APP_ID = '14446020'
API_KEY = 'GnaoLWrIiTKP10disiDHMiNZ'
SECRET_KEY = 'FYaMNBsH5NFsgWcRsyBfaHDV70MvvE6u'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

def get_file_content(filePath):
    cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm"
    os.system(cmd_str)
    with open(f"{filePath}.pcm", 'rb') as fp:
        return fp.read()

res = client.asr(speech=get_file_content("auido.mp3"),options={
    "dev_pid":1536,
})

print(res["result"][0])

这里用到一个格式转换的软件,百度地址:
https://pan.baidu.com/s/1MadxSh-A0Pzo1Su_wKdktQ 提取码:x5xi
固定的格式转换命令:(需要将bin文件添加环境变量,在cmd中执行)
ffmpeg -y -i filePath -acodec pcm_s16le -f s16le -ac 1 -ar 16000 filePath.pcm

三、短文本相似度

from aip import AipNlp

APP_ID = '14446020'
API_KEY = 'GnaoLWrIiTKP10disiDHMiNZ'
SECRET_KEY = 'FYaMNBsH5NFsgWcRsyBfaHDV70MvvE6u'
client = AipNlp(APP_ID,API_KEY,SECRET_KEY)

ret = client.simnet("你今年几岁了?","多大年龄了?")
print(ret)

{'log_id': 4545309161914786697, 'texts': {'text_2': '多大年龄了?', 'text_1': '你今年几岁了?'}, 'score': 0.742316} score 是两个测试的短文本相似度,一般大于0.72的两个短文本的意思是相似的句子!

四、代码实现对接图灵

import requests

def tuling_test(question):
    url = "http://openapi.tuling123.com/openapi/api/v2"
    data = {
        "reqType":0,
        "perception": {
            "inputText": {
                "text": question
            },
            "inputImage": {
            },
        },
        "userInfo": {
            "apiKey": "2f4e809b8b3049ce82a6b4787bad65bb",
            "userId": "wangjifei"
        }
    }

    return requests.post(url=url,json=data).json()

ret = tuling_test("心情不好")
print(ret.get("results")[0]["values"]["text"])

五、简单实现人机交流

  • 基本步骤:
    用户录制音频---传入函数---格式转化---语音识别---匹配答案---语音合成---语音文件流写入文件---os执行文件---删除文件
from aip import AipSpeech
from aip import AipNlp
from uuid import uuid4
import os
import requests
import time

APP_ID = '14446007'
API_KEY = 'QrQWLLg5a8qld7Qty7avqCGC'
SECRET_KEY = 'O5mE31LSl17hm8NRYyf9PwlE5Byqm0nr'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
nlp_client = AipNlp(APP_ID, API_KEY, SECRET_KEY)


def tuling_test(question):
    """接入图灵,为问题匹配答案"""
    url = "http://openapi.tuling123.com/openapi/api/v2"
    data = {
        "reqType": 0,
        "perception": {
            "inputText": {
                "text": question
            },
            "inputImage": {
            },
        },
        "userInfo": {
            "apiKey": "2f4e809b8b3049ce82a6b4787bad65bb",
            "userId": "wangjifei"
        }
    }
    ret = requests.post(url=url, json=data).json()
    return ret.get("results")[0]["values"]["text"]


def get_file_content(filePath):
    """音频的格式转换"""
    cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm"
    os.system(cmd_str)
    with open(f"{filePath}.pcm", 'rb') as fp:
        return fp.read()


def custom_reply(text):
    """根据问题得到相应的答案,可以通过短文本相似来自定义,也可以调用图灵问题库"""
    if nlp_client.simnet("你叫什么名字", text).get("score") >= 0.72:
        return "我不能告诉你"

    return tuling_test(text)


def learn_say(file_name):
    """机器人学说话"""

    # 语音识别成文字
    res = client.asr(speech=get_file_content(file_name), options={
        "dev_pid": 1536,
    })
    os.remove(f"{file_name}.pcm")
    text = res.get("result")[0]
    # 根据问题得到相关答案
    text1 = custom_reply(text)
    # 答案语音合成
    res_audio = client.synthesis(text1, options={
        "vol": 8,
        "pit": 8,
        "spd": 5,
        "per": 4
    })
    # 通过uuid 生成文件名
    ret_file_name = f"{uuid4()}.mp3"
    # 将生成的语音流写入文件中
    with open(ret_file_name, "wb") as f:
        f.write(res_audio)
    # 执行音频文件
    ret = os.system(ret_file_name)
    time.sleep(2)
    os.remove(ret_file_name)

if __name__ == '__main__':
    learn_say("auido.m4a")

六、网页版智能机器人对话

flask_ws.py

from flask import Flask, request, render_template
from uuid import uuid4
from geventwebsocket.websocket import WebSocket
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
from learn_say import learn_say

app = Flask(__name__)  # type:Flask

@app.route("/ws")
def ws():
    user_socket = request.environ.get("wsgi.websocket")  # type:WebSocket

    while True:
        msg = user_socket.receive()
        q_file_name = f"{uuid4()}.wav"
        with open(q_file_name, "wb") as f:
            f.write(msg)

        ret_file_name = learn_say(q_file_name)

        user_socket.send(ret_file_name)

if __name__ == '__main__':
    http_serv = WSGIServer(("127.0.0.1", 8006), app, handler_class=WebSocketHandler)
    http_serv.serve_forever()

flask_app.py

from flask import Flask, request, render_template, send_file

app = Flask(__name__)  # type:Flask

@app.route("/index")
def index():
    return render_template("index.html")

@app.route("/get_audio/<audio_name>")
def get_audio(audio_name):
    return send_file(audio_name)

if __name__ == '__main__':
    app.run("127.0.0.1", 8008, debug=True)

learn_say.py

from aip import AipSpeech
from aip import AipNlp
from uuid import uuid4
import os
import requests
import time

APP_ID = '14446007'
API_KEY = 'QrQWLLg5a8qld7Qty7avqCGC'
SECRET_KEY = 'O5mE31LSl17hm8NRYyf9PwlE5Byqm0nr'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
nlp_client = AipNlp(APP_ID, API_KEY, SECRET_KEY)


def tuling_test(question):
    """接入图灵,为问题匹配答案"""
    url = "http://openapi.tuling123.com/openapi/api/v2"
    data = {
        "reqType": 0,
        "perception": {
            "inputText": {
                "text": question
            },
            "inputImage": {
            },
        },
        "userInfo": {
            "apiKey": "2f4e809b8b3049ce82a6b4787bad65bb",
            "userId": "wangjifei"
        }
    }
    ret = requests.post(url=url, json=data).json()
    return ret.get("results")[0]["values"]["text"]


def get_file_content(filePath):
    """音频的格式转换"""
    cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm"
    os.system(cmd_str)
    with open(f"{filePath}.pcm", 'rb') as fp:
        return fp.read()



def custom_reply(text):
    """根据问题得到相应的答案,可以通过短文本相似来自定义,也可以调用图灵问题库"""
    if nlp_client.simnet("你叫什么名字", text).get("score") >= 0.72:
        return "我不能告诉你"

    return tuling_test(text)


def learn_say(file_name):
    """机器人学说话"""

    # 语音识别成文字
    res = client.asr(speech=get_file_content(file_name), options={
        "dev_pid": 1536,
    })
    os.remove(file_name)
    os.remove(f"{file_name}.pcm")
    text = res.get("result")[0]
    # 根据问题得到相关答案
    text1 = custom_reply(text)
    # 答案语音合成
    res_audio = client.synthesis(text1, options={
        "vol": 8,
        "pit": 8,
        "spd": 5,
        "per": 4
    })
    # 通过uuid 生成文件名
    ret_file_name = f"{uuid4()}.mp3"
    # 将生成的语音流写入文件中
    with open(ret_file_name, "wb") as f:
        f.write(res_audio)

    return ret_file_name

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
<audio src="" autoplay controls id="player"></audio>

<button onclick="start_reco()">录制消息</button>
<br>
<button onclick="stop_reco()">发送语音消息</button>

</body>
<script src="/static/Recorder.js"></script>
<script type="application/javascript">
    var serv = "http://127.0.0.1:8008";
    var ws_serv = "ws://127.0.0.1:8006/ws";

    var get_music = serv + "/get_audio/";
    var ws = new WebSocket(ws_serv);
    ws.onmessage = function (data) {
        document.getElementById("player").src = get_music + data.data
    };


    var reco = null;
    var audio_context = new AudioContext();
    navigator.getUserMedia = (navigator.getUserMedia ||
        navigator.webkitGetUserMedia ||
        navigator.mozGetUserMedia ||
        navigator.msGetUserMedia);

    navigator.getUserMedia({audio: true}, create_stream, function (err) {
        console.log(err)
    });

    function create_stream(user_media) {
        var stream_input = audio_context.createMediaStreamSource(user_media);
        reco = new Recorder(stream_input);
    }

    //录制消息
    function start_reco() {
        reco.record();
    }
    //先停止录制,再获取音频
    function stop_reco() {
        reco.stop();
        get_audio();
        reco.clear();
    }
    //获取音频,发送音频
    function get_audio() {
        reco.exportWAV(function (wav_file) {
            // wav_file = Blob对象
            ws.send(wav_file);
        })
    }
</script>
</html>
相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
18天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
14天前
|
存储 XML 人工智能
深度解读AI在数字档案馆中的创新应用:高效识别与智能档案管理
基于OCR技术的纸质档案电子化方案,通过先进的AI能力平台,实现手写、打印、复古文档等多格式高效识别与智能归档。该方案大幅提升了档案管理效率,确保数据安全与隐私,为档案馆提供全面、智能化的电子化管理解决方案。
113 48
|
16天前
|
人工智能 数据挖掘 数据库
拥抱Data+AI|破解电商7大挑战,DMS+AnalyticDB助力企业智能决策
本文为数据库「拥抱Data+AI」系列连载第1篇,该系列是阿里云瑶池数据库面向各行业Data+AI应用场景,基于真实客户案例&最佳实践,展示Data+AI行业解决方案的连载文章。本篇内容针对电商行业痛点,将深入探讨如何利用数据与AI技术以及数据分析方法论,为电商行业注入新的活力与效能。
拥抱Data+AI|破解电商7大挑战,DMS+AnalyticDB助力企业智能决策
|
17天前
|
人工智能 数据库 决策智能
拥抱Data+AI|如何破解电商7大挑战?DMS+AnalyticDB助力企业智能决策
本文为阿里云瑶池数据库「拥抱Data+AI」系列连载第1篇,聚焦电商行业痛点,探讨如何利用数据与AI技术及分析方法论,为电商注入新活力与效能。文中详细介绍了阿里云Data+AI解决方案,涵盖Zero-ETL、实时在线分析、混合负载资源隔离、长周期数据归档等关键技术,帮助企业应对数据在线重刷、实时分析、成本优化等挑战,实现智能化转型。
拥抱Data+AI|如何破解电商7大挑战?DMS+AnalyticDB助力企业智能决策
|
7天前
|
人工智能 文字识别 运维
AI多模态的5大核心关键技术,让高端制造实现智能化管理
结合大模型应用场景,通过AI技术解析高端制造业的复杂设备与文档数据,自动化地将大型零件、机械图纸、操作手册等文档结构化。核心技术包括版面识别、表格抽取、要素抽取和文档抽取,实现信息的系统化管理和高效查询,大幅提升设备维护和生产管理的效率。
|
7天前
|
机器学习/深度学习 人工智能 安全
AI与旅游业:旅行规划的智能助手
在数字化浪潮中,人工智能(AI)正重塑旅游业。本文探讨了AI如何通过个性化推荐、智能预测与预警、语音交互与虚拟助手、增强现实体验及可持续发展,提升旅行规划的效率、安全性和趣味性,推动旅游业创新与变革。
|
9天前
|
人工智能 自然语言处理 关系型数据库
从数据到智能,一站式带你了解 Data+AI 精选解决方案、特惠权益
从 Data+AI 精选解决方案、特惠权益等,一站式带你了解阿里云瑶池数据库经典的AI产品服务与实践。
|
10天前
|
人工智能 安全 搜索推荐
AI与能源管理:智能电网的未来
本文探讨了AI与智能电网的融合及其对能源管理的深远影响。智能电网利用先进的信息、通信和AI技术,实现电力的自主、智能化、高效管理。AI在精准预测电力需求、实时监测与故障诊断、智能能源调度、个性化能源服务和优化可再生能源利用等方面发挥关键作用,推动能源管理的高效、智能和可持续发展。
|
11天前
|
机器学习/深度学习 人工智能 自然语言处理
AI与法律行业:智能法律咨询
在科技飞速发展的今天,人工智能(AI)正逐渐渗透到法律行业,特别是在智能法律咨询领域。本文探讨了AI在智能法律咨询中的应用现状、优势及挑战,并展望了其未来发展前景。AI技术通过大数据、自然语言处理等手段,提供高效、便捷、低成本且个性化的法律服务,但同时也面临数据隐私、法律伦理等问题。未来,AI将在技术升级、政策推动和融合创新中,为用户提供更加优质、便捷的法律服务。
|
13天前
|
机器学习/深度学习 人工智能 搜索推荐
AI在金融领域的应用:智能投资顾问
【10月更文挑战第31天】随着AI技术的快速发展,智能投资顾问在金融领域的应用越来越广泛。本文介绍了智能投资顾问的定义、工作原理、优势及未来发展趋势,探讨了其在个人财富管理、养老金管理、机构风险管理及量化交易中的典型应用,并分析了面临的挑战与机遇。智能投资顾问以其高效、低成本、个性化和全天候服务的特点,正逐步改变传统投资管理方式。