Skip to content

Commit 8502b4d

Browse files
committed
【通用视觉】集成 OpenAI CLIP 模型,支持以图搜图、以文搜图、以图搜文等功能
【通用视觉】新增 YOLO 图像分类模型支持 【ASR/TTS】集成 Sherpa TTS(语音合成)与 ASR(语音识别)模块,支持中文、粤语、方言、英文等多种语言 【目标检测】优化视频目标检测功能
1 parent 248398a commit 8502b4d

File tree

68 files changed

+4463
-44
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+4463
-44
lines changed

README.md

Lines changed: 91 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,18 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
140140
</div>
141141
</td>
142142
</tr>
143+
<tr>
144+
<td>
145+
<div align="left">
146+
<p>图像分类<br>(Image Classification)</p>
147+
</div>
148+
</td>
149+
<td>
150+
<div align="center">
151+
<img src="https://cdn.jsdelivr.net/gh/geekwenjie/SmartJavaAI-Site/images/vision/cls.png" height = "300px"/>
152+
</div>
153+
</td>
154+
</tr>
143155
<tr>
144156
<td>
145157
<div align="left">
@@ -316,6 +328,33 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
316328
</div>
317329
</td>
318330
</tr>
331+
<tr>
332+
<td>
333+
<div align="left">
334+
<p>语音合成(ASR)</p>
335+
</div>
336+
</td>
337+
<td>
338+
<div align="center">
339+
<img src="https://cdn.jsdelivr.net/gh/geekwenjie/SmartJavaAI-Site/images/speech/tts.jpg" width = "500px"/>
340+
</div>
341+
</td>
342+
</tr>
343+
<tr>
344+
<td>
345+
<div align="left">
346+
<p>CLIP</p>
347+
- 文搜图 <br>
348+
- 图搜图 <br>
349+
- 图搜文<br>
350+
</div>
351+
</td>
352+
<td>
353+
<div align="center">
354+
<img src="https://cdn.jsdelivr.net/gh/geekwenjie/SmartJavaAI-Site/images/vision/clip.png" width = "500px"/>
355+
</div>
356+
</td>
357+
</tr>
319358
</table>
320359
</div>
321360

@@ -351,8 +390,11 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
351390
- 静默活体检测:图片、视频活体检测
352391
- 人脸表情识别:7种表情识别
353392
- 人脸质量评估:亮度评估、清晰度评估、完整度评估、姿态评估、遮挡评估
393+
- **图像分类**
394+
- 支持多种主流模型:集成 YOLOv8、YOLOv11 等分类模型
395+
- 支持自定义模型加载:可无缝加载并部署用户自行训练的分类模型
354396
- **目标检测**
355-
- 支持多种主流模型:集成 YOLOv5、YOLOv8、YOLOv11、YOLOv12、Tensorflow Object Detection 等目标检测算法
397+
- 支持多种主流模型:集成 YOLOv5、YOLOv8、YOLOv11、YOLOv12、Tensorflow Object Detection 等目标检测模型
356398
- 支持自定义模型加载:可无缝加载并部署用户自行训练的目标检测模型
357399
- 集成行人检测模型
358400
- **语义分割**
@@ -365,6 +407,9 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
365407
- 支持KINETICS400数据集中400个人类动作识别
366408
- **姿态估计**
367409
- 集成YOLOv8-pose、YOLOv11-pose等模型
410+
- **CLIP**
411+
- 支持提取图片及文本特征
412+
- 支持文搜图、图搜文、图搜图
368413
- **OCR文字识别**
369414
- 支持PaddleOCR 3.0模型:集成最新PP-OCRv5、PP-OCRv4、表格结构识别模型(SLANet_plus)、文本行方向分类模型
370415
- 支持任意角度识别,方向校准
@@ -373,9 +418,12 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
373418
- 支持中文车牌识别:单层/双层检测,颜色识别,支持12种中文车牌
374419
- **机器翻译**
375420
- 集成NLLB-200模型:支持200+语言互相翻译
376-
- **语音识别**
421+
- **语音识别(ASR)**
377422
- 集成openai的whisper模型:支持100种语言
378423
- 集成vosk语音识别
424+
- 集成sherpa-onnx语音识别
425+
- **语音合成(TTS)**
426+
- 集成sherpa-onnx:支持中文、方言、粤语、英文、德语等多种语言
379427

380428

381429
## 🌟 AI集成方式对比
@@ -404,7 +452,7 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
404452
| translate | 机器翻译模块 |
405453
| speech | 语音功能模块,包含 ASR 和 TTS |
406454

407-
可以根据需求对每个模块单独引入,也可以通过引入`smartjavaai-all`方式引入所有模块。
455+
可以根据需求对每个模块单独引入,也可以通过引入`all`方式引入所有模块。
408456

409457
-------------------------------------------------------------------------------
410458

@@ -435,7 +483,7 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
435483
<dependency>
436484
<groupId>cn.smartjavaai</groupId>
437485
<artifactId>all</artifactId>
438-
<version>1.0.25</version>
486+
<version>1.0.26</version>
439487
</dependency>
440488
```
441489

@@ -534,6 +582,16 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
534582

535583
---
536584

585+
#### 图像分类模型(CLS)
586+
587+
**YOLO 系列**
588+
589+
| 模型名称 | 引擎 | 模型简介 | 模型开源网站 |
590+
|-------------|----------------|------------|----------------------------------------------------------------------|
591+
| YOLOV11-cls | OnnxRuntime | 最流行的图像分类模型 | [Github](https://docs.ultralytics.com/zh/models/) |
592+
| YOLOV8-cls | OnnxRuntime | 最流行的图像分类模型 | [Github](https://docs.ultralytics.com/zh/models/) |
593+
594+
537595
#### 目标检测模型
538596

539597
**YOLO 系列**
@@ -583,6 +641,14 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
583641
| YOLOV11-SEG | OnnxRuntime | Ultralytics在COCO 数据集 上训练的模型 | [Github](https://docs.ultralytics.com/zh/tasks/segment/) |
584642
| Mask R-CNN | MXNet | Mask R-CNN 是一种在目标检测基础上,同时为每个物体生成像素级分割区域的深度学习模型 ||
585643

644+
645+
#### CLIP模型(Connecting text and images)
646+
647+
648+
| 模型名称 | 引擎 | 模型简介 | 模型开源网站 |
649+
|-------------|-------------|--------------------|------------|
650+
| clip-vit-base-patch32 | PyTorch | openai的图片及文本特征提取模型 | [Github](https://github.com/openai/CLIP) |
651+
586652
---
587653

588654
#### OBB旋转框目标检测模型
@@ -694,14 +760,23 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
694760

695761
---
696762

697-
#### 语音识别模型
763+
#### 语音识别模型(ASR)
698764

699765
这里仅介绍模型的开源项目,每个开源项目通常包含多个具体模型,本文不逐一列出。
700766

701-
| 模型名称 | 模型简介 | 模型官网 |
702-
|---------| ------------------------ |-----------------------------------------------|
703-
| Whisper | OpenAI 开源的通用语音识别(ASR)模型,支持多语言转写和翻译,具有较高的识别精度,尤其在嘈杂环境中表现良好,适合离线和批量音频处理。 | [Github](https://github.com/ggml-org/whisper.cpp) |
704-
| Vosk | 一个轻量级离线语音识别工具包,支持多种语言和平台(包括移动端与嵌入式设备),可在低资源环境中运行,适合实时语音识别场景。 | [Github](https://github.com/alphacep/vosk-api) |
767+
| 模型名称 | 模型简介 | 模型官网 |
768+
|---------|-------------------------------------------------------------------------|-----------------------------------------------|
769+
| Whisper | OpenAI 开源的通用语音识别(ASR)模型,支持多语言转写和翻译,具有较高的识别精度,尤其在嘈杂环境中表现良好,适合离线和批量音频处理。 | [Github](https://github.com/ggml-org/whisper.cpp) |
770+
| Vosk | 一个轻量级离线语音识别工具包,支持多种语言和平台(包括移动端与嵌入式设备),可在低资源环境中运行,适合实时语音识别场景。 | [Github](https://github.com/alphacep/vosk-api) |
771+
| sherpa-onnx | Sherpa-ONNX 是一个基于 ONNX Runtime 的ASR 及 TTS 推理框架 | [Github](https://github.com/k2-fsa/sherpa-onnx) |
772+
773+
#### 语音合成模型(TTS)
774+
775+
这里仅介绍模型的开源项目,每个开源项目通常包含多个具体模型,本文不逐一列出。
776+
777+
| 模型名称 | 模型简介 | 模型官网 |
778+
|---------|-------------------------------------------------------------------------|-----------------------------------------------|
779+
| sherpa-onnx | Sherpa-ONNX 是一个基于 ONNX Runtime 的ASR 及 TTS 推理框架 | [Github](https://github.com/k2-fsa/sherpa-onnx) |
705780

706781

707782
---
@@ -715,7 +790,7 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
715790

716791
## 联系方式
717792

718-
如您在使用过程中有任何问题或建议,欢迎添加微信,与我们交流并加入用户交流群
793+
如您在使用过程中有任何问题、建议,或希望进行技术交流与合作,欢迎添加微信与我联系,并加入用户交流群。
719794

720795
- **微信**: deng775747758 (请备注:SmartJavaAI)
721796
- **Email**: 775747758@qq.com
@@ -739,6 +814,12 @@ SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的
739814

740815
## 近期更新日志
741816

817+
## [v1.0.26] - 2025-10-24
818+
- 【通用视觉】集成 OpenAI CLIP 模型,支持以图搜图、以文搜图、以图搜文等功能
819+
- 【通用视觉】新增 YOLO 图像分类模型支持
820+
- 【ASR/TTS】集成 Sherpa TTS(语音合成)与 ASR(语音识别)模块,支持中文、粤语、方言、英文等多种语言
821+
- 【目标检测】优化视频目标检测功能
822+
742823
## [v1.0.25] - 2025-10-02
743824
- 【人脸识别】 新增多种人脸识别模型
744825
- 【底层优化】 支持自由选择 OpenCV 或 BufferedImage 作为图像引擎

all/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
<parent>
77
<groupId>cn.smartjavaai</groupId>
88
<artifactId>smartjavaai-parent</artifactId>
9-
<version>1.0.25</version>
9+
<version>1.0.26</version>
1010
</parent>
1111

1212
<artifactId>all</artifactId>
13-
<version>1.0.25</version>
13+
<version>1.0.26</version>
1414
<name>${project.artifactId}</name>
1515
<description>SmartJavaAI</description>
1616
<url>https://github.com/geekwenjie/SmartJavaAI</url>

bom/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
<parent>
77
<groupId>cn.smartjavaai</groupId>
88
<artifactId>smartjavaai-parent</artifactId>
9-
<version>1.0.25</version>
9+
<version>1.0.26</version>
1010
</parent>
1111

12-
<version>1.0.25</version>
12+
<version>1.0.26</version>
1313
<artifactId>bom</artifactId>
1414
<name>bom</name>
1515
<description>统一版本管理的 BOM 包,同时支持 import 和全量依赖</description>

common/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>cn.smartjavaai</groupId>
88
<artifactId>smartjavaai-parent</artifactId>
9-
<version>1.0.25</version>
9+
<version>1.0.26</version>
1010
</parent>
1111

1212
<name>common</name>

common/src/main/java/cn/smartjavaai/common/config/ModelConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ public <T> T getCustomParam(String key, Class<T> clazz) {
4545
return clazz.cast(value);
4646
}
4747

48+
public <T> T getCustomParam(String key, Class<T> clazz, T defaultValue) {
49+
Object value = customParams.getOrDefault(key, defaultValue);
50+
return clazz.cast(value);
51+
}
52+
53+
4854
/**
4955
* 添加个性化配置项
5056
*/

face/src/main/java/cn/smartjavaai/face/enums/SimilarityType.java renamed to common/src/main/java/cn/smartjavaai/common/enums/SimilarityType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cn.smartjavaai.face.enums;
1+
package cn.smartjavaai.common.enums;
22

33
/**
44
* @author dwj

common/src/main/java/cn/smartjavaai/common/utils/BufferedImageUtils.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,4 +573,36 @@ public static void drawKeyPoints(Graphics2D graphics, List<Point> points, Color
573573
}
574574
}
575575

576+
577+
/**
578+
* 绘制检测框
579+
* @param sourceImage
580+
* @param detectionResponse
581+
* @throws IOException
582+
*/
583+
public static void drawFaceSearchResult(Graphics2D graphics, DetectionInfo detectionInfo, String text) {
584+
graphics.setColor(Color.RED);// 边框颜色
585+
graphics.setStroke(new BasicStroke(2)); // 线宽2像素
586+
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
587+
RenderingHints.VALUE_ANTIALIAS_ON); // 抗锯齿
588+
int stroke = 2;
589+
DetectionRectangle rectangle = detectionInfo.getDetectionRectangle();
590+
graphics.setColor(Color.RED);// 边框颜色
591+
graphics.drawRect(rectangle.getX(), rectangle.getY(), rectangle.getWidth(), rectangle.getHeight());
592+
//绘制人脸关键点
593+
//人脸查询结果
594+
if(detectionInfo.getFaceInfo().getFaceSearchResults() != null){
595+
for (FaceSearchResult faceSearchResult : detectionInfo.getFaceInfo().getFaceSearchResults()){
596+
if(StringUtils.isNotBlank(faceSearchResult.getMetadata())){
597+
JsonObject metadata = GsonUtils.parseToJsonObject(faceSearchResult.getMetadata());
598+
JsonElement nameElement = metadata.get("name");
599+
if(metadata.has("name")){
600+
Graphics2DUtils.drawText(graphics, nameElement.getAsString(), rectangle.getX(), rectangle.getY(), stroke, 4);
601+
}
602+
}
603+
}
604+
}
605+
graphics.dispose();
606+
}
607+
576608
}

common/src/main/java/cn/smartjavaai/common/utils/DJLCommonUtils.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.nio.file.Files;
1212
import java.nio.file.Path;
1313
import java.util.ArrayList;
14+
import java.util.Arrays;
1415
import java.util.List;
1516
import java.util.Objects;
1617

@@ -19,6 +20,16 @@
1920
*/
2021
public class DJLCommonUtils {
2122

23+
private static final List<String> SUPPORTED_PROTOCOLS = Arrays.asList(
24+
"file://",
25+
"http://",
26+
"https://",
27+
"jar://",
28+
"djl://",
29+
"s3://",
30+
"hdfs://"
31+
);
32+
2233
/**
2334
* 检查模型目录中是否存在 "serving.properties" 文件
2435
*
@@ -158,5 +169,17 @@ public static DetectedObjects buildEmptyDetectedObjects(){
158169
return new DetectedObjects(classNames, probabilities, boxes);
159170
}
160171

172+
/**
173+
* 判断路径是否以已知协议开头
174+
* @param path 模型路径
175+
* @return 是否以支持的协议开头
176+
*/
177+
public static boolean hasSupportedProtocol(String path) {
178+
if (path == null || path.isEmpty()) {
179+
return false;
180+
}
181+
return SUPPORTED_PROTOCOLS.stream().anyMatch(path::startsWith);
182+
}
183+
161184

162185
}

0 commit comments

Comments
 (0)