news 2026/6/13 2:13:04

[深度学习]Kaggle:Digital Extraction

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[深度学习]Kaggle:Digital Extraction

实验目的:提取银行卡数字

等待输入(Your DataSet)

输入加载完成(Update Status)

图像CV展示失败

问题解决Easy

边缘识别算法: def extract_card_number(image_path): img = cv2.imread(image_path) if img is None: print(f"无法读取图片: {image_path}") return None # 预处理(缩放到合适宽度) h, w = img.shape[:2] if w > 1000: scale = 800 / w new_w = 800 new_h = int(h * scale) img = cv2.resize(img, (new_w, new_h)) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 形态学操作 + Sobel 边缘检测 rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 3)) tophat = cv2.morphologyEx(gray, cv2.MORPH_TOPHAT, rect_kernel) gradX = cv2.Sobel(tophat, cv2.CV_32F, dx=1, dy=0, ksize=-1) gradX = np.absolute(gradX) gradX = (255 * ((gradX - gradX.min()) / (gradX.max() - gradX.min()))).astype("uint8") gradX = cv2.morphologyEx(gradX, cv2.MORPH_CLOSE, rect_kernel) thresh = cv2.threshold(gradX, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, rect_kernel) # 寻找卡号区域轮廓 cnts, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) candidates = [] for c in cnts: x, y, w, h = cv2.boundingRect(c) ar = w / float(h) if ar > 2.5 and ar < 7.0 and w > 100: candidates.append((x, y, w, h)) if not candidates: print("未找到卡号区域") return None # 合并相邻区域 candidates = sorted(candidates, key=lambda b: b[0]) merged = [] for (x, y, w, h) in candidates: if not merged: merged.append([x, y, w, h]) else: last = merged[-1] if x - (last[0] + last[2]) < 20: last[2] = x + w - last[0] last[3] = max(last[3], h) last[1] = min(last[1], y) else: merged.append([x, y, w, h]) # 取面积最大的区域 card_roi = max(merged, key=lambda b: b[2] * b[3]) x, y, w, h = card_roi x = max(0, x - 10) y = max(0, y - 10) w = min(img.shape[1] - x, w + 20) h = min(img.shape[0] - y, h + 20) roi = img[y:y+h, x:x+w] # OCR 识别 roi_gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY) roi_thresh = cv2.threshold(roi_gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] custom_config = r'--oem 3 --psm 8 -c tessedit_char_whitelist=0123456789' text = pytesseract.image_to_string(roi_thresh, config=custom_config) card_number = re.sub(r'\D', '', text) # 格式化输出 if len(card_number) >= 16: formatted = ' '.join([card_number[i:i+4] for i in range(0, 16, 4)]) print(f"识别的银行卡号:{formatted}") else: print(f"识别的银行卡号(未完整):{card_number}") return card_number

银行卡号提取:33(未完整)/待调整

45min训练到此为止,后续更。

保存收工,还有其他活要干!

参考文章

CSDN博主:m沐沐.【计算机视觉】OpenCV 模板匹配银行卡数字识别---上(2026-06-11)[2026-06-12].https://blog.csdn.net/m0_66822255/article/details/161901272

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 2:12:38

AdS-Teo虫洞几何与量子化模基础解析

1. AdS-Teo虫洞几何与量子化模基础在当代理论物理研究中&#xff0c;AdS-Teo虫洞模型提供了一个独特的平台&#xff0c;用于探索广义相对论与量子场论的深层联系。这种特殊的时空结构具有几个关键几何特征&#xff1a;首先&#xff0c;径向度规函数f(r)g^rr(r)在喉部位置rr_0处…

作者头像 李华
网站建设 2026/6/13 2:10:51

微信跳一跳全自动辅助工具(Python实现,兼容安卓与iPhone)

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;用微信跳一跳游戏自动通关的Python脚本合集&#xff0c;通过ADB命令抓取安卓屏幕图像、用WebDriverAgent获取iOS画面&#xff0c;再结合OpenCV识别棋子与目标平台位置&#xff0c;计算跳跃距离后模拟按压时长完…

作者头像 李华
网站建设 2026/6/13 2:07:56

烟台开发区少儿编程怎么找靠谱的

烟台开发区许多家长为孩子选少儿编程班时&#xff0c;常因机构多、课程杂而困惑。判断机构是否靠谱&#xff0c;关键看三点&#xff1a;课程体系是否系统、师资背景是否专业、学习成果是否实在。首先&#xff0c;课程应覆盖孩子成长全阶段。不少机构只针对特定年龄段&#xff0…

作者头像 李华
网站建设 2026/6/13 2:05:07

解锁智能设计转换:AEUX如何革新Figma到After Effects的工作流程

解锁智能设计转换&#xff1a;AEUX如何革新Figma到After Effects的工作流程 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 你是否曾花费数小时手动重建Figma设计到After Effects中&…

作者头像 李华