您的智能犬种识别助手,让每一次相遇都成为了解的开始
「汪种知」是一款革新性的犬种识别应用,融合了最新的人工智能技术与直观的用户界面设计。基于 Flutter 框架开发,集成深度学习模型,支持 60 种犬种的实时识别,为爱犬人士和专业人员提供便捷、准确的犬种鉴定服务。
- 智能识别:采用先进的深度学习算法,支持 60 种犬种的精确识别
- 实时分析:秒级响应,快速输出识别结果
- 专业解析:提供每个犬种的详细特征、习性和饲养建议
- 便捷操作:支持实时拍照和相册导入,操作简单直观
- 优雅界面:采用 Material Design 设计语言,提供流畅优雅的用户体验
- 个人用户:帮助识别陌生犬种,了解不同品种特点
- 宠物医院:辅助医生快速识别犬种,提供针对性诊疗建议
- 培训机构:用于犬种知识教学和实践培训
- 宠物商店:协助客户了解不同犬种特点,做出更好的选择
- 动物救助:帮助救助站快速识别流浪犬的品种,便于救助和安置
-
深度学习模型:
- 训练数据集超过 1000 张图片
- 模型准确率为 42.71%
- 支持实时图像处理和分析
-
Flutter 跨平台开发:
- 统一的用户体验
- 高效的性能表现
- 流畅的动画效果
-
本地化处理:
- 离线识别,保护隐私
- 快速响应,无需网络
- 实时分析,即时反馈
-
科普教育
- 提供专业的犬种知识库
- 帮助用户了解不同犬种特点
- 促进科学养犬理念传播
-
行业应用
- 为专业人士提供辅助工具
- 提高工作效率和准确度
- 促进行业数字化转型
-
社会价值
- 推广科学养犬理念
- 提高养犬认知水平
- 促进人犬和谐相处
-
技术升级
- 持续优化识别算法
- 扩充犬种数据库
- 提升识别准确率
-
功能拓展
- 添加犬种行为分析
- 整合健康管理功能
- 开发社区互动模块
-
场景延伸
- 拓展专业版功能
- 对接行业解决方案
- 探索商业化可能
基于 Flutter 框架开发的犬种识别应用,集成深度学习模型,支持 60 种犬种的实时识别。本项目作为人工智能与移动应用开发的实践项目,旨在提供一个完整的端到端解决方案。
- 掌握 Flutter 框架的基本概念和开发流程
- 学习 Dart 编程语言的核心特性
- 理解 Flutter 界面构建和状态管理
- 熟悉常用 Widget 的使用方法
-
Flutter 基础
- Flutter 环境搭建
- Dart 语言基础
- Widget 介绍与使用
- 布局与导航
-
UI 开发
- Material Design 组件
- Cupertino 组件
- 自定义 Widget
- 响应式布局
-
状态管理
- setState
- GetX 使用
-
网络与数据
- HTTP 请求
- JSON 解析
- 本地存储
- 数据库操作
- Flutter 中文网:https://flutter.cn
- Dart 中文文档:https://dart.cn
- Flutter 实战:https://book.flutterchina.club
学员将通过实际项目练习来巩固所学知识,包括:
- UI 界面构建
- 网络请求处理
- 数据存储管理
- 状态管理应用
wangzhongzhi/
├── lib/ # Flutter应用主目录
│ ├── pages/ # 页面文件
│ └── main.dart # 应用入口文件
├── assets/ # 资源文件目录
│ └── models/ # 模型文件
│ ├── breed_zh.txt # 中文犬种名称
│ ├── breed_en.txt # 英文犬种名称
│ └── dog_breed_classifier.tflite # 转换后的模型文件
├── training/ # 模型训练相关文件
│ ├── images/ # 训练图片目录
│ │ ├── train/ # 训练集
│ │ ├── validation/ # 验证集
│ │ └── test/ # 测试集
│ ├── train.py # 训练脚本
│ └── logger_config.py # 日志配置
└── README.md # 项目说明文档
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# 安装依赖
pip install tensorflow numpy pillow
- 在
training/images/
目录下创建训练、验证和测试数据集文件夹 - 每个犬种创建独立子文件夹,文件夹名为犬种英文名
- 将对应图片放入相应文件夹
training/images/
├── train/
│ ├── labrador_retriever/
│ ├── german_shepherd/
│ └── ...
├── validation/
│ ├── labrador_retriever/
│ ├── german_shepherd/
│ └── ...
└── test/
├── labrador_retriever/
├── german_shepherd/
└── ...
# 进入训练目录
cd training
# 运行训练脚本
python train.py
- 数据增强:通过 ImageDataGenerator 实现图像旋转、缩放 10000 等操作
- 模型构建:使用 CNN 架构,包含多个卷积层和池化层
- 训练过程:执行 10 轮训练,自动保存最佳模型
- 模型评估:输出训练、验证和测试集的准确率
- 结果保存:
- 模型文件:
dog_breed_classifier.h5
- 类别映射:
breed_class_mapping.json
- 模型文件:
- 图像尺寸:150×150 像素
- 批次大小:32
- 训练轮数:10
- 优化器:Adam
- 损失函数:Categorical Crossentropy
- 确保训练数据集分布均衡
- 图片格式支持:JPG、PNG
- 建议每个类别至少准备 100 张图片
- 训练过程中会自动记录日志
- 可通过调整
train.py
中的参数优化训练效果
Found 601 images belonging to 60 classes.
Found 300 images belonging to 60 classes.
Epoch 1/10
12/18 [===================>..........] - ETA: 22s - loss: 4.1473 - accuracy: 0.0080/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/PIL/Image.py:1054: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
warnings.warn(
18/18 [==============================] - 62s 3s/step - loss: 4.1303 - accuracy: 0.0053 - val_loss: 4.0923 - val_accuracy: 0.0278
Epoch 2/10
18/18 [==============================] - 34s 2s/step - loss: 4.0942 - accuracy: 0.0264 - val_loss: 4.0807 - val_accuracy: 0.0521
Epoch 3/10
18/18 [==============================] - 29s 2s/step - loss: 4.0757 - accuracy: 0.0246 - val_loss: 4.0029 - val_accuracy: 0.0417
Epoch 4/10
18/18 [==============================] - 29s 2s/step - loss: 3.9938 - accuracy: 0.0387 - val_loss: 3.8604 - val_accuracy: 0.0660
Epoch 5/10
18/18 [==============================] - 31s 2s/step - loss: 3.8481 - accuracy: 0.0791 - val_loss: 3.6985 - val_accuracy: 0.1181
Epoch 6/10
18/18 [==============================] - 43s 2s/step - loss: 3.7142 - accuracy: 0.0949 - val_loss: 3.4112 - val_accuracy: 0.1840
Epoch 7/10
18/18 [==============================] - 35s 2s/step - loss: 3.5063 - accuracy: 0.1230 - val_loss: 3.1563 - val_accuracy: 0.1875
Epoch 8/10
18/18 [==============================] - 18s 1s/step - loss: 3.1739 - accuracy: 0.2021 - val_loss: 2.7770 - val_accuracy: 0.3472
Epoch 9/10
18/18 [==============================] - 19s 1s/step - loss: 3.0304 - accuracy: 0.2302 - val_loss: 2.5901 - val_accuracy: 0.3229
Epoch 10/10
18/18 [==============================] - 22s 1s/step - loss: 2.7395 - accuracy: 0.2917 - val_loss: 2.2847 - val_accuracy: 0.4271
Found 298 images belonging to 60 classes.
10/10 [==============================] - 4s 364ms/step - loss: 2.3151 - accuracy: 0.4262
[鹰眼 AI]: 2025-02-14 19:19:55,616 - **main** - INFO - 测试准确率: 0.42617449164390564
数据集类型 | 图片数量 | 类别数量 |
---|---|---|
训练集 | 601 | 60 |
验证集 | 300 | 60 |
测试集 | 298 | 60 |
🌟 数据分布数学描述:
- 平均每类样本数:
$$\mu = \frac{N_{total}}{C} = \frac{601+300+298}{60} \approx 19.98$$ - 标准差:
$$\sigma = \sqrt{\frac{1}{C}\sum_{i=1}^{C}(n_i - \mu)^2}$$ 其中$n_i$ 为第 i 类的样本数
数据集类型 | 准确率 |
---|---|
训练集 | 29.17% |
验证集 | 42.71% |
测试集 | 42.62% |
🌟 性能分析:
- 过拟合系数:
$$\Delta = \text{训练准确率} - \text{验证准确率} = 29.17% - 42.71% = -13.54%$$ 负值表明存在欠拟合现象
训练阶段 | 准确率 | 说明 |
---|---|---|
起始阶段 | 0.53% | 模型开始学习 |
中期阶段 | 18.75% | 性能显著提升 |
最终阶段 | 42.71% | 达到最佳表现 |
注:通过 10 轮(epochs)训练,模型性能从初始的 0.53%提升至最终的 42.71%,显示出良好的学习能力。
🌟 学习曲线分析:
令
本项目包含 30 种常见犬种的分类,以下是英文和中文对照:
英文名称 | 中文名称 |
---|---|
Labrador Retriever | 拉布拉多寻回犬 |
German Shepherd | 德国牧羊犬 |
Golden Retriever | 金毛寻回犬 |
French Bulldog | 法国斗牛犬 |
Bulldog | 英国斗牛犬 |
Poodle | 贵宾犬 |
Beagle | 比格犬 |
Rottweiler | 罗威纳犬 |
Dachshund | 腊肠犬 |
Yorkshire Terrier | 约克夏梗 |
Boxer | 拳师犬 |
Pomeranian | 博美犬 |
Chihuahua | 吉娃娃 |
Siberian Husky | 西伯利亚哈士奇 |
Great Dane | 大丹犬 |
Doberman Pinscher | 杜宾犬 |
Shih Tzu | 西施犬 |
Border Collie | 边境牧羊犬 |
Cocker Spaniel | 可卡犬 |
Australian Shepherd | 澳大利亚牧羊犬 |
Bernese Mountain Dog | 伯恩山犬 |
Pug | 巴哥犬 |
Corgi | 柯基犬 |
Saint Bernard | 圣伯纳犬 |
Chow Chow | 松狮犬 |
Alaskan Malamute | 阿拉斯加雪橇犬 |
Bull Terrier | 牛头梗 |
Dalmatian | 大麦町犬 |
Shetland Sheepdog | 设得兰牧羊犬 |
Newfoundland | 纽芬兰犬 |
-
卷积神经网络结构 输入层 (150×150×3) → 卷积层 → 池化层 → 全连接层 → 输出层 (60 类别)
-
数据预处理
- 图像缩放: 150×150 像素
- 像素归一化: RGB 值/255
- 数据增强: 随机翻转、旋转、缩放
🌟 卷积运算数学表示: $$(I * K){ij} = \sum{m}\sum_{n} I(i+m,j+n)K(m,n)$$ 其中:
-
$I$ 为输入图像矩阵 -
$K$ 为卷积核 -
$(i,j)$ 为输出特征图位置
-
准确率计算
$$Accuracy = \frac{TP + TN}{TP + TN + FP + FN} \times 100%$$ 其中:
- TP = 真阳性
- TN = 真阴性
- FP = 假阳性
- FN = 假阴性
-
损失函数
交叉熵损失:
$$L = -\frac{1}{N}\sum_{i=1}^{N}\sum_{c=1}^{C} y_{i,c} \log(p_{i,c})$$ 其中:
-
$N$ = 样本数 -
$C$ = 类别数 -
$y_{i,c}$ = 样本 i 的真实类别 c 的指示器(0 或 1) -
$p_{i,c}$ = 样本 i 属于类别 c 的预测概率
🌟 梯度下降更新公式:
-
$\theta$ = 模型参数 -
$\eta$ = 学习率 (默认 0.001) -
$\nabla_\theta L$ = 损失函数梯度
🌟 Adam 优化器参数更新:
🌟 学习率衰减:
采用指数衰减策略:
-
$\eta_0$ = 初始学习率 (0.001) -
$k$ = 衰减率 -
$t$ = 训练步数
🌟 正则化方法:
L2 权重衰减:
-
数据增强公式扩展:
- 随机旋转角度:$\theta \sim U(-15^\circ, 15^\circ)$
- 亮度调整因子:$\alpha \sim U(0.8, 1.2)$
- 对比度调整:$\beta \sim U(0.8, 1.2)$
-
模型复杂度分析: 参数量计算公式:
$$Params = \sum_{l=1}^{L}(k_l \times k_l \times c_{in}^{(l)} \times c_{out}^{(l)} + c_{out}^{(l)})$$ 其中:-
$k_l$ = 第 l 层卷积核尺寸 -
$c_{in}^{(l)}$ = 输入通道数 -
$c_{out}^{(l)}$ = 输出
-
主要功能展示:
- 左图:实时摄像头预览和拍照识别界面
- 右图:识别结果分析和详细信息展示
- 犬种概率分布饼图
- 详细品种特征说明
- 饲养建议和注意事项
本项目采用 木兰宽松许可证 (Mulan PSL) 进行许可。
有关详细信息,请参阅 LICENSE 文件。
感谢您使用本项目!您的支持是开源持续发展的核心动力。
每一份捐赠都将直接用于:
✅ 服务器与基础设施维护
✅ 新功能开发与版本迭代
✅ 文档优化与社区建设
点滴支持皆能汇聚成海,让我们共同打造更强大的开源工具!
🙌 感谢您成为开源社区的重要一员!
💬 捐赠后欢迎通过社交平台与我联系,您的名字将出现在项目致谢列表!