chinese_identity_ocr

中华人民共和国居民身份证 OCR 识别与图像处理系统

系统演示
系统演示:身份证识别效果展示

基于 OpenCV 和 Tesseract 的中国居民身份证光学字符识别(OCR)系统。本系统采用先进的计算机视觉技术和深度学习算法, 能够快速准确地识别身份证上的文字信息。通过多级图像预处理和优化的 OCR 引擎,即使在复杂光照条件下也能保持较高的识别 准确率。系统采用 MVC 设计模式,具有良好的可扩展性和维护性,可轻松集成到各类应用场景中。

功能特点

系统要求

完整安装步骤

1. 安装基础依赖

# 安装 Homebrew(如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装 Java 17
brew install openjdk@17

# 安装 Maven
brew install maven

# 安装 OpenCV
brew install opencv

# 安装 Tesseract 及中文语言包
brew install tesseract
brew install tesseract-lang

2. 配置环境变量

# 配置 Java 环境
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 17)' >> ~/.zshrc

# 配置 Tesseract 数据路径
echo 'export TESSDATA_PREFIX="/opt/homebrew/share/tessdata"' >> ~/.zshrc

# 配置 OpenCV 库路径
echo 'export DYLD_LIBRARY_PATH="/opt/homebrew/lib:$DYLD_LIBRARY_PATH"' >> ~/.zshrc

# 使配置生效
source ~/.zshrc

3. 验证安装

# 验证 Java 版本
java -version

# 验证 Maven 版本
mvn -version

# 验证 Tesseract 安装
tesseract --version

# 验证 OpenCV 安装
pkg-config --modversion opencv4

构建与运行

构建项目

# 克隆项目
git clone https://github.com/ctkqiang/chinese_identity_ocr.git
cd chinese_identity_ocr

# 构建项目
mvn clean install

运行程序

mvn exec:java \
  -Dexec.mainClass="xin.ctkqiang.中华人民共和国居民身份证_OCR_识别与图像处理系统" \
  -Djava.library.path="/opt/homebrew/opt/opencv/share/java/opencv4" \
  -Dexec.args="<图像路径>"

运行示例

以下是系统运行的实际输出示例:

💡 成功加载OpenCV库
💡 Tesseract数据路径: /opt/homebrew/share/tessdata
💡 中华人民共和国居民身份证_OCR_识别与图像处理系统启动!
💡 请输入身份证图像路径:
'/Users/ctkqiang/Documents/上饶满星科技有限公司/chinese_identity_ocr/assets/test_images/9333812.png'
💡 创建临时文件/Users/ctkqiang/Documents/上饶满星科技有限公司/chinese_identity_ocr/temp/processed_1740501259703.jpg
💡 清理后的 OCR 结果: [识别结果文本]
💡 OCR识别结果: 911124198108035002
💡 OCR识别结果: 非法
-----

▶ [测试 1]: 直接显示身份证号码解析
💡
▶ [测试 2]: 控制器解析身份证信息
💡
┌───────────────────────────────────────────────┐
│ 身份证信息识别结果 │
├───────────────────────────────────────────────┤
│ 地区信息: 江西省抚州地区南丰县 (362424) │
│ 出生日期: 1976 年 11 月 06 日 │
│ 性别: 男 │
│ 校验码: 8 │
└───────────────────────────────────────────────┘

💡
✓ 测试完成

身份证验证算法

系统采用国家标准 GB11643-1999 规定的身份证验证算法。以下是详细的计算过程:

数学原理

  1. 加权求和 设身份证号码前 17 位依次为 $a_i$,加权因子为 $w_i$,则:

    $S = \sum_{i=1}^{17} a_i \times w_i$

    其中:

    • $a_i$ 为第 i 位的数字值
    • $w_i$ 为第 i 位的加权因子:
    位置 (i) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
    因子 (wi) 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
  2. 取模运算 计算校验值 Y:

  Y = S \bmod 11
  1. 校验码对应关系 根据 Y 值查表获得校验码 C:

    Y 值 0 1 2 3 4 5 6 7 8 9 10
    校验码 1 0 X 9 8 7 6 5 4 3 2

验证示例

以身份证号 110101199003077734 为例:

  1. 加权求和计算
    1×7 + 1×9 + 0×10 + 1×5 + 0×8 + 1×4 + 1×2 + 9×1 +
    9×6 + 0×3 + 0×7 + 3×9 + 0×10 + 7×5 + 7×8 + 7×4 + 3×2
    = 7 + 9 + 0 + 5 + 0 + 4 + 2 + 9 +
    54 + 0 + 0 + 27 + 0 + 35 + 56 + 28 + 6
    = 242
    
  2. 取模运算 ``` 242 ÷ 11 = 22 余 0; Y = 0

3. **查表获得校验码**

Y = 0 对应校验码 ‘1’ ```

  1. 验证结果 身份证最后一位为 4,与计算得到的校验码 1 不符,因此该身份证号无效。

算法特点

  1. 数学基础
    • 采用模运算确保结果唯一性
    • 加权因子经过特殊设计,提高识别准确率
    • 校验码包含数字和字母,增加防伪性
  2. 错误检测能力
    • 可检测单个数字的录入错误
    • 可检测数字的顺序颠倒错误
    • 可检测多数字同时出错的情况
  3. 实现考虑
    • 运算过程简单,易于编程实现
    • 计算量小,适合实时验证
    • 具有良好的容错性能

算法

中华人民共和国居民身份证 OCR 识别与图像处理系统算法

项目文档

完整的 API 文档可在以下位置查看:

许可证

本项目采用 木兰宽松许可证 (Mulan PSL) 进行许可。
有关详细信息,请参阅 LICENSE 文件。

License: Mulan PSL v2

🌟 开源项目赞助计划

用捐赠助力发展

感谢您使用本项目!您的支持是开源持续发展的核心动力。
每一份捐赠都将直接用于:
✅ 服务器与基础设施维护
✅ 新功能开发与版本迭代
✅ 文档优化与社区建设

点滴支持皆能汇聚成海,让我们共同打造更强大的开源工具!


🌐 全球捐赠通道

国内用户


🔵 支付宝

🟢 微信支付

国际用户


📌 开发者社交图谱

技术交流

社交互动


🙌 感谢您成为开源社区的重要一员!
💬 捐赠后欢迎通过社交平台与我联系,您的名字将出现在项目致谢列表!