Browse Source

修改ocr接口1027

master
ma 4 years ago
parent
commit
db6e88e765
  1. 6
      src/main/java/com/ccsens/carbasics/api/OcrController.java
  2. 4
      src/main/java/com/ccsens/carbasics/service/IOcrService.java
  3. 33
      src/main/java/com/ccsens/carbasics/service/OcrService.java
  4. 4
      src/main/resources/application.yml

6
src/main/java/com/ccsens/carbasics/api/OcrController.java

@ -29,6 +29,8 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @description:
@ -67,9 +69,9 @@ public class OcrController {
@MustLogin
@ApiOperation(value = "图片文字识别",notes = "")
@RequestMapping(value="/general/basic",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<QuestionOcrVo.CodeAndAnswer>> queryInpatient(QueryDto<List<MultipartFile>> params, Long projectId) throws Exception {
public JsonResponse<Map<String, Set<QuestionOcrVo.CodeAndAnswer>>> queryInpatient(QueryDto<List<MultipartFile>> params, Long projectId) throws Exception {
log.info("图片文字识别请求:{}", params);
List<QuestionOcrVo.CodeAndAnswer> words = ocrService.discernWords(params.getParam(), params.getUserId(),projectId);
Map<String,Set<QuestionOcrVo.CodeAndAnswer>> words = ocrService.discernWords(params.getParam(), params.getUserId(),projectId);
log.info("图片文字识别结束:{}", words);
return JsonResponse.newInstance().ok(words);
}

4
src/main/java/com/ccsens/carbasics/service/IOcrService.java

@ -9,6 +9,8 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author AUSU
@ -31,5 +33,5 @@ public interface IOcrService {
* @return 文字列表
* @throws IOException 异常
*/
List<QuestionOcrVo.CodeAndAnswer> discernWords(List<MultipartFile> param, Long userId, Long firstAidId) throws IOException, ParseException;
Map<String, Set<QuestionOcrVo.CodeAndAnswer>> discernWords(List<MultipartFile> param, Long userId, Long firstAidId) throws IOException, ParseException;
}

33
src/main/java/com/ccsens/carbasics/service/OcrService.java

@ -197,7 +197,7 @@ public class OcrService implements IOcrService {
@Override
public List<QuestionOcrVo.CodeAndAnswer> discernWords(List<MultipartFile> param, Long userId,Long projectId) throws IOException, ParseException {
public Map<String,Set<QuestionOcrVo.CodeAndAnswer>> discernWords(List<MultipartFile> param, Long userId,Long projectId) throws IOException, ParseException {
// FirstAid firstAidInfo = firstAidDao.selectByPrimaryKey(firstAidId);
FirstAid firstAidInfo = firstAidDao.queryByProjectId(projectId);
if (ObjectUtil.isNull(firstAidInfo)) {
@ -208,7 +208,7 @@ public class OcrService implements IOcrService {
List<OcrKeyword> ocrKeywordList = ocrKeywordDao.queryByHospital(firstAidInfo.getHospitalId());
log.info("规则:{}", ocrKeywordList);
if (ObjectUtil.isNull(ocrKeywordList)) {
return resultList;
return new HashMap<>();
}
SimpleDateFormat frontTime = new SimpleDateFormat("yy-MM-ddHH:mm");
String frontReg = "\\d{1,2}-\\d{1,2}-\\d{2,4}:\\d{1,2}";
@ -225,6 +225,14 @@ public class OcrService implements IOcrService {
//识别图片,放入文字集合
List<String> strList = new ArrayList<>();
Long startOcr = System.currentTimeMillis();
log.info("接收到的文件{}",param);
if (CollectionUtil.isNotEmpty(param)) {
if (param.get(param.size()-1).getOriginalFilename().equals(param.get(param.size()-2).getOriginalFilename())) {
log.info("已删除相同文件");
param.remove(param.size()-1);
}
}
for (MultipartFile file : param) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageUtil.scale(ImageIO.read(file.getInputStream()), out, 1);
@ -254,7 +262,7 @@ public class OcrService implements IOcrService {
Long ocrEnd = System.currentTimeMillis();
log.info("识图+保存文件花费时间{}",ocrEnd-startOcr);
if (CollectionUtil.isEmpty(strList)) {
return resultList;
return new HashMap<>();
}
//TODO 查询出院时间 (暂时没有根据医院id查询)
OcrKeyword dischargeTime = ocrKeywordDao.queryDischargeTime(firstAidInfo.getHospitalId());
@ -366,7 +374,8 @@ public class OcrService implements IOcrService {
long endTimestamp = 0L;
if (backMatcher.find()) {
String endTime = backMatcher.group();
endTimestamp = backTime.parse(year + endTime).getTime();
String endTimeNew = endTime.replaceAll("[[\\s-:punct:]]", "");
endTimestamp = backTime.parse(year + endTimeNew).getTime();
}
//将code与答案保存到结果集合
giveCodeAndAnswer(resultList,ocrKeyword.getId(),(byte)0,newStr,strList.get(i),endTimestamp,timeOfDischarge);
@ -388,9 +397,19 @@ public class OcrService implements IOcrService {
}
}
}
ArrayList<QuestionOcrVo.CodeAndAnswer> newList = resultList.stream().collect(Collectors
.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(QuestionOcrVo.CodeAndAnswer::getAnswer))), ArrayList::new));
return newList;
Map<String, List<QuestionOcrVo.CodeAndAnswer>> resultGroup = resultList.stream().collect(Collectors.groupingBy(QuestionOcrVo.CodeAndAnswer::getCode));
Map<String,Set<QuestionOcrVo.CodeAndAnswer>> resultSet = new HashMap<>();
for (String key : resultGroup.keySet()) {
resultSet.put(key,new HashSet<>(resultGroup.get(key)));
}
// ArrayList<QuestionOcrVo.CodeAndAnswer> newList = resultList.stream().collect(Collectors
// .collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(QuestionOcrVo.CodeAndAnswer::getAnswer))), ArrayList::new));
// Map<String, List<QuestionOcrVo.CodeAndAnswer>> collect = newList.stream().collect(Collectors.groupingBy(QuestionOcrVo.CodeAndAnswer::getCode));
return resultSet;
// return newList;
}
/**

4
src/main/resources/application.yml

@ -1,4 +1,4 @@
spring:
profiles:
active: test
include: common, util-test
active: prod
include: common, util-prod

Loading…
Cancel
Save