Python编程实现百度AI应用二例
2022-08-10牟晓东
牟晓东
借助于百度AI智能云平台所提供的丰富功能,我们可以在本地非常方便地通过Python代码编程与其“对接”进行人脸与人体识别、音频与视频识别等各种强大而有趣的应用,操作方法步骤均大同小异,在此以植物识别和TTS语音合成为例:
登录百度智能云平台(https://ai.baidu.com/),找到其中的“植物识别”项(https://ai.baidu.com/tech/imagerecognition/plant),据称能够识别“超过2万种常见植物和近8000种花卉”,并且能够返回所识别植物的名称以及对应的百科信息。按照页面上的操作指引,在“创建应用”中进行“创建新应用”,填写对应的名称(如“识别植物”)及接口选择(注意必须要选中“图像识别”中的“植物识别”项),最终就会生成一个包括AppID、API Key和Secret Key等信息的新應用,将这些信息全部复制保存至本地(如图1)。
首先,导入调用摄像头的OpenCV库和调用百度AI的aip库:“import cv2”、“from aip import AipImageClassify”,注意要提前使用“pip install baidu-aip”命令安装好aip库;接着,编写控制摄像头拍摄植物并生成JPG图片文件的代码:新建变量camera,通过调用OpenCV库为其赋值为“cv2.VideoCapture(0)”,完成将摄像头所拍摄到的画面保存至变量camera中的功能;再新建一个“while True”循环结构,通过“ret,img = camera.read()”语句实现“读取camera中保存的一帧画面并赋值给变量img”的功能,其中的ret返回的数据是一个布尔值——为真时才进行文件保存的操作;语句“cv2.imshow(‘Capture plants:’,img)”的功能是开启一个新窗口,标题为“Capture plants:”,显示的内容是刚刚变量img所保存的一帧摄像头捕获画面;为了防止程序运行过快,加入延时等待语句“key = cv2.waitKey(10)”,即每次循环时均等待10毫秒,相当于给摄像头充分的时间进行画面的拍摄等操作;接着,建立一个if选择分支结构,判断条件为“if key == ord(‘s’):”,即用户此时是否已经按下s键,当条件为真时则执行以下三个语句:第一是将变量img中保存的画面内容生成capture.jpg图片文件:“cv2.imwrite(‘capture.jpg’,img)”;第二是关闭刚刚开启的摄像头画面窗口:“cv2.destroyAllWindows()”;第三是使用break语句来跳出当前循环(如图2)。
接下来,将上一步中在百度智能云中新建应用时获得的ID和Key三处关键信息导入,通过新建三个变量并进行赋值来实现:“APP_ID = ‘26634939’”、“API_KEY = ‘YqBXBlfEEnRPYKA2eWm54A3F’”和“Secret_KEY = ‘ilCPcW16DbSNXe1GQ9Mhj043
pzxQZcT7’”;然后,通过百度API接口将三个变量作为参数进行实例化:“client = AipImageClassify(APP_ID,API_KEY,Secret_KEY)”;接着,定义一个读取图片的get_file(filePath)函数,通过变量image1将刚刚生成的capture.jpg图片文件进行读取,并且根据百度智能云的API接口封装参数要求进行结果的提取,最终对result进行值的轮询操作并构造print语句输出识别后的信息(如图3)。
将程序保存为Detect_plants.py,点击“运行”按钮进行测试,同时将一盆巴西木放置于摄像头前;此时在屏幕上就会弹出一个名为“Capture plants:”的新窗口,其预览内容即为摄像头所拍摄的实时画面。调整好植物盆栽的角度和显示大小后,按下键盘上的s键(注意要保持输入法为英文半角状态)后,很快就有了显示结果:“这种植物的名字叫作: 香龙血树”、“对该植物的识别率是: 53.1 %”、“【简介】 香龙血树(学名:Dracaena fragrans)是天门冬科……”(如图4)。
TTS即“Text To Speech”,意为“从文本到语音”,百度AI支持每次1024字节以内的文本合成为语音(若文本较长可采用多次请求的方式)。
同样是先建立应用项目,从“语音合成”中选择“短文本在线合成”项,将新应用名称设置为“TTS从文本到语音”(或其他),注意查看其中是否已经包含了“短文本在线合成”等项,这样就又会得到一组AppID、API Key和Secret Key信息,复制待用(如图5)。
值得一提的是,如果程序代碼没问题但最终在测试运行时一直提示类型错误的话,此时就要在百度AI平台中进行免费资源的领取操作——选中“语音技术”—“语音合成”中的“短文本在线合成—基础音库”和“短文本在线合成—精品音库”等项目后,再点击底部的“0元领取”按钮,此时会有“恭喜您,领取成功”的提示:“免费测试资源将在30分钟内生效”(如图6)。
同样,首先从aip库模块中导入待用的AipSpeech:“from aip import AipSpeech”,再将ID和Key的信息通过三个赋值语句导入:“APP_ID = ‘26644936’”、“API_KEY = ‘C0QXnUQixE4l8VFj qrl2tvWk’”和“Secret_KEY = ‘eGA7VcZm0cZoKt EOYts5MFnakq4fvxQT’”;然后,仍然是新建变量client,通过语句“client = AipSpeech(APP_ID,API_KEY,Secret_KEY)”将参数传入;接着,建立变量my_str,其值为待转换的文本信息,比如“《电脑报》是中国发行量最大的计算机报……”;再建立变量result,按照规则进行赋值:“result = client.synthesis(my_str,‘zh’,1,{‘vol’:5,})”,其中的参数比较丰富,可以设置语速、语调和音量,还可以设置发音人等等,大家可直接在百度AI平台中语音技术的接口说明中进行查询设置(https://ai.baidu.com/ai-doc/SPEECH/Gk4nlz8tc)。
最后,仍是通过“with open”以二进制文件写入的方式,将TTS生成的语音数据写入my_TTS.mps文件。将程序保存为TextToSpeech.py,测试运行,很快就会在当前程序的保存文件夹中生成一个my_TTS.mps音频文件,打开听一下,内容即为程序代码中变量my_str所存储的文本内容(如图7)。
百度AI平台提供的其他智能应用调用方法基本类似,均可以像进行植物识别与TTS语音合成一样来使用,可参考官方说明文档进行Python程序的编写。