Commit d083e445 authored by helinlin's avatar helinlin

添加阿里云音频识别接口

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