新闻详情

新闻详情

首页 / 资讯中心 / 详情

深度学习银行卡号识别与定位实战:YOLO目标检测与CRNN序列识别全流程

发布时间:2026/10/2 15:08:18来源:尧图网络
深度学习银行卡号识别与定位实战:YOLO目标检测与CRNN序列识别全流程
简介面向深度学习初学者与需要实现票据卡证识别的开发者这份Python工程完整实现了基于CRNN与CTC的银行卡号识别与定位。模型采用VGG风格网络提取视觉特征并用双向LSTM对序列建模能够处理不定长度的卡号输出同时集成EAST文本检测模块从卡面定位到号码识别可一气呵成。针对数据集常为四位数且含空格的特点系统通过定长特征序列转换为变长输出完整解决卡号长度不固定的难题。压缩包共59个文件包含20个Python源码、18张图片示例、7个GIF动态演示、7张JPEG图像和2张JPG图片以及UI界面、说明txt、Markdown文档、许可证和Git忽略文件整体大小5.24MB按检测、识别、训练、演示等模块组织便于快速定位所需代码。目前已有450人学习下载适合希望将OCR方法迁移到证件、票据、快递单等场景的读者。资源除了核心模型和GUI外还附带训练参数调节指引、演示脚本、readme说明及dataset数据目录并提示可通过cfg文件按显卡性能调整批量大小兼顾入门与进阶实践。1. 银行卡号识别与定位这套系统到底解决什么值不值得跑拿到手一个“Python基于深度学习的银行卡号识别与定位系统.zip”源码包很多人第一反应是解压、装依赖、跑demo、看到一张图上画出框并读出数字然后就觉得完事了。实际上银行卡号识别与定位这件事拆开看是两个独立问题先在整张卡面里把卡号区域找出来再把区域里的数字序列读成字符串。前者是目标检测后者是序列识别两个问题各有各的坑。卡面不像身份证那样版式相对固定不同银行的卡面背景、凸印字符、倾斜角度、光照反射差异极大传统模板匹配的识别率在真实场景里往往只有六成上下这也是这类项目普遍转向深度学习的原因。本文就从这类源码包最常见的落地路径出发把定位和识别两条分支的选型逻辑、从环境搭建到训练推理的完整闭环、以及光照和凸印这几个让模型翻车的真问题讲透。适合刚接触深度学习的读者照着复现也适合已经在做卡号识别、想调稳现有方案的工程师拿来对照参数和边界。2. 先立技术骨架定位与识别两条分支的选型依据一套完整的银行卡号识别系统不管源码包里的目录结构长什么样最终都逃不开“定位卡号区域”和“识别卡号字符”两个模块。这两个模块的技术选型决定了后续所有代码的写法、数据标注格式和训练开销所以第一步不是急着跑代码而是先立骨架。2.1 定位分支目标检测与传统图像处理的取舍定位卡号区域常见的做法有三条路传统OpenCV轮廓分析、基于深度学习的目标检测YOLO系为代表、以及直接复用OCR引擎里的检测头。传统轮廓分析的思路是先灰度化、二值化、找轮廓再根据卡号的宽高比和位置先验筛选候选区域。这套方案在扫描件上表现尚可但遇到真实手机拍摄的卡面就很容易崩卡面有花纹、凸印字符带有立体阴影二值化之后边缘全是断的轮廓数量动辄上百个靠规则筛根本筛不干净。深度学习目标检测的优势在于把“找卡号区域”从特征工程问题变成了数据问题。用YOLO系列训练一个单类检测器输入卡面图输出卡号区域的矩形框这套方案对光照倾斜的鲁棒性远好于轮廓分析。三类方案对比下来差异很直观方案光照鲁棒性倾斜适应性训练数据需求推理开销传统轮廓规则筛选低低无需训练极小YOLO单类检测高高几百到上千张标注图小OCR引擎检测头如PaddleOCR高高可复用通用模型中我一般会建议选YOLO单类检测原因不只是精度。银行卡号识别系统的部署场景往往是网点终端、自助设备或移动端这些设备上的算力有限YOLO的轻量版本nano或small在CPU上也能跑到几十毫秒一帧这个延迟预算对一次识别流程来说是完全可以接受的。另一个原因是标注成本低你只需要标一个类card_number不需要区分每一位数字的位置标注工作量比从头训一个OCR检测器小一个量级。2.2 识别分支为什么普遍走“检测序列识别”而不是逐字符分类定位做完接下来是把卡号区域里的数字读出来。这里有一个许多新手会踩的弯路先把卡号区域切成单个数字再训练一个10分类的CNN模型去逐个识别。这个方案听起来简单实际切分环节非常脆弱。凸印卡号的字符之间有立体投影二值化后相邻字符的投影容易连在一起切分点找不准后面的分类再准也白搭。更稳的路线是CRNN结构CNN负责提取图像的视觉特征BiLSTM对特征序列建模CTC做序列解码。整张卡号区域图直接送进去输出端得到一串字符序列中间不需要显式切分。这套结构的核心优势在于把“切分”这件事从显式规则变成了隐式学习模型自己学会在特征层面区分相邻字符的边界。对于银行卡号这种字符集固定只有数字、长度不固定16到19位的场景CRNN几乎是性价比最高的选择。也有团队直接端到端套用PaddleOCR或Tesseract但通用OCR引擎在卡号场景里有两个别扭的地方一是它们为文档场景优化对凸印立体字符的适配未必比得上专门训练的模型二是引擎体积大依赖多部署时拉进来一堆用不到的功能。如果源码包里已经带了识别模型优先看它的结构是不是CRNN或类似序列识别架构如果是说明这个项目的技术路线是合理的如果只是逐字符分类后续你想提升精度的话大概率要重构识别模块。2.3 两个分支的精度指标与算力预算先定目标再动手技术选型不能只看“能不能跑通”还要看“能不能跑到能用”。我在实际项目里对卡号识别系统定的验收线是这样的定位mAP达到0.95以上识别准确率达到99%以上。注意识别准确率不是整卡准确率而是字符级准确率如果按整卡计算16位卡号每一位都对的概率是字符准确率的16次方字符准确率99%对应整卡准确率约85%这个差距在评估模型时要心里有数。算力预算上定位模型如果选YOLOv8n这种轻量版本在GTX 1060上训练200轮只需要两三个小时推理在CPU上单帧约50毫秒识别模型CRNN参数量也就在十兆左右CPU推理约20到30毫秒。整套系统在无GPU的终端设备上做到100毫秒内完成一次识别是可行的这个预算对绝大多数业务场景都够用。如果目标是移动端实时识别就要考虑量化到INT8这个放到最后一章讲。先把技术骨架立住接下来才能谈数据、训练和踩坑。3. 从源码包到能跑环境、数据与训练闭环骨架立住了下一步是把代码跑起来。类似标题的这类源码包解压后通常能看到train、datasets、models、utils这类目录里面放着定位模型训练脚本、识别模型定义和推理demo。真正要跑通需要按照环境配置、数据准备、训练验证三步走。3.1 环境配置Python、CUDA、PyTorch的版本搭配是第一步坑环境配置是复现这类项目时最大的隐性成本。常见做法是使用Anaconda建独立环境避免把系统Python搞乱。版本搭配上Python 3.8到3.10之间选一个PyTorch选1.8以上版本CUDA选11.x系列这套组合在大多数深度学习实战项目里兼容性是最好的。不要一上来就装最新版Python和最新版PyTorch源码包里的代码往往是按某个特定版本写的版本跨太大容易出现算子不兼容。conda create -n card_ocr python3.9 conda activate card_ocr pip install torch1.13.1 torchvision0.14.1 --index-url https://download.pytorch.org/whl/cu117 pip install ultralytics opencv-python numpy pandas tqdm参数说明torch和torchvision的版本号必须配套1.13.1配0.14.1是官方验证过的组合--index-url指定CUDA 11.7的预编译包如果机器没有NVIDIA显卡把这段去掉直接用CPU版。ultralytics是YOLO训练和推理的框架识别模块如果源码包里没带训练脚本后面会讲到自建CRNN的做法。装完后用python -c import torch; print(torch.cuda.is_available())验证GPU是否可用输出True说明环境没问题。3.2 数据集与标注卡号定位的两种标注格式别混着用数据是这类项目真正的分水岭。公开的银行卡卡面数据集很少因为涉及金融隐私大部分正规开源数据集只会提供脱敏后的合成样本。常见做法是自采一批真实卡面需要脱敏处理加合成数据混训。合成数据可以用程序生成把字体、背景、光照、角度随机变换批量产出卡面图。定位模型的标注格式YOLO系用txt文件每行是一个目标类别 中心点x 中心点y 宽 高坐标都是归一化到0到1的。如果源码包里给的是VOC格式的XML或COCO格式的JSON训练前需要转换。这里给一个把VOC XML转YOLO txt的脚本这类转换在项目中经常要用import os import xml.etree.ElementTree as ET def voc_to_yolo(xml_path, out_dir, class_names): tree ET.parse(xml_path) root tree.getroot() img_w int(root.find(size).find(width).text) img_h int(root.find(size).find(height).text) lines [] for obj in root.iter(object): name obj.find(name).text if name not in class_names: continue box obj.find(bndbox) xmin int(box.find(xmin).text) ymin int(box.find(ymin).text) xmax int(box.find(xmax).text) ymax int(box.find(ymax).text) x_center (xmin xmax) / 2 / img_w y_center (ymin ymax) / 2 / img_h w (xmax - xmin) / img_w h (ymax - ymin) / img_h lines.append(f{class_names.index(name)} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}) with open(os.path.join(out_dir, os.path.splitext(os.path.basename(xml_path))[0] .txt), w) as f: f.write(\n.join(lines)) voc_to_yolo(annotations/000001.xml, labels/, [card_number])这段代码的逻辑是解析XML里的尺寸信息和目标框坐标把左上右下坐标换算成中心点加宽高的归一化格式。换算时注意三个细节一是所有坐标都要除以图像宽高做归一化否则YOLO训练会报错二是类别索引必须和配置文件里的类别顺序一致这里card_number是第0类三是bndbox里的坐标值是字符串必须先转int再运算漏掉这一步会出现类型错误。3.3 训练定位模型最小命令与每个参数的实际含义数据准备好后训练定位模型直接使用ultralytics的命令行工具。先建一个数据配置文件告诉框架数据集路径和类别信息# card.yaml path: ./datasets/card train: images/train val: images/val nc: 1 names: [card_number]然后启动训练yolo detect train datacard.yaml modelyolov8n.pt epochs200 imgsz640 batch16 patience50 device0参数说明modelyolov8n.pt表示加载YOLOv8n的预训练权重做迁移学习n是nano版本模型最小、训练最快对银行卡卡号这种单类检测任务完全够用imgsz640是输入分辨率卡面图一般长宽比接近1.586640分辨率下卡号区域的细节保留得足够batch16取决于显存大小6GB显存跑16没问题如果报CUDA out of memory就降到8patience50是早停参数连续50轮验证集指标不提升就自动停止防止过拟合device0指定用第一块GPU没有GPU就改成devicecpu但训练时间会拉长不少。训练完成后在runs/detect/train目录下会生成weights/best.pt和last.pt验证阶段看val/box_map这个指标单类检测在数据不太难的情况下跑到0.95以上不算难。如果卡号区域经常被卡面背景干扰定位不准优先检查标注框是不是把四周多框了一圈冗余背景这是定位精度上不去的常见原因。3.4 训练识别模型自建一个轻量CRNN的完整代码定位模型训练完接下来是识别模型。如果源码包自带识别模型且效果够用直接用就行如果效果差或者你想理解识别链路的核心逻辑我建议自己训一个轻量CRNN。这里给一个最小可用的CRNN实现输入是定位模块裁剪出来的卡号区域图输出是卡号字符串。import torch import torch.nn as nn class CRNN(nn.Module): def __init__(self, num_classes, hidden256): super().__init__() self.cnn nn.Sequential( nn.Conv2d(3, 64, 3, padding1), nn.ReLU(), nn.MaxPool2d(2, 2), nn.Conv2d(64, 128, 3, padding1), nn.ReLU(), nn.MaxPool2d(2, 2), nn.Conv2d(128, 256, 3, padding1), nn.ReLU(), nn.Conv2d(256, 256, 3, padding1), nn.ReLU(), nn.MaxPool2d(2, (2, 1)), nn.Conv2d(256, 512, 3, padding1), nn.ReLU(), nn.MaxPool2d(2, (2, 1)), ) self.lstm nn.LSTM(512, hidden, num_layers2, bidirectionalTrue, batch_firstTrue) self.fc nn.Linear(hidden * 2, num_classes) def forward(self, x): x self.cnn(x) # (B, C, H, W) b, c, h, w x.size() x x.squeeze(2) # 高度压到1 x x.permute(0, 2, 1) # (B, W, C) x, _ self.lstm(x) x self.fc(x) return x这个网络把输入图的高度通过池化压到1宽度方向保留为序列长度每个位置对应卡号图的一个水平切片LSTM负责建模切片之间的上下文关系输出维度是时间步数 × 类别数。注意nn.MaxPool2d(2, (2, 1))里的步长元组第一个2是高度方向步长第二个1是宽度方向步长目的是在宽度方向不做过度的下采样保留足够的序列分辨率。num_classes要算上CTC的blank符数字10类加blank就是11。输入图片高度固定为32宽度可以变化一般限制在160以内。训练时用torch.nn.CTCLoss它需要三个参数模型输出的logits按时间步排、目标序列和序列长度。学习率设1e-3batch size设64用Adam优化器跑50到100轮就能看到字符准确率明显收敛。CTC loss曲线下降得慢是正常的它是在最大化所有可能对齐方式的概率之和不像分类loss那样直观地陡降只要验证集准确率在涨就不用慌。4. 落地避坑光照、压花与凸印字符的5个真问题训练脚本能跑通只是第一步真实卡面数据远比想象中的干净样本复杂。以下5个问题是这类项目中最常遇到的每一条都是实际项目里真金白银换来的经验。4.1 光照不均匀导致定位漏检现象卡面图有明显反光或半边暗半边亮定位模型在暗部区域漏检卡号框或者在反光处把高光区域误检成卡号。原因训练数据里光照多样的样本太少模型把“亮部”和“卡号区域”的共现当成了特征。反光区域的白色高光和卡号凸印的亮白色在视觉上容易混淆。解决数据层面在训练时给图像加随机光照扰动包括亮度抖动、对比度抖动和局部高光模拟预处理层面推理前对整图做一次自适应直方图均衡化CLAHE能显著压低反光影响。我一般在定位和识别两个模块的预处理里都加上CLAHE参数设clipLimit2.0, tileGridSize(8,8)这组参数对卡面图效果最稳。4.2 凸印卡号的立体阴影干扰二值化现象卡号是凸印的字符边缘有立体投影识别时阴影和笔画连在一起导致识别置信度下降或输出错误字符。原因很多人在预处理时习惯先做固定阈值二值化但凸印字符的投影在不同光照角度下深浅不一固定阈值无法把笔画和阴影干净分开。过度依赖二值化是这类问题反复出现的根源。解决不要做二值化直接把灰度图或彩色图送进CRNN让网络自己学阴影和笔画的区分。如果训练时确实用了二值化图像推理时也要保持一致否则数据分布直接漂移。另一个有效手段是训练时对卡号区域图做随机形态学膨胀腐蚀扰动模拟不同程度阴影粘连增强模型的抗干扰能力。4.3 倾斜卡面导致裁剪区域带进背景现象定位框是歪的直接按矩形框裁剪会把卡号上方的卡面背景一起切进来识别模型读错。原因YOLO输出的是轴对齐矩形框当卡面在画面里旋转超过15度时矩形框的四个角并不贴合实际卡号区域的四个角裁剪必然带入背景。解决用检测框的旋转信息做透视纠正。YOLO本身不直接输出旋转角但可以用卡号区域的长宽比和坐标估算倾角或者改用带旋转角的目标检测模型。轻量做法是拿到检测框后用OpenCV的最小外接矩形获得四个角点再做透视变换import cv2 import numpy as np def crop_card_number(img, corners): # corners: 检测框四个角点按左上、右上、右下、左下顺序 src np.array(corners, dtypenp.float32) width max(int(np.linalg.norm(corners[0] - corners[1])), int(np.linalg.norm(corners[2] - corners[3]))) height max(int(np.linalg.norm(corners[1] - corners[2])), int(np.linalg.norm(corners[0] - corners[3]))) dst np.array([[0, 0], [width - 1, 0], [width - 1, height - 1], [0, height - 1]], dtypenp.float32) matrix cv2.getPerspectiveTransform(src, dst) return cv2.warpPerspective(img, matrix, (width, height))这段代码把任意四边形区域拉正成矩形getPerspectiveTransform需要四个点一一对应点序错了变换结果就是扭曲的。实际项目中我会把检测头的输出统一转成四个角点格式而不是直接用xyxy框这样倾斜场景的识别准确率能提升5个百分点以上。4.4 推理时图像通道顺序和训练时不一致现象模型训练时验证集准确率很高一到推理就明显掉点卡号经常识别错位或漏字符。原因训练脚本用PIL读图RGB顺序推理脚本用OpenCV读图BGR顺序通道顺序反了彩色图的颜色语义完全错乱模型看到的数据分布和训练时不一样。解决统一预处理。推理代码里读图后立刻转通道cv2.cvtColor(img, cv2.COLOR_BGR2RGB)。这是最隐蔽也最掉分的坑整个预处理流程里还有一个类似问题图像归一化的均值和标准差必须和训练时一致否则也会造成几不可见的性能下降。4.5 CTC解码把相邻重复数字合并掉现象卡号里有连续相同的数字比如“6222”识别成“62”识别结果数字位数总比真实卡号少。原因CTC的贪心解码规则是“合并连续相同字符、去掉blank”这个规则对语音识别和大部分OCR文本是合理的但银行卡号这种纯数字序列里连续重复字符是真实存在的直接合并就丢字符了。解决CTC训练时加入语言模型约束或者在解码后做长度校验。卡号的位数是已知的16位、19位等解码结果长度不对时可以用一个简单策略如果模型输出的概率分布里某个时间步对重复字符和相邻字符的置信度接近优先保留重复字符。更稳的做法是把卡号识别的字符集做特殊处理在CTC解码规则里针对“相邻时间步相同字符”不合并因为这个场景没有跨时间步的重复字符歧义问题。这个坑在银行卡号场景尤其明显因为银联卡号以62开头后面经常出现连续重复数字做识别时一定要单独验证包含重复数字的样本。5. 定位到识别把两阶段串成一条可上线的推理链路定位和识别各自跑通后真正的工程问题是如何把两个模块拼成一条完整的推理链路。很多源码包的demo代码只演示了两阶段串起来的基本流程但线上使用还需要考虑透视纠正、置信度过滤、长度校验和结果回退这些细节。5.1 推理链路整体设计先过滤再裁剪整个推理pipeline按照“输入卡面图 → YOLO定位 → 置信度过滤 → 角点透视纠正 → CRNN识别 → 后处理校验”的顺序执行。定位阶段可能同时输出多个候选框不能全部送进识别模块要先按置信度排序只保留置信度最高的那个框如果没有框的置信度超过阈值说明这张图大概率没有卡号直接返回空结果。阈值一般设0.5设太高容易漏检设太低会把背景误判成卡号区域。5.2 推理代码从BGR图到卡号字符串的完整实现import cv2 import numpy as np import torch class BankCardRecognizer: def __init__(self, det_weights, rec_weights, det_conf0.5): from ultralytics import YOLO self.detector YOLO(det_weights) self.rec_model CRNN(num_classes11) self.rec_model.load_state_dict(torch.load(rec_weights, map_locationcpu)) self.rec_model.eval() self.det_conf det_conf def recognize(self, img_bgr): # 1. 定位 results self.detector(img_bgr, confself.det_conf, verboseFalse) boxes results[0].boxes if boxes is None or len(boxes) 0: return None, 0.0 # 置信度最高的框 idx int(boxes.conf.argmax()) x1, y1, x2, y2 boxes.xyxy[idx].cpu().numpy().astype(int) # 2. 透视纠正这里用轴对齐框的四个角做透视变换倾斜大时建议换成最小外接矩形角点 corners [[x1, y1], [x2, y1], [x2, y2], [x1, y2]] crop crop_card_number(img_bgr, corners) # 3. 预处理 识别 rgb cv2.cvtColor(crop, cv2.COLOR_BGR2RGB) rgb cv2.resize(rgb, (160, 32)) tensor torch.from_numpy(rgb).float().permute(2, 0, 1).unsqueeze(0) / 255.0 with torch.no_grad(): logits self.rec_model(tensor) # (1, T, num_classes) pred logits[0].argmax(dim-1).numpy() # 4. CTC解码合并连续重复字符去掉blank(索引0) prev -1 text for p in pred: if p ! prev and p ! 0: text str(p - 1) prev p return text, float(boxes.conf[idx])参数说明det_conf0.5是定位置信度阈值业务上如果要求高召回降到0.3crop_card_number这里传入的是轴对齐框角点当倾斜超过15度时建议改成用cv2.minAreaRect找最小外接矩形再取角点否则矫正效果有限。预处理把裁剪图缩放到160×32这个尺寸对应CRNN训练时的输入约定改尺寸后识别准确率会明显下降不要随意调。CTC解码循环里p ! prev是合并连续重复字符的规则p ! 0跳过blank符号解码后的数字str(p - 1)是因为类别索引里0是blank数字1到9对应索引1到9。5.3 精度验证用字符准确率、混淆矩阵和卡号校验位来验收模型上线前必须有客观的验收流程。我一般会准备一千张带标注的卡面测试图统计三个指标定位成功率检测框与标注框IoU大于0.5、字符识别准确率识别结果与真实卡号的编辑距离、整卡准确率16位全部一致才算对。只报整卡准确率会掩盖问题比如某位数字经常识别错整卡准确率低但字符准确率可能已经到98%两者结合才能定位瓶颈在识别还是后处理。另外一个容易被忽略的验收工具是卡号校验位。银行卡号普遍遵循Luhn算法最后一位是校验位可以用它做结果合法性验证def luhn_check(card_number: str) - bool: if not card_number.isdigit(): return False total 0 for i, ch in enumerate(reversed(card_number)): digit int(ch) if i % 2 1: digit * 2 if digit 9: digit - 9 total digit return total % 10 0这段代码的逻辑是从右往左偶数位从0开始计的数字乘2超过9就减9最后总和能被10整除则通过。识别结果过不了Luhn校验时可以触发一次重新识别或二次确认流程这比单纯叠加阈值能更有效地过滤错误结果。注意这只是一个辅助校验不代表识别正确但校验不过基本可以断定识别有误。6. 进阶上线前值得做的三件小事系统在开发环境跑通后离真正可部署还有一段距离。这里有三件小事投入产出比很高做完全套再谈上线会踏实很多。第一件是模型导出与量化。PyTorch模型直接部署在CPU设备上效率不够理想用torch.onnx.export把定位和识别两个模型都导出成ONNX格式再用ONNX Runtime做推理延迟通常能下降30%以上。进一步做INT8量化识别模型体积能从几十兆压到几兆CPU推理速度提升接近一倍代价是字符准确率可能下降0.2到0.5个百分点。量化后一定要用包含光照变化和凸印卡号的测试集重新过一遍指标不能只测干净样本。第二件是给识别结果加显式长度约束。银行卡号长度只有16、17、18、19四种可能CTC解码结果如果长度不在这个集合里大概率是漏了字符或者多识别了干扰内容。遇到这种情况我一般会做一次回退把裁剪图高度从32调整到48重新过一遍模型因为部分卡号区域较扁平时固定缩放会压扁字符导致漏识。这个规则简单但在实际数据上能挽回不少错误结果。第三件是收集困难样本做增量训练。项目上线后最值钱的资产不是模型代码而是真实场景里拍到的卡面样本。每两周从日志里捞一批识别失败的图人工标注后混入训练集重新训练一轮这个节奏对精度提升的效果远大于调参。凸印卡号在不同光照角度下的表现差异很大只有真实样本才能覆盖到合成数据模拟不出的边缘情况。这几件事做完银行卡号识别与定位系统才算真正具备了被业务使用的条件。我见过太多项目止步于demo阶段模型在测试集上漂亮一到真实设备就原形毕露背后往往就是缺了量化验证、长度约束和困难样本迭代这三步。在你自己的项目里先把本章Luhn校验的逻辑加进识别流程再看看定位输出的角点在倾斜卡面上是否贴合这已经能避开一半的坑。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

91行代码创意赛全流程复盘:规则、创意与压缩技巧 2026/10/2 16:49:33

91行代码创意赛全流程复盘:规则、创意与压缩技巧

几乎所有第一次听说“91行代码创意赛”的人,都会下意识地问一句:91行能做什么?我第一次看到这个题目时也这么想,直到连续参加了两届、又以模拟评委的身份看了一批作品之后,才慢慢意识到这个数字选得相当妙——它不像代…

阅读更多 →
零基础也能过计算机二级Python?60天三轮备考攻略与高频考点拆解 2026/10/2 16:49:27

零基础也能过计算机二级Python?60天三轮备考攻略与高频考点拆解

每年一到全国计算机二级报名季,就有不少零基础的同学带着同一个问题来找我:“老师,我真的连一行代码都没写过,二级Python能过吗?”我的回答一直是:能,而且我见过的大量案例里,零基础…

阅读更多 →
python的先进制造技术工业场景模拟第四十二篇:导入铣削切削力数据集,建立分类模型,识别稳定切削与颤振切削两种工况。 2026/10/2 16:49:21

python的先进制造技术工业场景模拟第四十二篇:导入铣削切削力数据集,建立分类模型,识别稳定切削与颤振切削两种工况。

周五夜班,数控车间。"这台立加,干铝件型腔的时候,偶尔会突然吱——一声尖叫,"操作工老周拍了拍机床护罩,"之前靠耳朵听,听到颤振就停机,刀已经崩了刃,工件表面全是振…

阅读更多 →
每天了解几个MCP SERVER:DeepL MCP 接入 TaoToken,29种语言翻译 API 一次跑通 2026/10/2 16:49:21

每天了解几个MCP SERVER:DeepL MCP 接入 TaoToken,29种语言翻译 API 一次跑通

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
公司逼我用免费 AI,我顺手盘出这份 TaoToken 统一 Key 接入清单 2026/10/2 16:49:08

公司逼我用免费 AI,我顺手盘出这份 TaoToken 统一 Key 接入清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Claude-OSINT的56条自测Prompt:如何为AI技能建立冒烟测试质量门槛 2026/10/2 16:49:02

Claude-OSINT的56条自测Prompt:如何为AI技能建立冒烟测试质量门槛

Claude-OSINT的56条自测Prompt:如何为AI技能建立冒烟测试质量门槛 【免费下载链接】Claude-OSINT 8 Claude skills 100 recon capabilities 80 secret-regex patterns 80 dorks 9 read-only credential validators 27 attack-path templates ~10,000 lines of…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉