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

华为 Ascend 平台 YOLOv5 目标检测推理教程

1. 背景介绍

随着人工智能技术的快速发展,目标检测在智能安防、自动驾驶、工业检测等领域中扮演了重要角色。YOLOv5 是一种高效的目标检测模型,凭借其速度和精度的平衡广受欢迎。

华为 Ascend 推理框架(ACL)是 Ascend CANN 软件栈的核心组件,专为 Ascend AI 加速硬件(如 Atlas 300I)设计,可实现高性能的深度学习推理。在本文中,我们将介绍如何基于华为 Ascend ACL 推理框架对 YOLOv5 模型进行推理,包括前处理、推理核心部分以及后处理流程。

2. YOLOv5 推理流程

YOLOv5 推理流程分为三个阶段:

  1. 前处理:将输入图片调整为模型要求的格式。
  2. 推理:调用 Ascend ACL 推理框架完成推理。
  3. 后处理:对推理结果进行解析,提取检测框。

接下来,我们将逐步解析这些流程,并结合核心代码进行说明。

2.1 前处理

YOLOv5 模型需要输入固定尺寸的图片(例如 1280x1280)。为了适配输入要求,我们采用 letterbox 方法对图片进行缩放和填充,以保持图像比例不变,并将其转换为 NumPy 数组。
代码示例:

import numpy as np
from typing import Tuple
from yolov5_utils import letterboxdef preprocess(self, img: np.ndarray) -> Tuple[np.ndarray, tuple, float, float]:# 调整图像大小并填充img, ratio, (pad_w, pad_h) = letterbox(img, (self.model_width, self.model_height))img = np.ascontiguousarray(img, dtype=np.uint8)tensor = np.expand_dims(img, axis=0)  # 添加 batch 维度return tensor

关键点:

  • letterbox:对图像进行缩放和填充,确保输入尺寸与模型要求一致,同时不改变图像的宽高比例。
  • np.expand_dims:扩展图像维度,增加批量维度([batch, channels, height, width])。

2.2 推理核心(process 方法)

推理核心是整个检测流程的关键部分,包括以下几个步骤:

  1. 设置推理上下文;
  2. 将输入数据从主机内存传输到设备内存(NPU);
  3. 调用推理引擎执行推理;
  4. 将推理结果从设备内存传回主机内存;
  5. 返回推理结果。

完整代码:

import acl
import aclruntime
import numpy as np
from typing import Listdef process(self, tensor: np.ndarray) -> List[np.ndarray]:# 1. 设置推理上下文ret = acl.rt.set_context(self.context)# 2. 将输入数据封装为 Tensor,并传输到设备tensor = aclruntime.Tensor(tensor)tensor.to_device(self.device)# 3. 执行推理output_tensors = self.session.run([node.name for node in self.session.get_outputs()], [tensor])# 4. 将推理结果从设备传回主机preds = []for output in output_tensors:output.to_host()preds.append(np.array(output))return preds

关键点解析:

  1. 上下文设置
    • 使用 acl.rt.set_context(self.context) 将推理会话绑定到 Ascend NPU 的计算上下文。
    • 如果上下文未正确设置,推理调用会失败。
  2. 设备内存传输
    • 使用 aclruntime.Tensor 封装 NumPy 输入数据。
    • 调用 to_device(self.device) 将数据加载到指定设备(NPU)。
  3. 推理执行
    • 调用 self.session.run 执行推理。
    • 输入参数为模型的输出节点名称和输入数据。
  4. 结果传回主机
    • 使用 to_host() 将推理结果从设备内存传回主机内存。
    • 转换为 NumPy 数组便于后续处理。

2.3 后处理

YOLOv5 的推理结果通常是一个多维张量,包含每个候选框的边界框坐标、置信度和类别信息。为了得到最终检测框,需要进行以下处理:

  1. 非极大值抑制(NMS):过滤重叠框,保留最佳检测结果。
  2. 坐标映射:将推理结果的坐标映射回原图尺寸。
    代码示例:
from yolov5_utils import non_max_suppression, scale_coordsdef postprocess(self, preds, img, tensor):# 后处理:NMS 和坐标映射boxes = non_max_suppression(preds[0], conf_thres=self.conf_threshold, iou_thres=self.iou_threshold)[0]if boxes.size > 0:boxes[:, :4] = scale_coords(tensor.shape[1:3], boxes[:, :4], img.shape).round()return boxes

关键点:

  • non_max_suppression:过滤重叠框,避免多个框重复检测同一目标。
  • scale_coords:将推理结果的坐标从模型输入尺寸映射回原图尺寸。

2.4 检测流程整合

以下是完整的检测流程代码:

import cv2
from typing import List, Tupledef run(self, img_path: str) -> List[Tuple]:# 1. 加载输入图片img = cv2.imread(img_path)# 2. 前处理tensor = self.preprocess(img)# 3. 模型推理preds = self.process(tensor)# 4. 后处理boxes = self.postprocess(preds, img, tensor)# 返回最终检测结果return [(int(box[0]), int(box[1]), int(box[2]), int(box[3]), round(box[4], 2), self.class_names[int(box[5])])for box in boxes]

2.5 调用示例

运行以下代码对图片进行目标检测:

if __name__ == "__main__":model_path = "yolov5_model.om"class_names = ["person", "car", "bicycle", "dog", "cat", ...]  # 替换为你的类别名称detector = YOLOv5Detector(model_path=model_path, class_names=class_names)image_path = "example.jpg"boxes = detector.run(image_path)# 绘制结果并保存img = cv2.imread(image_path)for box in boxes:x1, y1, x2, y2, conf, cls_name = boxcv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)cv2.putText(img, f'{cls_name} {conf:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)cv2.imwrite("detected_result.jpg", img)

3. 总结

本文介绍了如何基于华为 Ascend ACL 推理框架实现 YOLOv5 模型的目标检测推理流程。通过详细解析前处理、推理核心(process 函数)和后处理,展示了 Ascend 平台的推理能力和灵活性。

希望本文能为您在 Ascend 平台上的目标检测开发提供参考!如果有任何问题,欢迎留言讨论。

相关文章:

华为 Ascend 平台 YOLOv5 目标检测推理教程

1. 背景介绍 随着人工智能技术的快速发展,目标检测在智能安防、自动驾驶、工业检测等领域中扮演了重要角色。YOLOv5 是一种高效的目标检测模型,凭借其速度和精度的平衡广受欢迎。 华为 Ascend 推理框架(ACL)是 Ascend CANN 软件…...

16.好数python解法——2024年省赛蓝桥杯真题

问题描述 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位…)上的数字是奇数,偶数位(十位、千位、十万位…)上的数字是偶数,我们就称之为“好数”。 给定一个正整数N,请计算从1到N一共有多少个好数。 输入格式 一个整数N。 输出格式 一个整数代表答案。 样例输入 1 …...

在WSL使用gnome终端

默认在windows11环境下使用WSL会打开windows终端,如果想要使用gnome终端可以进行如下操作 确保 WSLg 已启用: WSLg 默认在 Windows 11 和最新版本的 WSL 2 中启用。 检查 WSL 版本: wsl --list --verbose 如果未启用 WSLg,请更…...

评估篇| 大模型评测综述

在传统的自然语言任务下,如分类等,经常会用精确率、F1等指标,来评测模型的好坏。随着大模型技术研究的快速发展,以往的指标,对于大模型评估显得过于单薄。如何准确地评估大语言模型在不同维度的能力水平,已经成为当前研究的热点问题。为了全面考察大语言模型的有效性,研…...

Ubuntu下载zenodo文件Ubuntu download zenodo

一般数据集文件会比较大,直接下载单个压缩包很慢。可以使用代码多线程下载小文件。 环境 Ubuntu22.04 示例代码 pip3 install zenodo_get zenodo_get https://zenodo.org/records/13715870参考 https://github.com/dvolgyes/zenodo_get...

OpenHarmony 5.0.2 Release来了!

版本概述 OpenHarmony 5.0.2 Release版本对标准系统的能力进行持续完善,以快速迭代的方式推出API 14,相比5.0.1 Release版本,重点做出了如下特性新增或增强: 进一步增强ArkUI、图形图像的能力,提供更多组件的高级属性…...

蓝桥杯3519 填充 | 分类讨论

题目传送门 很简单&#xff0c;遍历一次字符串&#xff0c;将‘?’作为0或1处理&#xff0c;发现00和11统计次数即可。 s str(input()) cnt 0 arr [00, 11, 0?, ?0, 1?, ?1, ??] i0 while i < len(s)-1:if s[i:(i2)] in arr:i 2cnt 1else:i 1 print(cnt)END✨...

均值(信息学奥赛一本通-1060)

【题目描述】 给出一组样本数据&#xff0c;包含n个浮点数&#xff0c;计算其均值&#xff0c;精确到小数点后4位。 【输入】 输入有两行&#xff0c;第一行包含一个整数n&#xff08;n小于100&#xff09;&#xff0c;代表样本容量&#xff1b;第二行包含n个绝对值不超过1000的…...

Windows Docker Desktop安装及使用 Docker 运行 MySQL

Docker Desktop是Docker的官方桌面版&#xff0c;专为Mac和Windows用户设计&#xff0c;提供了一个简单易用的界面来管理和运行Docker容器。它集成了Docker引擎&#xff0c;为开发人员提供了一个快速、可靠、可扩展的方式来构建、运行和管理应用。DockerDesktop的优势在于&…...

关于使用微服务的注意要点总结

一、防止过度设计 微服务的拆分一定要结合团队人员规模来考虑&#xff0c;笔者就曾遇到过一个公司的项目&#xff0c;是从外部采购回来的&#xff0c;微服务划分为十几个应用&#xff0c;我们在此项目基础上进行自行维护和扩展。由于公司业务规模不大&#xff0c;而且二次开发的…...

对于RocksDB和LSM Tree的一些理解

LSM Tree的读写过程 HBase、LevelDB&#xff0c;rocksDB&#xff08;是一个引擎&#xff09;底层的数据结构是LSM Tree适合写多读少的场景&#xff0c;都是追加写入内存中的MemTable&#xff0c;写入一条删除&#xff08;或修改&#xff09;标记&#xff0c;而不用去访问实际的…...

Pyecharts之特殊图表的独特展示

在数据可视化的世界里&#xff0c;除了常见的柱状图、折线图、饼图等&#xff0c;还有一些特殊的图表可以为我们带来独特的展示效果&#xff0c;帮助我们以更有趣、更直观的方式呈现数据。Pyecharts 为我们提供了多种特殊图表的绘制功能&#xff0c;本文将介绍象形图、水球图和…...

【Uniapp-Vue3】动态设置页面导航条的样式

1. 动态修改导航条标题 uni.setNavigationBarTitle({ title:"标题名称" }) 点击修改以后顶部导航栏的标题会从“主页”变为“动态标题” 2. 动态修改导航条颜色 uni.setNavigationBarColor({ backgroundColor:"颜色" }) 3. 动态添加导航加载动画 // 添加加…...

图像处理算法研究的程序框架

目录 1 程序框架简介 2 C#图像读取、显示、保存模块 3 C动态库图像算法模块 4 C#调用C动态库 5 演示Demo 5.1 开发环境 5.2 功能介绍 5.3 下载地址 参考 1 程序框架简介 一个图像处理算法研究的常用程序逻辑框架&#xff0c;如下图所示 在该框架中&#xff0c;将图像处…...

c语言操作符(详细讲解)

目录 前言 一、算术操作符 一元操作符&#xff1a; 二元操作符&#xff1a; 二、赋值操作符 代码例子&#xff1a; 三、比较操作符 相等与不相等比较操作符&#xff1a; 大于和小于比较操作符&#xff1a; 大于等于和小于等于比较操作符&#xff1a; 四、逻辑操作符 逻辑与&…...

神经网络|(四)概率论基础知识-古典概型

【1】引言 前序学习了线性回归的基础知识&#xff0c;了解到最小二乘法可以做线性回归分析&#xff0c;但为何最小二乘法如此准确&#xff0c;这需要从概率论的角度给出依据。 因此从本文起&#xff0c;需要花一段时间来回顾概率论的基础知识。 【2】古典概型 古典概型是我…...

省市区三级联动

引言 在网页中&#xff0c;经常会遇到需要用户选择地区的场景&#xff0c;如注册表单、地址填写等。为了提供更好的用户体验&#xff0c;我们可以实现一个三级联动的地区选择器&#xff0c;让用户依次选择省份、城市和地区。 效果展示&#xff1a; 只有先选择省份后才可以选择…...

阿里云服务器部署windows随手笔记(Vue+SpringBoot)

服务器管理 创建管理实例 阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 注意&#xff1a;需要开放端口&#xff1a; 点击实例ID/名称——安全组——安全组列表——管理规则—— 安全组详情——入方向——手动添加端口号&#xff08;例如目的8080&…...

79,【3】BUUCTF WEB [GXYCTF2019]BabysqliV3.0

进入靶场 现在做多了其他类型&#xff0c;老喜欢这个页面了&#xff0c;老朋友admin password 老规矩&#xff0c;桌面有啥就传啥 第一次点击上传什么都不显示 点了两次就有下面开头的那段话了 他在最后还偷偷骂了一句 确实连不上 再回顾一下题目 buuctf打不开了 只能看别人…...

【问题】Chrome安装不受支持的扩展 解决方案

此扩展程序已停用&#xff0c;因为它已不再受支持 Chromium 建议您移除它。详细了解受支持的扩展程序 此扩展程序已停用&#xff0c;因为它已不再受支持 详情移除 解决 1. 解压扩展 2.打开manifest.json 3.修改版本 将 manifest_version 改为3及以上 {"manifest_ver…...

【AI日记】25.01.25

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛&#xff1a;Forecasting Sticker Sales 读书 书名&#xff1a;法治的细节 律己 AI&#xff1a;8 小时&#xff0c;良作息&#xff1a;00:30-8:30&#xff0c; 良短视频&…...

C语言程序设计:算法程序的灵魂

文章目录 C语言程序设计&#xff1a;算法程序的灵魂算法数据结构程序数据结构算法数值运算算法非数值运算算法 简单的算法举例【例2.1】求12345【例2.2】有50个学生&#xff0c;要求输出成绩在80分以上的学生的学号和成绩 简单的算法举例【例2.3】判定2000—2500年中的每一年是…...

jupyter配置说明

使用以下命令修改jupyter的配置文件参数&#xff1a; vim /root/.jupyter/jupyter_lab_config.py #这里填写远程访问的IP名&#xff0c;填*则默认是主机IP名 c.ServerApp.ip * # 这里的密码填写上面生成的密钥 c.ServerApp.password ************************************…...

医学图像分割 sliver07_肝脏数据集处理

医学图像分割 sliver07_肝脏数据集处理 先简单介绍一下sliver07 数据集 Sliver07 数据集 Sliver07 (Segmentation of the Liver Competition 2007) 是由 MICCAI&#xff08;医学图像计算与计算机辅助干预学会&#xff09;组织的经典医学图像分割数据集&#xff0c;主要用于肝…...

1.25寒假作业

web&#xff1a;[UUCTF 2022 新生赛]ez_rce 打开环境&#xff0c;先理解代码&#xff0c;注重代码审计的能力 定义以get传参的方式传参code函数&#xff0c;所以后面我们肯定要以’code...‘的方式去实现操作&#xff0c;后面禁用了一系列的字符&#xff0c;包括执行函数和一些…...

gorm中关于事务的一些东西

对于赶时间friends,可以只看每个问题的前几点&#xff0c;不用看后面的代码示例&#xff01;&#xff01;&#xff01; 一. tx : db.Begin()开启事务后&#xff0c;怎么结束或者是关闭事务&#xff0c;是通过tx.Rollback()还是tx.Commit()&#xff1f; 在 GORM 中&#xff0c…...

【Flask】在Flask应用中使用Flask-Limiter进行简单CC攻击防御

前提条件 已经有一个Flask应用。已经安装了Flask和redis服务。 步骤1&#xff1a;安装Redis和Flask-Limiter 首先&#xff0c;需要安装redis和Flask-Limiter库。推荐在生产环境中使用Redis存储限流信息。 pip install redis Flask-Limiter Flask-Limiter会通过redis存储限…...

竞赛算法总结

滑动窗口 1. 数据规模通常是10的5次方 2. 通常用于与字串相关的问题 3. 通常与哈希表配合 查看当前元素的状态 蓝桥_15. 挑选子串-CSDN博客 蓝桥_全部都有的子序列-CSDN博客 ai总结: 滑动窗口算法虽然很强大,但它的解题思路和实现上也有一些关键点可以注意。以下是一…...

记交叉编译asio_dtls过程

虽然编译成功了&#xff0c;但是还是有一些不妥的地方&#xff0c;参考一下就行了。 比如库的版本选择就有待商榷&#xff0c;我这里不是按照项目作者的要求严格用对应的版本编译的&#xff0c;这里也可以注意一下。 编译依赖库asio 下载地址, 更正一下&#xff0c;我其实用…...

【PyCharm】将包含多个参数的 shell 脚本配置到执行文件来调试 Python 程序

要配置 PyCharm 以使用包含多个参数的 shell 脚本&#xff08;如 run.sh&#xff09;来调试 Python 程序&#xff0c;您可以按照以下步骤操作&#xff1a; 创建一个新的运行/调试配置&#xff1a; 在 PyCharm 中&#xff0c;点击“运行”菜单旁边的齿轮图标&#xff0c;选择“…...

PID如何调试,如何配置P,I,D值,如何适配pwm的定时器配置,如何给小车配电源

首先你要搞清楚PID公式原理 PID算法解析PID算法解析_pid滤波算法-CSDN博客 然后你要明白调试原理 首先要确定一个电源 电源决定了你后面调试时电机转动速度大小和pwm占空比的关系&#xff0c;电源电压越大那要转到同一速度所需的占空比越小&#xff0c;反之电源电压越小那要…...

微服务学习-Nacos 注册中心实战

1. 注册中心的设计思路 1.1. 微服务为什么会用到注册中心&#xff1f; 服务与服务之间调用需要有服务发现功能&#xff1b;例如订单服务调用库存服务&#xff0c;库存服务如果有多个&#xff0c;订单服务到底调用那个库存服务呢&#xff08;负载均衡器&#xff09;&#xff0…...

音频 PCM 格式 - raw data

文章目录 raw 音频格式&#xff1a;PCM其他音频格式&#xff1a;mp31. 无损压缩音频&#xff08;类比 PNG 图像&#xff09;2. 有损压缩音频&#xff08;类比 JPEG 图像&#xff09; 试了一下科大讯飞的音频识别云 api&#xff0c;踩了点坑 与本文无关&#xff1a;讯飞的 api 使…...

什么是波士顿矩阵,怎么制作?AI工具一键生成战略分析图!

当今商业环境瞬息万变&#xff0c;每个企业都面临着越来越多的挑战与机遇。如何科学合理地进行战略管理&#xff0c;成为了每个企业决策者必须直面的重要课题。 在众多战略管理框架中&#xff0c;波士顿矩阵作为一种经典的战略管理工具&#xff0c;因其简洁明了的分析方式而广…...

基于微信小程序的助农扶贫系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Maui学习笔记-SignalR简单介绍

SignalR是ASP.NET Core中的一个库,支持服务器与其连接的客服端之间的双象通信,它允许服务器立即将更新的消息推送到客服端,而不是要求客户端轮询服务器来获取更新 创建项目 使用SignalR在服务器实时发送消息给客服端,客服端拿到消息后在UI页面更新 首先创建一个Web API项目 …...

【学习笔记】深度学习网络-深度前馈网络(MLP)

作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程&#xff0c;深度学习领域研究生必读教材),开始深度学习领域学习&#xff0c;深入全面的理解深度学习的理论知识。 在之前的文章中介绍了深度学习中用…...

C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示

上一篇&#xff1a; C#&#xff0c;入门教程(04)——Visual Studio 2022 数据编程实例&#xff1a;随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码&#…...

每日进步一点点(网安)

1.1 level5 查看源码关键部分 $str strtolower($_GET["keyword"]); $str2str_replace("<script","<scr_ipt",$str); $str3str_replace("on","o_n",$str2);<input namekeyword value".$str3.">关键…...

代理模式 - 代理模式的应用

引言 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你提供一个代理对象来控制对另一个对象的访问。代理对象通常会在客户端和目标对象之间起到中介的作用&#xff0c;从而可以在不改变目标对象的情况下&#xff0c;增加额外的功能或控…...

机器学习-线性回归(对于f(x;w)=w^Tx+b理解)

一、&#x1d453;(&#x1d499;;&#x1d498;) &#x1d498;T&#x1d499;的推导 学习线性回归&#xff0c;我们那先要对于线性回归的表达公示&#xff0c;有所认识。 我们先假设空间是一组参数化的线性函数&#xff1a; 其中权重向量&#x1d498; ∈ R&#x1d437; …...

【Salesforce】审批流程,代理登录 tips

审批流程权限 审批流程权限问题解决方案代理登录代理登录后Logout 审批流程权限 前几天&#xff0c;使用审批流程&#xff0c;但是是两个sandbox&#xff0c;同样的配置&#xff0c;我有管理员权限。但是profile不是管理员&#xff0c;只是通过具备管理员权限的permission set…...

第20篇:Python 开发进阶:使用Django进行Web开发详解

第20篇&#xff1a;使用Django进行Web开发 内容简介 在上一篇文章中&#xff0c;我们深入探讨了Flask框架的高级功能&#xff0c;并通过构建一个博客系统展示了其实际应用。本篇文章将转向Django&#xff0c;另一个功能强大且广泛使用的Python Web框架。我们将介绍Django的核…...

Elastic Agent 对 Kafka 的新输出:数据收集和流式传输的无限可能性

作者&#xff1a;来 Elastic Valerio Arvizzigno, Geetha Anne 及 Jeremy Hogan 介绍 Elastic Agent 的新功能&#xff1a;原生输出到 Kafka。借助这一最新功能&#xff0c;Elastic 用户现在可以轻松地将数据路由到 Kafka 集群&#xff0c;从而实现数据流和处理中无与伦比的可扩…...

IPoIB(IP over InfiniBand)数据接收与发送机制详解

IPoIB&#xff08;IP over InfiniBand&#xff09;是一种在InfiniBand网络上实现IP协议的技术&#xff0c;它允许在InfiniBand网络上传输IP数据包。IPoIB通过将IP数据包封装在InfiniBand的数据包中&#xff0c;实现了在InfiniBand网络上的高效通信。本文将详细分析IPoIB如何接收…...

快速更改WampServer根目录php脚本

快速更改WampServer根目录php脚本 <?php // 配置文件地址 $apacheConfPath C:\Install\CTF\Wampserver\bin\apache\apache2.4.62.1\conf\httpd.conf; $apacheConfPath2 C:\Install\CTF\Wampserver\bin\apache\apache2.4.62.1\conf\extra\httpd-vhosts.conf; // 新根目录…...

C#,入门教程(08)——基本数据类型及使用的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(07)——软件项目的源文件与目录结构https://blog.csdn.net/beijinghorn/article/details/124139947 数据类型用于指定数据体&#xff08;DataEntity&#xff0c;包括但不限于类或结构体的属性、变量、常量、函数返回值&#xff09;…...

【自定义函数】编码-查询-匹配

目录 自定义编码匹配编码匹配改进 sheet来源汇总来源汇总改进 END 自定义编码匹配 在wps vb环境写一个新的excel函数名为编码匹配&#xff0c;第一个参数指定待匹配文本所在单元格&#xff08;相对引用&#xff09;&#xff0c;第二个参数指定关键词区域&#xff08;绝对引用&…...

docker-制作镜像gcc添加jdk运行java程序

最近的项目需要使用java调用c的链接库&#xff0c;.OS文件&#xff0c;一开始准备在jdk的镜像下去安装c的环境&#xff0c;不过安装的内容很多&#xff0c;比较复杂也容易缺很多的包&#xff0c;经过实验&#xff0c;我们决定使用gcc的镜像安装jdk来正确的运行java程序。 基础镜…...

工业相机 SDK 二次开发-Sherlock插件

本文介绍了 sherlock 连接相机时的插件使用。通过本套插件可连接海康的工业相机。 一&#xff0e;环境配置 1. 拷贝动态库 在用户安装 MVS 目录下按照如下路径 Development\ThirdPartyPlatformAdapter 找到目 录为 DalsaSherlock 的文件夹&#xff0c;根据 Sherlock 版本找到…...