基于 OpenCV 和 Tesseract 的中国居民身份证光学字符识别(OCR)系统。本系统采用先进的计算机视觉技术和深度学习算法, 能够快速准确地识别身份证上的文字信息。通过多级图像预处理和优化的 OCR 引擎,即使在复杂光照条件下也能保持较高的识别 准确率。系统采用 MVC 设计模式,具有良好的可扩展性和维护性,可轻松集成到各类应用场景中。
# 安装 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
# 配置 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
# 验证 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 规定的身份证验证算法。以下是详细的计算过程:
加权求和 设身份证号码前 17 位依次为 $a_i$,加权因子为 $w_i$,则:
$S = \sum_{i=1}^{17} a_i \times w_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 |
取模运算 计算校验值 Y:
Y = S \bmod 11
校验码对应关系 根据 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×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
3. **查表获得校验码**
Y = 0 对应校验码 ‘1’ ```
完整的 API 文档可在以下位置查看:
本项目采用 木兰宽松许可证 (Mulan PSL) 进行许可。
有关详细信息,请参阅 LICENSE 文件。
感谢您使用本项目!您的支持是开源持续发展的核心动力。
每一份捐赠都将直接用于:
✅ 服务器与基础设施维护
✅ 新功能开发与版本迭代
✅ 文档优化与社区建设
点滴支持皆能汇聚成海,让我们共同打造更强大的开源工具!
![]() 🔵 支付宝 |
🟢 微信支付 |
🙌 感谢您成为开源社区的重要一员!
💬 捐赠后欢迎通过社交平台与我联系,您的名字将出现在项目致谢列表!