# mica-ai
**Repository Path**: dreamlu/mica-ai
## Basic Information
- **Project Name**: mica-ai
- **Description**: Mica AI —— 基于 Java 17 的 AI 基础组件库,专注于简化 OCR、语音合成与识别等 AI 能力的集成与调用。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 1
- **Created**: 2026-06-18
- **Last Updated**: 2026-08-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 🚀 Mica AI
### 让 Java 工程师也能玩转主流 AI 模型 —— **零 Python · 零 PyTorch · 纯 ONNX Runtime**
[](https://openjdk.org/)
[](https://spring.io/projects/spring-boot)
[](https://onnxruntime.ai/)
[](LICENSE)
[](https://mvnrepository.com/artifact/net.dreamlu/mica-ai)
> 一行依赖,五大 AI 能力开箱即用:OCR · TTS · ASR · 声纹 · 意图识别
>
> 给 Java 生态造的"AI 积木",从此告别在 Java 里调 Python 微服务
[快速开始](#-快速开始) · [能力一览](#-六大能力一览) · [Spring Boot 一键接入](#-spring-boot-starter) · [应用场景](#-应用场景) · [WebSocket 实时识别](docs/websocket实时识别.md) · [更新日志](CHANGELOG.md)
---
## ✨ 为什么选 Mica AI?
还在为 Java 项目集成 AI 模型苦恼吗?
| 😩 痛点 | ✅ Mica AI 的解法 |
|--------|-----------------|
| Python 微服务部署运维成本高、跨语言调用调试难 | **纯 Java 推理**,JVM 里直接跑,无需任何 Python 进程 |
| PyTorch / PaddlePaddle 几百 MB 起步,包体爆炸 | **ONNX Runtime** 一个 runtime 全部搞定,CPU/GPU/CUDA/DML 自由切换 |
| 模型预处理、后处理各家一套,文档稀烂 | **端到端复刻 Python 实现**,预处理 / 后处理 / 解码全部内置,开箱即用 |
| 集成 Spring Boot 要写一堆 Bean 配置 | **官方 Starter**,一行 YAML 即可注入引擎 Bean |
| 国产模型下载速度感人 | **ModelScope 国内镜像优先**,配套 Python 工具链 `make download` 一键搞定 |
> 💡 **Mica AI 不是又一个 SDK,而是 Java 工程师的 AI 全家桶。**
---
## 🎯 六大能力一览
### 📦 一图看懂核心模块
```
┌─────────────────────────────────────┐
│ Spring Boot App │
└──────────────┬──────────────────────┘
│ @Autowired
┌────────────────────────┼────────────────────────┐
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────────┐ ┌──────────────────┐
│ mica-ai-tts │ │ mica-ai-voice │ │ mica-ai-ppocr │
│ 语音合成 🎤 │ │ 语音识别 🎧 │ │ 文字识别 📷 │
│ Kokoro-82M │ │ SenseVoice │ │ PP-OCRv6 │
│ 103 种音色 │ │ 多语种 / 热词雷达 │ │ tiny/small/md │
└──────────────────┘ └──────────────────────┘ └──────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────────┐ ┌──────────────────┐
│ mica-ai-speaker │ │ mica-ai-intent │ │ mica-ai-face │
│ 声纹识别 👤 │ │ 中文意图识别 🧠 │ │ 人脸识别 🎭 │
│ ERes2Net 256 维 │ │ BERT 中文分类 │ │ OpenCV Zoo │
│ │ │ │ │ 检测 + 512d 向量 │
└──────────────────┘ └──────────────────────┘ └──────────────────┘
│
▼
┌──────────────────────┐
│ mica-ai-common │
│ ONNX Provider │
│ 统一异常 / 音频 │
└──────────────────────┘
```
### 🔥 各能力速览
| 模块 | 能力 | 亮点 | 状态 |
|------|------|------|------|
| 🎤 [**mica-ai-tts**](mica-ai-core/mica-ai-tts/README.md) | Kokoro-82M 语音合成 | 中英双语 · 103 个音色 · 可插拔 G2P(默认 / houbb-pinyin / 自定义) | ✅ Stable |
| 🎧 [**mica-ai-voice**](mica-ai-core/mica-ai-voice/README.md) | SenseVoice 语音识别 | 多语种(中/英/日/韩/粤)· **Trie 树热词雷达** · 长音频自动分段 | ✅ Stable |
| 📷 [**mica-ai-ppocr**](mica-ai-core/mica-ai-ppocr/README.md) | PP-OCRv6 文字识别 | 检测+识别全链路 · tiny/small/medium 三档可选 · CPU bit-exact | ✅ Stable |
| 👤 [**mica-ai-speaker**](mica-ai-core/mica-ai-speaker/README.md) | ERes2Net 声纹识别 | 256 维 Embedding · 验证 / 识别双模式 · 80 维 FBank 特征 | ✅ Stable |
| 🧠 [**mica-ai-intent**](mica-ai-core/mica-ai-intent/README.md) | BERT 中文意图识别 | 按字分词 · Softmax 分类 · 兼容 HuggingFace 词表 | ✅ Stable |
| 🎭 [**mica-ai-face**](mica-ai-core/mica-ai-face/README.md) | OpenCV Zoo 人脸识别 | 检测 + 5 关键点对齐 + 512d 向量 · YuNet + SFace (Apache-2.0) · **检索由向量库负责** | ✅ Stable |
---
## 🚀 快速开始
### 1️⃣ 添加 Maven 依赖
```xml
net.dreamlu
mica-ai-tts
${mica-ai.version}
net.dreamlu
mica-ai-tts-spring-boot-starter
${mica-ai.version}
```
> 💡 把 `mica-ai-tts` 换成 `mica-ai-voice` / `mica-ai-ppocr` / `mica-ai-speaker` / `mica-ai-intent` / `mica-ai-face` 即可。
### 2️⃣ 30 秒跑通一个 TTS
```java
KokoroTtsConfig config = KokoroTtsConfig.builder()
.modelPath("model/model_dynamic.onnx")
.voicesDir("model/voices")
.configPath("model/config.json")
.defaultVoice("zf_001") // 中文女声
.build();
try (KokoroTts tts = new KokoroTts(config)) {
TtsResult result = tts.synthesize("你好,世界!欢迎使用 Mica AI 🎉");
tts.saveWav(result, "hello.wav"); // 24kHz / 16-bit PCM
}
```
是的,就这么简单 —— 没有任何 Python 进程,没有任何中间服务。
### 3️⃣ 一行配置开启 Spring Boot Starter
```yaml
mica:
ai:
tts:
model-path: model/model_dynamic.onnx
voices-dir: model/voices
config-path: model/config.json
default-voice: zf_001
onnx-provider: cpu # 可选: cpu / cuda / dml
```
```java
@Service
@RequiredArgsConstructor
public class VoiceNotifyService {
private final KokoroTts tts; // ← 直接注入,无需任何 @Bean
public void notify(String text) throws Exception {
tts.saveWav(tts.synthesize(text), "notify.wav");
}
}
```
---
## 🎬 各能力代码一瞥
### 📷 OCR 文字识别
```java
PPOcrV6Config config = PPOcrV6Config.builder()
.detModelPath("models/PP-OCRv6_tiny_det_onnx/inference.onnx")
.recModelPath("models/PP-OCRv6_tiny_rec_0515_onnx/inference.onnx")
.recCharDictPath("models/rec_char_dict.txt")
.build();
try (PPOcrV6Engine ocr = new PPOcrV6Engine(config)) {
List results = ocr.run(Imgcodecs.imread("card.png"));
results.forEach(r -> System.out.printf("%s (%.3f)%n", r.text(), r.score()));
}
```
### 🎧 语音识别 + 热词雷达
```java
SenseVoiceConfig config = SenseVoiceConfig.builder()
.encoderPath("model/SenseVoice-Encoder.fp32.onnx")
.decoderPath("model/SenseVoice-CTC.fp32.onnx")
.tokenizerPath("model/Tokenizer.bpe.model")
.hotwords(List.of("Mica AI", "声纹识别", "Kokoro"))
.build();
try (SenseVoice voice = new SenseVoice(config)) {
TranscriptionResult result = voice.recognizeFile("meeting.wav");
System.out.println("识别结果: " + result.text());
System.out.println("命中热词: " + result.hotwords());
}
```
### 👤 声纹验证 / 说话人识别
```java
try (SpeakerVerifier verifier = new SpeakerVerifier("models/eres2net.onnx")) {
float[] a = verifier.extractEmbedding("alice.wav");
float[] b = verifier.extractEmbedding("alice2.wav");
double sim = verifier.similarity(a, b);
System.out.printf("声纹相似度: %.4f → 同一人: %s%n", sim, sim > 0.7);
}
```
### 🧠 中文意图识别
```java
BertIntentConfig config = BertIntentConfig.builder()
.modelPath("bert_intent.onnx")
.vocabPath("vocab.txt")
.labels(List.of("weather", "music", "chat", "news"))
.build();
try (BertIntent intent = new BertIntent(config)) {
IntentResult r = intent.predict("今天天气怎么样");
System.out.println("意图: " + r.intent() + ", 置信度: " + r.confidence());
}
```
> 完整 import 与 Starter 用法见 [mica-ai-intent/README.md](mica-ai-core/mica-ai-intent/README.md) 与 [mica-ai-intent-spring-boot-starter/README.md](mica-ai-starters/mica-ai-intent-spring-boot-starter/README.md)。
### 🎭 人脸识别(检测 + 512d 向量)
```java
try (FaceEngine face = FaceEngine.builder()
.detModelPath(Path.of("models/face_detection_yunet_2023mar.onnx"))
.recModelPath(Path.of("models/face_recognition_sface_2021dec.onnx"))
.build()) {
// 图片 → 所有人脸的 512d Embedding(已 L2 归一化)
List faces = face.extract(Path.of("group.jpg"));
// 入库 / 检索交给你自己的向量库(Milvus / pgvector)
for (FaceEmbedding fe : faces) {
milvusClient.insert("face_gallery", userId, fe.getVector());
}
}
```
> mica-ai-face **只做检测 + 推理**,不做人脸库 / 1:N 检索。详见 [mica-ai-face/README.md](mica-ai-core/mica-ai-face/README.md)。
> 🌐 **WebSocket 实时识别**完整方案(含 VAD / 环形缓冲 / 流式推送)请看 [docs/websocket实时识别.md](docs/websocket实时识别.md)
---
## 🧰 Spring Boot Starter
每个能力都有对应的 Starter,遵循"**配置前缀** + **自动注入**"的 Spring Boot 约定:
| Starter | 配置前缀 | 一句话能力 |
|---------|---------|----------|
| [mica-ai-ppocr-spring-boot-starter](mica-ai-starters/mica-ai-ppocr-spring-boot-starter/README.md) | `mica.ai.ppocr` | OCR 文字识别 |
| [mica-ai-tts-spring-boot-starter](mica-ai-starters/mica-ai-tts-spring-boot-starter/README.md) | `mica.ai.tts` | TTS 语音合成 |
| [mica-ai-voice-spring-boot-starter](mica-ai-starters/mica-ai-voice-spring-boot-starter/README.md) | `mica.ai.voice` | ASR 语音识别 |
| [mica-ai-speaker-spring-boot-starter](mica-ai-starters/mica-ai-speaker-spring-boot-starter/README.md) | `mica.ai.speaker` | 声纹识别 |
| [mica-ai-intent-spring-boot-starter](mica-ai-starters/mica-ai-intent-spring-boot-starter/README.md) | `mica.ai.intent` | 中文意图识别 |
| [mica-ai-face-spring-boot-starter](mica-ai-starters/mica-ai-face-spring-boot-starter/README.md) | `mica.ai.face` | 人脸识别(512d 向量) |
只需在 `application.yml` 配好模型路径,对应 `Bean` 即可 `@Autowired` 直接用。
---
## 🏗️ 项目结构
```
mica-ai/
├── mica-ai-common/ # 公共:ONNX Provider、统一异常、音频工具
├── mica-ai-core/ # 核心引擎(零 Spring)
│ ├── mica-ai-ppocr/ # 📷 PP-OCRv6
│ ├── mica-ai-tts/ # 🎤 Kokoro TTS
│ ├── mica-ai-voice/ # 🎧 SenseVoice
│ ├── mica-ai-speaker/ # 👤 ERes2Net 声纹
│ ├── mica-ai-intent/ # 🧠 BERT 意图
│ └── mica-ai-face/ # 🎭 InsightFace 人脸
├── mica-ai-starters/ # Spring Boot Starter
│ ├── mica-ai-ppocr-spring-boot-starter/
│ ├── mica-ai-tts-spring-boot-starter/
│ ├── mica-ai-voice-spring-boot-starter/
│ ├── mica-ai-speaker-spring-boot-starter/
│ ├── mica-ai-intent-spring-boot-starter/
│ └── mica-ai-face-spring-boot-starter/
├── model-tools/ # Python 模型工具链(下载 / 转换 / 训练)
└── docs/ # 方案文档(WebSocket 实时识别、意图微调…)
```
---
## 🎨 设计原则
- 🎯 **零 Spring 依赖** — 核心模块纯 Java,可在任何 Java 17+ 项目中独立使用
- 🧱 **Builder 模式** — 所有引擎通过 `XxxConfig.builder()` 链式构造,类型安全、IDE 友好
- 🪶 **轻量 API** — 引擎实现 `AutoCloseable`,`try-with-resources` 一行管理资源
- 🔌 **可插拔架构** — 关键组件通过接口注入(如 TTS 的 `G2P`、语音的 `Tokenizer`)
- ⚡ **纯 ONNX Runtime** — 零 PyTorch / 零 PaddlePaddle / 零 Python 进程,JVM 内全栈推理
- 🌏 **国内友好** — 模型工具链默认走 ModelScope,国内下载速度拉满
- 🧪 **Bit-exact 优先** — 优先 CPU 一致性测试,需要 GPU 时换 `onnxruntime_gpu` 即可
---
## 🛠️ 环境要求
| 组件 | 版本 | 说明 |
|------|------|------|
| ☕ JDK | **17+** | 推荐 Azul Zulu 17 / Temurin 17 |
| 📦 Maven | 3.6+ | 构建 / 打包 |
| 🧠 ONNX Runtime | 1.26.0 | Maven 自动拉取,CPU/GPU 可选 |
| 🌱 Spring Boot | 4.1.0+ | 仅 Starter 必需 |
> GPU 加速:把 `onnxruntime` 替换为 `onnxruntime_gpu`,并将 `onnxProvider` 设为 `cuda` / `dml` 即可。
---
## 🗺️ 应用场景
| 场景 | 推荐组合 |
|------|---------|
| 🏢 **智能客服 / 语音助手** | mica-ai-tts + mica-ai-voice + mica-ai-intent |
| 📝 **会议记录 / 字幕生成** | mica-ai-voice + WebSocket 实时方案 |
| 🔍 **票据 / 证件识别** | mica-ai-ppocr(tiny / small / medium) |
| 🔐 **声纹登录 / 反作弊** | mica-ai-speaker + 自建 Embedding 库 |
| 🎭 **人脸识别 / 门禁 / 考勤** | mica-ai-face + Milvus / pgvector(向量库做 1:N 检索) |
| 🤖 **IoT 语音交互** | mica-ai-voice(VAD)+ mica-ai-tts + mica-ai-intent |
> 📚 更多落地参考见 [docs/websocket实时识别.md](docs/websocket实时识别.md)(含完整 WebSocket + VAD 流式方案)
---
## 🤝 与 BladeX 物联网平台联动
[✨✨✨ **BladeX 物联网平台** ✨✨✨ iot.bladex.cn](https://iot.bladex.cn?from=mica-mqtt)
Mica AI 与 BladeX 物联网平台无缝集成,让 AI 能力直接落到边缘设备与物联网网关。
---
## 📄 License
本项目基于 [Apache License 2.0](LICENSE) 协议开源,可放心用于商业项目。
---
## 🌟 Star History
如果 Mica AI 对你有帮助,欢迎 ⭐ **Star** 支持一下,你的 star 是我们持续迭代的最大动力!
> 💡 **Mica AI 正在持续迭代中,欢迎 Star & Watch 关注最新动态!**
---
## 💖 致谢
感谢所有为 Mica 系列项目做出贡献的开发者,以及以下开源项目:
- [PP-OCRv6](https://github.com/PaddlePaddle/PaddleOCR) · [Kokoro TTS](https://github.com/hexgrad/kokoro) · [SenseVoice](https://github.com/FunASR/SenseVoice)
- [ERes2Net](https://github.com/speechbrain/ERes2Net) · [Chinese-BERT-WWM-Ext](https://huggingface.co/hfl/chinese-bert-wwm-ext) · [OpenCV Zoo](https://github.com/opencv/opencv_zoo)
- [ONNX Runtime](https://onnxruntime.ai/) · [houbb/pinyin](https://github.com/houbb/pinyin)
**[⬆ 回到顶部](#-mica-ai)** · Made with ❤️ by [Mica Team](https://www.dreamlu.net)