基于Halcon深度学习之分类
*****
***环境准备***
***系统:win7以上系统
***显卡:算力3.0以上
***显卡驱动:10.1以上版本(nvidia-smi查看指令)***读取深度学习模型***
read_dl_model ('pretrained_dl_classifier_compact.hdl', DLModelHandle)
***获取模型中的图象张量及对应的灰度值范围
get_dl_model_param (DLModelHandle, 'image_width', ImgWidth)
get_dl_model_param (DLModelHandle, 'image_height', ImgHeight)
get_dl_model_param (DLModelHandle, 'image_num_channels', ImgChannel)
get_dl_model_param (DLModelHandle, 'image_range_min', ImgRangMin)
get_dl_model_param (DLModelHandle, 'image_range_max', ImgRangMax)************预处理数据准备及拆分**********
classNames := ['1-2','1-3','1-4','2-4','3-5','4-7','5-6']
rawImageFolders := '../images/' + classNames
***把原图像数据转换为对应的Dataset格式***
read_dl_dataset_classification (rawImageFolders, 'last_folder', DLDataset)
***对数据集进行拆分***
trainPrecent := 60 // 用于训练的比例
validdatatPrecent := 20 // 用于测试的比例
GenSplitParam := dict{overwrite_split:'true'}
split_dl_dataset (DLDataset, trainPrecent, validdatatPrecent, GenSplitParam)
***预处理数据***
*1、创建预处理参数
** 预处理数据存储路径
processFolder := 'ProcessData'
** 定义预处理参数文件路径
dlProcessFileName := processFolder + '/dl_preprocess_param.hdict'
** 检查文件是否存在
file_exists (processFolder, FileExists)
if(not FileExists)make_dir (processFolder)
endif
** 创建预处理参数
create_dl_preprocess_param ('classification', ImgWidth, ImgHeight, ImgChannel, \ImgRangMin, ImgRangMax, 'none', 'full_domain',\[], [], [], [], DLPreprocessParam)
** 对数据进行预处理
GenParam := dict{overwrite_files:'true'}
preprocess_dl_dataset (DLDataset, processFolder, DLPreprocessParam, \GenParam, DLDatasetFileName)
** 保存预处理参数文件
write_dict (DLPreprocessParam, dlProcessFileName, [], [])************使用预处理数据对模型进行训练************
** 总周期(所有图片训练一次为一个周期)
numEpochs := 100
** 批次数(一个周期本分割的份数)
batchSize := 5
** 评估周期(每训练几个周期进行一次评估)
evluationIntervalEphochs := 2
** 学习率
learningRate := 0.001
**** 设置模型参数
set_dl_model_param(DLModelHandle, 'class_names', classNames)
set_dl_model_param(DLModelHandle, 'image_dimensions', [ImgWidth,ImgHeight,ImgChannel])
set_dl_model_param(DLModelHandle, 'learning_rate', learningRate)
set_dl_model_param (DLModelHandle, 'batch_size', batchSize)
** 设置增强参数
GenParamName := []
GenParamValue := []
** 定义参数字典,增强参数
augmentParam := dict{}
augmentParam.augmentation_percentage := 100
augmentParam.mirror := 'rc'
GenParamName := [GenParamName,'augment']
GenParamValue := [GenParamValue,augmentParam]** 定义存储最佳模型路径和最终模型路径
augmentBest := dict{}
augmentBest.type := 'best'
augmentBest.basename := processFolder + '/model_best'
GenParamName := [GenParamName,'serialize']
GenParamValue := [GenParamValue,augmentBest]augmentFinal := dict{}
augmentFinal.type := 'final'
augmentFinal.basename := processFolder + '/model_final'
GenParamName := [GenParamName,'serialize']
GenParamValue := [GenParamValue,augmentFinal]
** 创建训练参数及执行训练
create_dl_train_param (DLModelHandle, numEpochs, evluationIntervalEphochs, \'true', 32, GenParamName, GenParamValue, TrainParam)
** 执行模型训练
train_dl_model (DLDataset, DLModelHandle, TrainParam, 0,\TrainResults, TrainInfos, EvaluationInfos)
** 释放资源
clear_dl_model (DLModelHandle)
** 关闭训练窗口
stop()
dev_close_window()
dev_close_window()***********模型评估***********
** 定义评估模型文件路径
retainModelFile := processFolder + '/model_best.hdl'
** 读取训练后的模型
read_dl_model (retainModelFile, RetainDLModelHandle)
** 定义评估的指标
evaluateGenParam := ['f_score','recall','precision','absolute_confusion_matrix',\'relative_confusion_matrix']
evaluateDict := dict{measures:evaluateGenParam}
** 执行模型评估
evaluate_dl_model(DLDataset, RetainDLModelHandle, 'split', 'test', \evaluateDict, EvaluationResult, EvalParams)
** 显示评估结果
GenDispParam := dict{}
GenDispParam.display_mode := ['measures','pie_charts_recall','pie_charts_precision',\'absolute_confusion_matrix','relative_confusion_matrix']
WindowHandleDict := dict{}
dev_display_classification_evaluation(EvaluationResult, EvalParams,\GenDispParam, WindowHandleDict)
stop()
dev_close_window_dict(WindowHandleDict)***********模型推断***********
** 读取推断数据
list_image_files('../test_image','bmp',[],ImageFiles)
** 读取预处理参数
read_dict(dlProcessFileName,[],[],DLPreprocessParam)
** 设置显示字体大小
dev_get_window(WindowHandle)
set_display_font(WindowHandle, 26, 'mono', 'true', 'false')
** 循环检测每一张图像
for Index :=0 to |ImageFiles| -1 by 1** 获取当前图像read_image(Image,ImageFiles[Index])** 生产样本图像gen_dl_samples_from_images(Image, DLSampleBatch)** 把推断图像处理成预处理图像数据preprocess_dl_samples(DLSampleBatch, DLPreprocessParam)** 使用模型进行推断类别apply_dl_model(RetainDLModelHandle, DLSampleBatch, [], DLResultBatch)** 评估结果显示className := DLResultBatch.classification_class_names[0]score := DLResultBatch.classification_confidences[0]** 显示图像上面dev_disp_text('类别:'+className+',分数:'+score, 'window',\'top', 'left', 'white', 'box_color', 'forest green')stop()
endforclear_dl_model(RetainDLModelHandle)
以上为halcon源码,联合C#编程操作界面
C#源码
/// <summary>/// 分类类别名称/// </summary>private HTuple classNames;/// <summary>/// 模型文件/// </summary>public string[] ModelFiles { get; private set; }#region 主界面相关事件public HomePage(){InitializeComponent();}private void HomePage_FormClosing(object sender, FormClosingEventArgs e){}private void HomePage_Load(object sender, System.EventArgs e){ // UI 显示日志ViewAppender viewAppender = new ViewAppender(dgvLog){Location = "",};LogCombiner.Ins.Append(viewAppender);// 初始化网络模型InitializeModels();// 模型评估默认参数// recallcbMetric.SelectedIndex = 0;// testcbSampleSelectValues.SelectedIndex = 0;}#endregion#region 设置HWindowControl控件的显示方式private void DispImage(HImage image, HWindow window){int imageWidth, imageHeight, winRow, winCol, winWidth, winHeight, partWidth, partHeight;try{image.GetImageSize(out imageWidth, out imageHeight);window.GetWindowExtents(out winRow, out winCol, out winWidth, out winHeight);if (winWidth > winHeight){partWidth = imageWidth;partHeight = imageWidth * winHeight / winWidth;}else{partWidth = imageHeight * winWidth / winHeight;partHeight = imageHeight;}// 设置显示图像在窗口中间var offsetX = (imageWidth - partWidth) / 2;var offsetY = (imageHeight - partHeight) / 2;// 设置窗口显示区域HOperatorSet.SetPart(window, offsetY, offsetX, partHeight + offsetY - 1, partWidth + offsetX - 1);// 显示图形HOperatorSet.DispObj(image, window);}catch (HalconException hEx){MessageBox.Show(hEx.Message);}}/// <summary>/// 把HObject转化为对应的HImage方法/// </summary>/// <param name="hObject"></param>/// <param name="image"></param>private HImage HObject2HImage(HObject hObject){HImage image = new HImage();// 获取当前传人对象的通道数【灰度/彩色】HOperatorSet.CountChannels(hObject, out var channels);if (channels.I == 0){return image;}// 判断通道数if (channels.I == 1){// 获取传人图形的数据HOperatorSet.GetImagePointer1(hObject,out var pointer, out var type, out var width, out var height);// 生成当通道图形image.GenImage1(type, width, height, pointer);}else{// 彩色图HOperatorSet.GetImagePointer3(hObject, out var pointerRed, out var pointerGreen,out var pointerBlue, out var type, out var width, out var height);image.GenImage3(type, width, height, pointerRed, pointerGreen, pointerBlue);}return image;}#endregion#region 加载模型文件选择下拉框private void InitializeModels(){// 获取项目编译路径ModelFiles = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "hdl"),"*.hdl");// 把模型文件添加至下拉框中foreach(string modelFile in ModelFiles){// 获取模型文件名string modelName = Path.GetFileNameWithoutExtension(modelFile);// 添加到下拉列表cbBackBone.Items.Add(modelName);}// 判断是否有模型文件if(ModelFiles.Length > 0){// 默认选择第一个文件cbBackBone.SelectedIndex = 0;Logger.Notify("model load finished .", "Preprocess");}else{// 如果没有模型文件,下拉框禁用cbBackBone.Enabled = false;Logger.Warn("model files not found .", "Preprocess");}}#endregion#region 读取模型参数private void cbBackBone_SelectedIndexChanged(object sender, EventArgs e){try{// 读取选择的网络模型文件string modelFile = ModelFiles[cbBackBone.SelectedIndex];// 加载模型 read_dl_modelHOperatorSet.ReadDlModel(modelFile, out var dLModelHandle);// 判断模型不为空if(dLModelHandle == null){Logger.Warn("read_dl_model failure .", "Preprocess");return;}// 读取模型张量数HOperatorSet.GetDlModelParam(dLModelHandle, "image_width", out HTuple imageWidth);HOperatorSet.GetDlModelParam(dLModelHandle, "image_height", out HTuple imageHeight);HOperatorSet.GetDlModelParam(dLModelHandle, "image_num_channels", out HTuple imageChannels);HOperatorSet.GetDlModelParam(dLModelHandle, "image_range_min", out HTuple imageRangMin);HOperatorSet.GetDlModelParam(dLModelHandle, "image_range_max", out HTuple imageRangMax);// 数据填充至对应文本框tbImgWidth.Text = imageWidth.ToString();tbImgHeight.Text = imageHeight.ToString();tbChannel.Text = imageChannels.ToString();tbGrayMin.Text = imageRangMin.ToString();tbGrayMax.Text = imageRangMax.ToString();// 释放加载的模型HOperatorSet.ClearDlModel(dLModelHandle);dLModelHandle.Dispose();dLModelHandle = null;}catch (Exception ex){Logger.Error(ex.Message, "Preprocess");}}#endregion#region 选择样本路径和存储路径private void btnSelectRawPath_Click(object sender, EventArgs e){using (FolderBrowserDialog dlg = new FolderBrowserDialog()){if (dlg.ShowDialog() == DialogResult.OK){// 重新创建,防止重复添加classNames = new HTuple();tbRawPath.Text = dlg.SelectedPath;// 获取选择文件夹下面的所有文件夹名称string[] folder = Directory.GetDirectories(tbRawPath.Text);// 把文件夹名添加到元组中foreach (var item in folder){classNames.Append(new DirectoryInfo(item).Name);}}}}private void btnSelectPrePath_Click(object sender, EventArgs e){using (FolderBrowserDialog dlg = new FolderBrowserDialog()){if (dlg.ShowDialog() == DialogResult.OK){tbPreStorPath.Text = dlg.SelectedPath;}}}#endregion#region 执行数据预处理操作private async void btnExecPreprocess_Click(object sender, EventArgs e){// 获取预处理对象var preprocess = Classification.ProcessAction;// 绑定更新方法preprocess.UpdateImageAction += Preprocess_UpdateImageAction; // 获取界面的参数var imageWith = Convert.ToInt32(tbImgWidth.Text);var imageHeight = Convert.ToInt32(tbImgHeight.Text);var imageNumChannels = Convert.ToInt32(tbChannel.Text);var imageRangeMin = Convert.ToInt32(tbGrayMin.Text);var imageRangeMax = Convert.ToInt32(tbGrayMax.Text);var backBoneFileName = ModelFiles[cbBackBone.SelectedIndex];var rawImagePath = tbRawPath.Text;var preprocessPath = tbPreStorPath.Text;// 设置到预处理对象属性中preprocess.ImageHeight = imageHeight;preprocess.ImageWidth = imageWith;preprocess.ImageNumChannels = imageNumChannels;preprocess.ImageRangeMin = imageRangeMin;preprocess.ImageRangeMax = imageRangeMax;preprocess.BackBonePath = backBoneFileName;preprocess.PreProcessPath = preprocessPath;preprocess.SamplesPath = rawImagePath;// 设置分类名称preprocess.ClassNames = classNames;// 界面显示信息HalconDLTool.set_display_font(hWinPre.HalconWindow, 20, "mono", "true", "false");// 调用预处理对象的预处理方法var res = await preprocess.ExecutePreProcess();// 判断执行结果if (res > 0){HOperatorSet.DispText(hWinPre.HalconWindow, "Preprocess finished .", "window", 12, 12, "white", "box_color", "forest green");Logger.Notify("Preprocess finished .", "Preprocess");}else{HOperatorSet.DispText(hWinPre.HalconWindow, "Preprocess failure .", "window", 12, 12, "white", "box_color", "red");Logger.Error("Preprocess failure .", "Preprocess");}}/// <summary>/// /// </summary>/// <param name="obj"></param>/// <exception cref="NotImplementedException"></exception>private void Preprocess_UpdateImageAction(HObject obj){try{if (obj != null){var hw = hWinPre.HalconWindow;hw.ClearWindow();hw.SetWindowParam("flush", "false");DispImage(HObject2HImage(obj), hw);hw.FlushBuffer();}}catch (Exception){throw;}}#endregion#region 选择训练的数据集文件private string SelectFile(string filter){using(OpenFileDialog dlg = new OpenFileDialog()){dlg.Filter = filter;if(dlg.ShowDialog() == DialogResult.OK){return dlg.FileName;}return null;}}private void btnSelectData_Click(object sender, EventArgs e){// 获取选择的数据集文件路径string datasetFile = SelectFile("Dataset(*.hdict)|*.hdict");// 把数据集路径存放至控件的Tag属性,并显示文件名称tbDataPath.Tag = datasetFile;if(datasetFile != null){// 将数据集名称显示至文本框tbDataPath.Text = Path.GetFileNameWithoutExtension(datasetFile);}// 获取当前文件所在的路径,模型文件也在当前目录下Classification.TrainingAction.ModelFilePath = Path.GetDirectoryName(datasetFile);}#endregion#region 执行模型训练private async void btnTrain_Click(object sender, EventArgs e){// 获取训练对象var training = Classification.TrainingAction;// 获取界面的数据var batchSize = Convert.ToInt32(tbBatchSize.Text);var learningRate = Convert.ToDouble(tbLearningRate.Text);var numEpochs = Convert.ToInt32(tbNumEpochs.Text);var evaluateNumEpochs = Convert.ToInt32(tbEvluationIntervalEphochs.Text);var trainingPrecent = Convert.ToInt32(tbTrainPrecent.Text);var validationPercent = Convert.ToInt32(tbValiddatatPrecent.Text);// 设置训练对象的属性training.TraingPercent = trainingPrecent;training.ValidationPercent = validationPercent;training.BatchSize = batchSize;training.LearningRate = learningRate;training.NumEpochs = numEpochs;training.EvaluateNumEpoch = evaluateNumEpochs;// 设置显示窗口的的背景var hw = hWinTrain.HalconWindow;hw.SetWindowParam("background_color", "light gray");training.TrainWindow = hw;// 调用模型训练的方法int res = await training.ExecuteTraining();if (res > 0){Logger.Notify("training finished .", "Training");}else{Logger.Error("training exception .", "Training");}}#endregion#region 执行评估private void btnEvaluate_Click(object sender, EventArgs e){// 获取评估对象并给属性赋值var evaluate = Classification.EvaluateAction;evaluate.EvaluateMetric = cbMetric.Text;evaluate.EvaluateDataName = cbSampleSelectValues.Text;evaluate.EvaluateWindow = hWinEvaluate.HalconWindow;// 执行模型评估int res = evaluate.ExecuteEvaluate();if (res > 0){Logger.Notify("evaluate finished .", "Evaluate");}else{Logger.Error("evaluate error .", "Evaluate");}}private void btnSelectEvaluateModel_Click(object sender, EventArgs e){// 获取选择的数据集文件路径string datasetFile = SelectFile("Model(*.hdl)|*.hdl");if (datasetFile != null){// 将数据集名称显示至文本框tbEvaluateModelFile.Text = Path.GetFileNameWithoutExtension(datasetFile);}// 设置完成的模型路径Classification.EvaluateAction.EvaluateModelFileName = datasetFile;}#endregion#region 执行推断private void btnSelectInferModel_Click(object sender, EventArgs e){// 获取选择的数据集文件路径string datasetFile = SelectFile("Model(*.hdl)|*.hdl");// 把数据集路径存放至控件的Tag属性,并显示文件名称tbInferModel.Tag = datasetFile;if (datasetFile != null){// 将数据集名称显示至文本框tbInferModel.Text = Path.GetFileNameWithoutExtension(datasetFile);}// 设置推断使用的模型文件Classification.InferenceAction.ModelTypeName = datasetFile;}private void btnSelectInferImg_Click(object sender, EventArgs e){var dialog = new FolderBrowserDialog();if (dialog.ShowDialog() == DialogResult.OK){// 获取用户选择的目录var inferDataPath = dialog.SelectedPath;// 给文本框赋值tbInferPath.Text = inferDataPath;// 设置推断文件,这里可以进行优化文件后缀,避免放置非图像文件Classification.InferenceAction.InferImages = Directory.GetFiles(inferDataPath).ToList();}}private async void btnSigInfer_Click(object sender, EventArgs e){// 获取推断对象var infer = Classification.InferenceAction;infer.UpdateInvoker += InferOnece_UpdateInvoker;// 调用推断方法int res = await infer.ExecuteInfer(InferType.ONECE);if (res > 0){// 赋值推断结果tbClass.Text = infer.Class;tbScore.Text = (infer.Score*100).ToString("F2");tbTicks.Text = (infer.Ticks * 1000).ToString("F4");Logger.Log($"{infer.Index}.Type:{infer.Class},Score:{(infer.Score * 100).ToString("F2")}", "Inference");}else{Logger.Log("infer method error.", "Inference");}}private void InferOnece_UpdateInvoker(HObject obj){if (obj != null){var hw = hWinInfer.HalconWindow;// 关闭窗口缓存更新hw.SetWindowParam("flush", "false");// 把上一次窗口显示数据清空hw.ClearWindow();// 显示采集图像DispImage(HObject2HImage(obj), hw);// 更新创建数据hw.FlushBuffer();}}private async void btnContinueInfer_Click(object sender, EventArgs e){// 获取推断对象var infer = Classification.InferenceAction;infer.ContinueUpdateInvoker += InferContinue_UpdateInvoker;// 调用推断方法int res = await infer.ExecuteInfer(InferType.CONTINUE);if (res > 0){// 赋值推断结果Logger.Notify("continue inference finished.", "Inference");}else{Logger.Log("continue infer method error.", "Inference");}}private void InferContinue_UpdateInvoker(HObject obj, Inference inference){if (obj != null){var hw = hWinInfer.HalconWindow;// 关闭窗口缓存更新hw.SetWindowParam("flush", "false");// 把上一次窗口显示数据清空hw.ClearWindow();// 显示采集图像DispImage(HObject2HImage(obj), hw);// 更新创建数据hw.FlushBuffer();// 多线程中调用必须使用异步调用方式BeginInvoke(new Action(() =>{// 赋值推断结果tbClass.Text = inference.Class;tbScore.Text = (inference.Score*100).ToString("F2");tbTicks.Text = (inference.Ticks * 1000).ToString("F4");}));Logger.Log($"{inference.Index}.Type:{inference.Class},Score:{(inference.Score * 100).ToString("F2")}", "Inference");}}#endregion
完整打包资料资料包
相关文章:

基于Halcon深度学习之分类
***** ***环境准备*** ***系统:win7以上系统 ***显卡:算力3.0以上 ***显卡驱动:10.1以上版本(nvidia-smi查看指令)***读取深度学习模型*** read_dl_model (pretrained_dl_classifier_compact.hdl, DLModelHandle) ***获…...
零基础在实践中学习网络安全-皮卡丘靶场(第十五期-URL重定向模块)
本期内容和之前的CSRF,File inclusion有联系,复习后可以更好了解 介绍 不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目…...

技巧小结:根据寄存器手册写常用外设的驱动程序
需求:根据STM32F103寄存器手册写DMA模块的驱动程序 一、分析标准库函数的写法: 各个外设的寄存器地址定义在stm32f10x.h文件中:此文件由芯片厂家提供;内核的有关定义则定义在core_cm3.h文件中:ARM提供; 1、查看外设区域多级划分…...

设计模式(代理设计模式)
代理模式解释清楚,所以如果想对一个类进行功能上增强而又不改变原来的代码情况下,那么只需要让这个类代理类就是我们的顺丰,对吧?并行增强就可以了。具体增强什么?在哪方面增强由代理类进行决定。 代码实现就是使用代理对象代理相关的逻辑…...

从代码学习深度强化学习 - 初探强化学习 PyTorch版
文章目录 前言强化学习的概念强化学习的环境强化学习中的数据强化学习的独特性总结前言 本文将带你初步了解强化学习 (Reinforcement Learning, RL) 的基本概念,并通过 PyTorch 实现一些简单的强化学习算法。强化学习是一种让智能体 (agent) 通过与环境 (environment) 的交互…...
AI大神吴恩达-提示词课程笔记
如何有效编写提示词 在学习如何与语言模型(如ChatGPT)交互时,编写清晰且高效的提示词(Prompt)是至关重要的。本课程由ESA提供,重点介绍了提示词工程(Prompt Engineering)的两个核心…...
ArcGIS Pro 3.4 二次开发 - 地图探索
环境:ArcGIS Pro SDK 3.4 + .NET 8 文章目录 地图探索1 地图视图1.1 测试视图是否为3D1.2 设置视图模式1.3 启用视图链接2 更新地图视图范围2.1 返回上一个相机视图2.2 切换到下一个相机视角2.3 缩放到全图范围2.4 固定放大2.5 固定缩小2.6 缩放到范围2.7 缩放到一个点2.8 缩放…...

ELK日志管理框架介绍
在小铃铛的毕业设计中涉及到了ELK日志管理框架,在调研期间发现在中文中没有很好的对ELK框架进行介绍的文章,因此拟在本文中进行较为详细的实现的介绍。 理论知识 ELK 框架介绍 ELK 是一个流行的开源日志管理解决方案堆栈,由三个核心组件组…...

【Linux】sed 命令详解及使用样例:流式文本编辑器
【Linux】sed 命令详解及使用样例:流式文本编辑器 引言 sed 是 Linux/Unix 系统中一个强大的流式文本编辑器,名称来源于 “Stream EDitor”(流编辑器)。它允许用户在不打开文件的情况下对文本进行筛选和转换,是命令行…...

机器学习:聚类算法及实战案例
本文目录: 一、聚类算法介绍二、分类(一)根据聚类颗粒度分类(二)根据实现方法分类 三、聚类流程四、K值的确定—肘部法(一)SSE-误差平方和(二)肘部法确定 K 值 五、代码重…...
预览pdf(url格式和blob格式)
<template><div class"pdf-container"><div v-if"loading" class"loading-state"><a-spin size"large" /></div><div v-else-if"error" class"loading-state">加载失败&…...

【p2p、分布式,区块链笔记 MESH】 论文阅读 Thread/OpenThread Low-Power Wireless Multihop Net
paperauthorThread/OpenThread: A Compromise in Low-Power Wireless Multihop Network Architecture for the Internet of ThingsHyung-Sin Kim, Sam Kumar, and David E. Culler 目录 引言RPL 标准设计目标与架构设计选择与特性shortcomIngs of RPL设计选择的反面影响sImulta…...
for AC500 PLCs 3ADR025003M9903的安全说明
1安全说明 必须遵守特殊的环境条件(例如,由于爆炸性物质、重污染或腐蚀影响的危险区域)。必须在指定的技术数据和系统数据范围内处理和操作设备。该装置不含可维修部件,不得打开。除非另有规定,否则操作过程中必须关闭可拆卸的盖子。拒绝对不…...

moon游戏服务器-demo运行
下载地址 https://github.com/sniper00/MoonDemo redis安装 Redis-x64-3.0.504.msi 服务器配置文件 D:\gitee\moon_server_demo\serverconf.lua 貌似不修改也可以的,redis不要设置密码 windows编译 安装VS2022 Community 下载premake5.exe放MoonDemo\server\moon 双…...
前端(vue)学习笔记(CLASS 7):vuex
vuex概述 vuex是一个vue的状态管理工具,状态就是数据 大白话:vuex是一个插件,可以帮我们管理vue通用的数据(多组件共享的数据) 场景 1、某个状态在很多个组件来使用(个人信息) 2、多个组件…...
[特殊字符] 在 React Native 项目中封装 App Icon 一键设置命令(支持参数与默认路径)
📦 前置依赖 使用的是社区维护的 CLI 工具: @bam.tech/react-native-make它扩展了 react-native 命令,支持 set-icon 功能。 安装: yarn add -D "@bam.tech/react-native-make"🧠 封装目标 我们希望能够通过以下方式调用: # 默认使用 ./icon.png yarn …...
基于深度学习(Unet和SwinUnet)的医学图像分割系统设计与实现:超声心脏分割
基于深度学习的医学图像分割系统设计与实现 摘要 本文提出了一种基于深度学习的医学图像分割系统,该系统采用U-Net和Swin-Unet作为核心网络架构,实现了高效的医学图像分割功能。系统包含完整的训练、验证和推理流程,并提供了用户友好的图形界面。实验结果表明,该系统在医…...

Qt学习及使用_第1部分_认识Qt---学习目的及技术准备
前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...
如何把本地服务器变成公网服务器?内网ip网址转换到外网连接访问
内网IP只能在本地内部网络连接访问,当本地搭建服务器部署好相关网站或应用后,在局域网内可以通过内网IP访问,但在外网是无法直接访问异地内网IP端口应用的,只有公网IP和域名才能实现互联网上的访问。那么需要如何把本地服务器变…...
Java+Access综合测评系统源码分享:含论文、开题报告、任务书全套资料
JAVAaccess综合测评系统毕业设计 一、系统概述 本系统采用Java Swing开发前端界面,结合Access数据库实现数据存储,专为教育机构打造的综合测评解决方案。系统包含学生管理、题库管理、在线测评、成绩分析四大核心模块,实现了测评流程的全自…...

湖北理元理律师事务所:债务咨询中的心理支持技术应用
债务危机往往伴随心理崩溃。世界卫生组织研究显示,长期债务压力下抑郁症发病率提升2.3倍。湖北理元理律师事务所将心理干预技术融入法律咨询,构建“法律方案心理支持”的双轨服务模型。 一、债务压力下的心理危机图谱 通过对服务对象的追踪发现&#x…...
时间序列预测:LSTM与Prophet对比实验
时间序列预测:LSTM与Prophet对比实验 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 时间序列预测:LSTM与Prophet对比实验摘要引言实验设计1. 数据集选择2. 实验流程 模型架构对比1. LSTM架…...

阿里云域名怎么绑定
阿里云服务器绑定域名全攻略:一步步轻松实现网站“零”障碍上线! 域名,您网站在云端的“身份证”! 在数字化浪潮中,拥有一个属于自己的网站或应用,是个人展示、企业运营不可或缺的一环。而云服务器&#x…...

能上Nature封面的idea!强化学习+卡尔曼滤波
2025深度学习发论文&模型涨点之——强化学习卡尔曼滤波 强化学习(Reinforcement Learning, RL)与卡尔曼滤波(Kalman Filtering, KF)的交叉研究已成为智能控制与状态估计领域的重要前沿方向。 强化学习通过试错机制优化决策策…...
Linux网桥实战手册:从基础配置到虚拟化网络深度优化
一、网桥基础操作全解析 1. 网桥生命周期管理 创建网桥的两种方式: # 传统brctl工具(需安装bridge-utils) brctl addbr br0 echo BRIDGEbr0 > /etc/sysconfig/network-scripts/ifcfg-br0# 现代iproute2工具链 ip link add name br0 typ…...
Design Theory and Method of Complex Products: A Review
abstract 摘要 Design is a high-level and complex thinking activity of human beings, using existing knowledge and technology to solve problems and create new things. With the rise and development of intelligent manufacturing, design has increasingly reflec…...
yaffs2目录搜索上下文数据结构struct yaffsfs_dirsearchcontext yaffsfs_dsc[] 详细解析
1. 目录搜索上下文(Directory Search Context) struct yaffsfs_dirsearchcontext 是 YAFFS2 文件系统中用于 目录遍历操作 的核心数据结构,专门管理 readdir() 等目录操作的状态。 结构体定义(典型实现) struct yaf…...

Markdown基础(1.2w字)
1. Markdown基础 这次就没目录了,因为md格式太乱了写示例,展示那些都太乱了,导致目录很乱。 (我是XX,出现了很多错误,有错误和我说) 1.1 Markdown简介 Markdown是一种轻量级的标记语言&#…...

LabVIEW与PLC液压泵测控系统
针对液压泵性能测试场景,采用LabVIEW与西门子 PLC 控制系统,构建高精度、高可靠性的智能测控系统。通过选用西门子 PLC、NI 数据采集卡、施耐德变频电机等,结合LabVIEW 强大的数据处理与界面开发能力,实现液压泵压力、流量、转速等…...
SQL-labs通关(level1-22)
SQL-labs靶场详解 靶场下载 靶场下载地址 关卡 level1联合注入 用order by语句来查询字段数 顺便提一下,使用联合注入语句union select也可以查询字段数,在不能使用order by的情况下,可以使用union select来查询字段数。这里我们通过查询…...