当前位置: 首页 > news >正文

相机通用类之海康相机,软触发硬触发(飞拍),并输出halcon格式对象

//在此之前可以先浏览我编写的通用上位机类,更方便理解
https://blog.csdn.net/m0_51559565/article/details/134403745
最近完成一个关于海康采图的demo,记录并说明用法。
先上代码。
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Threading;
using MvCamCtrl.NET;
using HalconDotNet;
using System.Windows.Forms;
using WeldingInspection.MyCamer;namespace WeldingInspection
{public partial class HKCamerSDK: MyBaseCamera{//创建相机集合,用于存放相机MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList;MyCamera.MV_CC_DEVICE_INFO device;MyCamera HKMyCamera = new MyCamera();MyCamera.cbOutputExdelegate ImageCallback;MyCamera.cbExceptiondelegate pCallBackFunc;HObject hPylonImage = new HObject();/// <summary>/// 查找并开启相机/// </summary>/// <param name="CamerNum">开启第几个相机</param>/// <returns>开启成功返回true,开启失败返回false,并在输出打印错误码</returns>public override List<string> FindCamer(){int nRet;List<string> CamerName = new List<string>();// ch:创建设备列表 en:Create Device ListSystem.GC.Collect();nRet = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref m_pDeviceList);if (0 != nRet){Console.WriteLine("NOT find Camer! {0:x8}", nRet);return null;}//在输出打印相机名称 for (int i = 0; i < m_pDeviceList.nDeviceNum; i++){MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(m_pDeviceList.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO));//网口相机if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE){IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stGigEInfo, 0);MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_GIGE_DEVICE_INFO));if (gigeInfo.chUserDefinedName != ""){Console.WriteLine("GigE: " + gigeInfo.chUserDefinedName + " (" + gigeInfo.chSerialNumber + ")");CamerName.Add(gigeInfo.chSerialNumber);}else{Console.WriteLine("GigE: " + gigeInfo.chManufacturerName + " " + gigeInfo.chModelName + " (" + gigeInfo.chSerialNumber + ")");}}//usb接口相机else if (device.nTLayerType == MyCamera.MV_USB_DEVICE){IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stUsb3VInfo, 0);MyCamera.MV_USB3_DEVICE_INFO usbInfo = (MyCamera.MV_USB3_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_USB3_DEVICE_INFO));if (usbInfo.chUserDefinedName != ""){Console.WriteLine("USB: " + usbInfo.chUserDefinedName + " (" + usbInfo.chSerialNumber + ")");}else{Console.WriteLine("USB: " + usbInfo.chManufacturerName + " " + usbInfo.chModelName + " (" + usbInfo.chSerialNumber + ")");}}}if (m_pDeviceList.nDeviceNum == 0){Console.WriteLine("未找到USB或者网口相机", 0);return null;}return CamerName;}/// <summary>/// 根据相机序列号开启相机/// </summary>/// <param name="CamerSerialization"></param>/// <returns></returns>public override bool OpenCamer(string CamerSerialization){int nRet = 0;for (int i = 0; i < m_pDeviceList.pDeviceInfo.Length; i++){device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(m_pDeviceList.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO));IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stGigEInfo, 0);MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_GIGE_DEVICE_INFO));if (gigeInfo.chSerialNumber== CamerSerialization){break;}}// ch:打开设备 | en:Open deviceif (null == HKMyCamera){HKMyCamera = new MyCamera();if (null == HKMyCamera){return false;}}//循环执行1000次,用于连接相机for (int i = 0; i < 10; i++){nRet = HKMyCamera.MV_CC_CreateDevice_NET(ref device);if (MyCamera.MV_OK != nRet){Thread.Sleep(1);//输出错误信息if (i == 9) Console.WriteLine("创建相机失败! {0:x8}", nRet);continue;}nRet = HKMyCamera.MV_CC_OpenDevice_NET();if (MyCamera.MV_OK != nRet){HKMyCamera.MV_CC_DestroyDevice_NET();Thread.Sleep(10);if (i == 9) Console.WriteLine("打开相机失败! {0:x8}", nRet);}else{break;}}// ch:探测网络最佳包大小(只对GigE相机有效) if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE){int nPacketSize = HKMyCamera.MV_CC_GetOptimalPacketSize_NET();if (nPacketSize > 0){nRet = HKMyCamera.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize);if (nRet != MyCamera.MV_OK){Console.WriteLine("Warning: Set Packet Size failed {0:x8}", nRet);}}else{Console.WriteLine("Warning: Get Packet Size failed {0:x8}", nPacketSize);}}//注册断线重连回调函数nRet = HKMyCamera.MV_CC_RegisterExceptionCallBack_NET(pCallBackFunc, IntPtr.Zero);if (MyCamera.MV_OK != nRet){//ShowErrorMsg("Register expection callback failed!", nRet);return false;}GC.KeepAlive(pCallBackFunc);//注册图像回调函数ImageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc);nRet = HKMyCamera.MV_CC_RegisterImageCallBackEx_NET(ImageCallback, IntPtr.Zero);if (MyCamera.MV_OK != nRet){Console.WriteLine("Register image callback failed!");return false;}//设置开启触发模式HKMyCamera.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);//设置开启软触发模式HKMyCamera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE);//使用软触发命令nRet = HKMyCamera.MV_CC_SetCommandValue_NET("TriggerSoftware");if (MyCamera.MV_OK != nRet){m_bGrabbing = false;//              ShowErrorMsg("Start Grabbing Fail!", nRet);return false;}// ch:开始采集 nRet = HKMyCamera.MV_CC_StartGrabbing_NET();if (MyCamera.MV_OK != nRet){Console.WriteLine("开启相机采集失败!  {0:x8}", nRet);return false;}Console.WriteLine("开启相机成功");return true;}/// <summary>/// 相机重连开启/// </summary>/// <param name="nMsgType"></param>/// <param name="pUser"></param>public override bool ReconnectCamer(string CamerName){CloseCamer( );for (int j = 0; j < m_pDeviceList.pDeviceInfo.Length; j++){device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(m_pDeviceList.pDeviceInfo[j], typeof(MyCamera.MV_CC_DEVICE_INFO));IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stGigEInfo, 0);MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_GIGE_DEVICE_INFO));if (gigeInfo.chSerialNumber == CamerName){break;}}int i = 0;// ch:打开设备 | en:Open Devicewhile (true){int nRet = HKMyCamera.MV_CC_CreateDevice_NET(ref device);i++;//防止重连超时卡死if (i > 10000){Console.WriteLine("相机重连超时,请检查相机安装");nRet = -1;break;}if (MyCamera.MV_OK != nRet){Thread.Sleep(5);continue;}nRet = HKMyCamera.MV_CC_OpenDevice_NET();if (MyCamera.MV_OK != nRet){Thread.Sleep(5);HKMyCamera.MV_CC_DestroyDevice_NET();continue;}else{//nRet = InitCamera();if (MyCamera.MV_OK != nRet){Thread.Sleep(5);HKMyCamera.MV_CC_DestroyDevice_NET();continue;}break;}}return true;}/// <summary>/// 清空相机/// </summary>public override bool CloseCamer(){// ch:停止采集 | en:Stop GrabbingHKMyCamera.MV_CC_StopGrabbing_NET();// ch:关闭设备 | en:Close DeviceHKMyCamera.MV_CC_CloseDevice_NET();HKMyCamera.MV_CC_DestroyDevice_NET();return true;}//回调图像传出变量void ImageCallbackFunc(IntPtr pData, ref MyCamera.MV_FRAME_OUT_INFO_EX pFrameInfo, IntPtr pUser){Halcon_Image(pData, ref pFrameInfo, pUser);}public void Halcon_Image(IntPtr pData, ref MyCamera.MV_FRAME_OUT_INFO_EX pFrameInfo, IntPtr pUser){int nRet;HObject img = new HObject();IntPtr pImageBuf = IntPtr.Zero;int nImageBufSize = 0;IntPtr pTemp = IntPtr.Zero;if (IsColorPixelFormat(pFrameInfo.enPixelType)){if (pFrameInfo.enPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed){pTemp = pData;}else{if (IntPtr.Zero == pImageBuf || nImageBufSize < (pFrameInfo.nWidth * pFrameInfo.nHeight * 3)){if (pImageBuf != IntPtr.Zero){Marshal.FreeHGlobal(pImageBuf);pImageBuf = IntPtr.Zero;}pImageBuf = Marshal.AllocHGlobal((int)pFrameInfo.nWidth * pFrameInfo.nHeight * 3);if (IntPtr.Zero == pImageBuf){Console.WriteLine("图像采集为空");return;}nImageBufSize = pFrameInfo.nWidth * pFrameInfo.nHeight * 3;}MyCamera.MV_PIXEL_CONVERT_PARAM stPixelConvertParam = new MyCamera.MV_PIXEL_CONVERT_PARAM();stPixelConvertParam.pSrcData = pData;//源数据stPixelConvertParam.nWidth = pFrameInfo.nWidth;//图像宽度stPixelConvertParam.nHeight = pFrameInfo.nHeight;//图像高度stPixelConvertParam.enSrcPixelType = pFrameInfo.enPixelType;//源数据的格式stPixelConvertParam.nSrcDataLen = pFrameInfo.nFrameLen;stPixelConvertParam.nDstBufferSize = (uint)nImageBufSize;stPixelConvertParam.pDstBuffer = pImageBuf;//转换后的数据stPixelConvertParam.enDstPixelType = MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed;nRet = HKMyCamera.MV_CC_ConvertPixelType_NET(ref stPixelConvertParam);//格式转换if (MyCamera.MV_OK != nRet){Console.WriteLine("图像转换异常");return;}pTemp = stPixelConvertParam.pDstBuffer;}try{HOperatorSet.GenImageInterleaved(out hPylonImage, (HTuple)pTemp, (HTuple)"rgb", (HTuple)pFrameInfo.nWidth, (HTuple)pFrameInfo.nHeight, -1, "byte", 0, 0, 0, 0, -1, 0);}catch (System.Exception ex){Console.WriteLine(ex.ToString());return;}}else if (IsMonoPixelFormat(pFrameInfo.enPixelType)){if (pFrameInfo.enPixelType == MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8){pTemp = pData;}else{if (IntPtr.Zero == pImageBuf || nImageBufSize < (pFrameInfo.nWidth * pFrameInfo.nHeight)){if (pImageBuf != IntPtr.Zero){Marshal.FreeHGlobal(pImageBuf);pImageBuf = IntPtr.Zero;}pImageBuf = Marshal.AllocHGlobal((int)pFrameInfo.nWidth * pFrameInfo.nHeight);if (IntPtr.Zero == pImageBuf){Console.WriteLine("图像采集为空");return;}nImageBufSize = pFrameInfo.nWidth * pFrameInfo.nHeight;}MyCamera.MV_PIXEL_CONVERT_PARAM stPixelConvertParam = new MyCamera.MV_PIXEL_CONVERT_PARAM();stPixelConvertParam.pSrcData = pData;//源数据stPixelConvertParam.nWidth = pFrameInfo.nWidth;//图像宽度stPixelConvertParam.nHeight = pFrameInfo.nHeight;//图像高度stPixelConvertParam.enSrcPixelType = pFrameInfo.enPixelType;//源数据的格式stPixelConvertParam.nSrcDataLen = pFrameInfo.nFrameLen;stPixelConvertParam.nDstBufferSize = (uint)nImageBufSize;stPixelConvertParam.pDstBuffer = pImageBuf;//转换后的数据stPixelConvertParam.enDstPixelType = MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8;nRet = HKMyCamera.MV_CC_ConvertPixelType_NET(ref stPixelConvertParam);//格式转换if (MyCamera.MV_OK != nRet){Console.WriteLine("图像转换异常");return;}pTemp = stPixelConvertParam.pDstBuffer; ;}try{HOperatorSet.GenImage1Extern(out hPylonImage, "byte", pFrameInfo.nWidth, pFrameInfo.nHeight, pTemp, IntPtr.Zero);}catch (System.Exception ex){MessageBox.Show(ex.ToString());return;}}else{Console.WriteLine("采集图像格式错误,不为彩色和黑白图像");return;}try{GetImage(hPylonImage);//调用相机基类的函数,用于传出变量hPylonImage.Dispose();m_bGrabbing = false;}catch (Exception e){Console.WriteLine(e.ToString());return;}}/// <summary>/// 设置相机曝光/// </summary>/// <param name="ExposureTime"></param>/// <returns></returns>public override bool SetExposureTime(int ExposureTime){try{HKMyCamera.MV_CC_SetEnumValue_NET("ExposureAuto", 0);int nRet = HKMyCamera.MV_CC_SetFloatValue_NET("ExposureTime", ExposureTime);if (nRet != MyCamera.MV_OK){return false;}return true;}catch (Exception){return false;}}/// <summary>/// 设置Gige相机心跳时间/// </summary>/// <param name="value"></param>public void SetHeartBeatTime(uint value){try{//判断是否是网口相机if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE){HKMyCamera.MV_CC_SetHeartBeatTimeout_NET(value);}}catch (Exception){}}bool m_bGrabbing = false;/// <summary>/// 单张采集/// </summary>public override bool OneGrap(){try{if (m_bGrabbing){Console.WriteLine("Camera is now Continue Grabing Images!");return false;}else{// ch:标志位置位true | en:Set position bit truem_bGrabbing = true;//设置开启触发模式HKMyCamera.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);//设置开启软触发模式HKMyCamera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE);int nRet;//使用软触发命令nRet = HKMyCamera.MV_CC_SetCommandValue_NET("TriggerSoftware");if (MyCamera.MV_OK != nRet){m_bGrabbing = false;return false;}// HeventSlim.Wait();return true;}}catch (Exception){return false;}}/// <summary>/// 开启硬触发/// </summary>/// <returns></returns>public override bool EncoderGrap(){try{if (m_bGrabbing){Console.WriteLine("Camera is now Continue Grabing Images!");return false;}else{// ch:标志位置位true | en:Set position bit truem_bGrabbing = true;HKMyCamera.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);//设置使用硬触发模式int nRet = HKMyCamera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0);if (MyCamera.MV_OK != nRet){m_bGrabbing = false;return false;}return true;}}catch (Exception){return false;}}/// <summary>/// 判断是否为彩色图像/// </summary>/// <param name="enType"></param>/// <returns></returns>private bool IsColorPixelFormat(MyCamera.MvGvspPixelType enType){switch (enType){case MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BGR8_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_RGBA8_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BGRA8_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_YUYV_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR8:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG8:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB8:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG8:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12:case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12_Packed:return true;default:return false;}}/// <summary>/// 判断图像是否是黑白图像/// </summary>/// <param name="enType"></param>/// <returns></returns>private bool IsMonoPixelFormat(MyCamera.MvGvspPixelType enType){switch (enType){case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8:case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10:case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10_Packed:case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12:case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12_Packed:return true;default:return false;}}}
}

整体过程其实比较简单,由于海康相机没有像一些品牌相机一样可以直接使用序列号开启相机,所以我们需要通过对相机信息进行索引,根据索引到的相机序列号来开启相机。
如何显示图像:可以访问我文章开头的博客,通过编写相机通用类即可,程序中是有继承通用类,通过访问相机通用的获取图像数据,从而传输图像数据。具体可以查看相机通用类。

相关文章:

相机通用类之海康相机,软触发硬触发(飞拍),并输出halcon格式对象

//在此之前可以先浏览我编写的通用上位机类&#xff0c;更方便理解 https://blog.csdn.net/m0_51559565/article/details/134403745最近完成一个关于海康采图的demo&#xff0c;记录并说明用法。 先上代码。using System; using System.Collections.Generic; using System.Runt…...

linux时间调整

查看当前系统时间 [rootVM-12-12-centos ~]# date Sat Nov 18 16:09:11 CST 2023 Sat&#xff1a;表示星期六Saturday的缩写 Nov&#xff1a;表示十一月November的缩写 18&#xff1a;表示日期18号 16:09:11&#xff1a;时间 CST&#xff1a;China Standard Time中国标准…...

C++模版初阶

泛型编程 如下的交换函数中&#xff0c;它们只有类型的不同&#xff0c;应该怎么实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp…...

​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第20章 系统架构设计师论文写作要点&#xff08;P717~728&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图...

Go 语言结构体验证详解:validate 标签与自定义规则

介绍 Go 语言中&#xff0c;结构体验证是保障数据完整性和正确性的重要手段之一。本文将深入探讨 validate 标签的使用方式&#xff0c;并介绍如何结合验证库 go-playground/validator 进行自定义验证规则。 安装与导入验证库 首先&#xff0c;请确保已安装验证库&#xff1a…...

​软考-高级-系统架构设计师教程(清华第2版)【第19章 大数据架构设计理论与实践 (P691~716)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第19章 大数据架构设计理论与实践 &#xff08;P691~716&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图...

深度学习YOLOv5车辆颜色识别检测 - python opencv 计算机竞赛

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…...

c语言-浅谈指针(3)

文章目录 1.字符指针变量常见的字符指针初始化另一种字符指针初始化例&#xff1a; 2.数组指针变量什么是数组指针变量数组指针变量创建数组指针变量初始化例&#xff08;二维数组传参的本质&#xff09; 3.函数指针变量什么是函数指针变量呢&#xff1f;函数指针变量创建函数指…...

从服务器端获取人脸数据,在本地检测特征,并将特征发送给服务器

目录 1.定义函数get_database_process&#xff1a; 2.定义函数features_construct&#xff1a; 3.定义函数send_features_data&#xff1a; 4. 定义函数database_features_construct&#xff1a; 5. main 函数 1.定义函数get_database_process&#xff1a; …...

ARDUINO UNO 12颗LED超酷流水灯效果

效果代码&#xff1a; #define t 30 #define t1 20 #define t2 100 #define t3 50 void setup() { // set up pins 2 to 13 as outputs for (int i 2; i < 13; i) { pinMode(i, OUTPUT); } } /Effect 1 void loop() { effect_1(); effect_1(); effect_…...

Linux下查看pytorch运行时真正调用的cuda版本

一般情况我们会安装使用多个cuda版本。而且pytorch在安装时也会自动安装一个对应的版本。 正确查看方式&#xff1a; 想要查看 Pytorch 实际使用的运行时的 cuda 目录&#xff0c;可以直接输出 cpp_extension.py 中的 CUDA_HOME 变量。 import torch import torch.utils imp…...

​分享mfc140u.dll丢失的解决方法,针对原因解决mfc140u.dll丢失的问题

作为电脑小白&#xff0c;如果电脑中出现了mfc140u.dll丢失的问题&#xff0c;肯定会比较的慌乱。但是出现mfc140u.dll丢失的问题&#xff0c;其实也有很简单的办法&#xff0c;所以大家不用慌张&#xff0c;接下来就教大家解决办法&#xff0c;能够有效的解决mfc140u.dll丢失的…...

torch_cluster、torch_scatter、torch_sparse三个包的安装

涉及到下面几个包安装的时候经常会出现问题&#xff0c;这里我使用先下载然后再安装的办法&#xff1a; pip install torch_cluster pip install torch_scatter pip install torch_sparse 1、选择你对应的torch版本&#xff1a;https://data.pyg.org/whl/ 2、点进去然后&…...

软件安利——火绒安全

近年来&#xff0c;以优化、驱动、管理为目标所打造的软件屡见不鲜&#xff0c;大同小异的电脑管家相继走入了公众的视野。然而&#xff0c;在这日益急功近利的社会氛围驱动之下&#xff0c;真正坚持初心、优先考虑用户体验的电脑管家逐渐湮没在了浪潮之中。无论是鲁大师&#…...

Induced AI:一个专门为自动化任务而设计的AI原生浏览器RPA平台

​内容来源&#xff1a;xiaohuggg Induced AI&#xff1a;一个专门为自动化任务而设计的AI原生浏览器RPA平台 刚刚获得OpenAI CEOsama的个人投资&#xff01; 它能够模拟人类浏览网页的行为&#xff0c;自动化地浏览网页&#xff0c;搜集关键信息&#xff0c;并对这些信息进行…...

vue3中使用reactive定义的变量响应式丢失问题(大坑!!!)

前言 在Vue 3中&#xff0c;可以使用reactive函数将普通JavaScript对象转换为响应式对象&#xff0c;这样当对象的属性发生变化时&#xff0c;就会自动更新相应的UI。 但是请注意以下情况可能会丢失数据的响应式&#xff1a; 响应式丢失的情况&#xff1a; 1、对使用reactiv…...

Windows Server 2012 R2系统服务器远程桌面服务多用户登录配置分享

Windows Server 2012系统在没有安装远程多界面的情况下&#xff0c;最多只能同时运行2个远程桌面&#xff0c;如果是有多个技术员、合伙人同时操作或是像游戏开发需要用到多界面&#xff0c;但是没有安装就很不方便&#xff0c;今天飞飞来和你们分享Windows server 2012R2系统远…...

mysql之搭建MHA架构实现高可用

1、定义 全称是masterhigh avaliabulity。基于主库的高可用环境下可以实现主从复制及故障切换&#xff08;基于主从复制才能故障切换&#xff09; MHA最少要求一主两从&#xff0c;半同步复制模式 2、作用 解决mysql的单点故障问题。一旦主库崩溃&#xff0c;MHA可以在0-30…...

Databend 与海外某电信签约:共创海外电信数据仓库新纪元

为什么选择 Databend 海外某电信面临的主要挑战是随着业务量的增加&#xff0c;传统的 Clickhouse Hive 方案在数据存储和处理上开始显露不足。 原来的大数据分析采用的 Clickhouse Hive 方案进行离线的实时报表。但随着业务量的上升后&#xff0c;Hive的数据存储压力变大&…...

scala解析命令行参数

如何用scala解析命令行参数&#xff1a; 首先&#xff0c;需要在项目中添加Apache Commons CLI库的依赖。可以在build.sbt文件中添加如下行&#xff1a; libraryDependencies "commons-cli" % "commons-cli" % "1.4" import org.apache.comm…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

更新 Docker 容器中的某一个文件

&#x1f504; 如何更新 Docker 容器中的某一个文件 以下是几种在 Docker 中更新单个文件的常用方法&#xff0c;适用于不同场景。 ✅ 方法一&#xff1a;使用 docker cp 拷贝文件到容器中&#xff08;最简单&#xff09; &#x1f9f0; 命令格式&#xff1a; docker cp <…...

【Pandas】pandas DataFrame dropna

Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值&#xff08;NaN&#xff09;DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充&#xff08;即“下一个有效观测值”&#xff09…...

AGV|无人叉车工业语音播报器|预警提示器LBE-LEX系列性能与接线说明

LBE-LEX系列AGV|无人叉车工业语音播报器|预警提示器&#xff0c;涵盖LBE-LEI-M-00、LBE-LESM-00、LBE-LES-M-01、LBE-LEC-M-00、LBE-KEI-M-00、LBE-KES-M-00、LBE-KES-M-01、LBE-KEC-M-00等型号&#xff0c;适用于各种需要语音提示的场景&#xff0c;主要有AGV、AMR机器人、无人…...

【11408学习记录】考研写作双核引擎:感谢信+建议信复合结构高分模板(附16年真题精讲)

感谢信建议信 英语写作2016年考研英语&#xff08;二&#xff09;真题小作文题目分析写作思路第一段第二段锦囊妙句9&#xff1a;锦囊妙句12&#xff1a;锦囊妙句13&#xff1a;锦囊妙句18&#xff1a; 第三段 妙句成文 每日一句词汇第一步&#xff1a;找谓语第二步&#xff1a…...