diff --git a/enlish-service/debug_roi.jpg b/enlish-service/debug_roi.jpg index cdd10cf..8f45a2f 100644 Binary files a/enlish-service/debug_roi.jpg and b/enlish-service/debug_roi.jpg differ diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/ExamWordsController.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/ExamWordsController.java index 45effe8..505beff 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/ExamWordsController.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/ExamWordsController.java @@ -66,7 +66,10 @@ public class ExamWordsController { .build(); Map data = new HashMap<>(); - data.put("assessment_id", examWordsDO.getId()); + data.put("examId", examWordsDO.getId()); + data.put("studentId", studentIds.get(0)); + data.put("studentStr","小明三班一年级"); + data.put("examStr", examWordsDO.getTitle()); data.put("words", assessmentWords); data.put("answer", assessmentWords); diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/bo/StudentExamId.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/bo/StudentExamId.java new file mode 100644 index 0000000..db42994 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/bo/StudentExamId.java @@ -0,0 +1,16 @@ +package com.yinlihupo.enlish.service.model.bo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class StudentExamId { + + private Integer studentId; + private Integer examId; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/utils/PngUtil.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/utils/PngUtil.java index 46cc661..af43695 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/utils/PngUtil.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/utils/PngUtil.java @@ -2,6 +2,7 @@ package com.yinlihupo.enlish.service.utils; import com.yinlihupo.enlish.service.constant.ExamWordsConstant; import com.yinlihupo.enlish.service.model.bo.CoordinatesXY; +import com.yinlihupo.enlish.service.model.bo.StudentExamId; import com.yinlihupo.enlish.service.model.bo.Word; import lombok.extern.slf4j.Slf4j; import net.sourceforge.tess4j.ITesseract; @@ -192,12 +193,12 @@ public class PngUtil { } } - public static Integer analyzeExamWordsId(String imagePath, String tessdataPath, List coordinatesXIES) { + public static StudentExamId analyzeExamWordsId(String imagePath, String tessdataPath, List coordinatesXIES) { // 1. 读取图片 Mat src = Imgcodecs.imread(imagePath); if (src.empty()) { System.out.println("无法加载图片"); - return 0; + return null; } // 2. 截取左上角区域 (ROI) @@ -234,23 +235,32 @@ public class PngUtil { // 6. 使用正则表达式提取 ID // 匹配 "Assessment_id" 后面的数字 - Pattern pattern = Pattern.compile("id[:\\s_]+(\\d+)"); - Matcher matcher = pattern.matcher(result); - - if (matcher.find()) { - String id = matcher.group(1); - System.out.println("-------------------------"); - System.out.println("成功提取 ID: " + id); - System.out.println("-------------------------"); - return Integer.parseInt(id); - } else { - System.out.println("未找到匹配的 ID 格式"); + Pattern pattern = Pattern.compile("\\d+"); + StudentExamId studentExamId = getStudentExamId(pattern, result); + if (studentExamId.getExamId() != 0 && studentExamId.getStudentId() != 0) { + return studentExamId; } } catch (TesseractException e) { System.err.println("OCR 识别出错: " + e.getMessage()); } - return 0; + return null; + } + + private static @NonNull StudentExamId getStudentExamId(Pattern pattern, String result) { + Matcher matcher = pattern.matcher(result); + StudentExamId studentExamId = new StudentExamId(0, 0); + for (int i = 0; i < 2; i++) { + if (matcher.find()) { + String group = matcher.group(); + if (i == 0) { + studentExamId.setExamId(Integer.parseInt(group)); + } else { + studentExamId.setStudentId(Integer.parseInt(group)); + } + } + } + return studentExamId; } // 辅助方法:Mat 转 BufferedImage diff --git a/enlish-service/src/main/resources/templates/assessment_v5.docx b/enlish-service/src/main/resources/templates/assessment_v5.docx index ce38579..2b93caa 100644 Binary files a/enlish-service/src/main/resources/templates/assessment_v5.docx and b/enlish-service/src/main/resources/templates/assessment_v5.docx differ diff --git a/enlish-service/src/main/resources/templates/p3.png b/enlish-service/src/main/resources/templates/p3.png index c335031..86996b3 100644 Binary files a/enlish-service/src/main/resources/templates/p3.png and b/enlish-service/src/main/resources/templates/p3.png differ diff --git a/enlish-service/src/test/java/com/yinlihupo/enlish/service/omr/TestOmr.java b/enlish-service/src/test/java/com/yinlihupo/enlish/service/omr/TestOmr.java index ab4364f..ddef360 100644 --- a/enlish-service/src/test/java/com/yinlihupo/enlish/service/omr/TestOmr.java +++ b/enlish-service/src/test/java/com/yinlihupo/enlish/service/omr/TestOmr.java @@ -1,6 +1,7 @@ package com.yinlihupo.enlish.service.omr; import com.yinlihupo.enlish.service.model.bo.CoordinatesXY; +import com.yinlihupo.enlish.service.model.bo.StudentExamId; import com.yinlihupo.enlish.service.utils.PngUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -41,7 +42,7 @@ public class TestOmr { public void testInteger(){ String filePath = "C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\templates\\p3.png"; List coordinatesXIES = PngUtil.analysisXY(filePath); - Integer examWordsId = PngUtil.analyzeExamWordsId(filePath, tessdataPath, coordinatesXIES); - log.info("examWordsId:{}", examWordsId); + StudentExamId studentExamId = PngUtil.analyzeExamWordsId(filePath, tessdataPath, coordinatesXIES); + log.info("studentExamId:{}",studentExamId); } } diff --git a/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamTest.java b/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamTest.java index bc97766..c798ea9 100644 --- a/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamTest.java +++ b/enlish-service/src/test/java/com/yinlihupo/enlish/service/service/exam/ExamTest.java @@ -42,8 +42,12 @@ public class ExamTest { .build(); Map data = new HashMap<>(); - data.put("id", examWordsDO.getId()); + data.put("examId", examWordsDO.getId()); + data.put("studentId", 1); + data.put("studentStr","小明三班一年级"); + data.put("examStr", examWordsDO.getTitle()); data.put("words", assessmentWords); + data.put("answer", assessmentWords); // 4. 渲染并输出 try (XWPFTemplate template = XWPFTemplate.compile("C:\\project\\java\\enlish_edu\\enlish\\enlish-service\\src\\main\\resources\\templates\\assessment_v5.docx", config)) {