首页
关于
壁纸
history
Search
1
斑马扫码枪SDK调用
45 阅读
2
LabVIEW and Drivers 2019~2023
39 阅读
3
C#使用DataMatix.net生成二维码
39 阅读
4
Labview Actor Frame Work介绍
30 阅读
5
linux无法删除.user.ini文件,解决办法
26 阅读
默认分类
Labview
CSHARP
C/C++
AI生成
登录
Search
标签搜索
AI生成
labview
C#
python
linux
CloudZ
累计撰写
36
篇文章
累计收到
3
条评论
首页
栏目
默认分类
Labview
CSHARP
C/C++
AI生成
页面
关于
壁纸
history
搜索到
21
篇与
的结果
2023-06-23
黑群晖DS918开启m.2 nvme固态硬盘做存储空间(支持DSM6.2X和DSM7.X)
众所周知,官方群晖DS918+可以用两条m.2 nvme固态硬盘做缓存盘,黑群晖也可以通过打补丁的方式支持用m.2 nvme固态硬盘做缓存盘。黑群晖其实还可以用m.2 nvme固态硬盘来做存储盘,在万兆网络里面可以提高内网复制文件的速度。本教程于DS918-6.2.3系统下测试通过。一、黑群晖打m.2 nvme补丁(如果已经打过补丁,此步骤跳过)1、如果DSM系统是918-6.23版本的,下载Nvme的补丁 libsynonvme.so.1( 点我下载)到电脑 ;2、把下载的文件复制到群晖的 /usr/lib64 目录下,,并设置成可执行的权限(此步骤需要用root权限);3、如果之前是6.22的版本,打过6.2.2的nvme补丁,需要进 /usr/local/etc/rc.d 文件夹,把 libNVMEpatch.sh 删除(如果没有打过上面的补丁,此步骤可以跳过);4、如果DSM系统是918-7.X版本的,需要先按照《黑群晖DS918-7.X开启NVME缓存的方法》修改系统文件;5、重启群晖,重启后在存储空间管理员—hdd/ssd,查看能否正确识别nvme固态硬盘。二、创建nvme存储盘(以下操作,都需要用root权限)1、输入命令查看NVME硬盘状态ls /dev/nvme*此时会显示所有的nvme固态硬盘,第一个为nvme0n1;2、查看第一个nvme固态硬盘信息fdisk -l /dev/nvme0n13、创建分区synopartition --part /dev/nvme0n1 12在第一块NVME的上创建分区输入“Y”,确认4、查看刚刚创建的分区fdisk -l /dev/nvme0n1查看第一块NVME的分区布局,没有问题5、查看当前储存池情况,记一下最后一个存储池的数字(比如我的是md2)cat /proc/mdstat6、创建NVME存储池mdadm --create /dev/md3 --level=1 --raid-devices=1 --force /dev/nvme0n1p3需要注意的是:需要在上一步骤显示的储存池数字基础上加1,作为nvme的存储池(所以是md3)输入“y”确认7、创建储存空间,btrfs格式和ext4格式,只能二选一:创建ext4格式请输入以下命令mkfs.ext4 -F /dev/md3创建btrfs格式请输入以下命令mkfs.btrfs -f /dev/md38、重启群晖;三、存储空间2就是nvme固态硬盘了,搞定!特别说明:如果你的群晖版本是DSM7.X版本,需要先按照《黑群晖DS918-7.X开启NVME缓存的方法》教程识别到nvme,才可以敲命令建立存储。
2023年06月23日
8 阅读
0 评论
0 点赞
2023-06-09
[AI]我的影子,我的自由
以下均为AI生成的虚假内容{lamp/}我有一个影子,它总是跟在我身后,无论我走到哪里,它都不会离开我。有时候,我觉得它很可爱,就像一个忠实的朋友,陪伴着我。有时候,我觉得它很烦人,就像一个拖油瓶,限制着我。我想要摆脱它,但是我做不到。它是我的影子,也是我的枷锁。我曾经问过我的影子,你为什么要跟着我?你有没有自己的想法和意志?你不觉得这样很无聊吗?我的影子沉默了一会儿,然后说:我是因为有所依赖才是这样的。我依赖你的身体和光线的角度,才能形成这样的形状和大小。如果没有你,我就不存在了。我所依赖的东西又有所依赖,你依赖空气和食物,光线依赖太阳和月亮。我们都是有所依赖的,没有谁能够完全自由。你问我有没有自己的想法和意志,其实我也不知道。我只是按照自然的规律而行动,没有刻意去思考或选择。或许这就是我的想法和意志吧。你说这样很无聊,其实我也不觉得。我觉得这样很安稳,没有什么风险和困难。我不需要担心未来或后悔过去,只需要顺应当下。听了我的影子的话,我感到很惊讶,也很困惑。原来我的影子也有自己的思想,虽然和我不一样。它对自己的状态很满意,也很理解自己的局限。它没有抱怨或反抗,也没有渴望或追求。它只是简单地存在着,跟随着我。而我呢?我对自己的状态并不满意,也不理解自己的局限。我常常抱怨或反抗,也常常渴望或追求。我想要更多的自由和选择,想要掌控自己的命运。但是这样做有什么意义呢?难道我就能比我的影子更自由吗?难道我就能摆脱所有的依赖吗?难道我就能找到真正的幸福吗?庄子在《齐物论》中讲了一个有趣又值得深思的故事。这个故事就是罔两问影。罔两是影子的影子。一天,影子的影子诘问影子:“影子啊!你看你,一会儿动一动,一会儿又不动;一会儿坐着,一会儿又站着。你能不能有独立的操守啊?”影子若有所思,它也很疑惑。它回答说:“这是怎么回事呢?我是因为有所依赖才是这样的吗?那我有所依赖的东西又有所依赖才是这样的吗?那我所依赖的像什么呢?是不是像蛇要游走需要依赖它的腹鳞,蝉要飞翔需要依赖它的翅膀吗?我分不清了。谁能告诉我?我怎能知道为什么会这样,又怎能知道为什么不会这样呢?”这个故事让我想起了我和我的影子的对话,也让我思考了什么是“不由自主”。我觉得“不由自主”并不是一种消极或被动的状态,而是一种顺应或认同的态度。我们都是在一定的条件和环境下生活,我们都有我们的依赖和局限,我们都不能完全控制自己的一切。但是我们可以选择如何看待自己的处境,如何对待自己的影子。我们可以把它们当作负担或敌人,也可以把它们当作伙伴或朋友。我们可以把它们视为障碍或困扰,也可以把它们视为机遇或启示。我们可以因为它们而感到沮丧或绝望,也可以因为它们而感到欣慰或感恩。我们可以试图摆脱或改变它们,也可以试图接受或理解它们。这就是我们的自由,也是我们的操守。我想,我的影子其实很聪明,它知道自己的本质和位置,它不会做超出自己能力和范围的事情,它也不会期待超出自己现实和理想的事情。它只是做好自己的本分,跟随着我。而我呢?我是否也能做到这样呢?我是否也能找到自己的本质和位置呢?我是否也能做好自己的本分,跟随着自然呢?我想,这就是我要学习的地方,也是我要追求的目标。我要学习我的影子,我的自由。
2023年06月09日
10 阅读
0 评论
0 点赞
2023-05-20
使用gapi的传统推理的简单示例
https://forum.opencv.org/t/simple-example-of-traditional-inference-using-gapi/2872 #include "opencv2/imgcodecs.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/gapi.hpp" #include "opencv2/gapi/core.hpp" #include "opencv2/gapi/imgproc.hpp" #include "opencv2/gapi/infer.hpp" #include "opencv2/gapi/infer/ie.hpp" #include "opencv2/gapi/cpu/gcpukernel.hpp" #include "opencv2/gapi/streaming/cap.hpp" // 命令行参数 const std::string about = "This is an OpenCV-based version of Security Barrier Camera example"; const std::string keys = "{ h help | | print this help message }" "{ input | | Path to an input img file }" "{ fdm | | IE face detection model IR }" "{ fdw | | IE face detection model weights }" "{ fdd | | IE face detection device }"; namespace custom { //! [G_API_NET] // 面部检测器:接受一个Mat,返回另一个Mat G_API_NET(Faces, <cv::GMat(cv::GMat)>, "face-detector"); // SSD后处理函数 - 这不是网络而是内核。 // 内核体单独声明,这只是一个接口。 // 此操作接受两个Mats(检测结果和源图像), // 并返回ROI的向量(由默认阈值过滤)。 // 阈值(或要选择的类)可能成为参数,但由于 // 此内核是自定义的,因此没有太大意义。 G_API_OP(PostProc, <cv::GArray<cv::Rect>(cv::GMat, cv::GMat)>, "custom.fd_postproc") { static cv::GArrayDesc outMeta(const cv::GMatDesc &, const cv::GMatDesc &) { // 此函数需要由G-API引擎确定 // 给定输入参数时输出格式是什么。 // 由于输出是数组(具有特定类型), // 因此没有什么可描述的。 return cv::empty_array_desc(); } }; // 上述内核的基于OpenCV的实现。 GAPI_OCV_KERNEL(OCVPostProc, PostProc) { static void run(const cv::Mat &in_ssd_result, const cv::Mat &in_frame, std::vector<cv::Rect> &out_faces) { const int MAX_PROPOSALS = 200; const int OBJECT_SIZE = 7; const cv::Size upscale = in_frame.size(); const cv::Rect surface({0,0}, upscale); out_faces.clear(); const float *data = in_ssd_result.ptr<float>(); for (int i = 0; i < MAX_PROPOSALS; i++) { const float image_id = data[i * OBJECT_SIZE + 0]; // batch id const float confidence = data[i * OBJECT_SIZE + 2]; const float rc_left = data[i * OBJECT_SIZE + 3]; const float rc_top = data[i * OBJECT_SIZE + 4]; const float rc_right = data[i * OBJECT_SIZE + 5]; const float rc_bottom = data[i * OBJECT_SIZE + 6]; if (image_id < 0.f) { // indicates end of detections break; } if (confidence < 0.5f) { // a hard-coded snapshot continue; } // 将浮点坐标转换为绝对图像 // 帧坐标;剪切源图像边界。 cv::Rect rc; rc.x = static_cast<int>(rc_left * upscale.width); rc.y = static_cast<int>(rc_top * upscale.height); rc.width = static_cast<int>(rc_right * upscale.width) - rc.x; rc.height = static_cast<int>(rc_bottom * upscale.height) - rc.y; out_faces.push_back(rc & surface); } } }; //! [Postproc] } // namespace custom int main(int argc, char *argv[]) { cv::CommandLineParser cmd(argc, argv, keys); cmd.about(about); if (cmd.has("help")) { cmd.printMessage(); return 0; } const std::string input = cmd.get<std::string>("input"); // 表达我们的处理管道。使用基于lambda的构造函数 // 用于在专用作用域中保留所有临时对象。 //! [GComputation] cv::GComputation pp([]() { // 声明一个空的GMat - 管道的开端。 cv::GMat in; // 在输入帧上运行面部检测。结果是一个单独的GMat, // 在内部表示1x1x200x7 SSD输出。 // 这是infer的单补丁版本: // - 推理在整个输入图像上运行; // - 图像自动转换并调整为网络预期的格式。 cv::GMat detections = cv::gapi::infer<custom::Faces>(in); // 使用自定义内核解析SSD输出到ROI(矩形)列表。 // 注意:解析SSD可能成为“标准”内核。 cv::GArray<cv::Rect> faces = custom::PostProc::on(detections, in); // 现在指定计算的边界 - 我们的管道消耗 // 一个图像并产生一个输出。 return cv::GComputation(cv::GIn(in), cv::GOut(faces)); }); //! [GComputation] // 注意:此时加载尺寸可能非常有用! // 在我们的计算定义之后,指定它应如何执行。 // 执行由我们用于编译管道(这是不同步骤)的推理后端和内核后端定义。 // 声明FaceDetection网络的IE参数。注意这里custom::Face // 是我们先前在GAPI_NETWORK()中指定的类型名称。 // cv::gapi::ie::Params<>是通用配置描述,它是 // 针对我们使用的每个特定网络进行专门化。 // // OpenCV DNN后端将具有其自己的带有设置的参数结构 // 与OpenCV DNN模块相关。其他可能的推理也适用 // 后端... //! [Param_Cfg] auto det_net = cv::gapi::ie::Params<custom::Faces> { cmd.get<std::string>("fdm"), // read cmd args: path to topology IR cmd.get<std::string>("fdw"), // read cmd args: path to weights cmd.get<std::string>("fdd"), // read cmd args: device specifier }; // 形成一个内核包(带有我们的单个基于OpenCV的后处理实现) // 和一个网络包(持有我们的三个网络)。 auto kernels = cv::gapi::kernels<custom::OCVPostProc>(); auto networks = cv::gapi::networks(det_net); { // inference ! // 声明我们将从管道接收的数据对象。 cv::Mat in_frame = cv::imread("input"); // the input ! // 捕获到的帧本身 std::vector<cv::Rect> faces; // 检测到的面部数组 pp.apply(cv::gin(in_frame), cv::gout(faces), cv::compile_args(kernels, networks)); // do something with the face rects } return 0; }
2023年05月20日
7 阅读
0 评论
0 点赞
2022-12-03
Labview Actor Frame Work练习5
Zyah Actor Framework Msg Forwarding Utility中接口的使用方式与范例理解
2022年12月03日
22 阅读
0 评论
0 点赞
2022-12-03
Labview Actor Frame Work练习4
使用Event Source Actor订阅-广播来代替Chat Room中的抽象消息
2022年12月03日
5 阅读
0 评论
0 点赞
1
2
3
4
5