- 新增OCR文字识别模块:支持最新 PP-OCRv5

- OCR文本识别:支持文字方向检测与自动校正
This commit is contained in:
dengwenjie
2025-05-27 08:47:21 +08:00
parent b5b4f642c5
commit 4e80dec9cb
11 changed files with 27 additions and 22 deletions

View File

@@ -260,7 +260,7 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
<dependency> <dependency>
<groupId>cn.smartjavaai</groupId> <groupId>cn.smartjavaai</groupId>
<artifactId>smartjavaai-all</artifactId> <artifactId>smartjavaai-all</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
</dependency> </dependency>
``` ```
### 3、完整示例代码 ### 3、完整示例代码
@@ -295,7 +295,7 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
## 近期更新日志 ## 近期更新日志
## [v1.0.14] - 2025-05-17 ## [v1.0.15] - 2025-05-17
- 新增OCR文字识别模块支持最新 PP-OCRv5 - 新增OCR文字识别模块支持最新 PP-OCRv5
- OCR文本识别支持文字方向检测与自动校正 - OCR文本识别支持文字方向检测与自动校正

View File

@@ -12,7 +12,7 @@
<maven.compiler.source>11</maven.compiler.source> <maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target> <maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<smartjavaai.version>1.0.14</smartjavaai.version> <smartjavaai.version>1.0.15</smartjavaai.version>
<!--如果打包运行需要替换成你的main--> <!--如果打包运行需要替换成你的main-->
<exec.mainClass>smartai.examples.face.facerec.RetinaFaceDemo</exec.mainClass> <exec.mainClass>smartai.examples.face.facerec.RetinaFaceDemo</exec.mainClass>

View File

@@ -6,7 +6,7 @@
<groupId>cn.smartjavaai</groupId> <groupId>cn.smartjavaai</groupId>
<artifactId>smartjavaai-parent</artifactId> <artifactId>smartjavaai-parent</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<description>SmartJavaAI</description> <description>SmartJavaAI</description>
<modules> <modules>

View File

@@ -6,11 +6,11 @@
<parent> <parent>
<groupId>cn.smartjavaai</groupId> <groupId>cn.smartjavaai</groupId>
<artifactId>smartjavaai-parent</artifactId> <artifactId>smartjavaai-parent</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
</parent> </parent>
<artifactId>smartjavaai-all</artifactId> <artifactId>smartjavaai-all</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
<name>${project.artifactId}</name> <name>${project.artifactId}</name>
<description>SmartJavaAI</description> <description>SmartJavaAI</description>
<url>https://github.com/geekwenjie/SmartJavaAI</url> <url>https://github.com/geekwenjie/SmartJavaAI</url>
@@ -43,6 +43,12 @@
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>cn.smartjavaai</groupId>
<artifactId>smartjavaai-ocr</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 引用所有平台包 --> <!-- 引用所有平台包 -->
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.bytedeco</groupId>--> <!-- <groupId>org.bytedeco</groupId>-->

View File

@@ -6,10 +6,10 @@
<parent> <parent>
<groupId>cn.smartjavaai</groupId> <groupId>cn.smartjavaai</groupId>
<artifactId>smartjavaai-parent</artifactId> <artifactId>smartjavaai-parent</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
</parent> </parent>
<version>1.0.14</version> <version>1.0.15</version>
<artifactId>smartjavaai-bom</artifactId> <artifactId>smartjavaai-bom</artifactId>
<name>smartjavaai-bom</name> <name>smartjavaai-bom</name>
<description>统一版本管理的 BOM 包,同时支持 import 和全量依赖</description> <description>统一版本管理的 BOM 包,同时支持 import 和全量依赖</description>

View File

@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>cn.smartjavaai</groupId> <groupId>cn.smartjavaai</groupId>
<artifactId>smartjavaai-parent</artifactId> <artifactId>smartjavaai-parent</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
</parent> </parent>
<artifactId>smartjavaai-common</artifactId> <artifactId>smartjavaai-common</artifactId>

View File

@@ -6,11 +6,11 @@
<parent> <parent>
<groupId>cn.smartjavaai</groupId> <groupId>cn.smartjavaai</groupId>
<artifactId>smartjavaai-parent</artifactId> <artifactId>smartjavaai-parent</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
</parent> </parent>
<artifactId>smartjavaai-face</artifactId> <artifactId>smartjavaai-face</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
<name>smartjavaai-face</name> <name>smartjavaai-face</name>
<description>SmartJavaAI</description> <description>SmartJavaAI</description>
<url>https://github.com/geekwenjie/SmartJavaAI</url> <url>https://github.com/geekwenjie/SmartJavaAI</url>

View File

@@ -6,11 +6,11 @@
<parent> <parent>
<groupId>cn.smartjavaai</groupId> <groupId>cn.smartjavaai</groupId>
<artifactId>smartjavaai-parent</artifactId> <artifactId>smartjavaai-parent</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
</parent> </parent>
<artifactId>smartjavaai-objectdetection</artifactId> <artifactId>smartjavaai-objectdetection</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
<name>smartjavaai-objectdetection</name> <name>smartjavaai-objectdetection</name>
<description>SmartJavaAI</description> <description>SmartJavaAI</description>
<url>https://github.com/geekwenjie/SmartJavaAI</url> <url>https://github.com/geekwenjie/SmartJavaAI</url>

View File

@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>cn.smartjavaai</groupId> <groupId>cn.smartjavaai</groupId>
<artifactId>smartjavaai-parent</artifactId> <artifactId>smartjavaai-parent</artifactId>
<version>1.0.14</version> <version>1.0.15</version>
</parent> </parent>
<artifactId>smartjavaai-ocr</artifactId> <artifactId>smartjavaai-ocr</artifactId>
@@ -20,7 +20,7 @@
</dependency> </dependency>
</dependencies> </dependencies>
<version>1.0.14</version> <version>1.0.15</version>
<name>smartjavaai-ocr</name> <name>smartjavaai-ocr</name>
<description>SmartJavaAI</description> <description>SmartJavaAI</description>
<url>https://github.com/geekwenjie/SmartJavaAI</url> <url>https://github.com/geekwenjie/SmartJavaAI</url>

View File

@@ -47,6 +47,7 @@ import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.UUID;
/** /**
* PPOCRMobileV2Model 方向分类模型 * PPOCRMobileV2Model 方向分类模型
@@ -177,13 +178,12 @@ public class PPOCRMobileV2Model implements OcrDirectionModel {
if (subImg.getHeight() * 1.0 / subImg.getWidth() > 1.5) { if (subImg.getHeight() * 1.0 / subImg.getWidth() > 1.5) {
//旋转图片90度 //旋转图片90度
subImg = OcrUtils.rotateImg(manager, subImg); subImg = OcrUtils.rotateImg(manager, subImg);
//ImageUtils.saveImage(subImg, i + "rotate.png", "build/output");
//检测方向 //检测方向
directionInfo = predictor.predict(subImg); directionInfo = predictor.predict(subImg);
if (directionInfo.getName().equalsIgnoreCase("Rotate")) { if (directionInfo.getName().equalsIgnoreCase("Rotate")) {
angle = "90";
} else {
angle = "270"; angle = "270";
} else {
angle = "90";
} }
}else{ //横向 }else{ //横向
directionInfo = predictor.predict(subImg); directionInfo = predictor.predict(subImg);

View File

@@ -48,10 +48,7 @@ import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
/** /**
@@ -158,8 +155,10 @@ public class PpOCRV5RecModel implements OcrCommonRecModel {
for (OcrItem ocrItem : ocrItemList){ for (OcrItem ocrItem : ocrItemList){
//放射变换+裁剪 //放射变换+裁剪
Image subImage = OcrUtils.transformAndCrop(srcMat, ocrItem.getOcrBox()); Image subImage = OcrUtils.transformAndCrop(srcMat, ocrItem.getOcrBox());
//ImageUtils.saveImage(subImage, UUID.randomUUID().toString() + "_aaa.png", "build/output");
//纠正文本框 //纠正文本框
subImage = OcrUtils.rotateImg(subImage, ocrItem.getAngle()); subImage = OcrUtils.rotateImg(subImage, ocrItem.getAngle());
//ImageUtils.saveImage(subImage, UUID.randomUUID().toString() + "_bbb.png", "build/output");
//识别 //识别
String name = predictor.predict(subImage); String name = predictor.predict(subImage);
ocrItem.setText(name); ocrItem.setText(name);