💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
目录
- 建筑工地个人防护装备合规性检测与缺失识别研究系统介绍
- 建筑工地个人防护装备合规性检测与缺失识别研究系统演示视频
- 建筑工地个人防护装备合规性检测与缺失识别研究系统演示图片
- 建筑工地个人防护装备合规性检测与缺失识别研究系统代码展示
- 建筑工地个人防护装备合规性检测与缺失识别研究系统文档展示
建筑工地个人防护装备合规性检测与缺失识别研究系统介绍
本系统名为《基于深度学习的建筑工地个人防护装备合规性检测与缺失识别研究》,主要面向建筑工地里安全帽、反光衣等个人防护装备的合规检查和缺失识别,开发语言用Python,深度学习部分用PyTorch和Ultralytics YOLO,检测模型走YOLOv8s、YOLO26m这类YOLO系列,分类部分用ConvNeXt-Tiny、ResNet等骨干网络做海选,训练时按短训海选、LR Finder、seed/warmup/cosine/EMA/AMP、EarlyStopping这套配方得到best.pt,再通过export_run.py导出ONNX(opset 17、simplify、NMS end2end),后端Django启动时加载best.onnx完成推理。系统里有图片识别、视频识别、摄像头识别三种入口,识别结果会落到MySQL里形成识别记录和历史数据,前端用Vue、ElementUI、ECharts以及HTML、CSS、JavaScript、jQuery做交互,ECharts数据大屏用dark主题展示classBar等六类图表。系统还带用户管理、个人信息、修改密码这些账号维护功能,整体想把数据标签、模型训练、ONNX导出、Django后端加载和Vue页面展示串成一个能演示、能查记录、能看统计的毕设系统。
建筑工地个人防护装备合规性检测与缺失识别研究系统演示视频
点击链接观看项目演示视频
建筑工地个人防护装备合规性检测与缺失识别研究系统演示图片

建筑工地个人防护装备合规性检测与缺失识别研究系统代码展示
from pyspark.sql import SparkSession; import os,time,json,cv2,onnxruntime as ort
spark = SparkSession.builder.appName("ppe_compliance_history").master("local[*]").config("spark.sql.shuffle.partitions","2").getOrCreate()
def recognize_ppe_image(request):
image_file = request.FILES.get("image")
if not image_file: return JsonResponse({"code":400,"msg":"请上传图片"},status=400)
ext = os.path.splitext(image_file.name)[1].lower()
if ext not in [".jpg",".jpeg",".png",".bmp"]: return JsonResponse({"code":400,"msg":"图片格式不支持"},status=400)
save_dir = os.path.join(settings.MEDIA_ROOT,"ppe_images")
os.makedirs(save_dir,exist_ok=True)
save_name = f"{request.user.id}_{int(time.time())}{ext}"
save_path = os.path.join(save_dir,save_name)
with open(save_path,"wb+") as f:
for chunk in image_file.chunks(): f.write(chunk)
session = ort.InferenceSession(os.path.join(settings.BASE_DIR,"weights","best.onnx"),providers=["CPUExecutionProvider"])
img = cv2.imread(save_path)
blob = cv2.dnn.blobFromImage(img,1/255.0,(640,640),swapRB=True,crop=False)
input_name = session.get_inputs()[0].name
outputs = session.run(None,{input_name:blob})
detections = []
for out in outputs:
for row in out.reshape(–1,out.shape[–1]):
conf = float(row[4])
if conf < 0.35: continue
cls_id = int(row[5]) if len(row)>5 else 0
x1,y1,x2,y2 = [int(v) for v in row[:4]]
detections.append({"label":PPE_CLASS_NAMES.get(cls_id,str(cls_id)),"conf":round(conf,4),"box":[x1,y1,x2,y2]})
labels = [d["label"] for d in detections]
missing = [x for x in ["helmet","vest"] if x not in labels]
record = PpeRecord.objects.create(user=request.user,source_type="image",file_path=save_name,result_json=json.dumps(detections,ensure_ascii=False),missing_json=json.dumps(missing,ensure_ascii=False),is_compliant=len(missing)==0)
return JsonResponse({"code":200,"record_id":record.id,"detections":detections,"missing":missing})
def recognize_ppe_video(request):
video_file = request.FILES.get("video")
if not video_file: return JsonResponse({"code":400,"msg":"请上传视频"},status=400)
ext = os.path.splitext(video_file.name)[1].lower()
if ext not in [".mp4",".avi",".mov"]: return JsonResponse({"code":400,"msg":"视频格式不支持"},status=400)
save_dir = os.path.join(settings.MEDIA_ROOT,"ppe_videos")
os.makedirs(save_dir,exist_ok=True)
save_name = f"{request.user.id}_{int(time.time())}{ext}"
save_path = os.path.join(save_dir,save_name)
with open(save_path,"wb+") as f:
for chunk in video_file.chunks(): f.write(chunk)
session = ort.InferenceSession(os.path.join(settings.BASE_DIR,"weights","best.onnx"),providers=["CPUExecutionProvider"])
cap = cv2.VideoCapture(save_path)
frame_index = 0
bad_frames = []
all_labels = []
while cap.isOpened():
ok,frame = cap.read()
if not ok: break
frame_index += 1
if frame_index % 5 != 0: continue
blob = cv2.dnn.blobFromImage(frame,1/255.0,(640,640),swapRB=True,crop=False)
outputs = session.run(None,{session.get_inputs()[0].name:blob})
labels = []
for out in outputs:
for row in out.reshape(–1,out.shape[–1]):
if float(row[4]) < 0.35: continue
cls_id = int(row[5]) if len(row)>5 else 0
labels.append(PPE_CLASS_NAMES.get(cls_id,str(cls_id)))
all_labels.extend(labels)
if "helmet" not in labels or "vest" not in labels: bad_frames.append(frame_index)
cap.release()
missing = [x for x in ["helmet","vest"] if x not in all_labels]
record = PpeRecord.objects.create(user=request.user,source_type="video",file_path=save_name,result_json=json.dumps({"bad_frames":bad_frames[:200],"labels":list(set(all_labels))},ensure_ascii=False),missing_json=json.dumps(missing,ensure_ascii=False),is_compliant=len(bad_frames)==0)
return JsonResponse({"code":200,"record_id":record.id,"bad_frames":bad_frames[:50],"missing":missing})
def ppe_history_statistics(request):
jdbc_url = "jdbc:mysql://127.0.0.1:3306/ppe_db?useSSL=false&serverTimezone=Asia/Shanghai"
df = spark.read.format("jdbc").option("url",jdbc_url).option("dbtable","ppe_record").option("user","root").option("password","123456").option("driver","com.mysql.cj.jdbc.Driver").load()
df.createOrReplaceTempView("ppe_record")
class_rows = spark.sql("select source_type, count(1) as total, sum(case when is_compliant=1 then 1 else 0 end) as ok_count from ppe_record group by source_type").collect()
missing_rows = spark.sql("select missing_json, count(1) as cnt from ppe_record group by missing_json order by cnt desc limit 6").collect()
trend_rows = spark.sql("select date(create_time) as day, count(1) as total from ppe_record group by date(create_time) order by day").collect()
class_bar = [{"name":r["source_type"],"total":r["total"],"ok":r["ok_count"]} for r in class_rows]
missing_pie = [{"name":r["missing_json"],"value":r["cnt"]} for r in missing_rows]
trend_line = [{"day":str(r["day"]),"total":r["total"]} for r in trend_rows]
recent_records = list(PpeRecord.objects.filter(user=request.user).order_by("-create_time").values("id","source_type","is_compliant","create_time")[:20])
return JsonResponse({"code":200,"classBar":class_bar,"missingPie":missing_pie,"trendLine":trend_line,"recentRecords":recent_records})
建筑工地个人防护装备合规性检测与缺失识别研究系统文档展示

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
网硕互联帮助中心





评论前必须登录!
注册