基于改进YOLOv26的工地安全装备智能识别系统研究
概述本项目旨在开发一套基于改进YOLOv26算法的工地安全装备智能识别系统实现工地人员安全装备的实时监测。系统采用目标检测技术可识别5类安全装备头盔(helmet)、未佩戴头盔(no-helmet)、未穿戴背心(no-vest)、人员(person)和背心(vest)。前端采用Flask Vue ElementPlus技术栈构建提供友好的用户界面。YOLOv26算法作为核心后端通过改进提升了在复杂工地环境下的识别精度和实时性有效预防安全事故提升工地安全管理水平。任务目标随着建筑行业的快速发展工地安全问题日益凸显其中安全装备的正确佩戴是预防事故的关键环节。传统的人工监督方式存在效率低下、易受主观因素影响等弊端难以满足现代工地安全管理的高要求。基于此本研究旨在开发一种基于改进YOLOv26的工地安全装备智能识别系统通过深度学习技术实现对工地人员安全帽、反光背心等装备佩戴情况的实时自动检测。该研究不仅能够显著提高安全监督的效率和准确性降低人工成本还能为工地安全管理提供数据支持和决策依据对减少安全事故、保障工人生命安全具有重要的现实意义。系统将针对’helmet’、‘no-helmet’、‘no-vest’、person’和’vest’五类目标进行识别通过优化网络结构和算法提升复杂环境下的检测精度和鲁棒性最终实现智能化、自动化的工地安全装备监管推动建筑行业安全管理模式的数字化转型。数据集信息该数据集包含五个关键类别‘helmet’安全帽、‘no-helmet’未佩戴安全帽、‘no-vest’未佩戴反光背心、‘person’人员和’vest’反光背心。这些类别全面涵盖了工地安全装备检测的核心目标能够精确识别人员及其安全装备的佩戴状态。选择此数据集的优势在于其类别设计的针对性和实用性直接对应工地安全管理的核心需求能够有效支持安全装备佩戴情况的自动化检测。数据集的类别划分既包含了正常佩戴状态helmet、vest也涵盖了违规状态no-helmet、no-vest同时保留了人员基础类别person为构建多层次的安全评估体系提供了基础。这种分类方式有助于开发智能安全监控系统实现对工地人员安全装备佩戴情况的精确判断为预防安全事故提供技术支持。系统功能图片系统清单模型训练15.模型训练模块详解15.1 模型训练模块概述模型训练模块是智慧识别系统的核心功能之一提供了完整的深度学习模型训练解决方案。该模块支持多种主流深度学习框架和算法包括YOLOv11、ResNet、EfficientNet等为用户提供了从数据预处理到模型部署的全流程训练支持。15.2 训练模块架构设计15.2.1 整体架构模型训练模块采用模块化设计将训练流程分解为多个独立的组件classModelTrainingWindow(QMainWindow):模型训练窗口def__init__(self,parentNone):super().__init__(parent)self.parent_windowparent self.training_threadNoneself.current_modelNoneself.training_config{}self.init_ui()self.setup_training_components()self.load_available_models()15.2.2 核心组件模型选择器: 支持多种预训练模型和自定义模型数据集管理器: 处理训练数据的加载和预处理训练配置面板: 设置训练参数和超参数训练监控器: 实时显示训练进度和指标结果可视化器: 展示训练结果和性能分析15.3 支持的模型类型15.3.1 目标检测模型defget_detection_models(self):获取目标检测模型列表return{YOLOv11n:{type:detection,framework:ultralytics,description:轻量级目标检测模型适合实时应用,input_size:(640,640),classes:80},YOLOv11s:{type:detection,framework:ultralytics,description:小型目标检测模型平衡精度和速度,input_size:(640,640),classes:80},YOLOv11m:{type:detection,framework:ultralytics,description:中型目标检测模型较高精度,input_size:(640,640),classes:80},YOLOv11l:{type:detection,framework:ultralytics,description:大型目标检测模型高精度,input_size:(640,640),classes:80},YOLOv11x:{type:detection,framework:ultralytics,description:超大型目标检测模型最高精度,input_size:(640,640),classes:80}}15.3.2 图像分类模型defget_classification_models(self):获取图像分类模型列表return{ResNet50:{type:classification,framework:torchvision,description:经典残差网络适合图像分类,input_size:(224,224),classes:1000},EfficientNet-B0:{type:classification,framework:timm,description:高效网络参数少精度高,input_size:(224,224),classes:1000},Vision Transformer:{type:classification,framework:timm,description:视觉Transformer注意力机制,input_size:(224,224),classes:1000}}15.3.3 语义分割模型defget_segmentation_models(self):获取语义分割模型列表return{DeepLabV3:{type:segmentation,framework:torchvision,description:语义分割模型支持多尺度特征,input_size:(512,512),classes:21},U-Net:{type:segmentation,framework:custom,description:U型网络适合医学图像分割,input_size:(512,512),classes:2}}15.4 数据集管理15.4.1 数据集加载defload_dataset(self,dataset_path,dataset_type):加载数据集try:ifdataset_typedetection:returnself.load_detection_dataset(dataset_path)elifdataset_typeclassification:returnself.load_classification_dataset(dataset_path)elifdataset_typesegmentation:returnself.load_segmentation_dataset(dataset_path)else:raiseValueError(f不支持的数据集类型:{dataset_type})exceptExceptionase:QMessageBox.critical(self,数据集加载错误,f无法加载数据集:{str(e)})returnNonedefload_detection_dataset(self,dataset_path):加载目标检测数据集# 检查数据集格式ifnotos.path.exists(os.path.join(dataset_path,images)):raiseFileNotFoundError(数据集缺少images文件夹)ifnotos.path.exists(os.path.join(dataset_path,labels)):raiseFileNotFoundError(数据集缺少labels文件夹)# 加载数据集信息dataset_info{path:dataset_path,type:detection,images:[],labels:[],classes:[]}# 扫描图像文件image_extensions[.jpg,.jpeg,.png,.bmp]forfileinos.listdir(os.path.join(dataset_path,images)):ifany(file.lower().endswith(ext)forextinimage_extensions):dataset_info[images].append(file)# 扫描标签文件forfileinos.listdir(os.path.join(dataset_path,labels)):iffile.endswith(.txt):dataset_info[labels].append(file)returndataset_info15.4.2 数据预处理defpreprocess_dataset(self,dataset_info,preprocessing_config):数据预处理preprocessing_pipeline[]# 图像增强ifpreprocessing_config.get(augmentation,False):augmentation_transforms[RandomHorizontalFlip,RandomVerticalFlip,RandomRotation,ColorJitter,RandomResizedCrop]preprocessing_pipeline.extend(augmentation_transforms)# 数据标准化ifpreprocessing_config.get(normalization,True):preprocessing_pipeline.append(Normalize)# 尺寸调整ifpreprocessing_config.get(resize,True):target_sizepreprocessing_config.get(target_size,(640,640))preprocessing_pipeline.append(fResize_{target_size})returnpreprocessing_pipeline15.5 训练配置系统15.5.1 训练参数配置defcreate_training_config_panel(self,parent_layout):创建训练配置面板config_frameQGroupBox(训练配置)config_layoutQFormLayout(config_frame)# 基础参数self.epochs_inputQSpinBox()self.epochs_input.setRange(1,1000)self.epochs_input.setValue(100)config_layout.addRow(训练轮数:,self.epochs_input)self.batch_size_inputQSpinBox()self.batch_size_input.setRange(1,128)self.batch_size_input.setValue(16)config_layout.addRow(批次大小:,self.batch_size_input)self.learning_rate_inputQDoubleSpinBox()self.learning_rate_input.setRange(0.0001,1.0)self.learning_rate_input.setValue(0.001)self.learning_rate_input.setDecimals(4)config_layout.addRow(学习率:,self.learning_rate_input)# 优化器选择self.optimizer_comboQComboBox()self.optimizer_combo.addItems([Adam,SGD,AdamW,RMSprop])config_layout.addRow(优化器:,self.optimizer_combo)# 损失函数选择self.loss_function_comboQComboBox()self.loss_function_combo.addItems([CrossEntropyLoss,MSELoss,BCELoss])config_layout.addRow(损失函数:,self.loss_function_combo)parent_layout.addWidget(config_frame)15.5.2 高级配置选项defcreate_advanced_config_panel(self,parent_layout):创建高级配置面板advanced_frameQGroupBox(高级配置)advanced_layoutQFormLayout(advanced_frame)# 学习率调度器self.scheduler_comboQComboBox()self.scheduler_combo.addItems([StepLR,CosineAnnealingLR,ReduceLROnPlateau])advanced_layout.addRow(学习率调度器:,self.scheduler_combo)# 早停机制self.early_stopping_checkQCheckBox(启用早停)self.early_stopping_check.setChecked(True)advanced_layout.addRow(早停机制:,self.early_stopping_check)self.patience_inputQSpinBox()self.patience_input.setRange(1,50)self.patience_input.setValue(10)advanced_layout.addRow(早停耐心值:,self.patience_input)# 模型保存策略self.save_best_checkQCheckBox(保存最佳模型)self.save_best_check.setChecked(True)advanced_layout.addRow(模型保存:,self.save_best_check)# 验证频率self.val_frequency_inputQSpinBox()self.val_frequency_input.setRange(1,10)self.val_frequency_input.setValue(1)advanced_layout.addRow(验证频率:,self.val_frequency_input)parent_layout.addWidget(advanced_frame)15.6 训练监控系统15.6.1 实时进度显示def create_training_monitor(self, parent_layout):“”“创建训练监控面板”“”monitor_frame QGroupBox(“训练监控”)monitor_layout QVBoxLayout(monitor_frame)# 进度条 self.progress_bar QProgressBar() self.progress_bar.setRange(0, 100) monitor_layout.addWidget(self.progress_bar) # 训练状态 self.status_label QLabel(准备开始训练...) self.status_label.setObjectName(statusLabel) monitor_layout.addWidget(self.status_label) # 指标显示 metrics_frame QFrame() metrics_layout QGridLayout(metrics_frame) # 损失值 self.loss_label QLabel(损失: --) self.loss_label.setObjectName(metricLabel) metrics_layout.addWidget(self.loss_label, 0, 0) # 准确率 self.accuracy_label QLabel(准确率: --) self.accuracy_label.setObjectName(metricLabel) metrics_layout.addWidget(self.accuracy_label, 0, 1) # 学习率 self.lr_label QLabel(学习率: --) self.lr_label.setObjectName(metricLabel) metrics_layout.addWidget(self.lr_label, 1, 0) # 训练时间 self.time_label QLabel(训练时间: --) self.time_label.setObjectName(metricLabel) metrics_layout.addWidget(self.time_label, 1, 1) monitor_layout.addWidget(metrics_frame) parent_layout.addWidget(monitor_frame)15.6.2 训练指标可视化def create_metrics_plot(self, parent_layout):“”“创建训练指标图表”“”plot_frame QGroupBox(“训练指标”)plot_layout QVBoxLayout(plot_frame)# 创建matplotlib图表 self.figure Figure(figsize(12, 8)) self.canvas FigureCanvas(self.figure) # 创建子图 self.ax1 self.figure.add_subplot(221) # 损失曲线 self.ax2 self.figure.add_subplot(222) # 准确率曲线 self.ax3 self.figure.add_subplot(223) # 学习率曲线 self.ax4 self.figure.add_subplot(224) # 验证指标 # 初始化图表 self.init_plots() plot_layout.addWidget(self.canvas) parent_layout.addWidget(plot_frame)def init_plots(self):“”“初始化图表”“”# 损失曲线self.ax1.set_title(“训练损失”)self.ax1.set_xlabel(“Epoch”)self.ax1.set_ylabel(“Loss”)self.ax1.grid(True)# 准确率曲线 self.ax2.set_title(训练准确率) self.ax2.set_xlabel(Epoch) self.ax2.set_ylabel(Accuracy) self.ax2.grid(True) # 学习率曲线 self.ax3.set_title(学习率变化) self.ax3.set_xlabel(Epoch) self.ax3.set_ylabel(Learning Rate) self.ax3.grid(True) # 验证指标 self.ax4.set_title(验证指标) self.ax4.set_xlabel(Epoch) self.ax4.set_ylabel(Metrics) self.ax4.grid(True) self.figure.tight_layout() self.canvas.draw()15.7 训练执行引擎15.7.1 训练线程class TrainingThread(QThread):“”“训练线程”“”progress_updated Signal(int, dict) # 进度更新信号 training_finished Signal(dict) # 训练完成信号 training_error Signal(str) # 训练错误信号 def __init__(self, model_config, dataset_config, training_config): super().__init__() self.model_config model_config self.dataset_config dataset_config self.training_config training_config self.is_running False def run(self): 执行训练 try: self.is_running True self.start_training() except Exception as e: self.training_error.emit(str(e)) finally: self.is_running False def start_training(self): 开始训练 # 初始化模型 model self.initialize_model() # 加载数据集 train_loader, val_loader self.load_data() # 设置优化器和损失函数 optimizer self.setup_optimizer(model) criterion self.setup_criterion() # 训练循环 for epoch in range(self.training_config[epochs]): if not self.is_running: break # 训练一个epoch train_metrics self.train_epoch(model, train_loader, optimizer, criterion) # 验证 val_metrics self.validate_epoch(model, val_loader, criterion) # 更新进度 progress int((epoch 1) / self.training_config[epochs] * 100) metrics {**train_metrics, **val_metrics} self.progress_updated.emit(progress, metrics) # 训练完成 final_metrics self.get_final_metrics(model) self.training_finished.emit(final_metrics)15.7.2 模型初始化def initialize_model(self):“”“初始化模型”“”model_type self.model_config[‘type’]model_name self.model_config[‘name’]if model_type detection: return self.init_detection_model(model_name) elif model_type classification: return self.init_classification_model(model_name) elif model_type segmentation: return self.init_segmentation_model(model_name) else: raise ValueError(f不支持的模型类型: {model_type})def init_detection_model(self, model_name):“”“初始化目标检测模型”“”from ultralytics import YOLO# 根据模型名称选择预训练权重 model_weights { YOLOv11n: yolo11n.pt, YOLOv11s: yolo11s.pt, YOLOv11m: yolo11m.pt, YOLOv11l: yolo11l.pt, YOLOv11x: yolo11x.pt } if model_name in model_weights: model YOLO(model_weights[model_name]) else: # 使用自定义模型 model YOLO(model_name) return model15.8 结果分析和导出15.8.1 训练结果分析def analyze_training_results(self, results):“”“分析训练结果”“”analysis {“best_epoch”: results.get(“best_epoch”, 0),“best_accuracy”: results.get(“best_accuracy”, 0.0),“best_loss”: results.get(“best_loss”, float(‘inf’)),“training_time”: results.get(“training_time”, 0),“convergence_analysis”: self.analyze_convergence(results),“overfitting_analysis”: self.analyze_overfitting(results)}return analysisdef analyze_convergence(self, results):“”“分析收敛性”“”train_losses results.get(“train_losses”, [])val_losses results.get(“val_losses”, [])if len(train_losses) 10: return 数据不足无法分析收敛性 # 计算最后10个epoch的损失变化 recent_train_loss train_losses[-10:] recent_val_loss val_losses[-10:] train_trend self.calculate_trend(recent_train_loss) val_trend self.calculate_trend(recent_val_loss) if abs(train_trend) 0.001 and abs(val_trend) 0.001: return 模型已收敛 elif train_trend 0.01: return 训练损失仍在上升可能需要调整学习率 else: return 模型正在收敛中15.8.2 模型导出def export_model(self, model, export_format“onnx”):“”“导出模型”“”export_path QFileDialog.getSaveFileName(self,“保存模型”,fmodel.{export_format}“,f”{export_format.upper()} files (*.{export_format}))[0]if not export_path: return try: if export_format onnx: model.export(formatonnx, dynamicTrue, simplifyTrue) elif export_format torchscript: model.export(formattorchscript) elif export_format tflite: model.export(formattflite) else: raise ValueError(f不支持的导出格式: {export_format}) QMessageBox.information(self, 导出成功, f模型已成功导出到: {export_path}) except Exception as e: QMessageBox.critical(self, 导出失败, f模型导出失败: {str(e)})15.9 性能优化15.9.1 内存优化def optimize_memory_usage(self):“”“优化内存使用”“”# 清理GPU缓存if torch.cuda.is_available():torch.cuda.empty_cache()# 设置内存分配策略 os.environ[PYTORCH_CUDA_ALLOC_CONF] max_split_size_mb:128 # 启用混合精度训练 if self.training_config.get(mixed_precision, False): self.scaler torch.cuda.amp.GradScaler()15.9.2 训练加速def setup_training_acceleration(self):“”“设置训练加速”“”# 数据加载优化num_workers min(8, os.cpu_count())pin_memory torch.cuda.is_available()# 编译模型PyTorch 2.0 if hasattr(torch, compile): self.model torch.compile(self.model) # 启用自动混合精度 if self.training_config.get(amp, True): self.use_amp True15.10 错误处理和日志15.10.1 错误处理def handle_training_error(self, error_message):“”“处理训练错误”“”self.status_label.setText(f训练错误: {error_message})self.progress_bar.setValue(0)# 记录错误日志 self.log_error(error_message) # 显示错误对话框 QMessageBox.critical(self, 训练错误, f训练过程中发生错误:\n{error_message})def log_error(self, error_message):“”“记录错误日志”“”timestamp datetime.now().strftime(“%Y-%m-%d %H:%M:%S”)log_entry f[{timestamp}] ERROR: {error_message}\nwith open(training_errors.log, a, encodingutf-8) as f: f.write(log_entry)15.10.2 训练日志def setup_training_logger(self):“”“设置训练日志”“”import logging# 创建日志记录器 logger logging.getLogger(training) logger.setLevel(logging.INFO) # 创建文件处理器 file_handler logging.FileHandler(training.log, encodingutf-8) file_handler.setLevel(logging.INFO) # 创建格式器 formatter logging.Formatter( %(asctime)s - %(name)s - %(levelname)s - %(message)s ) file_handler.setFormatter(formatter) # 添加处理器 logger.addHandler(file_handler) return logger15.11 总结模型训练模块作为智慧识别系统的核心组件提供了完整的深度学习模型训练解决方案。通过模块化设计和丰富的功能特性该模块支持多种模型类型和训练场景为用户提供了从数据准备到模型部署的全流程支持。通过实时监控、性能优化和错误处理机制确保了训练过程的稳定性和可靠性为构建高质量的AI模型奠定了坚实的基础。模型识别源码获取欢迎大家点赞、收藏、关注、评论啦 、查看下载https://download.csdn.net/download/weixin_43860634/93222685

相关新闻

多菌灵农药残留胶体金快速检测卡

多菌灵农药残留胶体金快速检测卡

多菌灵农药残留胶体金快速检测卡,是适配全品类农产品筛查的专用农药残留胶体金快速检测试纸条(卡),严格遵循GB 2763-2026新版国标研发生产。这款农药残留胶体金检测卡与农残胶体金检测卡灵敏度高、抗基质干扰性能优异、适配作物覆盖面广,可高…

2026/10/20 17:19:31 阅读更多 →
【AI应用开发】用户会话多、并发高,Agent 服务如何做性能优化?缓存怎么做?

【AI应用开发】用户会话多、并发高,Agent 服务如何做性能优化?缓存怎么做?

【AI应用开发】用户会话多、并发高,Agent 服务如何做性能优化?缓存怎么做? 目录 Agent 服务的性能瓶颈缓存策略全览异步与并发优化LLM 层优化架构层优化完整高并发架构 1. Agent 服务的性能瓶颈 一次 Agent 调用 N 次 LLM API 调用 M 次…

2026/10/18 18:35:17 阅读更多 →
Coding Agent真实编码工具:从代码生成到工程实践的关键跨越

Coding Agent真实编码工具:从代码生成到工程实践的关键跨越

1. 项目概述:为什么“真实的编码工具”是Coding Agent的命门? 如果你和我一样,折腾过不少所谓的“Coding Agent”,从早期的代码补全插件到如今能“理解”需求的AI助手,那你肯定也踩过这个坑:Agent在Demo里看…

2026/10/19 17:12:30 阅读更多 →

最新新闻

多摩川绝对式编码器读取:STM32与RS485通信实现及伺服调试避坑指南

多摩川绝对式编码器读取:STM32与RS485通信实现及伺服调试避坑指南

简介:基于STM32F429的多摩川TS5668N21编码器读取程序完整源码包,面向工业自动化、电机控制与精密定位领域的嵌入式软硬件开发者。工程围绕ADM485(RS-485)半双工通信协议展开,涵盖STM32CubeMX引脚分配、时钟树与UART参数…

2026/10/20 20:23:58 阅读更多 →
汇编ADC指令详解:从进位标志CF到多字节加法的底层原理

汇编ADC指令详解:从进位标志CF到多字节加法的底层原理

学汇编一段时间后,大家基本都会遇到ADC这条指令。说实话,这条指令在指令表里毫不起眼,最多被解释成一句"带进位加法",但真到了实战里,你会发现它远比表面复杂:写大数加法要用它,调试进…

2026/10/20 20:23:58 阅读更多 →
降AI率实操指南:从原理到工具,教你打造真人感文本

降AI率实操指南:从原理到工具,教你打造真人感文本

1. 先弄明白“降AI率”到底在降什么最近不少同学来找我,张口就是“哥,有没有降AI率的工具推荐?”。一开始我以为是小众需求,结果问了一圈才发现,这事已经成了很多人的刚需。无论是交课程论文、写实训报告,还…

2026/10/20 20:23:58 阅读更多 →
大模型知识更新利器:RAG检索增强生成原理与实战指南

大模型知识更新利器:RAG检索增强生成原理与实战指南

大模型知识更新的老难题,RAG(Retrieval-Augmented Generation,检索增强生成)确实是我近两年见过最实用的解法。它给大模型开了一场“开卷考试”,让模型不再凭记忆硬答,而是先翻书、再答题,从根上…

2026/10/20 20:23:58 阅读更多 →
纯HTML+CSS重构游戏平台首页:Flexbox与Grid布局实战

纯HTML+CSS重构游戏平台首页:Flexbox与Grid布局实战

1. 为什么我要拿一个游戏平台首页做重构练习先说说这个项目的由来。我在带新人的时候经常遇到一个尴尬情况:简历上写着“精通 HTML 和 CSS”,丢过来一个静态页面,结构全是 div 套 div,类名清一色box1、box2、left、right&#xff…

2026/10/20 20:23:58 阅读更多 →
Jenkinsfile核心难点:作用域、凭据、并行与错误处理四大陷阱

Jenkinsfile核心难点:作用域、凭据、并行与错误处理四大陷阱

1. 这不是写脚本,是在给流水线“立规矩”:Jenkinsfile 的真实定位与核心难点本质很多人第一次打开 Jenkinsfile,下意识把它当成“写个 shell 脚本就行”,结果跑起来要么阶段莫名失败、要么环境变量死活不生效、要么并行任务互相污…

2026/10/20 20:22:55 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →