智能安规考核系统:AI(YOLO+讯飞语音)赋能千人千面
前言项目介绍近期,完成了“千人千面智能安规考核系统”的研发与部署工作。该系统旨在通过人工智能技术实现电力、建筑等行业安全规程考核的自动化、智能化与个性化,全面提升考核效率与公正性。系统基于PyQt5框架进行桌面端封装,具备良好的用户交互界面与跨平台兼容性。通过融合多种前沿深度学习模型,构建了一套多模态智能考评体系,涵盖的技术如下:姿态估计(YOLOPose):用于精准识别考生在实操过程中的身体姿态与动作规范性,如登高作业姿势、设备操作流程等,确保动作符合安全规程要求。人脸识别:实现考生身份自动核验,防止替考,保障考核过程的真实性与可追溯性。目标检测(YOLOv11):对考核场景中的关键安全装备进行实时检测,包括安全帽佩戴、工作服着装规范、35kV绝缘手套使用、布控球安装状态等,确保个人防护与设备操作符合标准。语音识别:集成科大讯飞高精度语音识别接口,自动识别并评估考生对安全规程的口述背诵内容,实现“听、看、做”一体化智能评分。为提升系统的部署灵活性与运行效率,项目进行了深度优化:所有PyTorch训练模型(.pt)均被转换为ONNX(Open Neural Network Exchange)格式,实现模型的跨框架兼容与轻量化部署。利用ONNX Runtime结合GPU(CUDA)加速,显著提升推理速度,确保在复杂场景下仍能实现实时、低延迟的多任务并行处理。整个系统通过PyInstaller打包为独立的.exe可执行文件,无需安装复杂环境,一键式部署,极大降低了现场运维门槛,适用于对安全性要求较高的工业现场。选择 ONNX 的理由为何要将pt格式文件转换为ONNX格式呢,原因如下:特性/方面PyTorch (PT)ONNX框架类型深度学习开发框架模型交换格式适用阶段研发、训练阶段部署阶段推理性能原生支持一般,可通过 TorchScript 或 JIT 提升支持通过 ONNX Runtime 及其他高性能引擎优化推理性能跨平台兼容性主要针对特定环境(如 Python),需要额外工作实现跨平台设计用于跨平台兼容,支持多种硬件和操作系统互操作性有限,主要在 PyTorch 生态内高,支持与 TensorFlow, MXNet 等多个框架互操作部署复杂度相对较高,尤其是跨框架或跨平台时较低,简化了跨框架和跨平台的部署流程社区和支持强大的社区支持和活跃的开发者群体良好的社区支持,特别是对于工业级应用和生产部署|应用场景| 适用于研究、原型设计以及小规模应用 | 更适合大规模部署、跨平台应用及需要高性能推理的场景 |跨平台兼容性:ONNX 支持多种深度学习框架和硬件平台,使得模型可以在不同的环境中高效运行。简化部署流程:通过使用 ONNX 格式,可以减少因框架差异导致的部署难题。性能优化:利用 ONNX Runtime 或者其他支持 ONNX 的高性能引擎可以获得比原生框架更好的推理速度。团队协作:ONNX 作为一种开放标准,促进了不同背景的开发者之间的协作,提高了模型共享和重用的效率。千人千面安全规范考核系统系统流程图如下:接下来,博主将根据技术栈进行系统介绍:系统 UI 与功能设计整个系统使用PyQt5进行开发,各个界面及其功能如下:系统首页该界面是主界面,后续的页面都是一个个widget,不断的切换到这个主界面中。主界面代码如下:classExamHomePage(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("千人千面考试系统")self.setWindowFlags(Qt.FramelessWindowHint)self.setWindowIcon(QIcon(resource_path("images/logo.ico")))screen=QApplication.primaryScreen()screen_geometry=screen.availableGeometry()self.width=screen_geometry.width()self.height=screen_geometry.height()self.setGeometry(0,0,self.width,self.height)self.setFixedSize(self.width,self.height)self.user_id=""self.id_card=""self.name=""self.api_data=[]self.selected_items=[]# 页面容器self.stacked_widget=QStackedWidget(self)self.setCentralWidget(self.stacked_widget)# 创建一个 QLabel 用于背景self.bg_label=QLabel(self.stacked_widget)self.bg_label.setGeometry(self.stacked_widget.rect())bg_pixmap=QPixmap(resource_path("images/bg.jpg"))self.bg_label.setPixmap(bg_pixmap)self.bg_label.setScaledContents(True)# 图片随 label 缩放self.bg_label.lower()# 将背景 label 放在最底层# 首页self.home_page=QWidget()self.init_home_page()self.stacked_widget.addWidget(self.home_page)# 人脸匹配页self.face_match_page=FaceMatchPage(parent=self)self.stacked_widget.addWidget(self.face_match_page)# index 1#考试项目选择self.exam_select_page=ExamSelectionPage(parent=self)self.stacked_widget.addWidget(self.exam_select_page)# index 2# 考试页面self.exam_page=ExamApp(exam_name="",selected_items="",parent=self)self.stacked_widget.addWidget(self.exam_page)# index 3在主界面加载完成后,即可初始化首页:definit_home_page(self):layout=QVBoxLayout()layout.setAlignment(Qt.AlignCenter)# 背景图background=QLabel(self.home_page)background.setPixmap(QPixmap(resource_path("images/img.jpg")).scaled(self.width,self.height+150))background.setStyleSheet("background-color: rgba(0, 0, 0, 120);")background.resize(self.width,self.height)container=QWidget(self.home_page)container.setStyleSheet(""" background-color: rgba(40, 40, 40, 180); border-radius: 20px; padding: 30px; """)container.setFixedSize(int(self.width*0.4),int(self.height*0.5))layout_container=QVBoxLayout()layout_container.setAlignment(Qt.AlignTop)title=QLabel("考试须知",self.home_page)title.setAlignment(Qt.AlignCenter)title.setStyleSheet("font-size: 48px; font-weight: bold; color: white; margin-bottom: 20px;")layout_container.addWidget(title)notice_text=QLabel(""" style.notice {color:white;font-size:30px;line-height:1.2;text-align:left;}/style div p1. 请确保摄像头和麦克风正常工作。/p p2. 确保考试环境安静且无干扰。/p p3. 准备好有效身份证件以备查验。/p p4. 不得使用任何参考资料或电子设备。/p p5. 保持面部清晰可见,不得遮挡五官。/p p6. 违反考试规则将取消考试资格。/p /div """)notice_text.setWordWrap(True)layout_container.addWidget(notice_text)layout_container.addSpacing(20)start_button=QPushButton("进入考试",self.home_page)start_button.setFixedSize(int(container.width()*0.5),int(self.height*0.06))start_button.setStyleSheet(""" QPushButton { background-color: #4CAF50; border: none; color: white; font-size: 42px; padding: 10px; border-radius: 15px; } QPushButton:hover { background-color: #32CD32; color: white; border: 2px solid #8FBC8F; } """)start_button.clicked.connect(self.goto_face_match_page)layout_container.addWidget(start_button,alignment=Qt.AlignCenter)container.setLayout(layout_container)x=(self.width-container.width())//2y=(self.height-container.height())//2container.move(x,y)layout.addWidget(container)self.home_page.setLayout(layout)人脸认证人脸识别是一种通过分析人脸图像或视频来识别个体身份的技术,其基本原理可以分为以下几个关键步骤:人脸检测 (Face Detection):首先,系统需要在图像或视频流中找到人脸的位置。这通常通过检测人脸的轮廓、五官(如眼睛、鼻子、嘴巴)的相对位置和特征来实现,将人脸区域从背景中分割出来,并用一个矩形框标记。关键点定位与对齐 (Landmark Detection Alignment):在检测到的人脸区域内,系统会定位关键的面部特征点(如眼角、鼻尖、嘴角等)。这些点用于对人脸进行几何校正(对齐),例如旋转、缩放,以消除姿态、角度变化带来的影响,确保后续分析的准确性。特征提取 (Feature Extraction):这是核心步骤。系统利用深度学习模型(如卷积神经网络CNN)分析对齐后的人脸图像,将其转换成一个高维度的数字向量(称为“特征向量”或“嵌入向量”Embedding)。这个向量是人脸的数学化表示,它高度浓缩了能区分不同个体的独特面部特征(如五官的形状、相对距离、纹理等),同时尽量忽略光照、表情、发型等非本质变化。特征比对与识别 (Feature Comparison Recognition):识别 (Recognition/Identification):将提取出的特征向量与数据库中存储的已知身份的特征向量进行比对。计算它们之间的相似度(通常用余弦相似度或欧氏距离衡量)。系统会找到最相似的向量,并将对应的身份作为识别结果。验证 (Verification):判断当前人脸特征向量是否与某个特定身份(如ID)的特征向量匹配(“1:1比对”),回答“是不是某人”的问题。核心思想:人脸识别的本质是将复杂的、直观的人脸视觉信息,转化为计算机易于存储、计算和比较的数字特征。通过深度学习,模型学习到如何生成这种特征向量,使得同一个人在不同照片下的特征向量距离很近,而不同人的特征向量距离很远,从而实现准确的身份识别。这里,博主直接使用OpenCV中的库实现人脸识别:人脸库构建首先是人脸库构建,这里博主使用的是anno构建的方式,因为先前使用faiss方式构建时,在使用pyinstaller打包时会失败。这里下面的人脸检测模型(face_detection.onnx)与特征提取模型(face_recognition.onnx)是使用的OpenCV中自带的人脸库实现的。importcv2importosimportnumpyasnpfromannoyimportAnnoyIndex# 加载模型face_detector=cv2.FaceDetectorYN_create("D:/workspace/qianren/onnx_inference/models/face_detection.onnx","",(320,320))face_recognizer=cv2.FaceRecognizerSF_create("D:/workspace/qianren/onnx_inference/models/face_recognition.onnx","")# 人脸库目录dataset_dir="D:/faces/faces"# 每个人一个文件夹,如 faces_dataset/person_001/*.jpgfeature_list=[]name_list=[]forperson_nameinos.listdir(dataset_dir):person_path=os.path.join(dataset_dir,person_name)ifnotos.path.isdir(person_path):continueforimg_fileinos.listdir(person_path):img_path=os.path.join(person_path,img_file)img=cv2.imread(img_path)h,w=img.shape[:2]face_detector.setInputSize((w,h))_,faces=face_detector.detect(img)iffacesisnotNoneandlen(faces)0:aligned_face=face_recognizer.alignCrop(img,faces[0])embedding=face_recognizer.feature(aligned_face).flatten().astype('float32')# 对特征向量进行 L2 归一化(余弦相似度需要)embedding/=np.linalg.norm(embedding)feature_list.append(embedding)name_list.append(person_name)# 转换为 numpy 数组feature_array=np.array(feature_list).astype('float32')# 获取维度dimension=feature_array.shape[1]# 创建 Annoy 索引(使用余弦相似度)annoy_index=AnnoyIndex(dimension,metric='angular')# angular 表示余弦距离# 添加向量到索引fori,vectorinenumerate(feature_array):annoy_index.add_item(i,vector)# 构建索引(n_trees 是搜索速度与准确率之间的权衡)annoy_index.build(n_trees=10)# 保存索引和名字列表annoy_index.save("ann_face_index.ann")np.save("../datasets/ann_name_list.npy",np.array(name_list))print("人脸库构建完成!")人脸识别人脸识别代码如下:importcv2# 加载模型face_detector=cv2.FaceDetectorYN_create("D:/workspace/qianren/onnx_inference/models/face_detection.onnx","",(320,320))face_recognizer=cv2.FaceRecognizerSF_create("D:/workspace/qianren/onnx_inference/models/face_recognition.onnx","")# 加载注册图像reference_img=cv2.imread("face.jpg")h,w=reference_img.shape[:2]face_detector.setInputSize((w,h))# 检测人脸_,faces=face_detector.detect(reference_img)iffacesisNone:print("人脸特征不明显,无法开启摄像...")aligned_face=face_recognizer.alignCrop(reference_img,faces[0])ref_embedding=face_recognizer.feature(aligned_face)print("已加载参考图像特征,启动摄像头...")# 打开摄像头cap=cv2.VideoCapture(0)whileTrue:ret,frame=cap.read()ifnotret:breakh,w=frame.shape[:2]face_detector.setInputSize((w,h))_,faces=face_detector.detect(frame)iffacesisnotNoneandlen(faces)0:foridx,faceinenumerate(faces):# 获取当前人脸 bounding boxbox=list(map(int,face[:4]))# x, y, width, heightaligned=face_recognizer.alignCrop(frame,face)embedding=face_recognizer.feature(aligned)# 计算相似度cosine_score=cv2.matchTemplate(ref_embedding,embedding,cv2.TM_CCOEFF_NORMED)[0]

相关新闻

T3MP3ST 网络侦察引擎原理:从 DNS 枚举到服务指纹识别的底层技术

T3MP3ST 网络侦察引擎原理:从 DNS 枚举到服务指纹识别的底层技术

T3MP3ST 网络侦察引擎原理:从 DNS 枚举到服务指纹识别的底层技术 【免费下载链接】T3MP3ST autonomous red teaming platform; multi-agent offensive-security meta-harness 项目地址: https://gitcode.com/gh_mirrors/t3/T3MP3ST T3MP3ST 作为一款自主红队…

2026/8/7 19:30:14 阅读更多 →
如何高效使用SpotiFLAC封面下载功能:从技术原理到实战应用完整指南

如何高效使用SpotiFLAC封面下载功能:从技术原理到实战应用完整指南

如何高效使用SpotiFLAC封面下载功能:从技术原理到实战应用完整指南 【免费下载链接】SpotiFLAC Get Spotify tracks in true FLAC from Tidal, Qobuz & Amazon Music — no account required. 项目地址: https://gitcode.com/GitHub_Trending/sp/SpotiFLAC …

2026/8/7 19:29:14 阅读更多 →
Tox21毒性预测案例:Chainer Chemistry多任务学习最佳实践

Tox21毒性预测案例:Chainer Chemistry多任务学习最佳实践

Tox21毒性预测案例:Chainer Chemistry多任务学习最佳实践 【免费下载链接】chainer-chemistry Chainer Chemistry: A Library for Deep Learning in Biology and Chemistry 项目地址: https://gitcode.com/gh_mirrors/ch/chainer-chemistry Chainer Chemistr…

2026/8/7 19:29:14 阅读更多 →

最新新闻

中小企业官网适合用AI建站吗?这几家千万不能错过了!

中小企业官网适合用AI建站吗?这几家千万不能错过了!

中小企业官网适合用AI建站吗?这几家千万不能错过了! 艾瑞咨询《2026年中国企业数字化建站行业白皮书》显示,国内AI建站渗透率已破68%,但抽样超1200家中小企业里,仅31%在生成站点后半年仍持续续费且搜索流量正向增长。…

2026/8/7 20:40:41 阅读更多 →
《低代码生成式 UI 工程化方案 线上高并发排障实战》

《低代码生成式 UI 工程化方案 线上高并发排障实战》

《低代码生成式 UI 工程化方案 线上高并发排障实战》 作者: 谭锐 (Tn Ru) (大山哥AGI)技术方向: AI 辅助前端工程化、智能代码审查、前端性能自动诊断、低代码与生成式 UI 工程 💡 导语与现场排障背景 在生产环境重构 低代码与生成式 UI 工程化方案 时,…

2026/8/7 20:40:41 阅读更多 →
AI建站平台是否支持GEO内容布局?这里一文给你讲的明明白白!

AI建站平台是否支持GEO内容布局?这里一文给你讲的明明白白!

AI建站平台是否支持GEO内容布局?这里一文给你讲的明明白白! 艾瑞咨询《2026年中国企业数字化建站行业白皮书》里有个挺扎心的数:国内AI建站渗透率破了68%,但抽样超1200家中小企业里,仅31%在生成站点后半年仍持续续费且…

2026/8/7 20:40:41 阅读更多 →
Plan 9实用工具大全:提升效率的10个必备命令

Plan 9实用工具大全:提升效率的10个必备命令

Plan 9实用工具大全:提升效率的10个必备命令 【免费下载链接】plan9 UC Berkeley release of Plan 9 under the GPLv2 项目地址: https://gitcode.com/gh_mirrors/plan/plan9 Plan 9作为UC Berkeley发布的类Unix操作系统,提供了丰富的实用工具集帮…

2026/8/7 20:40:41 阅读更多 →
无需复杂设备!AnySplat教你用手机照片生成可交互的3D高斯模型

无需复杂设备!AnySplat教你用手机照片生成可交互的3D高斯模型

无需复杂设备!AnySplat教你用手机照片生成可交互的3D高斯模型 【免费下载链接】AnySplat [SIGGRAPH Asia 2025 (ACM TOG)] AnySplat: Feed-forward 3D Gaussian Splatting from Unconstrained Views 项目地址: https://gitcode.com/gh_mirrors/an/AnySplat A…

2026/8/7 20:40:41 阅读更多 →
multer-s3性能优化:存储类别(StorageClass)选择与成本控制

multer-s3性能优化:存储类别(StorageClass)选择与成本控制

multer-s3性能优化:存储类别(StorageClass)选择与成本控制 【免费下载链接】multer-s3 multer storage engine for amazon s3 项目地址: https://gitcode.com/gh_mirrors/mu/multer-s3 multer-s3作为Amazon S3的存储引擎,帮助开发者轻松实现文件上…

2026/8/7 20:39:41 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →