改用华为语音识别服务

This commit is contained in:
joylink_zhangsai 2021-02-05 18:06:11 +08:00
parent 7c259ce136
commit c977e4c90d
3 changed files with 50 additions and 5 deletions

View File

@ -80,7 +80,7 @@ public interface IVoiceService {
os.close(); os.close();
} }
if (saveFile != null) { if (saveFile != null) {
saveFile.delete(); // saveFile.delete();
} }
} }
} }
@ -106,6 +106,11 @@ public interface IVoiceService {
*/ */
String synthesis(String message, String per); String synthesis(String message, String per);
/**
* 华为语音识别
*/
VoiceRecognitionResult huaweiVoiceRecognition(MultipartFile file, String lang);
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor

View File

@ -3,6 +3,12 @@ package club.joylink.rtss.services.voice.baidu;
import club.joylink.rtss.exception.BusinessExceptionAssertEnum; import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.services.IVoiceService; import club.joylink.rtss.services.IVoiceService;
import club.joylink.rtss.vo.client.VoiceRecognitionResult; import club.joylink.rtss.vo.client.VoiceRecognitionResult;
import com.huawei.sis.bean.AuthInfo;
import com.huawei.sis.bean.SisConfig;
import com.huawei.sis.bean.request.AsrCustomShortRequest;
import com.huawei.sis.bean.response.AsrCustomShortResponse;
import com.huawei.sis.client.AsrCustomizationClient;
import com.huawei.sis.exception.SisException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -12,11 +18,20 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Base64;
@Slf4j @Slf4j
@Service("baiDuVoiceService") @Service("baiDuVoiceService")
public class VoiceServiceImpl implements IVoiceService { public class VoiceServiceImpl implements IVoiceService {
/**
* 华为语音识别配置
*/
private final String ak = "YDUXTXRYGAHGPHAIXZCU";
private final String sk = "Kcbm3sTDCYEou8kGeAhKxfBkgWybIn6IjJyGBX3p";
private final String region = "cn-north-4";
private final String projectId = "0aada8176180f28c2f34c0196f5394e8";
@Autowired @Autowired
private AsrService asrService; private AsrService asrService;
@ -50,4 +65,30 @@ public class VoiceServiceImpl implements IVoiceService {
} }
} }
@Override
public VoiceRecognitionResult huaweiVoiceRecognition(MultipartFile file, String lang) {
String filePath;
try {
filePath = IVoiceService.handleAndSaveFile(file);
} catch (IOException e) {
throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception("语音文件上传失败", e);
}
AuthInfo authInfo = new AuthInfo(ak, sk, region, projectId);
SisConfig sisConfig = new SisConfig();
AsrCustomizationClient client = new AsrCustomizationClient(authInfo, sisConfig);
String data;
try {
data = Base64.getEncoder().encodeToString(file.getBytes());
} catch (IOException e) {
throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception("语音文件编码失败", e);
}
try {
AsrCustomShortRequest request = new AsrCustomShortRequest(data, "pcm16k16bit", "chinese_16k_common");
AsrCustomShortResponse response = client.getAsrShortResponse(request);
return new VoiceRecognitionResult(filePath, response.getResult().getText());
} catch (SisException e) {
throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception("语音识别失败", e);
}
}
} }

View File

@ -1,16 +1,15 @@
package club.joylink.rtss.simulation.cbtc.conversation; package club.joylink.rtss.simulation.cbtc.conversation;
import club.joylink.rtss.services.IVoiceService;
import club.joylink.rtss.simulation.cbtc.GroupSimulationCache; import club.joylink.rtss.simulation.cbtc.GroupSimulationCache;
import club.joylink.rtss.simulation.cbtc.Simulation; import club.joylink.rtss.simulation.cbtc.Simulation;
import club.joylink.rtss.simulation.cbtc.data.SimulationDataRepository; import club.joylink.rtss.simulation.cbtc.competition.ScriptExecuteService;
import club.joylink.rtss.simulation.cbtc.data.vo.ConversationVO; import club.joylink.rtss.simulation.cbtc.data.vo.ConversationVO;
import club.joylink.rtss.simulation.cbtc.event.*; import club.joylink.rtss.simulation.cbtc.event.*;
import club.joylink.rtss.simulation.cbtc.exception.SimulationException; import club.joylink.rtss.simulation.cbtc.exception.SimulationException;
import club.joylink.rtss.simulation.cbtc.exception.SimulationExceptionType; import club.joylink.rtss.simulation.cbtc.exception.SimulationExceptionType;
import club.joylink.rtss.simulation.cbtc.member.SimulationMember; import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
import club.joylink.rtss.simulation.cbtc.member.SimulationUser; import club.joylink.rtss.simulation.cbtc.member.SimulationUser;
import club.joylink.rtss.services.IVoiceService;
import club.joylink.rtss.simulation.cbtc.competition.ScriptExecuteService;
import club.joylink.rtss.vo.UserVO; import club.joylink.rtss.vo.UserVO;
import club.joylink.rtss.vo.client.VoiceRecognitionResult; import club.joylink.rtss.vo.client.VoiceRecognitionResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -256,7 +255,7 @@ public class ConversationManagerService {
Simulation simulation = this.groupSimulationCache.getSimulationByGroup(group); Simulation simulation = this.groupSimulationCache.getSimulationByGroup(group);
Conversation conversation = simulation.getSimulationConversationById(conversationId); Conversation conversation = simulation.getSimulationConversationById(conversationId);
SimulationMember member = simulation.getSimulationMemberByUserId(userVO.getId()); SimulationMember member = simulation.getSimulationMemberByUserId(userVO.getId());
VoiceRecognitionResult recognitionResult = this.iVoiceService.voiceRecognition(file, ""); VoiceRecognitionResult recognitionResult = this.iVoiceService.huaweiVoiceRecognition(file, "");
String upperCaseResult = recognitionResult.getResult().toUpperCase(); String upperCaseResult = recognitionResult.getResult().toUpperCase();
String handledContent = this.simulationVoiceHandler.handle(upperCaseResult); String handledContent = this.simulationVoiceHandler.handle(upperCaseResult);
this.chat(simulation, conversation, member, handledContent, recognitionResult.getFilePath()); this.chat(simulation, conversation, member, handledContent, recognitionResult.getFilePath());