Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCVSharp合并偏振相机4个角度的图像并显示(C#)

news2025/1/20 10:46:09

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCVSharp合并偏振相机4个角度的图像并显示(C#)

  • Baumer工业相机
  • Baumer工业相机偏振相机的技术背景
  • 代码案例分享
    • 1:引用合适的类文件
    • 2:回调函数里联合BGAPI SDK和OpenCVSharp合并偏振相机4个角度的图像
    • 3:OpenCVSharp合并偏振相机4个角度的图像的功能
  • Baumer工业偏振相机获取多角度偏振图像的优点
  • Baumer工业偏振相机获取多角度偏振图像的行业应用

Baumer工业相机

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。

Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。

Baumer工业相机的BGAPI SDK给新型偏振相机提供了测量所获图像的强度和偏振的能力。因此,它能够在应用程序中利用偏振信息。本应用说明描述了如何同时获得偏振相机4个角度图像数据并进行转换和显示的功能。


Baumer工业相机的偏振功能的详细介绍应用可以参考下面的技术博客,本文介绍如何同时获取4个角度偏振数据的功能:
Baumer工业相机堡盟相机如何使用偏振功能(偏振相机优点和行业应用)(C++)

如何使用ADOLP的偏振图像数据进行显示的技术博客:

Baumer工业相机堡盟工业相机如何通过BGAPISDK转换和显示偏振相机的图像(C#)

如何使用BGAPISDK同时获取四个角度图像的技术博客:
Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取偏振相机4个角度的图像转换和显示(C#)

Baumer工业相机偏振相机的技术背景

工业相机中的偏振相机是基于偏振光原理实现的。偏振光是指在光的传播过程中,光的振动方向只在一个特定平面内振荡的光,与之相对的光称为自然光。偏振相机通过使用偏振片或偏振镜来控制光线的振动方向,使得只有具有特定偏振方向的光线经过相机镜头,从而达到特定的筛选或测量功能。

偏振相机在工业品质检测、医学诊断、材料分析等领域有着广泛的应用。例如,在工业品质检测中,偏振相机可以检测材料的应力分布、表面缺陷等信息,从而确定产品的质量;在医学诊断中,偏振相机可以用于检测组织和染色质等生物样本的材料学特征;在材料分析中,偏振相机可以用于检测材料中的畸变和裂缝等缺陷。

总的来说,偏振相机在工业自动化和科学研究等领域中具有重要的应用价值,可以实现快速、准确、高效的检测和分析。
Baumer工业相机中的偏振相机是基于索尼IMC250MZR传感器的。该传感器涂有一层金属网,可以过滤4个相邻像素的偏振信息。偏振角度被过滤以0°、45°、90°、135°的方式排列。

这里主要描述如何在C#的平台下联合BGAPI SDK和OpenCVSharp合并偏振相机4个角度的图像并显示的核心代码

代码案例分享

本文介绍使用BGAPI SDK对Baumer的工业相机进行开发时,合并偏振相机4个角度的图像并显示的功能

如下为核心代码实现步骤:

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;
using OpenCvSharp;
using OpenCvSharp.Dnn;

2:回调函数里联合BGAPI SDK和OpenCVSharp合并偏振相机4个角度的图像

下面为在在C#环境开启相机连接相机后联合BGAPI SDK和OpenCVSharp合并偏振相机4个角度的图像的核心代码。

如下所示:

SystemList 
Open a System 
Get the InterfaceList and fill it Open an Interface 
Get the DeviceList and fill it 
Open a Device

void mDataStream_NewBufferEvent(object sender, BGAPI2.Events.NewBufferEventArgs mDSEvent)
{
    try
    {
        BGAPI2.Image imagePolarized = null;
               
        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 again
            mBufferFilled.QueueBuffer();
        }
        else
        {
            #region//获取当前FrameID
            FrameIDInt = (int)mBufferFilled.FrameID;
            OnNotifySetFrameID(FrameIDInt.ToString());
            #endregion


            uint width = (uint)(mBufferFilled.Width);
            uint height = (uint)(mBufferFilled.Height);
            IntPtr pBufferData = mBufferFilled.MemPtr;
            ulong bufferDataSize = mBufferFilled.MemSize;
            ulong imageOffset = mBufferFilled.ImageOffset;
            ulong imageDataSize = (bufferDataSize > imageOffset) ? (bufferDataSize - imageOffset) : 0;
            IntPtr pImageData = (IntPtr)((ulong)(pBufferData) + imageOffset);
            string sComponent = "POL90";
            string sPixelFormatRaw = "BaumerPolarized8";

            SortedSet<string> sComponents = new SortedSet<string> { "POL0", "POL45", "POL90", "POL135" };
            if (imagePolarized == null)
            {
                imagePolarized = pImgProcessor.CreateImage(width, height, sPixelFormatRaw, pImageData, imageDataSize);
                SortedSet<string> sEnableComponents = new SortedSet<string>(sComponents);                      
                EnableComponents(imagePolarized, sEnableComponents);
            }
            else
            {
                imagePolarized.Init(width, height, sPixelFormatRaw, pImageData, imageDataSize);                        
            } 

            BGAPI2.Image multiPartImage = pImgProcessor.CreateTransformedImage(imagePolarized, "Mono8");
            BGAPI2.Node componentSelector = multiPartImage.NodeList["ComponentSelector"];
            BGAPI2.Node componentEnable = multiPartImage.NodeList["ComponentEnable"];
            BGAPI2.Node componentOffset = multiPartImage.NodeList["ComponentOffset"];
            BGAPI2.Node componentLength = multiPartImage.NodeList["ComponentLength"];
            IntPtr pImageBuffer = multiPartImage.Buffer;
            BGAPI2.Image component = null;

            System.Drawing.Bitmap bitmap1;
            System.Drawing.Bitmap bitmap2;
            System.Drawing.Bitmap bitmap3;
            System.Drawing.Bitmap bitmap4;

            OpenCvSharp.Mat Matgray1 = new Mat();
            OpenCvSharp.Mat Matgray2 = new Mat();
            OpenCvSharp.Mat Matgray3 = new Mat();
            OpenCvSharp.Mat Matgray4 = new Mat();

            int CountIndex = 0;
            foreach (string sComponentCur in sComponents)
            {
                componentSelector.Value = sComponentCur;
                if (componentEnable.Value == true)
                {
                    CountIndex = CountIndex + 1;
                    ulong partLength = (ulong)componentLength.Value;

                    if (partLength > 0)
                    {
                        // Part present - direct access to a single part
                        ulong partOffset = (ulong)componentOffset.Value;

                        System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap((int)width, (int)height, (int)width,
                System.Drawing.Imaging.PixelFormat.Format8bppIndexed, (IntPtr)((ulong)(pImageBuffer) + partOffset));

                        #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;
                        #endregion

                        if (CountIndex == 1)
                        {
                            Matgray1 = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat  
                        }
                        if (CountIndex == 2)
                        {
                            Matgray2 = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat  
                        }
                        if (CountIndex == 3)
                        {
                            Matgray3 = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat  
                        }
                        if (CountIndex == 4)
                        {
                            Matgray4 = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat  
                        }
                        //string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
                        //string saveimagepath = sComponentCur + ".jpg";
                        //bitmap.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Bmp);
                    }


                           
                }
            }


                   

            long currenttime = (long)mBufferFilled.Timestamp;                   
            DateTime sdasd = GetTime(currenttime, true);

                   

            #region//对四张图像进行基础拼接

                   

            Mat panorama1 = new Mat();
            Mat panorama2 = new Mat();
            Mat panoramaResult = new Mat();
            Cv2.VConcat(Matgray1, Matgray2, panorama1);
            Cv2.VConcat(Matgray3, Matgray4, panorama2);
            Cv2.HConcat(panorama1, panorama2, panoramaResult);
            Bitmap bmp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(panoramaResult);//用mat转换为bitmap              
            panorama1.Dispose(); panorama2.Dispose(); panoramaResult.Dispose();

            #endregion




            #region//回调函数保存图像功能
            if (bSaveImg)
            {


                if (!AutoSaveCheck.Checked & !ContinueSave.Checked)
                {
                    //使用bitmap自带函数保存
                    string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
                    string saveimagepath = pImgFileDir + "\\" + strtime + ".jpg";
                    bmp.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);
                    //}
                    bSaveImg = false;//变量控制单次保存图像
                }


                if (AutoSaveCheck.Checked)
                {
                    //使用bitmap自带函数保存
                    string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
                    string saveimagepath = pImgFileDir + "\\" + strtime + ".jpg";
                    //bmp.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Jpeg);

                    Thread SaveImagesThread1 = new Thread((ThreadStart)delegate() { AutoSaveImageRun(bmp, saveimagepath); });
                    SaveImagesThread1.Start();
                    SaveImagesThread1.Join();

                    AutoSaveCount = AutoSaveCount + 1;
                    if (AutoSaveCount == AutoSaveNum0)
                    {
                        AutoSaveCount = 0;
                        bSaveImg = false;
                        AutoSaveCheck.Checked = false;
                    }
                }


                if (ContinueSave.Checked)
                {
                    //使用bitmap自带函数保存
                    string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
                    string saveimagepath = pImgFileDir + "\\" + strtime + ".jpg";
                    //bmp.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Jpeg);

                    Thread SaveImagesThread1 = new Thread((ThreadStart)delegate() { AutoSaveImageRun(bmp, saveimagepath); });
                    SaveImagesThread1.Start();
                    SaveImagesThread1.Join();
                }

                        
            }
            #endregion




            #region//bitmap的图像数据复制pBitmap
            Bitmap clonebitmap = (Bitmap)bmp.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)clonebitmap.Width; prcSource.Height = (int)clonebitmap.Height;
            System.Drawing.Graphics graph = System.Drawing.Graphics.FromHwnd(pictureBoxA.Handle);
            graph.DrawImage(pBitmap, prcPBox, prcSource, GraphicsUnit.Pixel);
            #endregion

            clonebitmap.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;
}



//------------------------------------------------------------------------------
/* Setup the Baumer GAPI to calculate the requested polarization component from the raw
    polarized image */
static ulong EnableComponents(BGAPI2.Image image, SortedSet<string> sComponents)
{
    BGAPI2.Node componentSelector = image.NodeList["ComponentSelector"];
    BGAPI2.Node componentEnable = image.NodeList["ComponentEnable"];
    BGAPI2.NodeMap components = componentSelector.EnumNodeList;
    ulong componentsAvailable = components.Count;

    ulong componentsEnabled = 0;
    for (ulong i = 0; i < componentsAvailable; i++)
    {
        componentSelector.Value = i;
        bool bState = componentEnable.Value;
        if (sComponents.Contains(componentSelector.Value) != true)
        {
            componentEnable.Value = false;
        }
        else
        {
            componentEnable.Value = true;
            componentsEnabled++;
        }
    }
    return componentsEnabled;
}

      

3:OpenCVSharp合并偏振相机4个角度的图像的功能

下面为在在C#环境开启相机连接相机后通过BGAPI SDK联合OpenCVSharp合并偏振相机4个角度的图像的核心代码。

如下所示:

#region//对四张图像进行基础拼接

Mat panorama1 = new Mat();
Mat panorama2 = new Mat();
Mat panoramaResult = new Mat();
Cv2.VConcat(Matgray1, Matgray2, panorama1);
Cv2.VConcat(Matgray3, Matgray4, panorama2);
Cv2.HConcat(panorama1, panorama2, panoramaResult);
Bitmap bmp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(panoramaResult);//用mat转换为bitmap              
panorama1.Dispose(); panorama2.Dispose(); panoramaResult.Dispose();

#endregion

效果如下图所示:
在这里插入图片描述

Baumer工业偏振相机获取多角度偏振图像的优点

1、它们使用偏振滤光片来捕捉在单一方向上振动的光波,减少眩光和闪亮表面的反射。这导致了更清晰和更精确的图像,使其更容易识别高反射表面的缺陷或异常情况。

2、偏光相机还提供更好的对比度和颜色精度,允许精确的颜色测量和分析。

3、偏光相机可以在恶劣的环境条件下使用,并能捕捉到普通相机难以看到的物体的图像。

Baumer工业偏振相机获取多角度偏振图像的行业应用

偏光工业相机通常用于各种工业应用,如质量控制、缺陷检查、材料分析和表面检查。
它们有助于消除眩光和反射,提高玻璃、塑料、金属等各种材料的图像对比度和准确性。
偏光工业相机在检测隐藏的缺陷或污染物、识别材料中的应力点和检查隐藏结构方面也很有用。它们通常用于汽车、航空航天、电子和制造业等行业。

  1. 检查和质量控制: 工业偏振照相机可用于获取产品和材料的多角度偏振图像,以便进行详细的检查和质量控制。这在食品和饮料、制药和电子制造等行业特别有用。

  2. 材料分析: 工业偏振照相机可用于分析材料的偏振特性,如塑料、织物和金属。这在取证、产品开发和研究与发展中很有用。

  3. 表面检查: 通过分析光从表面反射的偏振,工业偏振照相机可以用来检测缺陷、划痕和其他瑕疵。这在汽车制造、航空航天和电子等行业都很有用。

  4. 机器视觉: 工业偏振照相机可以被集成到机器视觉系统中,允许实时分析和处理多角度的偏振图像。这在自动检测和质量控制过程中很有用。

总的来说,工业偏振照相机为获取详细和复杂的图像提供了强有力的工具,可用于改善各行业的生产过程、产品质量和材料分析。

​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/469276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode刷题日志2.0

目录 前言&#xff1a; 1.数字的补数 2.最大连续 1 的个数 3.下一个更大元素 I 4.斐波那契数 5.提莫攻击 6.557. 反转字符串中的单词 III 前言&#xff1a; 今天就分享一下最近刷到的leetcode习题吧 &#xff0c;编程语言&#xff1a;Python3。废话不多说&#xff0…

【备战蓝桥杯国赛-国赛真题】2022

思路 题目的一是就是从1~2022这2022个数中挑选十个数&#xff0c;使其的总和为2022&#xff0c;如果做过背包问题&#xff0c;那么思路就很好出来了&#xff0c;每个数无非就是选与不选&#xff0c;每个数有他们的权值&#xff0c;权值就等于它们本身的值&#xff0c;抽象成背…

java调用百度的接口获取起始位置的距离

需求:校验收货地址是否超出配送范围 重要: 做该需求的思路就是通过卖家和卖家具体的地址信息,来获取到二者的经纬度, 此时可以使用百度的 "地理编码服务",即可获取对应的经纬度 第二步,就是通过二者的经纬度,按照百度接口的要求,发送,即可获取到包含二者距离的JSON串…

循环语句for

for循环 循环和遍历的概念 循环&#xff08;Loop&#xff09;和遍历&#xff08;Traversal&#xff09;是两个在计算机编程中经常使用的概念。 循环是一种重复执行一段代码的结构。通过循环&#xff0c;可以在满足一定条件的情况下&#xff0c;多次执行相同的代码。循环语句…

mysql8.0最新版本超详细安装教程

mysql8.0最新版本超详细安装教程 第一步: 百度搜索MySQL 第二步:进入MySQL官方网站后点击DOWNLOADS 第三步:下拉页面找到图中标识 并点击 第四步:点击图中标识 第五步:点击下载第一个 第六步:点击图中标识 第七步:在D盘创建mysql文件夹 第八步:将下载好的mysq压缩包放入到新建…

深度学习:Opencv的blobFromImage是如何工作的

文章目录 1 OpenCV中blobFromImage函数简介2 blobFromImage是如何工作的2.1 介绍2.2 blobFromImage 的工作流程2.3 blobFromImage 和 blobFromImages1 OpenCV中blobFromImage函数简介 如果训练模型时图像的尺寸 与实际使用的图像尺寸不一致,需要对图像尺寸进行变换; blobFr…

第一次使用服务器部署项目

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

HCIA-RS实验-STP和RSTP(2)

接上一篇文章&#xff1b;其他的不多说&#xff0c;新建一个新的配置设备&#xff1b;如果接上一个实验的配置的话&#xff0c;建议先把所有配置删除后再执行&#xff1b;新的拓扑也与上一个实验一致&#xff1b; 目录 创建新配置 配置RSTP 查看stp版本 配置边缘端口 …

如何防止重复下单

一、问题背景 最简单的&#xff1a;DB 事务。如创建订单时&#xff0c;同时往订单表、订单商品表插数据&#xff0c;这些 Insert 须在同一事务执行。 Order 服务调用 Pay 服务&#xff0c;刚好网络超时&#xff0c;然后 Order 服务开始重试机制&#xff0c;于是 Pay 服务对同…

算法基础第一章

算法基础 第一章&#xff1a;基础算法1、排序2、二分查找3、大数据量的加法和减法&#xff08;高精度加减法&#xff09;3.1、加法3.2、减法 4、前缀和4.1、一维前缀和4.2、二维前缀和 5、差分5.1、一维差分5.2、二维差分 6、双指针7、位运算7.1、lowbit的应用 8、离散化9、区间…

基于c与数据库实现的电子词典

1.搭建客户端与服务器&#xff0c;客户端使用多线程方式&#xff0c;主线程跑发送信息给服务器功能&#xff0c;分支线程跑循环接收服务器信息功能 客户端代码&#xff1a; //TCP客户端的搭建 int tcp_kehuduan() {//创建字节流套接字cfd socket(AF_INET,SOCK_STREAM,0);if(c…

【TCP服务器的演变过程】C++使用libevent库开发服务器程序

C使用libevent库开发服务器程序 一、引言二、libevent简介三、Libevent库的封装层级3.1、reactor对象封装struct event_base3.2、事件对象struct event3.3、struct bufferevent对象3.4、evconnlistener对象3.5、事件循环3.6、事件处理 四、完整示例代码小结 一、引言 手把手教…

病毒的遗传分析

噬菌体的生活周期 烈性噬菌体 噬菌体吸附到宿主细胞上尾丝鞘收缩,中轴刺穿宿主细胞头部的DNA被送入宿主细胞在数分钟内,所有的细菌核算和蛋白质合成都被抑制 噬菌体大分子合成(DNA,蛋白外壳),细菌的核算被降解 噬菌体组装:DNA被包到头部,组装尾部,装上尾丝 宿主细胞破裂:约20…

新品首发丨计讯物联5G水利遥测终端机TY511-B3,推动5G+智慧水利再进化

当前&#xff0c;水利在全面感知、全面互联、智慧应用等方面较其他行业存在明显差距。基于物联网行业通信技术的不断突破和水利行业对高速移动通信的强烈需求&#xff0c;5G移动通信以高速率、大带宽、低时延、广连接等特点让水利数据快速高效地传输成为可能&#xff0c;逐渐成…

如何优雅的写个try catch的方式!

软件开发过程中&#xff0c;不可避免的是需要处理各种异常&#xff0c;就我自己来说&#xff0c;至少有一半以上的时间都是在处理各种异常情况&#xff0c;所以代码中就会出现大量的try {...} catch {...} finally {...} 代码块&#xff0c;不仅有大量的冗余代码&#xff0c;而…

流程图拖拽视觉编程-流程编辑器2

目录 一、简介 二、自定义图元 2.1图元设计 2.2 端口QNEPort 2.3节点块QNEBlock 一、简介 前期文章&#xff1a; 流程图拖拽视觉编程--概述_Jason~shen的博客-CSDN博客 流程图拖拽视觉编程-流程编辑器_Jason~shen的博客-CSDN博客 本期内容&#xff1a; 本期将继续介绍…

【Leetcode】236.二叉树的最近公共祖先

二叉树的最近公共祖先 题目思路1思路2代码 题目 思路1 给我们两个二叉树中的节点 找出里面的最近公共祖先 首先我们要分析p q 两点有哪些位置关系 p q在根节点的两侧 此时最近公共祖先就是根节点 在根节点一侧 此时两个节点都在根节点左侧 此时可以递归二叉树 让root.left…

内存取证小练习-基础训练

这是题目和wolatility2.6的链接 链接&#xff1a;https://pan.baidu.com/s/1wNYJOjLoXMKqbGgpKOE2tg?pwdybww 提取码&#xff1a;ybww --来自百度网盘超级会员V4的分享 压缩包很小&#xff0c;题目也比较简单基础&#xff0c;可以供入门使用 1&#xff1a;Which volatility…

使用auto-gpt来写一篇技术文章(如何部署autogpt+遇到的问题+如何使用)

文章目录 前言一、autogpt本地部署1.clone代码2.启动虚拟环境3.运行项目 二、使用aotogpt生成文章1.人设描述2.设置目标3.文章的生成过程4.文章的生成内容 总结 前言 最近AI技术的发展非常迅猛&#xff0c;尤其是和GPT相关的技术&#xff0c;备受瞩目。近日&#xff0c;Autogp…

nvm安装管理npm

1.根据http://t.csdn.cn/mRwCQ这个教程完成安装 2.使用nvm install [指定版本号]&#xff0c;下载了16.15.1&#xff0c;和10.15.1版本 2.5 这里其实出了一点问题&#xff0c;我在下载16.15.1时&#xff0c;因为墙的问题其实是下载出错&#xff0c;报了一个error的&#xff0c…