如何使用OpenCV Python检测提取KYC证件(如Aadhaar卡)中的文本?
轮廓查找完成后的后续操作
- 先做轮廓筛选:根据Aadhaar卡文本块的面积、宽高比特征,剔除噪声、头像、指纹、logo等非文本轮廓。可根据图片分辨率设置面积阈值过滤过小噪点,再保留宽高比在1.2~15区间的轮廓,就是符合文本行特征的有效区域。
- 对筛选出的轮廓按纵坐标排序,匹配证件从上到下的文本排版顺序,避免后续输出内容顺序错乱。
- 按每个有效轮廓的外接矩形裁剪出单独的文本块,对倾斜的文本块做仿射变换校正角度。
- 传入OCR模型做文本内容提取,针对Aadhaar卡的双语特征,优先选择支持印地语+英语的识别模型。
对应补充实现代码:
# 有效轮廓筛选示例 valid_cnts = [] for c in cnts: area = cv2.contourArea(c) if area < 100: # 面积阈值可根据图片实际分辨率调整 continue x,y,w,h = cv2.boundingRect(c) aspect_ratio = w / h if 1.2 < aspect_ratio < 15: # 文本行常规宽高比范围 valid_cnts.append((x,y,w,h)) # 按文本行从上到下的顺序排序 valid_cnts.sort(key=lambda x: x[1]) # 裁剪识别示例 import pytesseract # 配置印地语+英语双语识别模型 custom_config = r'--oem 3 --psm 6 -l eng+hin' for (x,y,w,h) in valid_cnts: text_block = gray_image[y:y+h, x:x+w] text = pytesseract.image_to_string(text_block, config=custom_config) print(text)
更适配证件场景的文本检测方案
- 优先使用PP-OCRv4系列模型:内置文本检测、方向校正、识别全流程,针对结构化文档、证件场景做了专项优化,支持印地语、英语双语识别,无需自行做预处理、轮廓筛选操作,直接输入原图即可输出带坐标的文本结果,准确率远高于EAST加自定义规则的方案。
- 固定模板匹配方案:Aadhaar卡属于排版固定的证件,可以先检测卡的四个角点做透视变换,校正整张卡的畸变、倾斜问题,再按照姓名、身份证号、地址等固定字段的位置坐标直接裁剪识别,比通用文本检测的效率和准确率都更高。
- 专用证件OCR接口:如果对准确率要求极高,可以选择支持印度证件识别的商用OCR服务,无需自行开发算法,直接调用接口即可返回结构化的字段结果。
内容的提问来源于stack exchange,提问作者Amit Saini
相关产品推荐
相关产品推荐

