人脸静默活体检测Python源码包:MTCNN+FAS.H5防屏幕翻拍
简介这是一份基于深度学习的人脸静默活体检测算法项目面向计算机相关专业正在准备毕业设计、期末大作业的学生也适合需要人脸安全方向实战练习的学习者。项目经导师指导并获评审高分九十八分源码经过本地编译调试可直接运行。压缩包共八个文件、大小约十点八二兆包含人脸检测与活体判定的源码、预训练模型、演示视频、检测结果图以及说明文档源码中的人脸检测模块负责定位人脸演示模块展示活体判定流程视频呈现眨眼检测效果已有七十二人学习浏览。通过该资源可完整掌握静默活体检测的工程实现从人脸框定到活体与非活体分类再到眨眼检测配置说明与运行步骤一应俱全。项目难度适中既能支撑课程设计或毕业设计参考也可作为深度学习在人脸安全领域的动手实践素材。1. 人脸静默活体检测这份Python源码包到底能做什么刷脸闸机被一张打印照片骗过、手机支付被屏幕上的翻拍脸绕过——这类攻击在真实业务里天天都在发生。人脸静默活体检测要解决的就是不要求用户做眨眼、摇头等配合动作的前提下仅凭一张静态图判断镜头前到底是真人还是伪造介质。这份基于深度学习的Python源码包把整条链路做成了开箱即用的工程MTCNN负责把人脸从画面里找出来并给关键点FAS.H5活体模型负责判断真假demo.py把两个模型串成可运行的入口配套的数据里有屏幕翻拍样本、眨眼演示视频和结果图。适合正在做人脸识别相关毕业设计、期末大作业的学生也适合想快速搭一个活体检测原型验证算法的从业者。拿到手里能直接跑改一改就能接摄像头。2. MTCNN FAS.H5为什么选这个组合来防屏幕翻拍2.1 静默活体不需要用户配合动作的检测思路活体检测分为两大流派动作活体和静默活体。动作活体会让用户“眨眨眼、张张嘴、左右转头”通过关键点轨迹变化判断有没有生命特征。这种方案简单直观但有个硬伤——用户配合成本高而且攻击者可以用提前录好的视频循环播放来绕过。静默活体则是拿单帧图像直接做真假判别用户无感知体验好但对模型的要求高得多。这份项目走的显然是静默路线。它没有把精力花在时序特征上而是用单张人脸图像作为输入输出真/假概率。实际部署时静默活体模型通常放在人脸识别链路的最前面先定位人脸再做防伪判定只有活体分数达标才允许进入特征比对环节。这也是为什么项目里把MTCNN和FAS模型并列——一个解决“脸在哪”一个解决“脸是不是真的”。2.2 MTCNN三级联CNNP-Net/R-Net/O-Net各管什么MTCNN全称Multi-task Cascaded Convolutional Networks是2016年提出的经典人脸检测算法优势在于用一个三级级联结构同时输出人脸框和五个关键点左眼、右眼、鼻尖、左嘴角、右嘴角。第一级P-Net是Proposal Network用一个小全卷积网络在图像金字塔上快速扫一遍生成大量候选框第二级R-Net是Refine Network把候选框精修一轮去掉明显误检第三级O-Net是Output Network最后一次精修并输出关键点和最终置信度。为什么在深度学习时代仍然选MTCNN原因很实际它轻量、稳定、检测框质量高对模糊和侧脸有一定容忍度而且训练好的.pb模型文件不大CPU上也能跑。在活体检测场景里检测框的精度直接影响后续裁剪区域——框偏了切出来的脸不完整活体模型的特征提取就废了。MTCNN输出的人脸关键点还能用来对图像做对齐这是比OpenCV Haar级联检测器强太多的地方。2.3 FAS.H5活体模型为什么走二分类FAS是Face Anti-Spoofing的缩写H5是Keras/TensorFlow的模型权重格式。活体模型本质是一个二分类器输入归一化后的人脸图像输出真脸和假脸两个类别的概率。这种方案的训练数据通常包含三类伪造成分屏幕翻拍照片或视频对着屏幕拍、打印照片、面具/3D面具。项目里提供的data/fake_screen.png就是一张屏幕翻拍照的样本fake_screen_res.png是检测后的结果图直接看这两张图就能理解模型在做什么。选择H5格式而不是直接部署成TensorFlow的.pb或ONNX常见考虑是灵活性和可调试性。H5里保留了完整的模型结构和权重你可以用Keras直接加载也可以继续训练微调。对做毕业设计的同学来说H5格式意味着有需求可以直接改顶层结构比如把二分类改成三分类真脸/屏幕/打印这是个很好的选型理由。2.4 完整管线从摄像头帧到活体分数把两个模型串起来之后推理流程是这样的项目里src/mtcnn.py封装了检测部分demo.py负责调度# 伪代码展示项目内MTCNN → FAS的完整推理管线 import cv2 from mtcnn import MTCNN from tensorflow.keras.models import load_model # 1. 初始化两个模型 detector MTCNN() # 人脸检测输出框和关键点 liveness_model load_model(model/fas.h5) # 活体分类输入160x160 RGB # 2. 读取单帧送入MTCNN img cv2.imread(data/fake_screen.png) img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # MTCNN按RGB顺序处理 faces detector.detect_faces(img_rgb) # 返回列表每个元素是一个dict # 3. 裁剪人脸区域预处理并送入活体模型 for face in faces: x, y, w, h face[box] face_crop img_rgb[y:yh, x:xw] # 按检测框裁剪 face_crop cv2.resize(face_crop, (160, 160)) # 放缩到模型输入尺寸 face_crop face_crop / 255.0 # 归一化到[0,1] face_crop face_crop.reshape(1, 160, 160, 3) # 加batch维度 prob liveness_model.predict(face_crop)[0] # 输出[真假两类概率] score prob[1] # 假脸或活体概率看训练标签定义这段流程里的两个关键参数容易搞乱。首先是颜色通道顺序OpenCV读图默认是BGRMTCNN和Keras模型通常按RGB训练不转换的话检测框位置可能偏活体模型的输入分布也会错。其次是裁剪尺寸FAS模型输入是160×160但MTCNN返回的框是原始图像坐标系下的坐标必须用原图裁剪而不是直接resize整个图否则会把背景也带进去干扰模型判断。3. 跑通demo.py从环境配置到第一次输出检测结果3.1 解压结构与关键文件定位先别急着跑把手里的压缩包解开后看看目录结构。项目里src/mtcnn.py是人脸检测模块的源码demo.py是主入口data目录下放着测试素材和结果图model目录里是mtcnn.pb和fas.h5两个模型文件。README.md里有最基础的使用说明但很多细节写得比较省下面把每一步展开讲。文件/目录作用使用说明src/mtcnn.pyMTCNN检测模块封装不可独立运行被demo.py导入demo.py主程序入口直接运行展示静默活体检测流程data/fake_screen.png屏幕翻拍测试图输入样本用于验证假脸识别data/fake_screen_res.png检测结果标注图展示输出框和置信度标注data/blink_detection_demo.mp4眨眼检测演示视频备选输入可与静态图交叉验证model/mtcnn.pbMTCNN的TensorFlow模型冻结图格式由src模块加载model/fas.h5活体分类模型权重Keras H5格式load_model直接读3.2 环境配置Python版本锁定与依赖安装这份项目跑通的关键不在代码本身而在依赖版本。课程设计项目最常见的翻车原因就是环境太新Python 3.12配TensorFlow 2.16.pb模型加载直接报错。项目里模型用的还是TensorFlow 1.x时代保存的格式所以稳妥的做法是用Python 3.8 TensorFlow 1.15或2.x的兼容模式跑。这里给出一组我验证过的组合# python相关环境的安装教程 python --version # 建议3.8或使用conda创建虚拟环境避免污染全局环境 # 创建虚拟环境win/mac/linux通用 conda create -n liveness python3.8 -y conda activate liveness # 安装核心依赖注意版本号是兼容性关键 pip install tensorflow1.15.5 # 或 tensorflow-cpu1.15.5 pip install opencv-python4.5.5.64 pip install numpy1.19.5 pip install mtcnn0.1.1 # 若项目内自带mtcnn.py则不需要 # 验证安装能import且不报错即为环境OK python -c import tensorflow as tf; import cv2; print(deps ok)版本号为什么要这么锁tensorflow 1.15.5是最后一个原生支持.pb冻结图加载的稳定版本之后的2.x版本里tf.gfile、tf.Graph等接口全部进了tf.compat.v1。如果你的机器是M系列芯片或没有GPU还要注意tf 1.15需要配CPU版否则会尝试加载CUDA报错。这段排查过程在下面的踩坑章节会详细写。3.3 运行demo.py并解读输出环境就绪后直接切到项目根目录跑demo.pypython demo.py正常跑通的话你会看到控制台打印出检测到的人脸数量、每个框的坐标、置信度以及活体判定结果同时弹出一个窗口显示标注后的画面。如果你用的是data/fake_screen.png这张屏幕翻拍照模型输出大概率是假脸spoof/fake——这正是预期结果。项目源码本地编译过能跑但如果你在别的目录运行报找不到模型文件多半是路径写死的问题后面会讲怎么改。demo.py跑的其实是离线推理读一张静态图MTCNN出框FAS出概率。如果配合data/blink_detection_demo.mp4使用通常是在视频流上逐帧跑同一套流程。输出里的关键字段是score值它对应着FAS.H5模型输出的概率向量——二分类输出形如[real, fake]scoreprob[1]时你看到的是假脸概率这个约定不同项目可能相反一定先确认README或源码里标签顺序再判断结果。3.4 从静态图到实时视频demo.py里隐藏的处理逻辑如果你直接把demo.py改成摄像头实时推理会发现有几处“隐藏逻辑”不能省。第一不能每一帧都全尺寸跑MTCNN否则CPU直接跑满帧率掉到个位数常见做法是隔帧检测或者先缩小检测尺寸。第二FAS模型输入是正方形160×160但MTCNN返回的框不一定是正方形直接resize会把脸拉伸变形影响活体判断。# 关键参数说明把MTCNN检测框变成正方形并带padding def crop_face_square(img_rgb, face_box, padding_ratio0.2): 参数说明: img_rgb: RGB顺序的整帧图像 face_box: MTCNN返回的box格式为[x, y, w, h] padding_ratio: 外扩比例默认0.2防止切掉额头和下巴 x, y, w, h face_box # 计算正方形边长取宽高中较大者 side max(w, h) # 中心对齐外扩padding后再算新的裁剪区域 cx, cy x w // 2, y h // 2 half int(side * (1 padding_ratio) / 2) x0, y0 max(cx - half, 0), max(cy - half, 0) x1, y1 min(cx half, img_rgb.shape[1]), min(cy half, img_rgb.shape[0]) return img_rgb[y0:y1, x0:x1]这个pad逻辑值不值得写非常值得。MTCNN的检测框通常紧贴人脸轮廓如果直接裁剪额头以上和下巴以下的区域会被切掉。静默活体模型在训练时看到的正样本大多包含完整的面部轮廓和一些背景上下文裁得太紧会把分布拉偏。外扩0.2这个值是经验值翻拍屏幕的照片通常包含屏幕边框和反光纹理多一点上下文反而有助于模型捕捉摩尔纹和反光特征。4. 避坑记录模型加载、路径与版本匹配的四个翻车现场4.1 翻车一从别的目录运行时提示找不到模型文件现象没有在项目根目录运行demo.py而是从桌面或其他路径执行直接报FileNotFoundError日志指向model/mtcnn.pb不存在。原因demo.py里模型加载写的是相对路径比如load_model(model/fas.h5)。相对路径是相对于当前工作目录而不是脚本所在目录换个目录运行就找不到文件。解决把路径改成基于脚本文件所在目录的绝对路径或者在启动前先cd到项目根目录再执行python demo.py。# 项目根目录运行即可避开路径坑 cd /your/path/to/project python demo.py这是最基础但最容易忽视的坑。项目里README没有特别强调必须在根目录跑很多同学下载完直接双击demo.py或从IDE里以别的目录为工作区运行报错后以为是模型文件损坏。实际测试下来改到根目录运行后一切正常。4.2 翻车二TensorFlow 2.x版本下.pb模型加载报“AttributeError: module tensorflow has no attribute gfile”现象pip装了最新版tensorflow 2.16运行到MTCNN加载部分直接报错报错信息里出现gfile、GraphDef之类关键词。原因mtcnn.pb是TensorFlow 1.x格式的冻结图依赖tf.Graph、tf.gfile等旧接口。TensorFlow 2.x把这些接口移到了tf.compat.v1模块里直接按老写法调用必然报错。解决在代码里强制切换TF2的兼容模式用tf.compat.v1的命名空间加载.pb。import tensorflow as tf import tensorflow.compat.v1 as tf_v1 # 关闭TF2的eager模式恢复graph执行语义 tf_v1.disable_eager_execution() def load_pb_graph(pb_path): pb_path: mtcnn.pb的完整路径 返回: 加载好的graph对象后续通过get_tensor_by_name获取输入输出节点 with tf_v1.gfile.GFile(pb_path, rb) as f: graph_def tf_v1.GraphDef() graph_def.ParseFromString(f.read()) with tf_v1.Graph().as_default() as graph: tf_v1.import_graph_def(graph_def, name) return graph注意disable_eager_execution这个调用必须放在任何模型推理之前。如果你在同一个进程里同时用Keras加载FAS.H5需要确认两个模型共享兼容的执行上下文。就我实跑的经验TF 1.15 Keras 2.x是这份项目最舒服的组合少很多兼容烦恼。4.3 翻车三MTCNN检测阈值与minsize设置导致活体模型误判暴涨现象用demo.py跑一张测试图MTCNN输出了正确的box但活体概率一直是0.999的fake换成自己的照片也照样报假。同学怀疑模型训练有问题。原因其实这两个模型本身没有错问题出在人脸裁剪的质量上。如果你直接用了MTCNN输出的原始框去裁剪切出来的是正方形拉伸脸并且在框内边缘有大量背景噪声。而FAS模型训练时的人脸区域可能做了对齐或预裁剪两者数据分布不一致。解决明确使用MTCNN的五个关键点做对齐而不是直接裁剪框。人脸对齐能消除头部旋转对活体特征的影响这是从翻车里总结出来的最有价值的一步# 使用MTCNN返回的关键点做仿射对齐而不是直接裁剪 import cv2 import numpy as np def align_face(img_rgb, keypoints, size160): keypoints: MTCNN返回的dict包含left_eye/right_eye/nose等关键点坐标 对齐思路以双眼角度为基准人脸旋转到水平位置后再缩放裁剪 left_eye keypoints[left_eye] right_eye keypoints[right_eye] angle np.degrees(np.arctan2( right_eye[1] - left_eye[1], right_eye[0] - left_eye[0])) # 以左眼为旋转中心把水平线转到0度 M cv2.getRotationMatrix2D(left_eye, angle, 1.0) aligned cv2.warpAffine(img_rgb, M, (img_rgb.shape[1], img_rgb.shape[0])) # 用MTCNN在旋转图里重新取框再裁剪 faces detector.detect_faces(aligned) if faces: x, y, w, h faces[0][box] return cv2.resize(aligned[y:yh, x:xw], (size, size)) return None加入了这一步之后再跑fake_screen.png活体模型的假脸概率会稳定在高位切到真脸照片你会看到概率显著反转。对齐这一步带来的提升在明星脸照片和宣传海报这种带角度的人脸上尤其明显。4.4 翻车四blink_detection_demo.mp4与静默模型判定结果对不上现象项目里带了一个眨眼检测的演示MP4同学拿这个视频当输入发现活体模型一会儿出真一会儿出假判定极不稳定。原因这个视频演示的是动作类活体的眨眼检测流程跟项目的静默活体模型不是一套逻辑。静默模型做的是单帧图像的真假分类不依赖眨眼等时序特征。视频帧在连续播放时光线变化、运动模糊、人脸角度变化都会影响单帧判定所以你会看到结果抖动。解决先明确你手上这条路是“静默活体”就别拿视频里的时序信息评估模型。跑评估时每帧独立判断、结果取均值或按时间窗口平滑这和训练目标才是匹配的。如果你确实需要视频场景常见的改法是加一个滑动窗口投票机制连续10帧里有8帧判fake才判定为攻击避免单帧误判。5. 参数调优与二次开发把demo改成摄像头实时检测5.1 MTCNN的threshold与minsize参数怎么调MTCNN的detect_faces方法里有几个高优参数threshold是三级网络各自的置信度阈值通常是一个三元组比如(0.6, 0.7, 0.7)minsize是最小人脸边长scale_factor是图像金字塔缩放系数。默认值在大多数场景够用但具体调起来有讲究。参数默认参考值调低效果调高效果适用场景threshold[0] (P-Net)0.6召回更多候选框漏检少误检少可能漏掉模糊小脸远距离/低分辨率人脸threshold[1] (R-Net)0.7更多框进入O-Net提前过滤框更准噪声大时用threshold[2] (O-Net)0.7关键点更多输出关键点更干净对后续对齐要求高时minsize20能检出更小的人脸忽略小脸速度更快手机端/闸机端scale_factor0.709金字塔层数多更慢但更准层数少快但可能漏检CPU上建议0.8左右摄像头场景我的习惯是把minsize调到40threshold[0]降到0.5因为摄像头怼脸距离近20像素的最小脸没有意义反而给后续网络增加无谓计算。而threshold[0]调低能保证侧脸或稍微偏转时不会漏检活体模型的安全性更依赖“先检测到”而不是“检测得准”。5.2 接入摄像头并输出FPS项目demo原始输入是静态图片改成摄像头实时检测需要自己写视频循环。这里有一个容易忽视的细节FAS模型的推理时间远远大于MTCNN的检测时间。在CPU上MTCNN一帧大概20~40ms但FAS模型由于是全卷积网络结构单帧推理可能到70~120ms。实时推理时整个管线会出现瓶颈。# 摄像头实时静默活体检测简化版 import cv2 import time from mtcnn import MTCNN from tensorflow.keras.models import load_model cap cv2.VideoCapture(0) # 0表示默认摄像头 detector MTCNN() model load_model(model/fas.h5) # 视频帧率参数隔帧检测MTCNN能显著提FPS frame_count 0 detect_interval 2 # 每2帧跑一次MTCNN中间帧复用上一次的box last_boxes None while True: ret, frame cap.read() if not ret: break frame_count 1 # 只在目标帧上做检测减少CPU压力 if frame_count % detect_interval 0: rgb cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) last_boxes detector.detect_faces(rgb) if last_boxes: for face in last_boxes: # 裁剪缩放归一化后进FAS模型 x, y, w, h face[box] crop frame[y:yh, x:xw] crop cv2.resize(crop, (160, 160)) crop crop.astype(float32) / 255.0 crop crop.reshape(1, 160, 160, 3) prob model.predict(crop, verbose0)[0] label REAL if prob[0] 0.5 else FAKE cv2.rectangle(frame, (x, y), (xw, yh), (0, 255, 0) if label REAL else (0, 0, 255), 2) cv2.putText(frame, f{label} {max(prob):.2f}, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2) cv2.imshow(Liveness, frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows()隔帧复用box这个技巧要重点说。MTCNN三级级联计算量大视频里相邻两帧的人脸位置变化很小复用一次检测框完全能接受。如果你的业务不允许复用可以考虑把检测图像缩小一半再跑出来的坐标乘以2还原回去检测时间能降一半以上。5.3 模型输入预处理归一化范围与通道顺序的细节FAS.H5这个模型的输入预处理决定了你看到的结果是否可信。深度学习模型的预处理有几个玄学点归一化除以255还是224ImageNet统计量、RGB还是BGR、是否做mean subtraction。在没有看README明确说明的情况下先用最常见的逐像素除以255方案因为毕业设计项目大多按这个习惯训练。一个更隐蔽的问题是FAS模型接受的输入范围。如果你用的OpenCV读图默认是BGR直接喂给按RGB训练的模型会得到通道错位的特征。MTCNN内部有处理机制但FAS模型是裸的Keras加载通道顺序全看训练时怎么定义。保险做法是用cv2.COLOR_BGR2RGB转换后再喂入并且在代码里注释掉这条转换分别跑真脸和假脸样本对比输出概率以此确定到底哪个方向是对的。5.4 业务阈值的选择误杀与漏判的取舍二分类模型输出的是连续概率但业务上你需要一个整数判定。0.5是默认阈值但不一定是最优解。真要做场景落地得想清楚误杀真人FRR和放过攻击FAR哪个代价更高。对着闸机场景放过一次屏幕攻击可能造成账号被盗代价极高因此阈值应该拉高——比如真脸概率必须大于0.8才算通过。反过来在考勤打卡这种低风险场景误杀导致的体验恶化更让人头疼阈值可以降到0.4。这个取舍完全靠你在自己的测试集上画ROC曲线来定。作者给的0.5只是一个起点不是最终答案。6. 验证效果用你自己的照片和屏幕翻拍做边界测试6.1 三类测试样本与目录组织动手之前先把测试集组织好真脸类、屏幕翻拍类、打印照片类。真脸可以拍自己或舍友屏幕翻拍就是手机/电脑屏幕显示的电子照片打印照片找打印店打一张A4黑白或彩色的。目录结构建议如下eval_dataset/ ├── real/ # 真人脸各种角度和光照 ├── screen/ # 屏幕翻拍注意记录屏幕型号和亮度 └── print/ # 打印照片尽量接近真实持证场景6.2 批量统计准确率别一张图看半天跑批量统计比单看一张图上瘾一百倍因为真正能看到模型的泛化边界。脚本不复杂逻辑是遍历目录里所有图片调用同一套MTCNN FAS管线统计真阳性率和假阳性率# 批量评估脚本输出各类别准确率 import os import cv2 import numpy as np from mtcnn import MTCNN from tensorflow.keras.models import load_model THRESH 0.5 detector MTCNN() model load_model(model/fas.h5) def predict_label(img_path): img cv2.imread(img_path) rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) faces detector.detect_faces(rgb) if not faces: return no_face x, y, w, h faces[0][box] crop cv2.resize(rgb[y:yh, x:xw], (160, 160)) / 255.0 crop crop.reshape(1, 160, 160, 3) real_prob model.predict(crop, verbose0)[0][0] return real if real_prob THRESH else fake for cls in [real, screen, print]: total 0 correct 0 for fname in os.listdir(feval_dataset/{cls}): total 1 label predict_label(feval_dataset/{cls}/{fname}) # real类期望判realscreen/print类期望判fake if (cls real and label real) or (cls ! real and label fake): correct 1 print(f{cls}: {correct}/{total} {correct/total:.2%})统计结果出来之后你会看到几个关键现象打印照片的检出率通常比屏幕翻拍更高因为打印纸没有屏幕的摩尔纹和反光但纸质纹理本身是强特征戴眼镜的真脸容易被误判为假因为镜片反光会引入类似屏幕反光的干扰暗光条件下的自拍误杀率显著上升因为模型在暗光训练样本上大概率覆盖不足。这些边界才是这个项目真正有价值的部分。6.3 评估不是终点把测试集保留下来从那以后我每次拿到一个活体项目都会先强制自己跑一套完整的正负样本边界测试而不是在demo里看到一次正确输出就宣布完工。模型的黑匣子属性决定了你必须用数据说话凭感觉调参总有一天翻车。建议把eval_dataset留存好以后每次调参或换模型都用同一套基准做回归验证。希望这份源码和这篇拆解能帮你在答辩或面试里把“静默活体”这个技术点讲出真正的工程深度。本文还有配套的精品资源点击获取

相关新闻

Python人工智能经典案例实战:从数据清洗到模型评估全流程解析

Python人工智能经典案例实战:从数据清洗到模型评估全流程解析

简介:面向Python初学者与人工智能入门者,这份Python人工智能经典案例合集将经典算法与真实数据集结合,覆盖房价预测、葡萄酒品质分析、糖尿病诊断等典型场景,帮助读者理解数据预处理、特征分析与模型构建的基本流程,适…

2026/10/12 11:18:15 阅读更多 →
Composer 低精度 LayerNorm(LowPrecisionLayerNorm)算法详解:原理、用法与精度策略

Composer 低精度 LayerNorm(LowPrecisionLayerNorm)算法详解:原理、用法与精度策略

深度学习分布式训练模型优化 【免费下载链接】composer Supercharge Your Model Training 项目地址: https://gitcode.com/gh_mirrors/com/composer 点击查看 免费下载 导读 本文聚焦 Composer 中针对自然语言处理等以 Transformer 架构为主的模型训练场景设计的 …

2026/10/12 11:18:15 阅读更多 →
提示注入攻击与深度防御:Python构建AI应用安全防线的完整实践

提示注入攻击与深度防御:Python构建AI应用安全防线的完整实践

1. 当AI应用开始“中毒”:提示注入是怎样的隐形威胁 从我个人的实战体感来说,近两年接触的AI应用项目中,最容易被忽略但又最容易翻车的安全问题,不是模型本身的性能,而是 提示注入攻击(Prompt Injection&a…

2026/10/12 11:18:15 阅读更多 →

最新新闻

机器学习最小可行知识链:从公式到可调试代码的完整实践

机器学习最小可行知识链:从公式到可调试代码的完整实践

简介:本资源是邹博主讲的《机器学习全方位解析:从基础到实践》配套教学包,面向零基础入门者与希望系统夯实理论与工程能力的学习者,解决机器学习概念抽象、代码实践脱节、算法调优无从下手等核心痛点。压缩包共613个文件&#xff…

2026/10/12 13:00:09 阅读更多 →
Harbor v2.13.1 ARM64离线部署实战:内网镜像仓库搭建与避坑指南

Harbor v2.13.1 ARM64离线部署实战:内网镜像仓库搭建与避坑指南

简介:本资源为 Harbor 最新 v2.13.1 的 ARM64 架构离线安装包,面向在 ARM64 服务器或 Kubernetes 集群上部署私有镜像仓库的运维与开发人员,解决国产化平台、信创环境及边缘节点无法直接拉取官方 x86 安装包的问题。压缩包共 6 个文件&#x…

2026/10/12 13:00:09 阅读更多 →
物联网平台二次开发选型指南:架构边界、扩展点与实战避坑

物联网平台二次开发选型指南:架构边界、扩展点与实战避坑

1. 为什么“适合二开”才是物联网平台选型的硬指标做物联网平台选型这件事,我踩过不少坑。早年做某智慧园区项目,技术评审时大家盯着功能清单看——设备接入、规则引擎、数据大屏、告警中心,列表很丰满,厂商演示也很流畅。结果签完…

2026/10/12 13:00:09 阅读更多 →
批处理驱动Matlab实现参数自动扫描:原理、传参与排错指南

批处理驱动Matlab实现参数自动扫描:原理、传参与排错指南

说实话,用批处理去反复跑Matlab这事儿,我最早是在一次大规模参数寻优中被逼出来的。那时候手里有一堆实验数据要拟合,模型参数有四五种组合方式,每组参数跑一遍得几十秒,加起来几百个组合,手动改一个跑一个…

2026/10/12 13:00:08 阅读更多 →
PyTorch新手必学:ResNet18从原理到手写实现详解

PyTorch新手必学:ResNet18从原理到手写实现详解

1. 项目概述:为什么ResNet18是PyTorch新手绕不开的“第一座桥”如果你刚打开Jupyter Notebook,敲下import torch,接着想跑一个真正能分类图像的模型——不是MNIST手写数字那种玩具级任务,而是能在CIFAR-10上稳定达到92%准确率、结…

2026/10/12 13:00:08 阅读更多 →
LCA最近公共祖先算法详解:倍增法、Tarjan与树链剖分

LCA最近公共祖先算法详解:倍增法、Tarjan与树链剖分

1. 从一道面试题说起:为什么LCA值得花时间搞透第一次接触LCA是在刷题的时候,题目很直白:给一棵树,多次询问两个节点的最近公共祖先。当时我的第一反应是暴力——两个节点分别往上走,标记走过的路径,第一个相…

2026/10/12 12:59:08 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/11 14:36:54 阅读更多 →