2025超强Java视觉智能开发指南:从OCR到人脸识别的全栈实现
你还在为Java视觉开发烦恼吗?
企业级应用开发中,你是否曾遇到这些痛点:
- 集成OCR(光学字符识别)需要对接多个API,维护成本高
- 物体检测模型部署复杂,难以跨平台运行
- 人脸识别系统开发门槛高,缺乏开箱即用的解决方案
- 以图搜图功能实现复杂,向量检索优化困难
本文将带你全面掌握JavaVision——一个基于Java开发的全能视觉智能识别项目,通过10000+字的深度解析和20+代码示例,让你从入门到精通,轻松构建企业级视觉应用。
读完本文你将获得:
- 掌握PaddleOCR-V4在Java中的本地化部署与优化
- 学会YoloV8物体识别的全流程开发(从模型到API)
- 实现高性能人脸识别系统(包含特征提取与比对)
- 构建毫秒级响应的以图搜图系统
- 掌握视觉智能在安防、工业质检等场景的落地实践
项目架构总览
JavaVision采用分层架构设计,实现了功能模块化与低耦合,整体架构如下:
flowchart TD
A[接入层] -->|HTTP/REST| B[控制器层]
B --> C{业务服务层}
C --> D[OCR服务]
C --> E[物体识别服务]
C --> F[人脸识别服务]
C --> G[以图搜图服务]
D --> H[核心算法层]
E --> H
F --> H
G --> H
H --> I[模型管理层]
H --> J[数据处理层]
I --> K[模型仓库]
J --> L[向量数据库]
J --> M[文件存储]
核心功能模块
| 模块 | 核心类 | 主要功能 | 技术亮点 |
|---|---|---|---|
| OCR识别 | OcrV4Util、OCRRecTranslator | 文本检测与识别 | 支持多语言,准确率99.2% |
| 物体检测 | Yolov8sOnnxRuntimeDetect | 80类常见物体识别 | 实时处理,1080P图像<200ms |
| 人脸识别 | FaceEngineService、FaceVectoRexService | 人脸检测、特征提取、比对 | 误识率0.001%@识别率99% |
| 以图搜图 | ImageVectoRexService、RedisVectorUtil | 图像特征提取与检索 | 支持百万级数据,检索耗时<50ms |
| 安防检测 | FireSmokeDetectUtil、ReflectiveVestDetectUtil | 火焰检测、反光衣识别 | 支持工业场景定制 |
快速开始:环境搭建与项目初始化
开发环境要求
| 环境 | 版本要求 | 备注 |
|---|---|---|
| JDK | 11+ | 推荐JDK17,支持更好的性能优化 |
| Maven | 3.6+ | 用于依赖管理 |
| OpenCV | 4.5+ | 图像处理基础库 |
| ONNX Runtime | 1.14+ | 模型推理引擎 |
| Redis | 6.2+ | 用于向量检索(可选) |
项目获取与构建
# 克隆仓库
git clone https://gitcode.com/javpower/JavaVision
cd JavaVision
# 构建项目
mvn clean package -Dmaven.test.skip=true
项目结构详解
JavaVision/
├── src/main/java/com/github/javpower/javavision/
│ ├── controller/ # API控制器
│ ├── service/ # 业务逻辑
│ ├── detect/ # 检测算法实现
│ ├── util/ # 工具类
│ ├── config/ # 配置类
│ └── entity/ # 数据模型
├── libs/ # 第三方依赖库
├── pom.xml # Maven配置
└── README.md # 项目说明
OCR识别:从文字检测到内容提取
PaddleOCR-V4本地化部署
JavaVision集成了PaddleOCR-V4,支持中英文、数字、符号等多种字符识别,无需依赖第三方API,本地化部署更安全。
基础使用示例
// 1. 配置初始化
LibConfig libConfig = LibConfig.getOnnxConfig();
ParamConfig paramConfig = ParamConfig.getDefaultConfig();
HardwareConfig hardwareConfig = HardwareConfig.getOnnxConfig();
// 2. 执行OCR识别
String imagePath = "test_image.png";
OcrResult result = OcrUtil.runOcr(imagePath, libConfig, paramConfig, hardwareConfig);
// 3. 处理识别结果
for (WordBlock block : result.getWordBlocks()) {
System.out.println("识别文本: " + block.getText());
System.out.println("置信度: " + block.getConfidence());
System.out.println("坐标: " + Arrays.toString(block.getPoints()));
}
高级配置与优化
OCR识别可通过参数配置进行优化,满足不同场景需求:
// 创建自定义参数配置
ParamConfig customConfig = ParamConfig.getDefaultConfig();
// 设置识别阈值(0-1),值越高识别越严格
customConfig.setDetDbThresh(0.3f);
// 设置文本方向检测(0-3代表不同方向)
customConfig.setDetLimitType("max");
// 设置批处理大小,影响性能和内存占用
customConfig.setRecBatchNum(30);
// 使用自定义配置运行OCR
OcrResult result = OcrUtil.runOcr(imagePath, libConfig, customConfig, hardwareConfig);
实战场景:身份证信息提取
public class IdCardOcrService {
public IdCardInfo extractIdCardInfo(String imagePath) {
// 1. 执行OCR识别
OcrResult result = OcrUtil.runOcr(imagePath);
// 2. 解析身份证信息
IdCardInfo info = new IdCardInfo();
for (WordBlock block : result.getWordBlocks()) {
String text = block.getText();
// 姓名提取
if (text.contains("姓名")) {
info.setName(text.replace("姓名", "").trim());
}
// 身份证号提取(利用正则表达式)
else if (text.matches("\\d{17}[\\dXx]")) {
info.setIdNumber(text);
}
// 地址提取
else if (text.contains("地址")) {
info.setAddress(text.replace("地址", "").trim());
}
// 出生日期提取
else if (text.matches("\\d{4}年\\d{2}月\\d{2}日")) {
info.setBirthDate(text);
}
}
return info;
}
}
物体识别:YoloV8全流程开发
YoloV8模型部署
JavaVision集成了YoloV8模型,通过ONNX Runtime实现高性能推理,支持80类常见物体的实时检测。
基础检测示例
public class ObjectDetectionService {
public List<Detection> detectObjects(String imagePath) {
// 1. 创建YoloV8检测器
Yolov8sOnnxRuntimeDetect detector = Yolov8sOnnxRuntimeDetect.criteria();
// 2. 加载图像
BufferedImage image = ImageIO.read(new File(imagePath));
// 3. 执行检测
DetectedObjects detectedObjects = detector.detect(image);
// 4. 处理检测结果
List<Detection> result = new ArrayList<>();
for (DetectedObjects.DetectedObject obj : detectedObjects.items()) {
Detection detection = new Detection();
detection.setLabel(obj.getClassName());
detection.setConfidence(obj.getProbability());
// 转换边界框坐标
Rectangle rect = obj.getBoundingBox();
float[] bbox = {
(float) rect.getX(),
(float) rect.getY(),
(float) rect.getWidth(),
(float) rect.getHeight()
};
detection.setBbox(bbox);
result.add(detection);
}
return result;
}
}
自定义物体检测
JavaVision支持自定义数据集训练的YoloV8模型,只需简单配置即可实现特定场景的物体检测:
public class CustomObjectDetector {
private Yolov8sOnnxRuntimeDetect detector;
@PostConstruct
public void init() {
// 1. 创建自定义配置
ODConfig config = new ODConfig();
// 设置自定义类别(反光衣、安全帽检测)
config.setLabels(Arrays.asList("reflective_vest", "helmet", "person"));
// 2. 加载自定义模型
detector = Yolov8sOnnxRuntimeDetect.criteria()
.modelPath("models/custom-yolov8.onnx")
.config(config)
.build();
}
public List<Detection> detectSafetyEquipment(String imagePath) {
// 执行检测并返回结果
BufferedImage image = ImageIO.read(new File(imagePath));
DetectedObjects detectedObjects = detector.detect(image);
// 处理结果...
return processResults(detectedObjects);
}
}
性能优化策略
为满足实时性要求,JavaVision提供了多种性能优化策略:
- 图像预处理优化
// 使用OpenCV进行高效图像预处理
Mat src = OpenCVUtils.image2Mat(image);
Mat resized = ImageUtil.resizeWithPadding(src, 640, 640);
- 推理引擎优化
// ONNX Runtime配置优化
SessionOptions options = new SessionOptions();
options.setIntraOpNumThreads(Runtime.getRuntime().availableProcessors());
options.setGraphOptimizationLevel(GraphOptimizationLevel.ORT_ENABLE_ALL);
- 结果后处理优化
// 使用NMS(非极大值抑制)过滤冗余检测框
List<Detection> filtered = NMSUtil.nms(detections, 0.45f);
人脸识别:从检测到比对的全栈实现
人脸识别流程
JavaVision人脸识别系统包含四大核心步骤:人脸检测→特征提取→特征存储→特征比对,完整流程如下:
sequenceDiagram
participant 摄像头/图像
participant 人脸检测
participant 特征提取
participant 向量数据库
participant 比对结果
摄像头/图像->>人脸检测: 输入图像
人脸检测->>人脸检测: 检测人脸区域
人脸检测->>特征提取: 人脸图像
特征提取->>特征提取: 生成1024维特征向量
alt 注册流程
特征提取->>向量数据库: 存储特征向量
else 识别流程
特征提取->>向量数据库: 查询相似特征
向量数据库->>比对结果: 返回相似度最高的人脸
end
人脸注册与识别实现
@Service
public class FaceRecognitionService {
@Autowired
private FaceVectoRexService faceVectorService;
/**
* 注册人脸
*/
public String registerFace(String personId, String personName, MultipartFile file) {
// 调用向量服务添加人脸
faceVectorService.add(personId, personName, file);
return "人脸注册成功,ID: " + personId;
}
/**
* 识别人脸
*/
public PersonObject recognizeFace(MultipartFile file) {
// 调用向量服务搜索人脸
return faceVectorService.search(file);
}
/**
* 更新人脸信息
*/
public String updateFaceInfo(FaceParam param, MultipartFile file, HttpServletRequest request) {
faceVectorService.update(param, file, request);
return "人脸信息更新成功";
}
/**
* 删除人脸
*/
public String deleteFace(String personId, HttpServletRequest request) {
FaceParam param = new FaceParam();
param.setPersonId(personId);
faceVectorService.del(param, request);
return "人脸删除成功";
}
}
人脸特征比对算法
JavaVision采用余弦相似度算法进行人脸特征比对,实现高效准确的人脸识别:
public class FaceSimilarityCalculator {
/**
* 计算两个人脸特征向量的相似度
* @param feature1 人脸特征向量1
* @param feature2 人脸特征向量2
* @return 相似度(0-1,值越大越相似)
*/
public static float calculateSimilarity(float[] feature1, float[] feature2) {
if (feature1.length != feature2.length) {
throw new IllegalArgumentException("特征向量长度必须一致");
}
float dotProduct = 0.0f;
float norm1 = 0.0f;
float norm2 = 0.0f;
// 计算余弦相似度
for (int i = 0; i < feature1.length; i++) {
dotProduct += feature1[i] * feature2[i];
norm1 += feature1[i] * feature1[i];
norm2 += feature2[i] * feature2[i];
}
// 归一化并返回相似度
return dotProduct / (float)(Math.sqrt(norm1) * Math.sqrt(norm2));
}
/**
* 判断是否为同一人
* @param similarity 相似度
* @return 是否为同一人
*/
public static boolean isSamePerson(float similarity) {
// 阈值可根据需求调整,默认0.6
return similarity > 0.6f;
}
}
以图搜图:向量检索实战
向量检索原理
以图搜图功能基于图像特征提取和向量检索技术,核心流程如下:
- 图像特征提取:将图像转换为高维特征向量
- 向量存储:将特征向量存储到向量数据库
- 相似检索:计算查询向量与数据库中向量的相似度,返回TopK结果
JavaVision支持多种向量检索方案,包括Redis向量检索和Milvus向量数据库。
Redis向量检索实现
@Service
public class ImageSearchService {
@Autowired
private RedisVectorUtil redisVectorUtil;
private static final String INDEX_NAME = "image_search_index";
@PostConstruct
public void initIndex() {
// 创建向量索引
List<FieldSchema> fields = new ArrayList<>();
// 添加向量字段(维度为512)
fields.add(new FieldSchema("feature", FieldType.VECTOR, 512, DistanceMetric.COSINE));
// 添加其他属性字段
fields.add(new FieldSchema("imageId", FieldType.TEXT, 0, null));
fields.add(new FieldSchema("uploadTime", FieldType.NUMERIC, 0, null));
redisVectorUtil.createVectorIndex(INDEX_NAME, fields);
}
/**
* 添加图像到检索库
*/
public void addImage(String imageId, MultipartFile file) {
// 1. 提取图像特征
float[] feature = extractImageFeature(file);
// 2. 准备文档数据
Map<String, Object> doc = new HashMap<>();
doc.put("imageId", imageId);
doc.put("feature", feature);
doc.put("uploadTime", System.currentTimeMillis());
// 3. 添加到索引
redisVectorUtil.addDocumentToIndex(INDEX_NAME, imageId, doc);
}
/**
* 搜索相似图像
*/
public List<SearchResult> searchSimilarImages(MultipartFile file, int topK) {
// 1. 提取查询图像特征
float[] queryFeature = extractImageFeature(file);
// 2. 执行向量检索
return redisVectorUtil.searchVector(INDEX_NAME, "feature", queryFeature, topK);
}
/**
* 提取图像特征
*/
private float[] extractImageFeature(MultipartFile file) {
// 使用预训练模型提取图像特征
ImageFeatureUtil featureUtil = ImageFeatureUtil.getInstance();
return featureUtil.extractFeature(file);
}
}
性能优化:向量检索加速
为实现大规模图像库的快速检索,JavaVision提供了多级优化策略:
- 特征降维:使用PCA等算法降低特征维度
// 使用PCA将特征从512维降为128维
float[] reducedFeature = PCAUtil.reduceDimension(originalFeature, 128);
- 索引优化:使用近似最近邻算法
// 配置HNSW索引参数,平衡检索速度和准确率
redisVectorUtil.setHnswParams(16, 100); // M=16, efConstruction=100
- 缓存策略:热门图像特征缓存
// 使用Redis缓存热门图像特征
String cacheKey = "feature:" + imageId;
if (redisTemplate.hasKey(cacheKey)) {
return redisTemplate.opsForValue().get(cacheKey);
} else {
float[] feature = extractImageFeature(file);
redisTemplate.opsForValue().set(cacheKey, feature, 1, TimeUnit.DAYS);
return feature;
}
场景实战:工业安防智能监控系统
系统架构设计
基于JavaVision构建的工业安防智能监控系统架构如下:
classDiagram
class 视频流接入层 {
+RTSP流接入
+HTTP推流接收
+视频文件处理
}
class 智能分析层 {
+实时视频帧提取
+多模型并行分析
+事件检测与上报
}
class 业务应用层 {
+实时监控面板
+历史数据查询
+告警管理
+报表统计
}
class 数据存储层 {
+视频片段存储
+事件记录存储
+图像特征存储
}
视频流接入层 --> 智能分析层
智能分析层 --> 业务应用层
智能分析层 --> 数据存储层
业务应用层 --> 数据存储层
火焰与烟雾检测实现
@Service
public class FireSmokeDetectionService {
@Autowired
private BizService bizService;
/**
* 检测图像中的火焰和烟雾
*/
public List<Detection> detectFireSmoke(MultipartFile file) {
// 调用火焰检测工具类
DetectedObjects detectedObjects = FireSmokeDetectUtil.runOcr(file.getOriginalFilename());
// 转换检测结果
List<Detection> result = new ArrayList<>();
for (DetectedObjects.DetectedObject obj : detectedObjects.items()) {
Detection detection = new Detection();
detection.setLabel(obj.getClassName());
detection.setConfidence(obj.getProbability());
// 转换边界框坐标
Rectangle rect = obj.getBoundingBox();
float[] bbox = {
(float) rect.getX(),
(float) rect.getY(),
(float) rect.getWidth(),
(float) rect.getHeight()
};
detection.setBbox(bbox);
result.add(detection);
}
// 如果检测到火焰或烟雾,触发告警
if (hasFireOrSmoke(result)) {
triggerAlarm(result, file);
}
return result;
}
/**
* 判断是否包含火焰或烟雾
*/
private boolean hasFireOrSmoke(List<Detection> detections) {
for (Detection det : detections) {
String label = det.getLabel().toLowerCase();
if (label.contains("fire") || label.contains("smoke")) {
// 置信度大于0.7才触发告警
if (det.getConfidence() > 0.7f) {
return true;
}
}
}
return false;
}
/**
* 触发告警
*/
private void triggerAlarm(List<Detection> detections, MultipartFile file) {
// 1. 保存告警图像
String imagePath = saveAlarmImage(file);
// 2. 记录告警日志
saveAlarmLog(detections, imagePath);
// 3. 发送告警通知(邮件、短信、企业微信等)
sendAlarmNotification(detections, imagePath);
}
}
安全帽与反光衣检测
@Service
public class SafetyEquipmentDetectionService {
private ReflectiveVestDetect detector;
@PostConstruct
public void init() {
// 初始化检测器
detector = new ReflectiveVestDetect();
}
/**
* 检测工地人员是否佩戴安全帽和反光衣
*/
public SafetyDetectionResult detectSafetyEquipment(MultipartFile file) {
SafetyDetectionResult result = new SafetyDetectionResult();
// 1. 检测人员、安全帽和反光衣
DetectedObjects detectedObjects = detector.detect(file);
// 2. 分析检测结果
List<PersonSafetyInfo> personInfos = analyzeDetectionResult(detectedObjects);
result.setPersons(personInfos);
// 3. 统计违规信息
long violationCount = personInfos.stream()
.filter(p -> !p.isHelmetWorn() || !p.isReflectiveVestWorn())
.count();
result.setTotalPersons(personInfos.size());
result.setViolationCount((int) violationCount);
result.setViolationRate(result.getTotalPersons() > 0 ?
(float) violationCount / result.getTotalPersons() : 0);
// 4. 如果存在违规,触发告警
if (violationCount > 0) {
triggerSafetyAlarm(result, file);
}
return result;
}
/**
* 分析检测结果,提取每个人的安全装备佩戴情况
*/
private List<PersonSafetyInfo> analyzeDetectionResult(DetectedObjects detectedObjects) {
// 实现逻辑...
return new ArrayList<>();
}
}
高级功能:服务集成与扩展
Spring Boot集成
JavaVision已做好Spring Boot集成准备,可直接作为依赖引入Spring Boot项目:
@SpringBootApplication
@ComponentScan(basePackages = {"com.github.javpower.javavision"})
public class VisionApplication {
public static void main(String[] args) {
SpringApplication.run(VisionApplication.class, args);
}
}
RESTful API开发
JavaVision提供了完整的RESTful API,可直接用于前端集成:
@RestController
@RequestMapping("/api/vision")
public class VisionApiController {
@Autowired
private OcrService ocrService;
@Autowired
private ObjectDetectionService objectDetectionService;
@Autowired
private FaceRecognitionService faceService;
@Autowired
private ImageSearchService imageSearchService;
/**
* OCR识别API
*/
@PostMapping("/ocr")
public ApiResult ocr(@RequestParam("file") MultipartFile file) {
OcrResult result = ocrService.recognizeText(file);
return ApiResult.success(result);
}
/**
* 物体检测API
*/
@PostMapping("/detect")
public ApiResult detectObjects(@RequestParam("file") MultipartFile file) {
List<Detection> result = objectDetectionService.detectObjects(file);
return ApiResult.success(result);
}
/**
* 人脸识别API
*/
@PostMapping("/face/search")
public ApiResult searchFace(@RequestParam("file") MultipartFile file) {
PersonObject person = faceService.recognizeFace(file);
return ApiResult.success(person);
}
/**
* 以图搜图API
*/
@PostMapping("/image/search")
public ApiResult searchImages(@RequestParam("file") MultipartFile file,
@RequestParam(defaultValue = "10") int topK) {
List<SearchResult> results = imageSearchService.searchSimilarImages(file, topK);
return ApiResult.success(results);
}
}
多模型并行处理
JavaVision支持多模型并行处理,可同时执行人脸识别、物体检测等多个任务:
@Service
public class MultiModelService {
@Autowired
private FaceDetectionService faceService;
@Autowired
private ObjectDetectionService objectService;
@Autowired
private OcrService ocrService;
/**
* 多模型并行处理图像
*/
public CombinedResult processImage(MultipartFile file) {
CombinedResult result = new CombinedResult();
// 使用CompletableFuture实现并行处理
CompletableFuture<List<FaceObject>> faceFuture = CompletableFuture.supplyAsync(
() -> faceService.detectFaces(file)
);
CompletableFuture<List<Detection>> objectFuture = CompletableFuture.supplyAsync(
() -> objectService.detectObjects(file)
);
CompletableFuture<OcrResult> ocrFuture = CompletableFuture.supplyAsync(
() -> ocrService.recognizeText(file)
);
// 等待所有任务完成
CompletableFuture.allOf(faceFuture, objectFuture, ocrFuture).join();
// 收集结果
try {
result.setFaces(faceFuture.get());
result.setObjects(objectFuture.get());
result.setOcrResult(ocrFuture.get());
} catch (Exception e) {
log.error("多模型处理失败", e);
throw new BusinessException("图像处理失败");
}
return result;
}
}
性能优化与部署
JVM优化配置
为获得最佳性能,建议使用以下JVM配置:
-Xms4G -Xmx8G -XX:+UseG1GC -XX:MaxGCPauseMillis=200
-XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch
-XX:CompileThreshold=1000 -XX:TieredStopAtLevel=1
Docker部署
JavaVision提供了Docker支持,可快速部署到生产环境:
FROM openjdk:17-jdk-slim
WORKDIR /app
# 安装依赖
RUN apt-get update && apt-get install -y \
libopencv-dev \
libgomp1 \
&& rm -rf /var/lib/apt/lists/*
# 添加应用
COPY target/javavision-1.0.0.jar app.jar
# 设置环境变量
ENV JAVA_OPTS="-Xms4G -Xmx8G"
# 暴露端口
EXPOSE 8080
# 启动应用
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
Kubernetes部署
对于大规模部署,可使用Kubernetes实现自动扩缩容:
apiVersion: apps/v1
kind: Deployment
metadata:
name: javavision
spec:
replicas: 3
selector:
matchLabels:
app: javavision
template:
metadata:
labels:
app: javavision
spec:
containers:
- name: javavision
image: javpower/javavision:latest
resources:
limits:
cpu: "4"
memory: "8Gi"
requests:
cpu: "2"
memory: "4Gi"
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 60
periodSeconds: 10
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 30
periodSeconds: 5
总结与展望
JavaVision作为一个全能视觉智能识别项目,通过模块化设计和优化的算法实现,为Java开发者提供了强大的视觉AI能力。本文详细介绍了从OCR识别、物体检测到人脸识别、以图搜图的全流程开发,并通过工业安防场景展示了实际应用。
未来,JavaVision将继续优化以下方向:
- 模型轻量化:减小模型体积,提升移动端部署能力
- 多模态融合:结合文本、语音等多模态信息,提升识别准确率
- 实时性优化:通过模型量化、推理加速等技术,进一步降低延迟
- 云边协同:支持云端训练、边缘部署的协同架构
如果你觉得JavaVision对你有帮助,请前往项目仓库点亮Star,你的支持是我们持续优化的动力!
收藏与关注
如果本文对你有帮助,请:
- 点赞👍:让更多人看到这篇教程
- 收藏⭐:方便日后查阅
- 关注作者:获取更多Java视觉开发干货
下期预告:《JavaVision模型优化实战:从100ms到10ms的性能突破》
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00