<整个场景的语音校验接口>小改动

This commit is contained in:
joylink_zhangsai 2021-05-06 15:02:14 +08:00
parent 16c88d6357
commit 1660113cb3
8 changed files with 36 additions and 28 deletions

View File

@ -129,13 +129,13 @@ public class CompetitionPracticalController {
@ApiOperation("语音录制校验") @ApiOperation("语音录制校验")
@PostMapping("/voice/record/check/{recordId}") @PostMapping("/voice/record/check/{recordId}")
public VoiceErrorSetVO voiceRecordCheck(@PathVariable Long recordId, @RequestBody CommandPublishStatisticVO commandPublishStatisticVO) { public VoiceErrorVO voiceRecordCheck(@PathVariable Long recordId, @RequestBody CommandPublishStatisticVO commandPublishStatisticVO) {
return iCompetitionPracticalService.voiceRecordCheck(recordId, commandPublishStatisticVO); return iCompetitionPracticalService.voiceRecordCheck(recordId, commandPublishStatisticVO);
} }
@ApiOperation("语音录制校验(整个场景)") @ApiOperation("语音录制校验(整个场景)")
@GetMapping("/voice/record/check/{competitionId}/{userId}") @GetMapping("/voice/record/check/{competitionId}/{userId}")
public List<VoiceErrorSetVO> voiceRecordCheck(@PathVariable Long competitionId, @PathVariable Long userId) { public List<VoiceErrorVO> voiceRecordCheck(@PathVariable Long competitionId, @PathVariable Long userId) {
return iCompetitionPracticalService.voiceRecordCheck(competitionId, userId); return iCompetitionPracticalService.voiceRecordCheck(competitionId, userId);
} }

View File

@ -6,7 +6,7 @@ import club.joylink.rtss.simulation.cbtc.conversation.SimulationVoiceHandler;
import club.joylink.rtss.vo.client.PageQueryVO; import club.joylink.rtss.vo.client.PageQueryVO;
import club.joylink.rtss.vo.client.PageVO; import club.joylink.rtss.vo.client.PageVO;
import club.joylink.rtss.vo.client.VoiceRecognitionResult; import club.joylink.rtss.vo.client.VoiceRecognitionResult;
import club.joylink.rtss.vo.client.competition.VoiceErrorSetVO; import club.joylink.rtss.vo.client.competition.VoiceErrorVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -41,7 +41,7 @@ public class VoiceController {
@ApiOperation("查询语音识别错误集") @ApiOperation("查询语音识别错误集")
@GetMapping("/errorSet/paged") @GetMapping("/errorSet/paged")
public PageVO<VoiceErrorSetVO> pagedQueryErrorSet(PageQueryVO queryVO) { public PageVO<VoiceErrorVO> pagedQueryErrorSet(PageQueryVO queryVO) {
return iVoiceTrainingService.pagedQueryErrorSet(queryVO); return iVoiceTrainingService.pagedQueryErrorSet(queryVO);
} }

View File

@ -491,7 +491,7 @@ public class CompetitionPracticalService implements ICompetitionPracticalService
} }
@Override @Override
public VoiceErrorSetVO voiceRecordCheck(Long recordId, CommandPublishStatisticVO commandPublishStatisticVO) { public VoiceErrorVO voiceRecordCheck(Long recordId, CommandPublishStatisticVO commandPublishStatisticVO) {
String actionContent = commandPublishStatisticVO.getActionVO().getContent(); String actionContent = commandPublishStatisticVO.getActionVO().getContent();
List<String> keyWords = commandPublishStatisticVO.getKeyWords(); List<String> keyWords = commandPublishStatisticVO.getKeyWords();
CompetitionVoiceRecord record = getVoiceRecordEntity(recordId); CompetitionVoiceRecord record = getVoiceRecordEntity(recordId);
@ -499,7 +499,7 @@ public class CompetitionPracticalService implements ICompetitionPracticalService
} }
@Override @Override
public List<VoiceErrorSetVO> voiceRecordCheck(Long competitionId, Long userId) { public List<VoiceErrorVO> voiceRecordCheck(Long competitionId, Long userId) {
CompetitionWithBLOBs competitionWithBLOBs = getEntity(competitionId); CompetitionWithBLOBs competitionWithBLOBs = getEntity(competitionId);
CompetitionVO competitionVO = new CompetitionVO(competitionWithBLOBs); CompetitionVO competitionVO = new CompetitionVO(competitionWithBLOBs);
ScriptVO scriptVO = iScriptService.getDetailById(competitionWithBLOBs.getScriptId()); ScriptVO scriptVO = iScriptService.getDetailById(competitionWithBLOBs.getScriptId());
@ -507,7 +507,9 @@ public class CompetitionPracticalService implements ICompetitionPracticalService
return records.stream().map(record -> { return records.stream().map(record -> {
List<String> keyWords = competitionVO.getCmdPubStaVO(record.getCommandEvaluationRuleId()).getKeyWords(); List<String> keyWords = competitionVO.getCmdPubStaVO(record.getCommandEvaluationRuleId()).getKeyWords();
String actionContent = scriptVO.getActionById(record.getActionId()).getContent(); String actionContent = scriptVO.getActionById(record.getActionId()).getContent();
return voiceRecordCheck(record, actionContent, keyWords); VoiceErrorVO errorVO = voiceRecordCheck(record, actionContent, keyWords);
errorVO.setRecordId(record.getId());
return errorVO;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
@ -534,7 +536,7 @@ public class CompetitionPracticalService implements ICompetitionPracticalService
return competitionVoiceRecordDAO.selectByExample(example); return competitionVoiceRecordDAO.selectByExample(example);
} }
private VoiceErrorSetVO voiceRecordCheck(CompetitionVoiceRecord record, String actionContent, List<String> keyWords) { private VoiceErrorVO voiceRecordCheck(CompetitionVoiceRecord record, String actionContent, List<String> keyWords) {
String filePath = record.getFilePath(); String filePath = record.getFilePath();
String uri = IVoiceService.FileUriPrefix + filePath; String uri = IVoiceService.FileUriPrefix + filePath;
byte[] bytes = restTemplate.getForObject(uri, byte[].class); byte[] bytes = restTemplate.getForObject(uri, byte[].class);
@ -543,8 +545,8 @@ public class CompetitionPracticalService implements ICompetitionPracticalService
String replacedContent = competitionAndScriptManager.pronunciationCheckAndReplace(result.getResult(), actionContent, errorPNCT); String replacedContent = competitionAndScriptManager.pronunciationCheckAndReplace(result.getResult(), actionContent, errorPNCT);
List<String> errorKW = new ArrayList<>(); List<String> errorKW = new ArrayList<>();
competitionAndScriptManager.keyWordsCheck(replacedContent, keyWords, errorKW); competitionAndScriptManager.keyWordsCheck(replacedContent, keyWords, errorKW);
return new VoiceErrorSetVO(null, record.getUserId(), record.getCompetitionId(), record.getCommandEvaluationRuleId(), record.getActionId(), actionContent, return new VoiceErrorVO(null, record.getUserId(), record.getCompetitionId(), record.getCommandEvaluationRuleId(), record.getActionId(), actionContent,
replacedContent, errorKW, errorPNCT, filePath); replacedContent, errorKW, errorPNCT, filePath, record.getId());
} }
private CompetitionVoiceRecord getVoiceRecordEntity(Long id) { private CompetitionVoiceRecord getVoiceRecordEntity(Long id) {

View File

@ -126,9 +126,9 @@ public interface ICompetitionPracticalService {
CompetitionVoiceRecordVO updateVoiceRecord(Long recordId, MultipartFile file, UserVO user); CompetitionVoiceRecordVO updateVoiceRecord(Long recordId, MultipartFile file, UserVO user);
VoiceErrorSetVO voiceRecordCheck(Long recordId, CommandPublishStatisticVO commandPublishStatisticVO); VoiceErrorVO voiceRecordCheck(Long recordId, CommandPublishStatisticVO commandPublishStatisticVO);
List<VoiceErrorSetVO> voiceRecordCheck(Long competitionId, Long userId); List<VoiceErrorVO> voiceRecordCheck(Long competitionId, Long userId);
List<CompetitionVoiceRecordVO> queryVoiceRecords(Long userId, Long competitionId); List<CompetitionVoiceRecordVO> queryVoiceRecords(Long userId, Long competitionId);

View File

@ -3,7 +3,7 @@ package club.joylink.rtss.services.voice;
import club.joylink.rtss.vo.client.PageQueryVO; import club.joylink.rtss.vo.client.PageQueryVO;
import club.joylink.rtss.vo.client.PageVO; import club.joylink.rtss.vo.client.PageVO;
import club.joylink.rtss.vo.client.VoiceRecognitionResult; import club.joylink.rtss.vo.client.VoiceRecognitionResult;
import club.joylink.rtss.vo.client.competition.VoiceErrorSetVO; import club.joylink.rtss.vo.client.competition.VoiceErrorVO;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
/** /**
@ -11,7 +11,7 @@ import org.springframework.web.multipart.MultipartFile;
*/ */
public interface IVoiceTrainingService { public interface IVoiceTrainingService {
PageVO<VoiceErrorSetVO> pagedQueryErrorSet(PageQueryVO queryVO); PageVO<VoiceErrorVO> pagedQueryErrorSet(PageQueryVO queryVO);
VoiceRecognitionResult voiceRecognition(MultipartFile file); VoiceRecognitionResult voiceRecognition(MultipartFile file);

View File

@ -7,7 +7,7 @@ import club.joylink.rtss.simulation.cbtc.conversation.SimulationVoiceHandler;
import club.joylink.rtss.vo.client.PageQueryVO; import club.joylink.rtss.vo.client.PageQueryVO;
import club.joylink.rtss.vo.client.PageVO; import club.joylink.rtss.vo.client.PageVO;
import club.joylink.rtss.vo.client.VoiceRecognitionResult; import club.joylink.rtss.vo.client.VoiceRecognitionResult;
import club.joylink.rtss.vo.client.competition.VoiceErrorSetVO; import club.joylink.rtss.vo.client.competition.VoiceErrorVO;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -33,10 +33,10 @@ public class VoiceTrainingService implements IVoiceTrainingService {
@Override @Override
public PageVO<VoiceErrorSetVO> pagedQueryErrorSet(PageQueryVO queryVO) { public PageVO<VoiceErrorVO> pagedQueryErrorSet(PageQueryVO queryVO) {
Page<Object> page = PageHelper.startPage(queryVO.getPageNum(), queryVO.getPageSize()); Page<Object> page = PageHelper.startPage(queryVO.getPageNum(), queryVO.getPageSize());
List<CompetitionErrorSet> sets = competitionErrorSetDAO.selectByExample(null); List<CompetitionErrorSet> sets = competitionErrorSetDAO.selectByExample(null);
List<VoiceErrorSetVO> list = sets.stream().map(VoiceErrorSetVO::new).collect(Collectors.toList()); List<VoiceErrorVO> list = sets.stream().map(VoiceErrorVO::new).collect(Collectors.toList());
return PageVO.convert(page, list); return PageVO.convert(page, list);
} }

View File

@ -278,14 +278,14 @@ public class CompetitionAndScriptManager {
//发音校验 //发音校验
List<String> errorPNCT = new ArrayList<>(); //错误的发音 List<String> errorPNCT = new ArrayList<>(); //错误的发音
String replacedContent = pronunciationCheckAndReplace(conversationMessage.getContent(), action.getContent(), errorPNCT); String replacedContent = pronunciationCheckAndReplace(conversationMessage.getContent(), action.getContent(), errorPNCT);
boolean match = CollectionUtils.isEmpty(errorPNCT); //发音正确 boolean pronunciationRight = CollectionUtils.isEmpty(errorPNCT); //发音正确
//关键词校验 //关键词校验
List<String> errorKW = new ArrayList<>(); //错误的关键词 List<String> errorKW = new ArrayList<>(); //错误的关键词
CommandPublishStatisticBO statistic = competition.findCommandPublishStatistic(action.getId()); CommandPublishStatisticBO statistic = competition.findCommandPublishStatistic(action.getId());
boolean keyWordsRight = keyWordsCheck(replacedContent, statistic.getKeyWords(), errorKW); //关键词正确 boolean keyWordsRight = keyWordsCheck(replacedContent, statistic.getKeyWords(), errorKW); //关键词正确
match = match && keyWordsRight; pronunciationRight = pronunciationRight && keyWordsRight;
if (match) { if (pronunciationRight) {
action.finish(); action.finish();
applicationContext.publishEvent(new SimulationScriptActionFinishEvent(this, simulation, action)); applicationContext.publishEvent(new SimulationScriptActionFinishEvent(this, simulation, action));
CommandPublishStatisticBO commandPublishStatistic = competition.findCommandPublishStatistic(action.getId()); CommandPublishStatisticBO commandPublishStatistic = competition.findCommandPublishStatistic(action.getId());

View File

@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
@ -13,7 +14,7 @@ import java.util.List;
@Getter @Getter
@NoArgsConstructor @NoArgsConstructor
public class VoiceErrorSetVO { public class VoiceErrorVO {
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
private Long id; private Long id;
@ -27,17 +28,21 @@ public class VoiceErrorSetVO {
private String actionId; private String actionId;
private String right = "道岔试验"; private String right;
private String result = "刀叉试验"; private String result;
private List<String> keyWords = List.of("道岔"); private List<String> keyWords;
private List<String> tripNumbers = List.of("2027"); private List<String> tripNumbers;
private String filePath; private String filePath;
public VoiceErrorSetVO(CompetitionErrorSet set) { @Setter
@JsonSerialize(using = ToStringSerializer.class)
private Long recordId;
public VoiceErrorVO(CompetitionErrorSet set) {
this.id = set.getId(); this.id = set.getId();
this.userId = set.getUserId(); this.userId = set.getUserId();
this.competitionId = set.getId(); this.competitionId = set.getId();
@ -52,8 +57,8 @@ public class VoiceErrorSetVO {
this.filePath = set.getFilePath(); this.filePath = set.getFilePath();
} }
public VoiceErrorSetVO(Long id, Long userId, Long competitionId, Long cmdEvaRuleId, String actionId, String right, public VoiceErrorVO(Long id, Long userId, Long competitionId, Long cmdEvaRuleId, String actionId, String right,
String result, List<String> keyWords, List<String> tripNumbers, String filePath) { String result, List<String> keyWords, List<String> tripNumbers, String filePath, Long recordId) {
this.id = id; this.id = id;
this.userId = userId; this.userId = userId;
this.competitionId = competitionId; this.competitionId = competitionId;
@ -64,5 +69,6 @@ public class VoiceErrorSetVO {
this.keyWords = keyWords; this.keyWords = keyWords;
this.tripNumbers = tripNumbers; this.tripNumbers = tripNumbers;
this.filePath = filePath; this.filePath = filePath;
this.recordId = recordId;
} }
} }