基于改进BOXINST的数字识别算法研究
概述本项目旨在研究基于改进BOXINST的数字识别算法针对实验室数字显示屏的识别任务。项目采用目标检测类型数据集包含10个数字类别0-9。后端算法基于BOXINST\boxinst_r50_fpn_ms-90k_coco进行改进前端技术栈采用flaskbootstrapsqlite实现。通过优化BOXINST算法提高数字显示屏上数字的检测精度和识别效率为实验室自动化监测提供技术支持。项目结合深度学习与Web开发技术构建完整的数字识别系统满足实验室环境下数字信息的自动化采集需求。任务目标随着实验室自动化程度的不断提高数字显示屏作为信息展示的重要载体其自动识别技术在实验数据采集、设备监控和结果分析等方面具有重要意义。本项目旨在研究基于改进BOXINST算法的数字识别技术解决实验室复杂环境下数字显示屏的自动识别问题。BOXINST作为一种基于实例分割的目标检测算法在处理小目标和密集排列物体方面具有独特优势但其在复杂光照条件下的鲁棒性和识别精度仍有提升空间。本研究将通过优化特征提取网络、改进实例分割策略和增强数据增强方法提高数字识别的准确率和泛化能力。研究成果将为实验室智能监控系统提供关键技术支持促进实验数据的自动采集与分析提高实验室管理效率和科研工作的智能化水平。数据集信息该数据集包含10个类别分别对应数字0至9每个类别代表实验室数字显示屏中的一个基本数字字符。选择此数据集的优势在于首先数字识别作为目标检测的基础任务其类别定义清晰明确便于算法性能评估和对比分析其次数字字符在实验室环境中具有高度规范性但不同设备可能存在字体、大小和显示方式的差异这为研究算法的泛化能力提供了良好条件最后数字识别任务涉及小目标检测和密集排列物体处理与BOXINST算法的核心优势相匹配有助于验证和改进该算法在实验室复杂环境下的适用性。系统功能图片系统清单模型训练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

相关新闻

光速不变和光速极限-3

光速不变和光速极限-3

如果这个角速度,恰好就是当前位置地球自转的角速度,那么这就相当于,站在地面上的观察者,观察到的离开地面不同高度上的两个点。这是什么意思呢?意思就是地面上的相对静止,实际上是指数单增同时也是相当复杂…

2026/10/17 18:17:36 阅读更多 →
ABAP开发核心:深入理解RANGE与SELECTION-OPTIONS的数据筛选机制

ABAP开发核心:深入理解RANGE与SELECTION-OPTIONS的数据筛选机制

1. 项目概述:为什么每个ABAPer都必须吃透RANGE与SELECTION-OPTIONS?如果你在SAP ABAP开发中写过报表程序,那么对SELECTION-OPTIONS这个关键字一定不陌生。它是在选择屏幕上创建范围选择输入框的标准方式,用户可以在里面输入单个值…

2026/10/19 10:03:00 阅读更多 →
#8、SpringAI MCP 服务端开发实战(图片搜索)

#8、SpringAI MCP 服务端开发实战(图片搜索)

SpringAI MCP 服务端开发实战(图片搜索服务) 本章定位:承接上一章《Spring AI 使用 MCP 客户端(调用高德 MCP)》。上一章我们从"消费方"的角度使用别人提供的 MCP 服务;本章反过来,从…

2026/10/20 20:06:08 阅读更多 →

最新新闻

自动驾驶入门课程导论:知识体系、学习路径与工具链全解析

自动驾驶入门课程导论:知识体系、学习路径与工具链全解析

1. 从"欢迎"两个字里读出这门课的野心很多人看到"欢迎来到课程"这种标题,第一反应是划走——这不就是个开场白吗,有什么好讲的。但我做了这么多年技术内容,越来越觉得一门课的第一节"欢迎课"其实是最能暴露设计…

2026/10/21 6:23:34 阅读更多 →
非急救转运运营管理平台深度对比:安护送、优护送与青岛96650

非急救转运运营管理平台深度对比:安护送、优护送与青岛96650

上个月我去某三甲医院接一位出院的亲戚,护士台特意提醒了一句:出院转运别随便叫路边车,最好走平台下单,全程有记录,价格也敢写清楚。这句话背后,其实是整个非急救转运行业这几年的变化。安护送、优护送、青…

2026/10/21 6:23:34 阅读更多 →
XSS攻击原理与防御实战:从反射型到DOM型的完整安全编码指南

XSS攻击原理与防御实战:从反射型到DOM型的完整安全编码指南

XSS攻击干了这么多年安全&#xff0c;见过太多的开发同事在排查安全漏洞时被XSS逼疯。一个<script>alert(document.cookie)</script>弹窗&#xff0c;看着简单&#xff0c;排查起来却可能牵扯出模板渲染、前端框架、网关过滤一整条链路的问题。这篇文章我想从一个实…

2026/10/21 6:23:34 阅读更多 →
agent-skills:智能体技能化拆解与调度架构实践

agent-skills:智能体技能化拆解与调度架构实践

1. 从"agent-skills"这个命名说起&#xff1a;它到底指什么第一次看到"agent-skills"这个词&#xff0c;很多人会下意识地把它理解成某个具体的库或者框架。但如果你在工程实践里摸爬滚打过一段时间就会发现&#xff0c;它更像是一个能力组织范式&#xff…

2026/10/21 6:23:34 阅读更多 →
电动汽车温度传感器选型要点: BMS看精度耐压,ECU看响应和宽温区

电动汽车温度传感器选型要点: BMS看精度耐压,ECU看响应和宽温区

电动汽车高温环境下的测温安全&#xff0c;核心结论先给出&#xff1a;BMS 场景选 NTC 热敏电阻&#xff0c;考核精度、绝缘耐压和 -40℃~125℃ 稳定性&#xff1b;ECU 场景考核热响应时间和 -40℃~150℃ 宽温区&#xff1b;两者都绕不开批量前的抽样一致性测试。 有工程师在技…

2026/10/21 6:23:34 阅读更多 →
从零开始学渗透:Web架构、站库分离与DNS解析是关键

从零开始学渗透:Web架构、站库分离与DNS解析是关键

很多刚开始接触网络安全的朋友&#xff0c;上来就问一个问题&#xff1a;“我是不是应该先背几百个工具命令&#xff0c;再去学渗透测试&#xff1f;”我的回答一直是&#xff1a;别急&#xff0c;工具永远不是瓶颈&#xff0c;架构理解才是。尤其是你想从零开始走渗透测试这条…

2026/10/21 6:22:33 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →