Python之人工智能(一)
是不是看到标题感觉很高大上?其实就是人工智障啦hhh~,本篇文档是典型的标题党,虽然是人工智能,但是没有算法,只是站在巨人的肩膀上而已。
好了,步入正题。此篇是人工智能应用的重点,只用现成的技术不做底层算法,也是让初级程序员快速进入人工智能行业的捷径。目前市面上主流的AI技术提供公司有很多,比如百度,阿里,腾讯,主做语音的科大讯飞,做只能问答的图灵机器人等等。。。这些公司投入了很大一部分财力物力人力将底层封装,提供应用接口给我们,尤其是百度,完全免费的接口。既然百度这么仗义,咱们就不要浪费掉怎么好的资源,从百度AI入手,开启人工智能之旅。
一、开启人工智能大门
创建一个百度语音的应用
首先需要登录百度云,接着进入我的控制台,打开百度语音,进入语音应用管理界面,创建一个新的应用
接着就能看到自己创建的应用啦
这里面有三个值 AppID , API Key , Secret Key 记住可以从这里面看到 , 在之后的学习中我们会用到
好了 百度语音的应用已经创建完成了 接下来 我会用Python 代码作为实例进行应用及讲解
安装百度的人工智能SDK
- 首先咱们要 pip install baidu-aip 安装一个百度人工智能开放平台的Python SDK实在是太方便了,这也是为什么我们选择百度人工智能的最大原因
语音合成
-
安装好后我们先来测试下,语音合成功能。
-
具体参数,不详尽之处请看官方文档:传送门
- 这一步会生成一个名字为audio.m4a的文件
from aip import AipSpeech import os APP_ID = '11711274' API_KEY = 'iL6rNZgPjplCGYQfw86zO2ro' SECRET_KEY = '0YNfOLiAPUgqCL4XxYVoO2oLV37pmByY' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('你好啊', 'zh', 1, { "spd": 4, 'vol': 8, "pit": 6, "per": 0, }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 if not isinstance(result, dict): with open('audio.m4a', 'wb') as f: f.write(result) else: print(result)
二、语音识别
安装音频转换工具FFmpeg
-
声音这个东西格式太多样化了,如果要想让百度的SDK识别咱们的音频文件,就要想办法转变成百度SDK可以识别的格式PCM。
-
这里我们选择的是FFmpeg ,下载好后配置好环境变量。
- 即可在CMD中使用
ffmpeg -y -i audio.m4a -acodec pcm_s16le -f s16le -ac 1 -ar 16000 audio.pcm
- 接着在文件夹中就可以看到pcm格式的文件了
百度语音识别SDK应用
-
好了准备工作都做好了就开始到正式接触人工智障了
- asr函数需要四个参数,第四个参数可以忽略,自有默认值,参照一下这些参数是做什么的
-
第一个参数: speech 音频文件流 建立包含语音内容的Buffer对象, 语音文件的格式,pcm 或者 wav 或者 amr。(虽说支持这么多格式,但是只有pcm的支持是最好的) 第二个参数: format 文件的格式,包括pcm(不压缩)、wav、amr (虽说支持这么多格式,但是只有pcm的支持是最好的) 第三个参数: rate 音频文件采样率 如果使用刚刚的FFmpeg的命令转换的,你的pcm文件就是16000 第四个参数: dev_pid 音频文件语言id 默认1537(普通话 输入法模型)
from aip import AipSpeech import os APP_ID = '11711274' API_KEY = 'iL6rNZgPjplCGYQfw86zO2ro' SECRET_KEY = '0YNfOLiAPUgqCL4XxYVoO2oLV37pmByY' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() # 识别本地文件 res = client.asr(get_file_content('audio.pcm'), 'pcm', 16000,{ 'dev_pid': 1536, }) print( res.get("result")[0] )
- 接着来看看返回值
成功的dict中 result 就是我们要的识别文本
失败的dict中 err_no 就是我们要的错误编码,错误编码代表什么呢?
如果err_no不是0的话,就参照一下错误码表
到此百度AI语音部分的调用就结束了,是不是感觉很简单。
即将秃头的程序员