部署tesseract
部分安装包和语言包已打包放在【免费】leptonica及tesserac压缩包以及tessdata各语言集合包资源-CSDN文库
可自行下载,如文章有错漏望大佬们指点指点,本人小白尝试分享
安装依赖包
-
安装依赖包:
yum -y install automake libtool libtiff-devel libjpeg-devel libpng-devel
-
还有个pkg-config包yum源里没有,需要下载后在安装
下载pkg-config:
wget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.tar.gz
-
解压:
tar -xvf pkg-config-0.29.tar.gz
4. 进入解压后的文件夹:
./configure --with-internal-glib
-
编译:
make make check make install
注意:不安装pkg-config,等下./configure Tesseract时会出现以下错误
configure: error: Leptonica 1.74 or higher is required. Try to install libleptonica-dev package.
编译安装Leptonica
-
在官方source下载页面可找到最新的Leptonica
在这以leptonica-1.78.0为例,先到官网下载所需版本,这里下载1.78.0
-
解压编译
tar -zxvf leptonica-1.78.0.tar.gz cd leptonica-1.78.0/ ./configure make && make install
-
将leptonica加入系统变量中
vim /etc/profile #文末加入 export LD_LIBRARY_PATH=$LD_LIBRARY_PAYT:/usr/local/lib export LIBLEPT_HEADERSDIR=/usr/local/include export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig #保存退出后运行: source /etc/profile
编译安装Tesseract
-
以下以4.1.0为例
下载链接:
#或者 wget https://codeload.github.com/tesseract-ocr/tesseract/tar.gz/4.1.0
-
解压编译:
tar -xvf 4.1.0 cd tesseract-4.1.0/ ./autogen.sh ./configure --with-extra-includes=/usr/local/include --with-extra-libraries=/usr/local/lib make && make install
-
验证:
tesseract -v
-
测试
tesseract -v
如上图表示安装成功
下载语言包并配置环境
-
下载Tesseract语言包
地址:
-
将语言包放在指定位置,这里以放在项目同路径为例
cp tessdata /usr/local/myapp/travel-system -R
-
配置语言包环境变量:
vim ~/.bash_profile #加入一下内容 export TESSDATA_PREFIX=/usr/local/tess4j/tessdata #保存并退出
刷新配置:
source ~/.bash_profile
4.测试:
tesseract 图片地址 out -l eng+chi_sim #查看解析结果 cat 图片地址
java实现图片识别接口
本例为springboot2.7.6
-
在pom.xml中引入依赖
<!-- 图片识别Tesseract OCR --> <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>4.5.4</version> </dependency>
-
下载语言包
可放在任意路径
-
创建OcrService类:
@Service public class OcrService { @Resource private Tesseract tesseract; public String recognizeText(File imageFile) throws TesseractException { return tesseract.doOCR(imageFile); } public String recognizeTextFromUrl(String imageUrl) throws Exception { URL url = new URL(imageUrl); InputStream in = url.openStream(); // 临时文件名 String tempFileName = "downloaded." + getImageFormat(imageUrl); Files.copy(in, Paths.get(tempFileName), StandardCopyOption.REPLACE_EXISTING); File imageFile = new File(tempFileName); return recognizeText(imageFile); } // 获取图片格式 private String getImageFormat(String imageUrl) { String format = ""; try { URLConnection connection = new URL(imageUrl).openConnection(); connection.setRequestProperty("User-Agent", "Mozilla/5.0"); String contentType = connection.getHeaderField("Content-Type"); if (contentType.equals("image/jpeg")) { format = "jpg"; } else if (contentType.equals("image/png")) { format = "png"; } } catch (IOException e) { e.printStackTrace(); } return format; } }
-
创建REST控制器:
@RestController @RequestMapping("/ocr") public class OcrController { @Resource private OcrService ocrService; @PostMapping("/upload") public Result<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); System.out.println(result); return Result.success(result,"读取成功"); } catch (Exception e) { e.printStackTrace(); return Result.fail("识别发生错误:" + e.getMessage()); } } @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()); } } }
-
配置类
@Configuration public class TesseractOcrConfiguration { @Value("${tess4j.datapath}") private String dataPath; @Bean public Tesseract tesseract() { Tesseract tesseract = new Tesseract(); // 设置训练数据文件夹路径 tesseract.setDatapath(dataPath); //设置分辨率 tesseract.setTessVariable("user_defined_dpi", "300"); // 设置为中文简体 tesseract.setLanguage("chi_sim"); return tesseract; } }
-
在yml中写入路径,方便维护:
# 训练数据文件夹的路径,语言包路径,部署到服务器注意修改为服务器上语言包路径 tess4j: # datapath: F:\JAVA\travel-system\tessdataLanguagePackage datapath: /usr/local/myapp/travel-system/tessdataLanguagePackage
-
启动测试
本例为本地启动测试,使用apifox
如下: