Merge remote-tracking branch 'origin/0.8.X' into 0.8.X
This commit is contained in:
@@ -8,7 +8,12 @@ import javax.imageio.ImageIO;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
|
|
||||||
public class Application {
|
public class Application {
|
||||||
|
|
||||||
@@ -19,21 +24,27 @@ public class Application {
|
|||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
try {
|
try {
|
||||||
// 获取本地图片
|
// 获取本地图片
|
||||||
File file = new File("D:\\桌面\\照片\\11.png");
|
// File file = new File("D:\\test.png");
|
||||||
|
|
||||||
if (!file.exists()) {
|
String imageUrl = "http://47.117.71.33:11296/api/v1/buckets/fadapp-update/objects/download?preview=true&prefix=%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20250731172707.png&version_id=null";
|
||||||
System.err.println("图片文件不存在: " + file.getAbsolutePath());
|
// 读取网络图片为 BufferedImage
|
||||||
return;
|
URL url = new URL(imageUrl);
|
||||||
}
|
InputStream inputStream = url.openStream();
|
||||||
|
BufferedImage image = ImageIO.read(inputStream);
|
||||||
|
inputStream.close();
|
||||||
|
// 预处理图片
|
||||||
|
BufferedImage bufferedImage = preprocessImage(image);
|
||||||
|
|
||||||
System.out.println("开始OCR识别...");
|
System.out.println("开始OCR识别...");
|
||||||
System.out.println("图片路径: " + file.getAbsolutePath());
|
|
||||||
|
|
||||||
// 创建Tesseract对象
|
// 创建Tesseract对象
|
||||||
ITesseract tesseract = new Tesseract();
|
ITesseract tesseract = new Tesseract();
|
||||||
|
|
||||||
// 设置字体库路径
|
// 设置字体库路径(绝对路径)
|
||||||
tesseract.setDatapath("D:\\front");
|
tesseract.setDatapath("D:\\tessdata");
|
||||||
|
|
||||||
|
/* File tessdataDir = exportTessdataToTemp(); // 从 classpath 复制到临时目录
|
||||||
|
tesseract.setDatapath(tessdataDir.getAbsolutePath());*/
|
||||||
|
|
||||||
// 设置语言简体中文
|
// 设置语言简体中文
|
||||||
tesseract.setLanguage("chi_sim");
|
tesseract.setLanguage("chi_sim");
|
||||||
@@ -43,7 +54,7 @@ public class Application {
|
|||||||
tesseract.setOcrEngineMode(3); // 使用默认引擎
|
tesseract.setOcrEngineMode(3); // 使用默认引擎
|
||||||
|
|
||||||
// 执行OCR识别图片
|
// 执行OCR识别图片
|
||||||
String result = tesseract.doOCR(file);
|
String result = tesseract.doOCR(bufferedImage);
|
||||||
|
|
||||||
System.out.println("\n=== 原始识别结果 ===");
|
System.out.println("\n=== 原始识别结果 ===");
|
||||||
System.out.println(result);
|
System.out.println(result);
|
||||||
@@ -147,4 +158,43 @@ public class Application {
|
|||||||
System.err.println("图片预处理失败: " + e.getMessage());
|
System.err.println("图片预处理失败: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 灰度化图像(直接处理 BufferedImage)
|
||||||
|
* @param image 原始图片
|
||||||
|
* @return 灰度图
|
||||||
|
*/
|
||||||
|
private static BufferedImage preprocessImage(BufferedImage image) {
|
||||||
|
BufferedImage grayImage = new BufferedImage(
|
||||||
|
image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
|
||||||
|
|
||||||
|
Graphics2D g2d = grayImage.createGraphics();
|
||||||
|
g2d.drawImage(image, 0, 0, null);
|
||||||
|
g2d.dispose();
|
||||||
|
|
||||||
|
return grayImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static File exportTessdataToTemp() throws IOException {
|
||||||
|
String[] languageFiles = {"chi_sim.traineddata","chi_sim_vert.traineddata"};
|
||||||
|
// 明确指定临时目录路径(避免路径分隔符问题)
|
||||||
|
File tempTessdataDir = new File(System.getProperty("java.io.tmpdir"), "tessdata");
|
||||||
|
if (!tempTessdataDir.exists()) {
|
||||||
|
tempTessdataDir.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
ClassLoader classLoader = Application.class.getClassLoader();
|
||||||
|
for (String filename : languageFiles) {
|
||||||
|
// 使用正确的资源路径(注意开头的/)
|
||||||
|
try (InputStream in = classLoader.getResourceAsStream("\\tessdata\\" + filename)) {
|
||||||
|
if (in == null) {
|
||||||
|
throw new FileNotFoundException("语言包未找到: /tessdata/" + filename);
|
||||||
|
}
|
||||||
|
File outFile = new File(tempTessdataDir, filename);
|
||||||
|
Files.copy(in, outFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tempTessdataDir; // 返回的是 tessdata 目录本身
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
klp-wms/src/main/resources/tessdata/chi_sim.traineddata
Normal file
BIN
klp-wms/src/main/resources/tessdata/chi_sim.traineddata
Normal file
Binary file not shown.
BIN
klp-wms/src/main/resources/tessdata/chi_sim_vert.traineddata
Normal file
BIN
klp-wms/src/main/resources/tessdata/chi_sim_vert.traineddata
Normal file
Binary file not shown.
Reference in New Issue
Block a user