OpenCV-Python身份证信息识别本篇文章使用OpenCV-Python和CnOcr来实现身份证信息识别的案例 。想要识别身份证中的文本信息 , 总共分为三大步骤:一、通过预处理身份证区域检测查找;二、身份证文本信息提取;三、身份证文本信息识别 。下面来看一下识别的具体过程;CnOcr官网 。识别过程视频
前置环境这里的环境需要安装OpenCV-Python , Numpy和CnOcr 。本篇文章使用的Python版本为3.6 , OpenCV-Python版本为3.4.1.15 , 如果是4.x版本的同学 , 可能会有一些Api操作不同 。这些依赖的安装和介绍 , 我就不在这里赘述了 , 均是使用Pip进行安装 。
识别过程首先 , 导入所需要的依赖cv2 , numpy , cnocr并创建一个show图像的函数 , 方便后面使用:
import cv2import numpy as npfrom cnocr import CnOcrdef show(image, window_name):cv2.namedWindow(window_name, 0)cv2.imshow(window_name, image)cv2.waitKey(0)cv2.destroyAllwindows()# 加载CnOcr的模型ocr = CnOcr(model_name='densenet_lite_136-gru')
身份证区域查找通过对加载图像的灰度处理–>滤波处理–>二值处理–>边缘检测–>膨胀处理–>轮廓查找–>透视变换(校正)–>图像旋转–>固定图像大小一系列处理之后 , 我们便可以清晰的裁剪出身份证的具体区域 。
原始图像使用OpenCV的imread方法读取本地图片 。
image = cv2.imread('card.png')show(image, "image")
文章插图
灰度处理将三通道BGR图像转化为灰度图像 , 因为一下OpenCV操作都是需要基于灰度图像进行的 。
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)show(gray, "gray")
文章插图
中值滤波使用滤波处理 , 也就是模糊处理 , 这样可以减少一些不需要的噪点 。
blur = cv2.medianBlur(gray, 7)show(blur, "blur")
文章插图
二值处理二值处理 , 非黑即白 。这里通过cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU , 使用OpenCV的大津法二值化 , 对图像进行处理 , 经过处理后的图像 , 更加清晰的分辨出了背景和身份证的区域 。
threshold = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV +cv2.THRESH_OTSU)[1]show(threshold, "threshold")
文章插图
边缘检测使用OpenCV中最常用的边缘检测方法 , Canny , 检测出图像中的边缘 。
canny = cv2.Canny(threshold, 100, 150)show(canny, "canny")
文章插图
边缘膨胀为了使上一步边缘检测的边缘更加连贯 , 使用膨胀处理 , 对白色的边缘膨胀 , 即边缘线条变得更加粗一些 。
kernel = np.ones((3, 3), np.uint8)dilate = cv2.dilate(canny, kernel, iterations=5)show(dilate, "dilate")
文章插图
轮廓检测使用findContours对边缘膨胀过的图片进行轮廓检测 , 可以清晰的看到背景部分还是有很多噪点的 , 所需要识别的身份证部分也被轮廓圈了起来 。
binary, contours, hierarchy = cv2.findContours(dilate, cv2.RETR_EXTERNAL,cv2.CHAIN_AppROX_SIMPLE)image_copy = image.copy()res = cv2.drawContours(image_copy, contours, -1, (255, 0, 0), 20)show(res, "res")
文章插图
轮廓排序经过对轮廓的排序 , 我们可以准确地提取出身份证的轮廓 。
contours = sorted(contours, key=cv2.contourArea, reverse=True)[0]image_copy = image.copy()res = cv2.drawContours(image_copy, contours, -1, (255, 0, 0), 20)show(res, "contours")
文章插图
透视变换通过对轮廓近似提取出轮廓的四个顶点 , 并按顺序进行排序 , 之后通过warpPerspective对所选图像区域进行透视变换 , 也就是对所选的图像进行校正处理 。
推荐阅读
- 国家信息安全漏洞共享平台发布Apache Tomcat漏洞安全公告
- 梦见发微信 梦见自己收到微信信息
- 科颜氏|“闺蜜的信息必须回”,女子做美甲没有手,想出奇招回复
- 济南茶市,散茶销售信息将统公示
- 学习|女生频遭他人恶意修改考研志愿 账号被人登录:专家称个人信息遭泄露
- 快速查询余票信息 飞机票余票查询
- 接听境外电话会泄露你的信息吗 接到境外电话有危险吗
- 驾驶证副页记录什么信息 电子驾驶证可以看到副本副页吗
- 有没有外星人,科学家对此(找到答案 数十年来,科学家认为发现外星生命的最重要信息)
- 从哪里可以查看淘宝规则信息 淘宝的规则在哪里看