Commit 112a9750 authored by helinlin's avatar helinlin

对接语音数据

parent 40c750b9
...@@ -4,11 +4,11 @@ package com.yeejoin.amos.boot.module.jcs.biz.audioToText; ...@@ -4,11 +4,11 @@ package com.yeejoin.amos.boot.module.jcs.biz.audioToText;
* 语音转文字关键字查找表 * 语音转文字关键字查找表
*/ */
enum AudioKeywordType { enum AudioKeywordType {
LOCATION("location", new String[]{"地址", "位置", "地点",}), LOCATION("location", new String[]{"地址", "位置", "地点"}),
CONTACT("contact", new String[]{"联系人", "联系", "在",}), CONTACT("contact", new String[]{"联系人", "联系",}),
CONTACT_NUMBER("contactNumber", new String[]{"号码是", "号码", "手机是", "手机", "手机号", "手机号是"}), CONTACT_NUMBER("contactNumber", new String[]{"号码", "手机", "手机号", "手机号码"}),
UNIT("unit", new String[]{"事发单位", "单位", "部门"}), UNIT("unit", new String[]{"事发单位", "单位", "部门"}),
PART("part", new String[]{"重点部位", "部位",}); PART("part", new String[]{"重点部位", "部位"});
private String type; private String type;
private String[] keyword; private String[] keyword;
......
...@@ -182,6 +182,7 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener ...@@ -182,6 +182,7 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
audioRecords.forEach(audioRecord -> { audioRecords.forEach(audioRecord -> {
stringBuilder.append(",").append(audioRecord.getMessage()); stringBuilder.append(",").append(audioRecord.getMessage());
}); });
stringBuilder.append(",");
String result = stringBuilder.toString(); String result = stringBuilder.toString();
//寻找电话号码 //寻找电话号码
Pattern pattern = Pattern.compile("\\d{5,}"); Pattern pattern = Pattern.compile("\\d{5,}");
...@@ -194,13 +195,23 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener ...@@ -194,13 +195,23 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
if (messageKeyword == AudioKeywordType.CONTACT_NUMBER) continue; if (messageKeyword == AudioKeywordType.CONTACT_NUMBER) continue;
for (String keyword : messageKeyword.getKeyword()) { for (String keyword : messageKeyword.getKeyword()) {
int keywordIndex = result.indexOf(keyword); int keywordIndex = result.indexOf(keyword);
//问答式:截取关键字,从关键字的下一个[,/。]号开始截取到下下一个[,/。]号结束 // 第一种(获取keyword紧跟的内容到下一个[,/。]号的内容作为关键字)
if (keywordIndex != -1) {
int keyWordValueEndIndex = getKeyWordValueIndex(result, keywordIndex);
if (keyWordValueEndIndex == -1) continue;
String keywordValue = result.substring(keywordIndex + keyword.length(), keyWordValueEndIndex);
if (!StringUtils.isEmpty(keywordValue) && keywordValue.length() >= 4) {
audioKeyWords.getValues().get(messageKeyword.getType()).add(keywordValue);
continue;
}
}
// 第二种(获取keyword的下一个[,/。]号和下下一个[,/。]号的内容作为关键字)
if (keywordIndex != -1) { if (keywordIndex != -1) {
int keyWordValueStartIndex = getKeyWordValueIndex(result, keywordIndex); int keyWordValueStartIndex = getKeyWordValueIndex(result, keywordIndex);
if (keyWordValueStartIndex == -1) continue; if (keyWordValueStartIndex == -1) continue;
int keyWordValueEndIndex = getKeyWordValueIndex(result, keyWordValueStartIndex); int keyWordValueEndIndex = getKeyWordValueIndex(result, keyWordValueStartIndex);
if (keyWordValueEndIndex == -1) continue; if (keyWordValueEndIndex == -1) continue;
String keywordValue = result.substring(keyWordValueStartIndex, keyWordValueEndIndex); String keywordValue = result.substring(keyWordValueStartIndex + 1 < result.length() ? keyWordValueStartIndex + 1 : keyWordValueStartIndex, keyWordValueEndIndex);
if (StringUtils.isEmpty(keywordValue)) continue; if (StringUtils.isEmpty(keywordValue)) continue;
audioKeyWords.getValues().get(messageKeyword.getType()).add(keywordValue); audioKeyWords.getValues().get(messageKeyword.getType()).add(keywordValue);
} }
...@@ -217,8 +228,8 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener ...@@ -217,8 +228,8 @@ public class RealTimeSpeechTranscriberListener extends SpeechTranscriberListener
private int getKeyWordValueIndex(String text, int keywordIndex) { private int getKeyWordValueIndex(String text, int keywordIndex) {
int keywordIndexNextFlag = -1; int keywordIndexNextFlag = -1;
int keywordIndexNextFlag1 = text.indexOf(",", keywordIndex); int keywordIndexNextFlag1 = text.indexOf(",", keywordIndex + 1);
int keywordIndexNextFlag2 = text.indexOf("。", keywordIndex); int keywordIndexNextFlag2 = text.indexOf("。", keywordIndex + 1);
if (keywordIndexNextFlag1 != -1) { if (keywordIndexNextFlag1 != -1) {
if (keywordIndexNextFlag2 != -1) { if (keywordIndexNextFlag2 != -1) {
keywordIndexNextFlag = Math.min(keywordIndexNextFlag1, keywordIndexNextFlag2); keywordIndexNextFlag = Math.min(keywordIndexNextFlag1, keywordIndexNextFlag2);
......
...@@ -40,7 +40,6 @@ file.url=http://39.98.45.134:9000/ ...@@ -40,7 +40,6 @@ file.url=http://39.98.45.134:9000/
video.url=https://11.11.16.4:443/ video.url=https://11.11.16.4:443/
ifc.url=http://11.11.16.17/IFCInterface ifc.url=http://11.11.16.17/IFCInterface
ifc.call-back.localIp=11.11.16.1 ifc.call-back.localIp=11.11.16.1
...@@ -58,13 +58,23 @@ class AppNslClientToken { ...@@ -58,13 +58,23 @@ class AppNslClientToken {
} }
} }
//token过期自更新 //token过期自更新
if (getTokenTime + accessToken.getExpireTime() <= System.currentTimeMillis()) { //显示18天过期,实测两天就失效了
/*if (getTokenTime + accessToken.getExpireTime() <= System.currentTimeMillis()) {
logger.warn("token已过期,开始重新获取..."); logger.warn("token已过期,开始重新获取...");
accessToken = getAccessToken(); accessToken = getAccessToken();
getTokenTime = System.currentTimeMillis(); getTokenTime = System.currentTimeMillis();
} else { } else {
long time = getTokenTime + accessToken.getExpireTime() - System.currentTimeMillis(); long time = getTokenTime + accessToken.getExpireTime() - System.currentTimeMillis();
logger.warn("token过期还剩:" + "(" + time / (1000 * 60 * 60 * 24) + "天)"); logger.warn("token过期还剩:" + "(" + time / (1000 * 60 * 60 * 24) + "天)");
}*/
//一天更新一次
if (System.currentTimeMillis() - getTokenTime > (1000 * 60 * 60)) {
logger.warn("token已过期,开始重新获取...");
accessToken = getAccessToken();
getTokenTime = System.currentTimeMillis();
} else {
long time = System.currentTimeMillis() - getTokenTime;
logger.warn("token过期还剩:" + "(" + time / (1000 * 60 * 60 * 24) + "天)");
} }
return accessToken; return accessToken;
} }
...@@ -72,7 +82,6 @@ class AppNslClientToken { ...@@ -72,7 +82,6 @@ class AppNslClientToken {
/** /**
* 获取访问Token,包含token和过期时间(2021-11-30测试Token过期时间为18天) * 获取访问Token,包含token和过期时间(2021-11-30测试Token过期时间为18天)
* 避免多次获取可能导致已进行的任务token失效 * 避免多次获取可能导致已进行的任务token失效
*
* @return token 访问token * @return token 访问token
*/ */
private static AccessToken getAccessToken() { private static AccessToken getAccessToken() {
......
...@@ -74,6 +74,7 @@ public class AppSpeechTranscriber { ...@@ -74,6 +74,7 @@ public class AppSpeechTranscriber {
idleTime = 0; idleTime = 0;
logger.warn("收到数据包:" + b.length); logger.warn("收到数据包:" + b.length);
//去掉前12个字节的rtp包头,后面的332字节为语音数据 //去掉前12个字节的rtp包头,后面的332字节为语音数据
//4秒未再次调用此方法,阿里云会抛出超时异常
transcriber.send(Arrays.copyOfRange(b, 12, b.length)); transcriber.send(Arrays.copyOfRange(b, 12, b.length));
} }
} catch (Exception e) { } catch (Exception e) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment