Baumer工业相机堡盟工业相机如何通过BGAPI SDK直接实现Mono16位深度的图像保存(C#)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK直接实现Mono16位深度的图像保存(C#)
- Baumer工业相机
- Baumer工业相机保存位深度12/16位图像的技术背景
- 代码案例分享
- 1:引用合适的类文件
- 2:通过BGAPI SDK直接保存Mono12/16图像
- 3:使用BGAPI SDK的图像直接转换Mono12/16图像并保存的功能
- 工业相机使用位深度12/16位图像的优点
- 工业相机使用位深度12/16位图像的行业应用
Baumer工业相机
Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。
Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。
Baumer工业相机通过使用BGAPI SDK进行开发时,在C++环境可以直接实现位深度为16的图像保存。
Baumer工业相机保存位深度12/16位图像的技术背景
工业相机通常用于需要高质量图像的分析和检查的专业环境中。这些相机被设计用来捕捉16比特的高比特深度的图像,与低比特深度的图像相比,可以捕捉到更大范围的色彩和细节。
保存位深16位图像的工业相机的技术背景涉及几个关键部分。首先,相机的图像传感器必须能够捕捉到高比特深度的图像。这是通过使用高质量的图像传感器来实现的,该传感器能够以每像素16比特的分辨率捕获数据。
其次,相机的电子设备必须能够处理和存储高比特深度的图像数据。这意味着相机需要有一个高速处理器和足够的内存来处理所产生的大量图像数据。
第三,相机的软件必须能够支持16位图像的保存。这意味着相机的固件和软件接口必须被设计成能够处理16位图像所产生的更大的文件尺寸,并且还能与工业标准文件格式如TIFF和RAW兼容。
总的来说,保存16位深度图像的工业相机的技术背景涉及高质量的图像传感器、强大的电子器件和专门的软件的组合,这些都是为了处理捕捉和存储高位深度图像的独特需求。
这里主要描述如何在C#的平台下通过BGAPI SDK直接实现Mono16图像格式的保存功能的核心代码
代码案例分享
本文介绍使用BGAPI SDK对Baumer的工业相机进行开发时,直接实现Mono12或者Mono16图像格式的保存功能
如下为核心代码实现步骤:
1:引用合适的类文件
C#环境下核心代码如下所示:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
using CSCameraDemo.Properties;
using System.Globalization;
using WindowsFormsApplication1;
using System.Threading.Tasks;
using System.Threading;
using System.Drawing.Imaging;using BGAPI2;
2:通过BGAPI SDK直接保存Mono12/16图像
下面为在在C#环境开启相机连接相机后通过转换图像格式实现Mono12或者Mono16图像格式保存的核心代码。
如下所示:
SystemList
Open a System
Get the InterfaceList and fill it Open an Interface
Get the DeviceList and fill it
Open a Devicevoid mDataStream_NewBufferEvent(object sender, BGAPI2.Events.NewBufferEventArgs mDSEvent)
{try{BGAPI2.Buffer mBufferFilled = null; mBufferFilled = mDSEvent.BufferObj;if (mBufferFilled == null){MessageBox.Show("Error: Buffer Timeout after 1000 ms!");}else if (mBufferFilled.IsIncomplete == true){//MessageBox.Show("Error: Image is incomplete!");//queue buffer againmBufferFilled.QueueBuffer();}else{#region//获取当前FrameIDFrameIDInt = (int)mBufferFilled.FrameID;OnNotifySetFrameID(FrameIDInt.ToString());#endregion//将相机内部图像内存数据转为bitmap数据System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap((int)mBufferFilled.Width, (int)mBufferFilled.Height, (int)mBufferFilled.Width,System.Drawing.Imaging.PixelFormat.Format8bppIndexed, (IntPtr)((ulong)mBufferFilled.MemPtr + mBufferFilled.ImageOffset));#region//Mono图像数据转换。彩色图像数据转换于此不同System.Drawing.Imaging.ColorPalette palette = bitmap.Palette;int nColors = 256;for (int ix = 0; ix < nColors; ix++){uint Alpha = 0xFF;uint Intensity = (uint)(ix * 0xFF / (nColors - 1));palette.Entries[ix] = System.Drawing.Color.FromArgb((int)Alpha, (int)Intensity, (int)Intensity, (int)Intensity);}bitmap.Palette = palette;#endregionlong currenttime = (long)mBufferFilled.Timestamp; DateTime sdasd = GetTime(currenttime, true);#region//回调函数保存图像功能if (bSaveImg){//使用bitmap自带函数保存string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");string saveimagepath = pImgFileDir +"\\"+ strtime + ".jpg";// bitmap.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Bmp);//使用opencv进行保存图像if (mBufferFilled.PixelFormat == "Mono8"){OpenCvSharp.Mat matgray = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat matgray.SaveImage("opencv_image.png");Cv2.ImWrite("opencvcv_image_Clone.png", matgray);Cv2.ImWrite(saveimagepath, matgray);} //将相机中原始图像数据通过BGAPI SDK直接保存为16位深度的图像if (mBufferFilled.PixelFormat.Contains("Mono12")){short[] mImageBuffer16Copy = new short[(uint)((uint)mBufferFilled.Width * (uint)mBufferFilled.Height * 1)];Marshal.Copy((IntPtr)mBufferFilled.MemPtr, mImageBuffer16Copy, 0, (int)((int)mBufferFilled.Width * (int)mBufferFilled.Height * 1));//convert Mono12 to Mono16uint length = (uint)((uint)mBufferFilled.Width * (uint)mBufferFilled.Height) * 1;for (uint l = 0; l < length; l++){mImageBuffer16Copy[l] = (short)(mImageBuffer16Copy[l] << 4);}saveimagepath = pImgFileDir + "\\" + strtime + "-Mono16.png";saveMono16Tiff(saveimagepath , mImageBuffer16Copy, (int)mBufferFilled.Width, (int)mBufferFilled.Height * 1);}bSaveImg = false;//变量控制单次保存图像}#endregion#region//bitmap的图像数据复制pBitmapBitmap clonebitmap = (Bitmap)bitmap.Clone();BitmapData data = clonebitmap.LockBits(new Rectangle(0, 0, clonebitmap.Width, clonebitmap.Height), ImageLockMode.ReadOnly, clonebitmap.PixelFormat);clonebitmap.UnlockBits(data);pBitmap = clonebitmap;#endregion#region//将pBitmap图像数据显示在UI界面PictureBox控件上prcSource.X = 0;prcSource.Y = 0;prcSource.Width = (int)mBufferFilled.Width;prcSource.Height = (int)mBufferFilled.Height;System.Drawing.Graphics graph = System.Drawing.Graphics.FromHwnd(pictureBoxA.Handle);graph.DrawImage(pBitmap, prcPBox, prcSource, GraphicsUnit.Pixel);#endregionclonebitmap.Dispose(); //清除临时变量clonebitmap所占内存空间mBufferFilled.QueueBuffer();}}catch (BGAPI2.Exceptions.IException ex){{string str2;str2 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());MessageBox.Show(str2);}}return;
}
3:使用BGAPI SDK的图像直接转换Mono12/16图像并保存的功能
下面为在在C#环境开启相机连接相机后通过BGAPI SDK直接实现Mono12或者Mono16图像格式保存的核心代码。
如下所示:
public static void saveMono16Tiff(string fileName, short[] shortarray, int imagewidth, int imageheight)
{FileStream FileST = new FileStream(fileName, FileMode.Create);// Create the writer for data.BinaryWriter binWriter = new BinaryWriter(FileST);// Write data to Test.data.ushort data16 = 0;uint data32 = 0;uint sizeX = (uint)imagewidth;uint sizeY = (uint)imageheight;int imagelength2 = imagewidth * imageheight;// TIFF identifier and count of directory entries//================================================data16 = 0x4949; // identifier "II" for little-endian byte orderbinWriter.Write(data16);data16 = 42; // tiff identifier 42binWriter.Write(data16);data32 = 8; // offset for the first IFDbinWriter.Write(data32);data16 = 12; // number of directory entriesbinWriter.Write(data16);// 1. entry: ImageWidth (number of columns)//==========================================data16 = 0x100; // tag: 100.HbinWriter.Write(data16);data16 = 4; // type: LONGbinWriter.Write(data16);data32 = 1; // count: 1binWriter.Write(data32);data32 = sizeX; // value: horizontal image sizebinWriter.Write(data32);// 2. entry: ImageLength (number of rows)//=======================================data16 = 0x101; // tag: 101.H binWriter.Write(data16);data16 = 4; // type: LONGbinWriter.Write(data16);data32 = 1; // count: 1binWriter.Write(data32);data32 = sizeY; // value: horizontal image sizebinWriter.Write(data32);// 3. entry: BitsPerSample//=========================data16 = 0x102; // tag: 102.H binWriter.Write(data16);data16 = 3; // type: SHORTbinWriter.Write(data16);data32 = 1; // count: 1 == SamplesPerPixel Mono16binWriter.Write(data32);data32 = 16; // SamplesPerPixel == 1 => value: 16 (16 bps => NOT BASELINE!)binWriter.Write(data32);// 4. entry: Compression//=======================data16 = 0x103; // tag: 103.H binWriter.Write(data16);data16 = 3; // type: SHORTbinWriter.Write(data16);data32 = 1; // count: 1 binWriter.Write(data32);data32 = 1; // value: 1 (no compression)binWriter.Write(data32);// 5. entry: PhotometricInterpretation//======================================data16 = 0x106; // tag: 106.H binWriter.Write(data16);data16 = 3; // type: SHORTbinWriter.Write(data16);data32 = 1; // count: 1 binWriter.Write(data32);data32 = 1; // SamplesPerPixel == 1 => value: 1 (BlackIsZero)binWriter.Write(data32);// 6. entry: StripOffsets//========================data16 = 0x111; // tag: 111.H binWriter.Write(data16);data16 = 4; // type: LONGbinWriter.Write(data16);data32 = 1; // count: 1 == StripsPerImagebinWriter.Write(data32);data32 = 174; // value = 8 + 2 + 12*12 + 4 + 8 + 8 = 174binWriter.Write(data32);// 7. entry: SamplesPerPixel//===========================data16 = 0x115; // tag: 115.H binWriter.Write(data16);data16 = 3; // type: SHORTbinWriter.Write(data16);data32 = 1; // count: 1 binWriter.Write(data32); ;data32 = 1; // SamplesPerPixel == 1 Mono16binWriter.Write(data32);// 8. entry: RowsPerStrip//========================data16 = 0x116; // tag: 116.H binWriter.Write(data16);data16 = 4; // type: LONGbinWriter.Write(data16);data32 = 1; // count: 1binWriter.Write(data32);data32 = sizeY; // value: vertical image size (one strip only)binWriter.Write(data32);// 9. entry: StripByteCounts (For each strip, the number of bytes in the strip after compression.)//================================================================================================data16 = 0x117; // tag: 117.H binWriter.Write(data16);data16 = 4; // type: LONGbinWriter.Write(data16);data32 = 1; // count: 1 == StripsPerImagebinWriter.Write(data32);data32 = 2 * 1 * sizeX * sizeY; // value = 2* 1 * SizeX * SizeYbinWriter.Write(data32);// 10. entry: XResolution (The number of pixels per ResolutionUnit in the ImageWidth direction.)//================================================================================================data16 = 0x11A; // tag: 11A.H binWriter.Write(data16);data16 = 5; // type: RATIONALbinWriter.Write(data16);data32 = 1; // count: 1 binWriter.Write(data32);data32 = 158; // offset to value = 8 + (2 + 12*12 + 4) = 158binWriter.Write(data32);// 11. entry: YResolution (The number of pixels per ResolutionUnit in the ImageLength direction.)//================================================================================================data16 = 0x11B; // tag: 11B.H binWriter.Write(data16);data16 = 5; // type: RATIONALbinWriter.Write(data16);data32 = 1; // count: 1 binWriter.Write(data32);data32 = 166; // offset to value = 8 + (2 + 12*12 + 4) + 8 = 166binWriter.Write(data32);// 12. entry: ResolutionUnit (The unit of measurement for XResolution and YResolution.)//=====================================================================================data16 = 0x128; // tag: 128.H binWriter.Write(data16);data16 = 3; // type: SHORTbinWriter.Write(data16);data32 = 1; // count: 1 binWriter.Write(data32);data32 = 2; // value: 2 (Inch) => dpibinWriter.Write(data32);data32 = 0; // offset of next IFD: nonebinWriter.Write(data32);// write IFD values longer than 4 byte//======================================data32 = 72; // XResolution numerator: 72 => 72 dpi (a common value..)binWriter.Write(data32);data32 = 1; // XResolution denominator: 1binWriter.Write(data32);data32 = 72; // YResolution numerator: 72 => 72 dpi (a common value..)binWriter.Write(data32);data32 = 1; // YResolution denominator: 1binWriter.Write(data32);// end of header save to file// save image data (converted from Mono12 to Mono16) to filefor (int i = 0; i < imagelength2; i++){data16 = (ushort)shortarray[i];binWriter.Write(data16);}// close filebinWriter.Close();FileST.Close();return;} // end of saveMono16Tiff()
工业相机使用位深度12/16位图像的优点
更好的图像细节:12/16位图像可以捕捉到更多的细节和颜色深度,提供更高的图像质量。
更广泛的动态范围:12/16位图像允许在明暗变化很大的场景中捕捉到更多的细节和颜色,以及更好的光线控制。
更低的噪声:采用12/16位图像可以减少噪声,使得图像更加清晰。
更好的后期处理:12/16位图像可以在后期处理中更灵活地进行平滑、增加对比度和其他调整。
因此,工业相机使用12/16位图像可以提供更高质量的图像,更好的细节和颜色控制,并为后期处理提供更多的灵活性。
工业相机使用位深度12/16位图像的行业应用
-
医疗成像:工业相机可用于各种医疗成像应用,例如X射线成像,MRI和CT扫描。这些应用需要16位图像位深度来提供高质量的成像结果。
-
汽车制造:工业相机可以用于汽车制造中的各种应用,例如质量控制和检查。这些应用需要高分辨率和16位图像位深度,以检测并处理微小的缺陷或问题。
-
机器人视觉:工业相机的高速度和高精度对于机器人视觉应用非常重要。机器人需要能够识别和定位目标,同时能够处理16位图像位深度的高质量图像。
-
智能交通系统:工业相机也可以用于智能交通系统中。例如,交通监控摄像机需要高质量的图像以便能够识别和跟踪车辆,行人和其他交通标志。
总之,工业相机使用16位图像位深度的行业应用范围非常广泛,它们可以用于各种不同的应用,以提供高质量的成像结果和精确的图像处理功能。
相关文章:
Baumer工业相机堡盟工业相机如何通过BGAPI SDK直接实现Mono16位深度的图像保存(C#)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK直接实现Mono16位深度的图像保存(C#) Baumer工业相机Baumer工业相机保存位深度12/16位图像的技术背景代码案例分享1:引用合适的类文件2:通过BGAPI SDK直接保存Mono12/16图像3…...

C语言入门篇——介绍篇
目录 1、什么是C语言 1、C语言的优点 3、语言标准 4、使用C语言的步骤 5、第一个C语言程序 6、关键字 1、什么是C语言 1972年,贝尔实验室的丹尼斯里奇和肯汤普逊在开发UNIX操作系统时设计了C语言,C语言是在B语言的基础上进行设计。C语言设计的初衷…...

Latex数学公式排版
文章目录 Latex使用最佳方式:读官方文档Latex中的字符数学公式排版1.引入宏包:2.公式排版基础3.数学符号(1).希腊字母(2).指数,上下标,导数(3).分式和根式(4).关系符(5).算符(6).巨算符(7).箭头 Latex使用 最佳方式:读官方文档 The not so short intro…...

【Linux】-关于Linux的指令(上)
作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! TOC 前言 今天我们来讲关于Linux的基本指令,博主讲的指令会对应着Windows…...
【论文写作】引言写作的四个重要的语言点之时态!!!
在本篇文章当中,我们将着重介绍四个重要的写作语言要点之一的时态,其他语言点如下: 1. 时态 2. 标志性的衔接词 3. 主动、被动语态 4. 段落 1. 简单现在时和现在进行时 时态主要有现在时和现在进行时,看以下两个句子 I live in…...

Super Yolo论文翻译
论文:SuperYOLO: Super Resolution Assisted Object Detection in Multimodal Remote Sensing Imagery【IEEE】 论文地址: IEEE Xplore Full-Text PDF:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber10075555项目地址:icey…...

【CocosCreator入门】CocosCreator组件 | ProgressBar(进度条)组件
Cocos Creator 是一款流行的游戏开发引擎,具有丰富的组件和工具,其中的ProgressBar组件是一种用于实现进度条效果的重要组件。它可以让我们在游戏中展示各种进度条效果,例如加载进度条、血条等。 目录 一、组件介绍 二、组件属性 三、脚本…...

大数据数仓维度建模
目录 维度建模分为三种: 1、星型模型: 2、雪花模型: 3、星座模型: 模型的选择: 维度表和事实表: 维度表: 维度表特性 : 事实表: 事实表特性: 事务型…...

ESP32设备驱动-BH1745NUC 亮度和颜色传感器驱动
BH1745NUC 亮度和颜色传感器驱动 文章目录 BH1745NUC 亮度和颜色传感器驱动2、硬件准备3、软件准备4、驱动实现BH1745NUC 是具有 IC 总线接口的数字颜色传感器 IC。 该 IC 感应红光、绿光和蓝光 (RGB) 并将它们转换为数字值。 高灵敏度、宽动态范围和出色的 Ircut 特性使该 IC …...

通达信VCP形态选股公式,憋了好几天才写出来
VCP形态的英文”Volatility Contraction Pattern”的缩写,意思是“波动收缩形态”。VCP形态是全美交易冠军马克米勒维尼的核心交易模式之一,在其著作《股票魔法师》中有详细介绍。 马克米勒维尼把VCP形态比喻为湿毛巾,拧过一次后仍含水&…...
vue 知识储备
vue2 和 vue3 的区别 模块拆分:vue3采用 compnent API 更注重模块上的拆分,而vue2中则需要使用完整的vuejs,无法使用单独的模块重写API:vue2组件方法挂载到实例中未使用也会被打包,vue3通过 tree-shaking机制,实现按需引入,减少用户打包后体积数据双向绑定:vue2使用 Ob…...

MySQL表的增删查改
目录 一 插入 1 基本语法 ①全列插入 ②指定列插入 ③多条记录插入 ④冲突更新 二 查询 查询全部数据 指定列查询 显示 拼接 取别名 去重查找 where 逻辑运算符和比较运算符 结果排序 Limit group by 分组 聚合函数 对于count 对于sum 对于group by 相关的语…...

详解C语言string.h中常用的14个库函数(三)
本篇博客继续讲解C语言string.h头文件中的库函数。本篇博客计划讲解3个函数,分别是:strstr, strtok, strerror。其中strstr函数我会用一种最简单的方式模拟实现。 strstr char * strstr ( const char * str1, const char * str2 );strstr可以在str1中查…...

无人机视频与GIS融合三维实景怎么实现?
无人机视频与GIS融合三维实景怎么实现?无人机三维GIS作为一项新兴的测绘重要手段,具有续航时间长、成本低、机动灵活等优点,为城市的规划建设带来极大便利。 那么此项技术有什么样的特点呢?下面智汇云舟就带大家一起来了解一下。 三维是将采集以及经运…...
瞬间让你效率提高一倍的高效学习方法
方法不对,努力白费;方法对了,事半功倍!在学习的过程中我们会遇到各种困难与阻碍,如何发现并优化自己的学习方法就变得尤为重要。高效学习方法是指通过科学的、有效的方法来提高学习效率,实现更好的学习成果…...

442. 数组中重复的数据|||41. 缺失的第一个正数|||485. 最大连续 1 的个数
442. 数组中重复的数据 题目 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个时间复杂度为 O(n) 且仅…...

中国地图标准坐标和投影参数
目录 一、地理坐标 二、投影坐标 三、ArcGIS投影变换 四、说明 一、地理坐标 GCS_Krasovsky_1940(克拉索夫斯基_1940椭球体) 具体参数如下图: 每个国家或地区都有各自的基准面,我们通常所说的北京54坐标系、西安80坐标系实际上…...
CNN中卷积层、池化的计算公式
卷积计算公式 1、卷积层输入特征图(input feature map)的尺寸为:(batch_size,Channel,H,W) H(input)表示输入特征图的高 W(input)表示输入特征图的宽 C(input)表示输入特征图的通道数(如果是第一个卷积层则是输入图像的通道数,如果是中间…...
基类派生类多态虚函数?
通常在层次关系的根部有一个基类,其他类则直接或间接的从基类继承而来,这些继承得到的类称为派生类。基类负责定义在层次关系中所有类共同拥有的成员,而每个派生类定义各自特有的成员。 成员函数与继承派生类可以继承其基类的成员, 然而有时…...

像素是什么
像素分为设备像素和设备无关像素。 下面说说来龙去脉。 一、显示器 显示图像的电子设备。 (一)显示器种类 1.LCD LCD(Liquid crystal display),是液体晶体显示,也就是液晶显示器,LCD具有功耗低…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...

数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...

生信服务器 | 做生信为什么推荐使用Linux服务器?
原文链接:生信服务器 | 做生信为什么推荐使用Linux服务器? 一、 做生信为什么推荐使用服务器? 大家好,我是小杜。在做生信分析的同学,或是将接触学习生信分析的同学,<font style"color:rgb(53, 1…...