Commit d083e445 authored by helinlin's avatar helinlin

添加阿里云音频识别接口

parent 19d62586
......@@ -2,12 +2,15 @@ package com.yeejoin.amos.boot.module.jcs.biz.audioToText;
import com.alibaba.nls.client.protocol.asr.SpeechTranscriberResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.util.StringUtils;
import org.typroject.tyboot.component.emq.EmqKeeper;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
......@@ -23,7 +26,12 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
private final List<AudioRecord> audioRecords;
private final AudioKeyWord audioKeyWords;
public SpeechTranscriberListener(String myNumber, String typeNumber, EmqKeeper emqKeeper, List<AudioRecord> audioRecords, AudioKeyWord audioKeyWords) {
public SpeechTranscriberListener(
String myNumber,
String typeNumber,
EmqKeeper emqKeeper,
List<AudioRecord> audioRecords,
AudioKeyWord audioKeyWords) {
this.myNumber = myNumber;
this.typeNumber = typeNumber;
this.emqKeeper = emqKeeper;
......@@ -107,6 +115,12 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
+ ", name: " + response.getName()
+ ", status: " + response.getStatus()
+ ",result:" + response.getTransSentenceText());
try {
emqKeeper.getMqttClient().publish(MessageType.RECORD.getName() + "/" + myNumber, "".getBytes(), 2, true);
emqKeeper.getMqttClient().publish(MessageType.KEYWORD.getName() + "/" + myNumber, "".getBytes(), 2, true);
} catch (MqttException e) {
e.printStackTrace();
}
}
/**
......@@ -154,10 +168,8 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
public void sendRecord(AudioRecord audioRecord) {
try {
ObjectMapper objectMapper = new ObjectMapper();
emqKeeper.getMqttClient().publish(
MessageType.RECORD.getName() + "/" + myNumber,
objectMapper.writeValueAsString(audioRecord).getBytes(),
1, true);
byte[] bytes = objectMapper.writeValueAsString(audioRecord).getBytes();
emqKeeper.getMqttClient().publish(MessageType.RECORD.getName() + "/" + myNumber, bytes, 2, false);
} catch (Exception e) {
e.printStackTrace();
logger.error("发送音频识别结果消息异常,原因:" + e.getMessage());
......@@ -169,6 +181,7 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
*/
@Async
public void sendKeyword() {
audioKeyWords.getValues().values().forEach(Set::clear);
try {
StringBuilder stringBuilder = new StringBuilder();
audioRecords.forEach(audioRecord -> {
......@@ -176,7 +189,7 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
});
String result = stringBuilder.toString();
//寻找电话号码
Pattern pattern = Pattern.compile("\\d{5,}\n");
Pattern pattern = Pattern.compile("\\d{5,}");
Matcher matcher = pattern.matcher(result);
while (matcher.find()) {
audioKeyWords.getValues().get(MessageKeywords.CONTACT_NUMBER.getType()).add(matcher.group());
......@@ -186,28 +199,45 @@ public class SpeechTranscriberListener extends com.alibaba.nls.client.protocol.a
if (messageKeyword == MessageKeywords.CONTACT_NUMBER) continue;
for (String keyword : messageKeyword.getKeyword()) {
int keywordIndex = result.indexOf(keyword);
//问答式:截取关键字,从关键字的下一个[,]号开始截取到下下一个[,]号结束
//问答式:截取关键字,从关键字的下一个[,/。]号开始截取到下下一个[,/。]号结束
if (keywordIndex != -1) {
int keywordIndexNextFlag = result.indexOf(",", keywordIndex);
if (keywordIndexNextFlag == -1) continue;
int keywordIndexNextNextFlag = result.indexOf(",", keywordIndexNextFlag);
if (keywordIndexNextNextFlag == -1) continue;
String keywordValue = result.substring(keywordIndexNextFlag, keywordIndexNextNextFlag);
int keyWordValueStartIndex = getKeyWordValueIndex(result, keywordIndex);
if (keyWordValueStartIndex == -1) continue;
int keyWordValueEndIndex = getKeyWordValueIndex(result, keyWordValueStartIndex);
if (keyWordValueEndIndex == -1) continue;
String keywordValue = result.substring(keyWordValueStartIndex, keyWordValueEndIndex);
if (StringUtils.isEmpty(keywordValue)) continue;
audioKeyWords.getValues().get(messageKeyword.getType()).add(keywordValue);
}
}
}
ObjectMapper objectMapper = new ObjectMapper();
byte[] bytes = objectMapper.writeValueAsString(audioKeyWords.getValues()).getBytes();
emqKeeper.getMqttClient().publish(
MessageType.KEYWORD.getName() + "/" + myNumber,
bytes,
1, true);
emqKeeper.getMqttClient().publish(MessageType.KEYWORD.getName() + "/" + myNumber, bytes, 2, false);
} catch (Exception e) {
e.printStackTrace();
logger.error("发送音频关键字消息异常,原因:" + e.getMessage());
}
}
private int getKeyWordValueIndex(String text, int keywordIndex) {
int keywordIndexNextFlag = -1;
int keywordIndexNextFlag1 = text.indexOf(",", keywordIndex);
int keywordIndexNextFlag2 = text.indexOf("。", keywordIndex);
if (keywordIndexNextFlag1 != -1) {
if (keywordIndexNextFlag2 != -1) {
keywordIndexNextFlag = Math.min(keywordIndexNextFlag1, keywordIndexNextFlag2);
} else {
keywordIndexNextFlag = keywordIndexNextFlag1;
}
} else {
if (keywordIndexNextFlag2 != -1) {
keywordIndexNextFlag = keywordIndexNextFlag2;
}
}
return keywordIndexNextFlag;
}
}
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