基于CNN深度学习算实现手写字母识别系统python源码+训练好的模型+说明文档

手写字母识别

基于深度学习的手写字母识别 模型,用户可在画布上绘制大写字母(A-Z) ,由训练好的 CNN 模型进行预测识别。

✅ 功能特性

✔ 用户可在交互式画布上绘制字母

✔ 使用 OpenCV 进行图像预处理 ,提升识别效果

✔ 基于**训练好的卷积神经网络(CNN)**进行预测

✔ 模型在 EMNIST 数据集上训练

安装

1️⃣ 克隆仓库

bash 复制代码
git clone firc-projects
cd handwritten_letter_recognition

2️⃣ 安装依赖

bash 复制代码
pip install -r requirements.txt

使用方法

运行应用

bash 复制代码
python3 app.py
  • 在弹出的窗口中绘制大写字母(A-Z)。
  • 按 's' 键进行字母识别。(按 'q' 退出)
  • 程序将输出识别结果及置信度。

📊 输出示例

复制代码
Predicted Letter: W
Confidence: 96.85%

🧠 模型详情

  • 架构: 卷积神经网络(CNN)
  • 数据集: 在 EMNIST Letters 数据集上训练(28x28 灰度图像)
  • 类别数: 26 个大写字母(A-Z)

📊 模型性能

测试准确率与损失

  • 测试准确率: 94.57%
  • 测试损失: 0.1703

📜 分类报告

复制代码
              precision    recall  f1-score   support

           A       0.93      0.96      0.95       800
           B       0.98      0.97      0.98       800
           C       0.97      0.96      0.97       800
           D       0.97      0.96      0.96       800
           E       0.97      0.98      0.97       800
           F       0.98      0.97      0.98       800
           G       0.91      0.81      0.86       800
           H       0.95      0.96      0.96       800
           I       0.78      0.73      0.76       800
           J       0.97      0.95      0.96       800
           K       0.98      0.97      0.98       800
           L       0.75      0.79      0.77       800
           M       0.99      1.00      0.99       800
           N       0.96      0.97      0.96       800
           O       0.96      0.98      0.97       800
           P       0.98      0.99      0.99       800
           Q       0.85      0.90      0.88       800
           R       0.97      0.96      0.97       800
           S       0.98      0.98      0.98       800
           T       0.97      0.98      0.97       800
           U       0.95      0.94      0.95       800
           V       0.93      0.94      0.93       800
           W       1.00      0.98      0.99       800
           X       0.97      0.98      0.98       800
           Y       0.95      0.96      0.96       800
           Z       0.99      1.00      0.99       800

    accuracy                           0.95     20800
   macro avg       0.95      0.95      0.95     20800
weighted avg       0.95      0.95      0.95     20800

📈 训练过程可视化

以下为模型的训练准确率与损失曲线图:

!

🛠 模型配置

yaml 复制代码
model:
  type: "CNN"
  layers:
    - Conv2D: {filters: 64, kernel_size: [3,3], activation: "LeakyReLU", input_shape: [28, 28, 1], kernel_initializer: "he_normal"}
    - MaxPooling2D: {pool_size: [2,2]}
    - Conv2D: {filters: 128, kernel_size: [3,3], activation: "LeakyReLU", kernel_initializer: "he_normal"}
    - MaxPooling2D: {pool_size: [2,2]}
    - Conv2D: {filters: 256, kernel_size: [3,3], activation: "LeakyReLU", kernel_initializer: "he_normal"}
    - Flatten: {}
    - Dense: {units: 512, activation: "LeakyReLU", kernel_initializer: "he_normal"}
    - Dropout: {rate: 0.4}
    - Dense: {units: 26, activation: "softmax"}
training:
  optimizer: "adam"
  loss_function: "categorical_crossentropy"
  batch_size: 64
  epochs: 30
  learning_rate_schedule: "ReduceLROnPlateau (patience=1, factor=0.5, min_lr=1e-5)"
dataset:
  name: "EMNIST Letters"
  input_shape: [28, 28, 1]
  classes: 26
  preprocessing:        # 数据预处理
    - "逆时针旋转 90°"
    - "水平翻转"
    - "将像素值归一化至 [0,1] 范围"
  augmentation:         # 数据增强
    - "RandomAffine: degrees=6, translate=(0.05, 0.05), scale=(0.98, 1.02)"
    - "RandomApply: ElasticTransform(alpha=2.0, p=0.2)"
    - "RandomApply: GaussianBlur(kernel_size=3, p=0.05)"

开发过程中遇到的挑战

在开发过程中,我遇到了多个技术挑战,并逐一进行了系统性解决:

1️⃣ 数据预处理与方向校正

  • 挑战: EMNIST 数据集中的图像存在顺时针旋转 90° 并镜像的问题,导致预测不准确。
  • 解决方案: 实现了自定义预处理 步骤,包括逆时针旋转 90° 和水平翻转,确保图像在输入模型前方向正确。

2️⃣ 使模型适应真实手写输入

  • 挑战: 模型在 EMNIST 上表现良好,但由于数据集偏差,对真实手写输入的识别能力较弱。
  • 解决方案: 引入了数据增强 ,包括弹性变换、高斯模糊及轻微仿射变换 ,有效提升了模型对不同书写风格的泛化能力。

3️⃣ 解决相似字母的误分类问题(I、L、G、Q)

  • 挑战: 模型经常将外形相似的字母混淆,例如 I 与 L 、G 与 Q。
  • 解决方案: 引入了针对性数据增强 ,包括对 I 和 L 进行轻微旋转调整。

4️⃣ 防止过拟合与模型优化

  • 挑战: 模型在训练约 9 个 epoch 后开始出现过拟合,泛化能力下降。
  • 解决方案: 调整了 Dropout 层(0.4)、提前触发 ReduceLROnPlateau 以及优化 batch size,从而提升了在未见数据上的表现。

5️⃣ 使用早停法提升训练效率

  • 挑战: 难以确定最佳训练轮数,模型在超过最优 epoch 后继续训练,导致不必要的计算开销和严重过拟合。
  • 解决方案: 实现了 EarlyStopping(早停) ,监控验证损失,在其不再改善时停止训练,确保模型保持最佳性能。
    完整源码地址:https://download.csdn.net/download/FL1623863129/90010786
相关推荐
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
LaughingZhu2 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技2 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
只睡四小时3 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
高洁013 天前
未来三年,AI 落地的五个确定性判断一
人工智能·深度学习·机器学习·transformer·知识图谱
奇思妙想聪明勤奋的小羊3 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型