每次会员到访都需要。会员自主结账或找导购才能被发现。或者需要一个人员站在门口,并且对会员都全部了解,才能对会员到访进行更好服务的接待。

小帅为了免去这些操作呢。就想到了百度AI。语音合成。再结合第三方的人脸库会员到访推送。做了一个简单的会员到访语音提醒推送小工程。

下面我们就一起看一下整体流程吧~

实现步骤

Step1:成为百度AI开放平台的开发者

我们有账号之后登录,并且点击此处(百度语音)创建一个应用,如下图

然后就能看到创建完的应用和 APPID、API KEY 以及 Secret KEY

Step2:准备数据

语音合成是将文本转换为可以播放的音频文件的服务,我们从大姚的订单库中找一段订单信息的文本如下:

三分钟前,由北京市顺义区二经路与二纬路交汇处北侧,北京首都国际机场T3航站楼 去往 东城区北三环东路36号喜来登大酒店(北京金隅店)

Step3: 编写一个语音合成示例程序

第一步API KEY 以及 Secret KEY,以及 第二步 的数据,我们就可以写一个示例代码调用百度AI开放平台的文字识别能力

准备开发环境

小帅选择用 Java来快速搭建一个原型,关于如何安装Java。可以参考百度经验哦~。百度AI有很完善的API文档、和封装调用更方便的工具包。接下来小帅就用Maven搭建工程环境

pom.xml配置如下:

<!-- https://mvnrepository.com/artifact/com.baidu.aip/java-sdk -->
<dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.12.0</version>
</dependency>

编写代码

粘贴以下内容,不要忘记替换你的 APPID APIKEY 以及 SECRETKEY图片文件

运行main方法即可

import com.baidu.aip.speech.AipSpeech;
import com.baidu.aip.speech.TtsResponse;
import com.baidu.aip.util.Util;
import org.json.JSONObject;import java.util.HashMap;public class Sample {//第一步创建应用获取的三个值private static String APPID = "你的 App ID";private static String APIKEY = "你的 Api Key";private static String SECRETKEY = "你的 Secret Key";public static void main(String[] args) {// 初始化一个AipSpeech AipSpeech client = new AipSpeech(APPID,APIKEY,SECRETKEY);// 调用接口 第二步准备的图片HashMap<String, Object> options = new HashMap<>();//合成的文本内容String text = "三分钟前,由北京市顺义区二经路与二纬路交汇处北侧,北京首都国际机场T3航站楼 去往 东城区北三环东路36号喜来登大酒店(北京金隅店)";//发音人选择/*** 度小宇=1,度小美=0,度逍遥=3,度丫丫=4* 度博文=106,度小童=110,度小萌=111,度米朵=103,度小娇=5**/options.put("per","0");//语速,取值0-9,默认为5中语速options.put("spd", "3");TtsResponse res = client.synthesis(text , "zh", 1, options);byte[] data = res.getData();JSONObject res1 = res.getResult();if (data != null) {try {Util.writeBytesToFileSystem(data, "F:\\testaudio\\度小美Demooutput.mp3");} catch (IOException e) {e.printStackTrace();}}if (res1 != null) {System.out.println(res1.toString());}}
}

保存接口返回语音byte[] 转存为MP3格式文件。这里说明一下默认返回就是MP3格式的数据哦。如果想要其他格式

//3为mp3格式(默认);
//4为pcm-16k;
//5为pcm-8k;
//6为wav(内容同pcm-16k);
//注意aue=4或者6是语音识别要求的格式,但是音频内容不是语音识别要求的自然人发音,所以识别效果会受影响。options.put("aue","3");

点击访问合成的示例MP3文件

语音合成 单例加载。10次测试耗时如下(单位:ms(毫秒))。第一次需要加载一次AUTH。耗时多了一些。后续基本都持平在710ms以内

发送请求到返回数据耗时:1493
发送请求到保存文件耗时:1495发送请求到返回数据耗时:611
发送请求到保存文件耗时:612发送请求到返回数据耗时:609
发送请求到保存文件耗时:610发送请求到返回数据耗时:473
发送请求到保存文件耗时:474发送请求到返回数据耗时:549
发送请求到保存文件耗时:550发送请求到返回数据耗时:673
发送请求到保存文件耗时:674发送请求到返回数据耗时:754
发送请求到保存文件耗时:755发送请求到返回数据耗时:676
发送请求到保存文件耗时:676发送请求到返回数据耗时:582
发送请求到保存文件耗时:582发送请求到返回数据耗时:662
发送请求到保存文件耗时:663发送请求到返回数据平均耗时:708.2ms
发送请求到保存文件平均耗时:709.1ms
        for (int i = 0; i < 10; i++) {// 调用接口String text = "三分钟前,由北京市顺义区二经路与二纬路交汇处北侧,北京首都国际机场T3航站楼 去往 东城区北三环东路36号喜来登大酒店(北京金隅店)";HashMap<String, Object> options = new HashMap<String, Object>();options.put("per", "0");options.put("spd", "3");long startTime = System.currentTimeMillis();TtsResponse res = client.synthesis(text, "zh", 1, options);byte[] data = res.getData();if (data != null) {long endTime = System.currentTimeMillis();System.out.println("发送请求到返回数据耗时:"+(endTime - startTime));try {Util.writeBytesToFileSystem(data, "F:\\testaudio\\度小美Demooutput.mp3");long saveEndTime = System.currentTimeMillis();System.out.println("发送请求到保存文件耗时:"+(saveEndTime - startTime));} catch (IOException e) {e.printStackTrace();}}JSONObject res1 = res.getResult();if (res1 != null) {System.out.println(res1.toString());}System.out.println();}

带宽联通100M

以上数据可以看出。平均耗时在0.7s上下。如果服务器配置贼6、带宽也贼宽。应该耗时还会更低哦

接下来。咱们就拿语音合成的服务。来结合实际业务做一个小的功能哦~

会员到访语音提醒搞起来

简单看一下业务流程图。主要看语音合成、语音提醒部分即可

人脸会员识别可以看百度AI的官方解决方案 https://ai.baidu.com/solution/faceidentify

本业务中人脸识别、摄像头厂商暂时没用百度AI。这一点我也很无奈。迫于公司要求呀。如果再来一次选择。绝对强制提议选择百度AI(怕太便宜而告终 你懂得)

接口调用封装,并符合业务系统使用

简单说明一下:

案例中Java后端部分整体使用SpringBoot框架 JDK1.8

1.会员人脸照片信息上传这一步小帅设计的是定时任务去执行语音信息并进行合成操作。所以需要对Java的定时任务、任务调度有一定了解哦

2.定时任务就是对人脸会员信息读取并进行会员到访语音提示音频文件合成

会员信息采集

会员到访提示音发音类型默认 度米多。也可以根据会员不同给不同的发音类型哦~

基础音库

精品音库
  • 会员提示音类型修改

下拉选择精品音库 或 基础音库 的具体类型即可

  • 后端会员人脸信息处理
 /*** 会员人脸信息添加* @param csFace* @return*/@AutoLog(value = "会员人脸信息添加")@ApiOperation(value="会员人脸信息添加", notes="会员人脸信息添加")@PostMapping(value = "/add")public Result<CsFace> add(@RequestBody CsFace csFace) {Result<CsFace> result = new Result<CsFace>();csFaceGroup group = new csFaceGroup();try {//这里存人脸信息到人脸库就不演示了。人脸库存入成功后业务系统再记录csFaceService.save(csFace);//把会员人脸信息提交给JOB等待后续执行。方便前端页面交互不等待//人脸会员信息只是在一个JobFace类中增加一个List容器 public static List<CsFace> vipFaceMap=new ArrayList<CsFace>();JobFace.vipFaceMap.add(csFace);result.success("添加成功!");} catch (Exception e) {log.info(e.getMessage());result.error500("操作失败-人脸服务存在异常");}return result;}
  • 会员到访定制提示音频合成定时任务
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.netand.common.factory.BDFactory;
import cn.netand.modules.csface.entity.CsFace;
import cn.netand.modules.csface.service.ICsFaceService;
import com.baidu.aip.speech.AipSpeech;
import com.baidu.aip.speech.TtsResponse;
import com.baidu.aip.util.Util;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;/*** @Description 人脸会员音频生成* @author 小帅丶* @className VipVoiceJob * @Date 2019/11/20 22:11**/
@Slf4j
public class VipVoiceJob implements Job {@Value(value = "${xiaoshuai.path.upload}")private String uploadpath;@Autowiredprivate GeneralDealBeanUtil generalDealBeanUtil;@Autowiredprivate ICsFaceService csFaceService;//获取音频合成的客户端AipSpeech aipSpeech = BDFactory.getAipSpeech();@Value(value = "${xiaoshuai.domainVoice}")private String domainVoice;/*** 度小宇=1,度小美=0,度逍遥=3,度丫丫=4* 度博文=106,度小童=110,度小萌=111,度米朵=103,度小娇=5**/private static final List<String> audioType = Arrays.asList("1","0","3","4","106","110","111","103","5");private static final String LANGUAGE_ZH = "zh";private static final Integer CTP = 1;private static final String AUDIO = ".mp3";//任务执行详情@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println("execute VipVoiceJob = " + DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN));List<CsFace> vipFaceMap = JobFace.vipFaceMap;int vipFaceSize = vipFaceMap.size();if(vipFaceSize>0){vipFaceMap.forEach(csFace -> {//获取会员信息try {generalAudio(csFace);csFace.setVoiceStatus(1);csFaceService.updateById(csFace);}catch (Exception e){System.out.println(e.getMessage());csFace.setVoiceStatus(2);csFaceService.updateById(csFace);}});JobFace.vipFaceMap.clear();}}/*** @Description 生成全部音库音频文件* @Author 小帅丶* @Date  2019/11/20 23:28* @param face 会员人脸数据* @return void**/public void generalAudio(CsFace face){String ctxPath = uploadpath;String bizPath = "audios";File file = new File(ctxPath + File.separator + bizPath + File.separator + face.getId());if (!file.exists()) {file.mkdirs();// 创建文件根目录}long startTime = System.currentTimeMillis();audioType.forEach(audioTypeStr->{HashMap<String, Object> options = new HashMap<>();//合成的文本内容String text = "XX门店提醒 "+face.getName()+" 会员到访";//发音人选择options.put("per",audioTypeStr);//语速,取值0-9,默认为5中语速options.put("spd", "3");String fileName = audioTypeStr+AUDIO;TtsResponse response = aipSpeech.synthesis(text,LANGUAGE_ZH,CTP,options);byte[] data = response.getData();if (data != null) {try {String savePath = file.getPath() + File.separator +fileName;String filePath = bizPath + File.separator + face.getId() + File.separator + fileName;if(null!=face.getVoiceType()&&face.getVoiceType().equals(Integer.parseInt(audioTypeStr))){filePath = filePath.replace("\\", "/");face.setVoicePath(filePath);face.setVoiceUrl(domainVoice+filePath);}Util.writeBytesToFileSystem(data, savePath);} catch (Exception e) {System.out.println(e.getMessage());}}});long endTime = System.currentTimeMillis();System.out.println("总耗时 = " + (endTime - startTime) + "ms");}
}
  • 添加一条定时任务

这里是5秒执行一次。其实可以根据自我需求来定义。定时任务形式也不是必须。

  • 会员音频提示文件生成

数字代表的是发音类型。每添加一个会员。则会生成所有发音类型的音频文件哦。方便后续给每个到访会员给定不同声音的提醒

会员到访APP推送

非百度AI人脸会员解决方案哦~ 不要问为什么不用百度AI的。上面已经给出说明了。

1.摄像头抓怕推送到人脸库系统

2.人脸库系统对比并推送结果到内部业务系统

3.内部业务系统|人脸库系统推送给APP(小帅使用前者)

下图是一个gif。会演示app收到推送弹窗并播放语音提醒。

带声音访问这里 https://mp.weixin.qq.com/s/qL57AxdS4r5zlDzM57z2CQ

【百度AI语音合成】会员到访门店语音提醒相关推荐

  1. 基于百度AI语音合成,使用python编写的语音朗读工具

    最近要考研,要阅读大量的书籍,希望读PDF文档的时候,能滑动一段文字后,电脑能自动读出声,这样就懒得自己读了. 因为电脑上的各种软件太过拉胯,所以自己写了一个在电脑上滑动取词的有声阅读. 如果需要的话 ...

  2. php文本转语音mp3api源代码,小说文本转音频(百度AI语音合成接口)

    今天带来的是百度AI的一个语音合成接口,它的主要功能是将接收到的文本内容,转换为音频数据返回. 我实现的大致流程为: 1 - 爬取小说文本内容(本篇不涉及) 2 - 调用百度AI语音合成接口,将文本内 ...

  3. 百度ai文字转语音并下载php源码,一种基于百度AI的网页版在线语音包转文字的方法与流程...

    本发明涉及语音识别技术领域,特别涉及一种基于百度AI的网页版在线语音包转文字的方法. 背景技术: 语音识别技术,也被称为自动语音识别Automatic Speech Recognit1n, (ASR) ...

  4. 通过QT_TCP和百度AI接口实现的支持语音输入的多人聊天室

    本项目主要通过tcp实现的并发聊天室再加上百度ai的语音识别接口,实现的支持语音识别输入的并发聊天室. 1.服务器 服务器设置的一个没有ui的界面的软件,实现聊天数据的中介 2.客户端 客户端通过qt ...

  5. 十分钟带你玩转人工智能——调用百度AI接口实现文字转语音

    调用别人的接口,实现人工智能就是站在巨人的肩膀上 打开百度AI,点这个控制台,(你要是没有注册 ,就注册一下,很简单的) 点开这个语音技术 创建一下应用 好了以后,按照这个图的步骤,免费领取一下使用次 ...

  6. 罗技推出“语音鼠标”,隐藏着百度AI的产业化范式

    罗技和百度AI这对跨界组合,正在重新定义语音输入. 4月13日,全球著名云周边设备供应商罗技推出了一款"语音鼠标",在百度AI的优先赋能下,用户点击鼠标上的语音键就能进行语音输入, ...

  7. 华为云函数调用百度ai sdk实现语音合成

    使用云函数调用百度ai开放平台的各种sdk 云函数环境为 nodejs12.13如果不会创建 参考之前的博客 本文介绍语音合成的使用 注册百度ai开放平台语音合成应用 进入百度ai开放平台控制台 找到 ...

  8. 关于文字音译的网页(基于百度AI)

    由于长春疫情学校封寝,嫌来无聊也找不到好的音译软件就自己做一个小网页玩玩,不懂的可以练练,这个主要是实现文字音译的功能,以后可以穿插在某个网站中接着使用. 实现页面(index.html): 项目部署 ...

  9. 让小程序搭上百度AI的快车

    最近在开发一款小程序:唐诗宋词鉴赏plus ,其中在诗歌的详情页,想着加上阅读的功能,但是在微信小程序的API  中不支持,所以到网上找其他的解决方案.发现百度AI下有一款产品:语音合成,正好可以使用 ...

最新文章

  1. 服务器间无密码scp
  2. 【机器视觉】 Halcon代码导出高级语言代码
  3. 学习JavaScript的24条实用建议
  4. python语言开发环境搭建_Python开发环境搭建-Go语言中文社区
  5. ef core code first from exist db
  6. linux 查看 java 进程内存占用情况
  7. WAPI网络认证原理
  8. Mixly-继电器控制直流电机
  9. PS基础操作之图像处理(三)
  10. iomega ix2 Android,Iomega Storcenter Ix2
  11. 异步编程之 Isolate
  12. 分享几个Ubuntu必装的软件
  13. S型加减速程序,C++,PLC,AGV
  14. 我的世界科学计算机,在我的世界打造一台计算机有多难?复旦大神花了一年
  15. Harbor安装(待补充)
  16. STATA 生存分析cox 等比例风险假设
  17. JavaScript计算两个日期之间相差的天数
  18. 国外计算机专业属于meng吗,【原创分享】MS与MEng项目的异同深度解析
  19. 大蟒蛇python头像_Python个性化头像
  20. python 实时画图显示

热门文章

  1. CentOS 7 使用useradd添加用户后没有家目录的解决方法
  2. 计算机控制系统硬件组成实验报告,计算机硬件的组装实验报告
  3. Acwing4366上课睡觉
  4. 计算几何——多边形和圆相交的面积
  5. JQ 中文文档 _各版本下载
  6. 珠海空管站协力保障强雷雨天气飞行安全
  7. 抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位(转载)
  8. 想知道微信名片怎么弄?其实很容易
  9. 解决:公共语言运行时检测到无效的程序
  10. Epic推出免费3D扫描应用《RealityScan》