一、背景

客服的通话录音需要转成文字,团队决定使用科大讯飞的语音转文字服务,使用的是 SDK 的方式进行对接。

二、遇到的坑

1、关于 SDK 集成的坑

问题:该SDK的集成方式只有一种,即提供一个 jar 包供下载,不提供 maven 仓库管理,不提供源码给予定制。

2、关于强制读取配置文件 的坑

下图是规定的名为 config.properties 的配置文件。

在类文件 LfasrClientImp 中,有一个静态代码块,会强制读取名为config.properties 的配置文件,然后校验该配置文件中的属性是否合法,这个class文件是我们重点调整的对象。

而且在初始化的过程中,只要有不符合初始化要求的逻辑,则会给该类中的静态私有变量 private static String err_msg = null 赋予错误信息。

该错误信息很关键,因为这个类是整个 SDK 的精华,即客户端的精华,所有的操作都需要先创建这个类的对象进行操作,然而当上文提到的私有变量 error_msg 不为 null 时,构造函数直接报错,所以导致无法创建对象,整个业务流程就没法走下去,见下图的构造方法。

3、关于日志的坑

① 原版SDK的源码,强制使用log4j,所以对于少数不使用 log4j 的项目,需要进行调整,附上报错信息:

log4j:WARN No appenders could be found for logger (com.jet.service.XfyunService).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

② 原版 SDK 会打印很多的日志,比如有一些对音频进行处理的日志,部分日志信息是我们不需要的。

4、关于文件上传的坑

语音文件上传的模式只有一种,即给定一个本地的音频路径。

而如果你使用过七牛云的 SDK 你就深有体会讯飞的这个SDK 是有多烂,七牛云的上传文件的方法,你可以提供文件的本地路径,也支持流上传,当然也支持远程文件地址的方式上传。

三、埋坑史

1、 解决本地jar包的引入

cn.xfyun raasr 2.0.0.1006system${project.basedir}/src/main/resources/lib/lfasr-sdk-client-2.0.0.1006.jar

打jar包的时候把本地的 jar 包也打进去:

org.springframework.boot spring-boot-maven-plugin com.Jet.jetApplicationtruetrue

2、解决配置文件的读取问题

依着他给个指定的配置文件 config.properties,但是还是按照项目里的一样,区分开发、测试和生产配置文件,然后强制读取本项目的配置,去强制覆盖 LfasrClientImp 类中的变量。

3、解决 LfasrClientImp 类中变量私有化的问题

为什么关注该类中的静态私有变量呢,因为上文中提到有个私有的变量存储错误信息,我们需要调整这个错误信息。

而对于 LfasrClientImp 类中的静态私有属性,我们可以通过反射机制强制刷新属性。

Class lfasrClientImpClass = LfasrClientImp.class;Field field = lfasrClientImpClass.getDeclaredField("SERV_APP_ID_VAL");field.setAccessible(true);field.set(lfasrClientImpClass, "testAppId");

4、解决日志的坑

讯飞默认使用的是 log4j,如果很不幸你的项目使用的不是 log4j,要么你做出妥协,要么,就出大绝招:把讯飞 SDK 的 class 文件反编译出来,然后自己改源码,然后两条路可以走,一是再编译成 jar 包,二是直接作为一个 module 来使用。

但是还是建议调整日志框架为 log4j,不要动 SDK,防止版本更新。

5、解决上传接口的坑

上文提到了关于上传的方法,只有一个,即提供一个音频文件的本地地址,然后传给上传的方法。

what?难道我的音频文件不能是远程服务器上的?对于这种情况,我们需要手动进行封装,如果不想封装得太深。

简单的思路就是:下载文件 -> 保存成临时文件 -> 调用方法

public static File downLoadFiles(String Url) { try { InputStream in = new URL(Url).openConnection().getInputStream(); if (in == null) return null; String fileName = storePath + "/" + Url.substring(Url.lastIndexOf("/")); File file = new File(fileName); OutputStream os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = in.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } in.close(); return file; } catch (IOException e) { log.error("inputStream zhuan file 异常

讯飞语音转文字_踩坑记:讯飞语音转文字SDK的坑相关推荐

  1. 腾讯视频免费下载安装_怎样下载腾讯视频里的视频

    本文小编给大家分享的是腾讯视频免费下载安装_怎样下载腾讯视频里的视频.腾讯视频放器是腾讯视频旗下的视频客户端产品,支持丰富内容的在线点播及电视台直播.相比其它的视频客户端,腾讯视频的多维度筛选,大数据 ...

  2. 腾讯视频电脑版下载_怎么样下载腾讯视频

    软件是否好用,还得大家下载腾讯视频安装才知道.本文分享腾讯视频电脑版下载_怎么样下载腾讯视频.腾讯视频播放器不管是在界面设计.还是在功能操作使用.启动播放速度.视频内容数量.画面品质等方面均得到了用户 ...

  3. 真人语音朗读软件_才知道,手机还自带文字转语音功能,一键按下便可实现,网友:赞...

    下面我们来说说关于手机,电脑上的文字转语音方法,如果你也感兴趣的,那就一起来看看吧! 一.手机自带 1.华为手机 其实华为手机就自带了文字转语音功能,只要将手机打开之后,点击[设置]-[智能辅助]-[ ...

  4. asr语音转写_【AI模型测试】语音转文字ASR的测试方法学习

    最近这几天有相关的语音转文字的测试,主要是针对几个供应商提供的接口,然后对识别结果进行校对和评估,来确认哪个供应商提供的品质和性价比等更好. 然后自学了下语音转文字的一些测试方法,记录下来,方便使用. ...

  5. 微信语音技术原理_干货 | 2 分钟论文:语音生成表情包背后的技术原理

    雷锋网AI 科技评论出品系列短视频< 2 分钟论文 >,带大家用碎片时间阅览前沿技术,了解 AI 领域的最新研究成果. 来源 / Two Minute Papers 翻译 / 郭维 校对  ...

  6. 高德地图哪个语音包最好_高德地图app怎么录制语音包?高德地图将自己的语音用作导航语音包的方法介绍...

    高德地图是一款中国专业的手机地图,拥有全面的地点信息,特色语音导航.智能路线规划,是我们常用的一款移动地图导航工具,用高德地图语音导航,可以听到很多明星的导航语音播报,当然你也可以自己录制语音包.那么 ...

  7. asr语音转写_搜狗智能录音笔C1正式上市 语音转文字准确率达95%

    中新网3月19日电 3月18日,搜狗旗下全新智能硬件--搜狗智能录音笔C1在搜狗商城.京东等平台正式发售.在当天的产品沟通会上,搜狗公司CTO杨洪涛表示,搜狗智能录音笔C1集成了搜狗的核心AI技术,能 ...

  8. 华为语音解锁设置_今天才知道,华为自带文字转语音黑科技,1键按下这里即可开启...

    原标题:今天才知道,华为自带文字转语音黑科技,1键按下这里即可开启 大家都知道我们的华为手机有很多黑科技功能,但是自带的文字转语音黑科技功能,你知道吗?今天一个在华为工作的朋友,就给我推荐了这个功能, ...

  9. python语音输入转化成文字_利用百度语音识别接口将语音转换成文字教程

    importbase64importjsonimportosimporttimeimportshutilimportrequestsclassBaiduVoiceToTxt():#初始化函数 def ...

  10. 华为语音解锁设置_华为手机该怎么实现语音翻译?其实超级简单,这里教你

    语音转文字是我们在工作中经常会进行的一种操作,在办公聊天中,为了方便,我们会语音进行聊天,但是,如果谈话中有一些重要的内容需要记录下来,就需要借助软件来做语音文件的转换,那么该如何进行操作呢. 1. ...

最新文章

  1. [置顶] 单例模式lua实现
  2. mysql session 最大值_session 存储最大值
  3. Hadoop集群系列(目录)
  4. node执行cmd命令方法
  5. 生鲜配送小程序源码_生鲜配送小程序开发
  6. qpython获取手机gps_基于Python获取照片的GPS位置信息
  7. php explode 循环,PHP explode 切割字串 快速取得最後一個值
  8. C++ 的 RTTI
  9. python载入图像
  10. 2022,火山引擎的云上第一“子”,为何是视频?
  11. 计算机一级报名照片是几寸的,一级建造师报名照片要几寸的
  12. 写给大家看的量子力学——量子通信、量子隐形传输技术简介
  13. 星空特效HTML代码,HTML5特效库 HTML5+JS全屏星空特效源码
  14. 树莓派4B通过Python读取MLX90614温度
  15. office2019选框虚线_手把手教你分析PS2019里怎么画虚线
  16. ESP32C3 CORE+PIO+lvgl显示
  17. 基于pandas实现K折交叉验证数据集划分
  18. Django分布式路由
  19. IDEA封神榜大语言模型二郎神系列Erlangshen-Ubert-110M-Chinese使用
  20. 野蛮时代SLG数据分析报告

热门文章

  1. 计算机操作系统(第四版)课后习题答案西电版
  2. coreseek mysql_coreseek,php,mysql全文检索部署(一)
  3. Socket网络编程——(一)
  4. 推荐下载使用:功能强大的光盘刻录软件NERO 9.0中文版(最新官方原版+有效序列号)(转)...
  5. 基于springboot2.0.6版本的TX-LCN分布式事务搭建说明
  6. 【工具】VirtualBox装VBoxGuestAdditions增强工具失败解决方法和共享文件夹设置
  7. dnf助手服务器内部出错,地下城与勇士TGP的DNF助手异常解决办法 TGP-DNF助手补丁不适配怎么办...
  8. oracle 随机取值函数,随机数函数大全
  9. JVisualVM监控
  10. 软件测试 -- 入门 4 软件测试原则