Spring Boot应用程序里集成Tess4J来实现OCR(光学字符识别),以识别出本地和远程图片中的文字
一、添加依赖
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version>
</dependency>
二、添加Tessdata语言库
github:https://gitcode.com/tesseract-ocr/tessdata/tree/main
百度云盘下:https://pan.baidu.com/s/1uuSTBNo3byJib4f8eRSIFw 密码:8v8u
三、创建OCR服务类
@Service
public class OcrService{/**负责执行对本地文件的OCR任务*/public String recognizeText(File imageFile)throws TesseractException{Tesseract tesseract = new Tesseract();//设定训练文件的位置(如果是标准英文识别,此步可省略)tesseract.setDatapath("你的tessdata各语言集合包地址");tesseract.setLanguage("chi_sim");return tesseract.doOCR(imageFile);}/**则先将远程图片下载到本地,然后再执行OCR*/public String recognizeTextFromUrl(String imageUrl)throws Exception{URL url = new URL(imageUrl);InputStream in = url.openStream();Files.copy(in, Paths.get("downloaded.jpg"), StandardCopyOption.REPLACE_EXISTING);File imageFile = new File("downloaded.jpg");return recognizeText(imageFile);}
}
四、建立REST控制器
@RestController
@RequestMapping("/api/ocr")
public class OcrController{private final OcrService ocrService;// 使用构造器注入OcrServicepublic OcrController(OcrService ocrService) {this.ocrService = ocrService;}//处理用户上传的本地图片@PostMapping("/upload")public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file){try{File convFile = new File(System.getProperty("java.io.tmpdir")+"/"+file.getOriginalFilename());file.transferTo(convFile);String result = ocrService.recognizeText(convFile);return ResponseEntity.ok(result);}catch(Exception e){e.printStackTrace();return ResponseEntity.badRequest().body("识别发生错误:" + e.getMessage());}}//处理给定URL的远程图片@GetMapping("/recognize-url")public ResponseEntity<String> recognizeFromUrl(@RequestParam("imageUrl") String imageUrl) {try {String result = ocrService.recognizeTextFromUrl(imageUrl);return ResponseEntity.ok(result);} catch (Exception e) {e.printStackTrace();return ResponseEntity.badRequest().body("从URL识别发生错误:" + e.getMessage());}}
}
五、测试
本地测试:
远程测试:
根据实际情况调整配置,例如在多语言环境中设置正确的语言包等。