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

从ground_truth mask中获取图像的轮廓图

引言 在图像取证领域,主要分为检测和定位两个方面。检测就是判断一张图片是否为伪造图,定位与传统意义上的语义分割任务相近,就是定位伪造像素的区域。如果单纯使用语义分割网络训练,只能获得次优解,而像多任务学习那样结合边缘检测的网络分支则可以实现较好的检测和定位效果。边缘检测就需要获取从ground_truth mask中获取图像的轮廓信息。在本文中主要讲解如何用open-cv 的built-in内置形态学函数获取轮廓图以及一篇文章IML-ViT: Benchmarking Image Manipulation Localization by Vision Transformer编写的代码获取轮廓图。

文章目录

  • 一、Open-CV库获取edge mask
    • 1.1 erosion操作
    • 1.2 dilation操作
    • 1.3 edge mask操作
    • 1.4 open操作
    • 1.5 close 操作
  • 二、IML-ViT获取edge mask
    • 2.1 核心操作详解
    • 2.2 完整流程图展示
    • 2.3完整代码展示

一、Open-CV库获取edge mask

要想从掩码图像(ground_truth mask)中获取edge mask,其实质就是对掩码图进行膨胀操作和腐蚀操作,然后用膨胀图减去腐蚀图就可以获得边缘掩码图。为让大家更好的了解腐蚀和膨胀是怎么实现的。本章将详细展示每个操作的可视化结果展示

1.1 erosion操作

(1)腐蚀操作函数

cv2.erode(src: UMat, kernel: UMat, iterations)

src:要求传入的图像
kernel:进行卷积运算的卷积核,一般长宽为奇数的全1矩阵
腐蚀操作实质就是用卷积核对二值掩码图像(白色为1,黑色为0)进行加法运算操作,当二值图像和卷积核覆盖区域都是1时值为1,否则值为0。

(2)操作样例

	raw_img = np.array(Image.open('./test_1.png'))imgs = [raw_img]kernel_sizes = [0]for i in range(3,13,2):kernel = np.ones((i,i),np.uint8)img_ero = cv2.erode(raw_img,kernel,iterations=1)imgs.append(img_ero)kernel_sizes.append(i)plt.subplot(2, 3, 1)plt.title('raw image')plt.imshow(imgs[0], cmap='gray')for i in range(1,6):plt.subplot(2,3,i+1)plt.title(f'kernel_size {kernel_sizes[i]}')plt.imshow(imgs[i],cmap='gray')plt.show()

在这里插入图片描述

卷积核越大,图像腐蚀的越严重,图像中小的白色区域变成黑色。

1.2 dilation操作

(1)膨胀操作函数

cv2.dilate(src: UMat, kernel: UMat, iterations)

src:要求传入的图像
kernel:进行卷积运算的卷积核,一般长宽为奇数的全1矩阵
膨胀操作则与腐蚀操作相反,实质就是用卷积核对二值掩码图像(白色为1,黑色为0)进行加法运算操作,当二值图像和卷积核覆盖区域只要有1时就为1。

(2)操作样例

	raw_img = np.array(Image.open('./test_1.png'))imgs = [raw_img]kernel_sizes = [0]for i in range(3,13,2):kernel = np.ones((i,i),np.uint8)img_dil = cv2.dilate(raw_img,kernel,iterations=1)imgs.append(img_dil)kernel_sizes.append(i)plt.subplot(2, 3, 1)plt.title('raw image')plt.imshow(imgs[0], cmap='gray')for i in range(1,6):plt.subplot(2,3,i+1)plt.title(f'kernel_size {kernel_sizes[i]}')plt.imshow(imgs[i],cmap='gray')plt.show()

在这里插入图片描述
卷积核越大,图像膨胀越严重,图像中白色区域范围变大。

1.3 edge mask操作

(1)轮廓图操作函数
获取二值掩码的轮廓区域,主要就是采用膨胀图减去腐蚀图

edge mask = dilate-erode

此外也可以直接采用形态梯度(Morphological Gradient)函数获取轮廓图

cv2.morphologyEx(raw_img,cv2.MORPH_GRADIENT,kernel)

(2)操作样例

    raw_img = np.array(Image.open('./test_1.png'))plt.subplot(1, 5, 1)plt.title('raw image')plt.imshow(raw_img, cmap='gray')kernel = np.ones((5, 5), np.uint8)img_erd = cv2.erode(raw_img,kernel,iterations=1)plt.subplot(1, 5, 2)plt.title(f'erode image')plt.imshow(img_erd, cmap='gray')img_dil = cv2.dilate(raw_img,kernel,iterations=1)plt.subplot(1, 5, 3)plt.title(f'dilate image')plt.imshow(img_dil, cmap='gray')edge_img = img_dil-img_erdplt.subplot(1, 5, 4)plt.title(f'edge image')plt.imshow(edge_img, cmap='gray')gradient_img = cv2.morphologyEx(raw_img,cv2.MORPH_GRADIENT,kernel)plt.subplot(1, 5, 5)plt.title('gradient image')plt.imshow(gradient_img, cmap='gray')plt.show()

在这里插入图片描述

1.4 open操作

(1)open操作函数
open操作主要用于去除噪声(椒盐噪声中的白色噪点),缺点是影响图像中的白色区域。具体操作是先进行腐蚀操作随后进行膨胀操作。

open = dilate(erode(src))

也可以直接使用以下命令

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

(2)操作样例

	raw_img = np.array(Image.open('./test_1.png'))plt.subplot(1, 3, 1)plt.title('raw image')plt.imshow(raw_img, cmap='gray')kernel = np.ones((5, 5), np.uint8)img_erd = cv2.erode(raw_img,kernel,iterations=1)img_open = cv2.dilate(img_erd,kernel,iterations=1)plt.subplot(1, 3, 2)plt.title('open_e_d image')plt.imshow(img_open, cmap='gray')opening = cv2.morphologyEx(raw_img, cv2.MORPH_OPEN, kernel)plt.subplot(1, 3, 3)plt.title('open image')plt.imshow(opening, cmap='gray')plt.show()

在这里插入图片描述
(3)不同尺寸卷积核的open操作样例

	raw_img = np.array(Image.open('./test_1.png'))plt.subplot(2, 3, 1)plt.title('raw image')plt.imshow(raw_img, cmap='gray')imgs = [raw_img]kernel_sizes = [0]for i in range(3,13,2):kernel = np.ones((i,i),np.uint8)img_open = cv2.morphologyEx(raw_img, cv2.MORPH_OPEN, kernel)imgs.append(img_open)kernel_sizes.append(i)plt.subplot(2, 3, 1)plt.title('raw image')plt.imshow(imgs[0], cmap='gray')for i in range(1,6):plt.subplot(2,3,i+1)plt.title(f'kernel_size {kernel_sizes[i]}')plt.imshow(imgs[i],cmap='gray')plt.show()

在这里插入图片描述
卷积核越大,白色区域越小

1.5 close 操作

(1)close操作函数
close操作主要用于填充操作,缺点是影响图像中的黑色区域,会将非黑噪声区域当做噪声处理。具体操作是先进行膨胀操作随后进行腐蚀操作。

close = erode(dilate(src))

也可以直接使用以下命令

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

(2)操作样例

	raw_img = np.array(Image.open('./test_1.png'))plt.subplot(2, 3, 1)plt.title('raw image')plt.imshow(raw_img, cmap='gray')imgs = [raw_img]kernel_sizes = [0]for i in range(3,13,2):kernel = np.ones((i,i),np.uint8)img_close = cv2.morphologyEx(raw_img, cv2.MORPH_CLOSE, kernel)imgs.append(img_close)kernel_sizes.append(i)plt.subplot(2, 3, 1)plt.title('raw image')plt.imshow(imgs[0], cmap='gray')for i in range(1,6):plt.subplot(2,3,i+1)plt.title(f'kernel_size {kernel_sizes[i]}')plt.imshow(imgs[i],cmap='gray')plt.show()

在这里插入图片描述

二、IML-ViT获取edge mask

下面一边讲解核心代码操作流程,一边用示意图展示增强代码可解释性,代码具体细节大家可以阅读代码自己了解掌握,不做过多赘述。

2.1 核心操作详解

(1)对图像进行预处理,取值范围变成[0~1],原始图像预处理后的示意图如图(a),像素1代表目标(用蓝色框),像素0代表背景(用白色框)。
在这里插入图片描述
(2)对预处理后的图像image(取值范围0~1),进行膨胀操作,核心代码语句

dilate = self._dilate(image, kernel_size=kernel_size)

膨胀后的图像如图(b),像素1的范围扩大,额外增加区域用灰色框标注。
在这里插入图片描述
(3)用1-org_image,示意图©,'-'表示‘-1’。
在这里插入图片描述

(4)对1-org_image图像进行dilate膨胀操作等同于erosion腐蚀,结果图如图(d)所示。灰色框表示被腐蚀区域。

erosion = self._dilate(1 - image, kernel_size=kernel_size)

在这里插入图片描述
(5)腐蚀后的图-膨胀后的图,获取边缘信息。
但是对获取的边缘信息又进行三步处理:取绝对值、取反和+1操作,才可以获得想要的轮廓图。通过流程图可以让大家更直观了解每一步的结果

diff = -torch.abs(erosion - dilate) + 1

先进行erosion(d) - dilate(b)操作,结果如图(e)。灰色框为轮廓区域,‘-‘表示’-1’。

在这里插入图片描述
对结果图(e)取绝对值后取反变成(f),
在这里插入图片描述
对示意图(f)进行’+1’操作,相当于将轮廓区域变成1,其他区域为0。结果为示意图(g)
在这里插入图片描述

2.2 完整流程图展示

在这里插入图片描述

2.3完整代码展示

class EdgeGenerator(torch.nn.Module):"""generate the 'edge bar' for a 0-1 mask Groundtruth of a imageAlgorithm is based on 'Morphological Dilation and Difference Reduction'Which implemented with fixed-weight Convolution layer with weight matrix looks like a cross,for example, if kernel size is 3, the weight matrix is:[[0, 1, 0],[1, 1, 1],[0, 1, 0]]"""def __init__(self, kernel_size=3) -> None:super().__init__()self.kernel_size = kernel_sizedef _dilate(self, image, kernel_size=3):"""Doings dilation on the imageArgs:image (_type_): 0-1 tensor in shape (B, C, H, W)"""assert kernel_size % 2 == 1, "Kernel size must be odd"assert image.shape[2] > kernel_size and image.shape[3] > kernel_size, "Image must be larger than kernel size"# kernel = torch.zeros((1, 1, kernel_size, kernel_size))# kernel[0, 0, kernel_size // 2: kernel_size // 2 + 1, :] = 1# kernel[0, 0, :, kernel_size // 2: kernel_size // 2 + 1] = 1kernel = torch.ones((1, 1, kernel_size, kernel_size))kernel = kernel.float()# print(kernel)res = F.conv2d(image, kernel.view([1, 1, kernel_size, kernel_size]), stride=1, padding=kernel_size // 2)return (res > 0) * 1.0def _find_edge(self, image, kernel_size=3, return_all=False):"""Find 0-1 edges of the imageArgs:image (_type_): 0-1 ndarray in shape (B, C, H, W)"""image = torch.as_tensor(image).float()shape = image.shapeif len(shape) == 2:image = image.reshape([1, 1, shape[0], shape[1]])if len(shape) == 3:image = image.reshape([1, shape[0], shape[1], shape[2]])assert image.shape[1] == 1, "Image must be single channel"img = self._dilate(image, kernel_size=kernel_size)erosion = self._dilate(1 - image, kernel_size=kernel_size)diff = -torch.abs(erosion - img) + 1diff = (diff > 0) * 1.0# res = dilate(diff)diff = diff.numpy()if return_all:return diff, img, erosionelse:return diffdef forward(self, x, return_all=False):"""Args:image (_type_): 0-1 ndarray in shape (B, C, H, W)"""return self._find_edge(x, self.kernel_size, return_all=return_all)if __name__ == '__main__':img_path = r'./test_1.png'raw_img = np.array(Image.open('./test_1.png'))img = (raw_img>127)*1.0edge_generator = EdgeGenerator(kernel_size=5)edge, img_dilate, img_erosion = edge_generator(img[None,None,:,:],return_all=True)print(edge.shape)plt.imshow(edge[0,0],cmap='gray')plt.show()

相关文章:

从ground_truth mask中获取图像的轮廓图

引言 在图像取证领域,主要分为检测和定位两个方面。检测就是判断一张图片是否为伪造图,定位与传统意义上的语义分割任务相近,就是定位伪造像素的区域。如果单纯使用语义分割网络训练,只能获得次优解,而像多任务学习那样…...

Java项目实战II基于微信小程序的旅游社交平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网的迅猛发展,旅游已经成为人…...

开源即时通讯与闭源即时通讯该怎么选择,其优势是什么?

在选择即时通讯软件时,应根据企业的经营领域来选择适合自身需求的开源或闭源方案。不同领域对开源和闭源即时通讯的理念存在差异,因此总结两个点简要分析这两种选择,有助于做出更明智的决策。 一、开源与闭源的根本区别在于软件的源代码是否…...

【计算机网络】实验15:VLAN间通信的实现方法“单臂路由”

实验15 VLAN间通信的实现方法“单臂路由” 一、实验目的 加深对VLAN间通信的实现方法“单臂路由”的理解。 二、实验环境 Cisco Packet Tracer模拟器 三、实验过程 1.构建网络拓扑,并配置好主机的IP地址、子网掩码、默认网关,如图1,2所…...

数据库学习记录04

DDL【数据定义语言】 MySQL命名规则 数据库名不得超过30个字符,变量名限制为29个必须只能包含A-Z,a-z,0-9,_共63个字符不能在对象名的字符间留空格必须不能和用户定义的其他对象重名必须保证你的字段没有和保留字、数据库系统或常用方法冲突保持字段名和类型的一致…...

PDF文件打开之后不能打印,怎么解决?

正常的PDF文件是可以打印的,如果PDF文件打开之后发现文件不能打印,我们需要先查看一下自己的打印机是否能够正常运行,如果打印机是正常的,我们再查看一下,文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…...

A* 算法 是什么?

A*(A-star)算法是一种启发式搜索算法,用于在图或网格中找到从起点到目标的最短路径。它被广泛用于路径规划问题,例如导航、游戏开发中的角色移动,以及机器人路径规划。 1. A 算法的基本概念* A* 算法结合了两种经典搜…...

ORM框架详解:为什么不直接写SQL?

想象一下,你正在开发一个小型的在线书店应用。你需要存储书籍信息、用户数据和订单记录。作为一个初学者,你可能会想:“我已经学会了SQL,为什么还要使用ORM框架呢?直接写SQL语句不是更简单、更直接吗?” 如…...

厘米级高精度RTK手持终端北斗卫星定位手持pda

RTK是一种测量技术叫“载波相位差分技术”,是实时处理两个测量站载波相位观测量的差分方法,将基准站采集的载波相位发给用户接收机,进行求差解算坐标,以此得到高精度坐标。随着技术的不断革新,GPS接收机也由原来只能用…...

Kafka-Connect源码分析

一、上下文 《Kafka-Connect自带示例》中我们尝试了零配置启动producer和consumer去生产和消费数据,那么它内部是如何实现的呢?下面我们从源码来揭开它神秘的面纱。 二、入口类有哪些? 从启动脚本(connect-standalone.sh&#…...

【STM32 Modbus编程】-作为主设备读取保持/输入寄存器

作为主设备读取保持/输入寄存器 文章目录 作为主设备读取保持/输入寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、读保持寄存器2.1 主设备发送请求2.2 从设备响应请求2.3 主机接收数据3、读输入寄存器4、结果4.1 保持寄存器4.2 输入寄存器在前面的…...

Kubesphere上搭建redis集群

Kubesphere上搭建redis集群 版本:redis:6.2.3 1)挂载配置 redis.conf: cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-require-full-coverage no cluster-migration-barrier 1 appendonly yes …...

learn-(Uni-app)跨平台应用的框架

使用 Vue.js 开发所有前端应用的框架,开发者编写一份代码,可发布到iOS、Android、Web(包括微信小程序、百度小程序、支付宝小程序、字节跳动小程序、H5、App等)等多个平台。 跨平台:Uni-app 支持编译到iOS、Android、W…...

target_compile_definitions

这个接口给目标定义的宏,不能像C中定义的宏一样,尝试利用宏进行替换: cmake_minimum_required(VERSION 3.8) project(compile_definitions_pro)add_executable(main_exec src/main.cpp)set(SYSTEM_NAME "") if(CMAKE_SYSTEM_NAME S…...

浏览器同源策略、跨域、跨域请求,服务器处理没、跨域解决方案

目录 什么是同源策略什么是跨域发生跨域时,服务器有没有接到请求并处理响应:(两种情况) 如何解决跨域 什么是同源策略 概念: 同源策略是浏览器的一种安全机制,用于防止恶意网站对用户的敏感数据进行未经授…...

深入理解网络安全等级保护:保障信息安全的关键策略与实践

随着信息技术的飞速发展,网络安全问题日益凸显。为了应对这一挑战,网络安全等级保护制度应运而生,旨在确保不同等级的信息和信息系统的安全。本文将探讨网络安全等级保护的基本概念、重要性及其实践方法。 一、信息安全等级保护的基本概念 1…...

MySQL

InnoDB 引擎底层存储和缓存原理 到目前为止,MySQL 对于我们来说还是一个黑盒,我们只负责使用客户端发 送请求并等待服务器返回结果,表中的数据到底存到了哪里?以什么格式存放的? MySQL 是以什么方式来访问的这些数据&…...

新书速览|循序渐进Node.js企业级开发实践

《循序渐进Node.js企业级开发实践》 1 本书内容 《循序渐进Node.js企业级开发实践》结合作者多年一线开发实践,系统地介绍了Node.js技术栈及其在企业级开发中的应用。全书共分5部分,第1部分基础知识(第1~3章)&#xf…...

2024三掌柜赠书活动第三十五期:Redis 应用实例

目录 前言 Redis操作都会,却不知道怎么用? 关于《Redis 应用实例》 编辑推荐 内容简介 作者简介 图书目录 《Redis 应用实例》全书速览 拓展:Redis使用场景 实例1:缓存应用 场景描述 实现方法 具体代码示例 实例2&a…...

Android 第三方框架:RxJava:源码分析:观察者模式

文章目录 观察者模式RxJava中的观察者模式总结 ​​​​​​​​​​​​​​观察者模式​​​​​​​ RxJava中的观察者模式 以Observable、ObservableOnSubscribe、Observer为例 Observable是被观察者 负责发射事件或数据 Observer是观察器 负责对从被观察者中获取的数…...

开源模型应用落地-安全合规篇-用户输入价值观判断(四)

一、前言 在深度合规功能中,对用户输入内容的价值观判断具有重要意义。这一功能不仅仅是对信息合法性和合规性的简单审核,更是对信息背后隐含的伦理道德和社会责任的深刻洞察。通过对价值观的判断,系统能够识别可能引发不当影响或冲突的内容,从而为用户提供更安全、更和谐的…...

【js逆向专题】13.jsvmp补环境篇一

目录 一.了解jsvmp技术1. js虚拟机保护方案2.jsvmp实现原理3. 模拟jsvmp执行过程 二.环境检测1. 什么是环境检测2.案例讲解 三. 项目实战1. 案例11.逆向目标2. 项目分析1.补第一个referrer2. 调试技巧13. 调试技巧24. 补充sign5. 补 length6. 参数长短补充 3. 逆向结果 2. 案例…...

Java---每日小题

题目1-极大极小游戏 给你一个下标从 0 开始的整数数组 nums ,其长度是 2 的幂。 对 nums 执行下述算法: 设 n 等于 nums 的长度,如果 n 1 ,终止 算法过程。否则,创建 一个新的整数数组 newNums ,新数组长度…...

leetcode 23. 合并 K 个升序链表

给你一个链表数组,每个链表都已经按升序排列。 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [1->4->5,1->3->4,2->6 ] 将它们合并到一个有序链表中得到。 1->…...

Windows 小记 6 -- 为什么我的全局消息钩子卸载不掉?

Hook dll 在其消息循环中被卸载。强制它们进入消息循环有助于卸载它们。在 UnhookWindowsHookEx 之后添加此代码以强制唤醒所有消息循环: DWORD dwResult; SendMessageTimeout(HWND_BROADCAST, WM_NULL, 0, 0, SMTO_ABORTIFHUNG|SMTO_NOTIMEOUTIFNOTHUNG, 1000, &a…...

Python+onlyoffice 实现在线word编辑

onlyoffice部署 version: "3" services:onlyoffice:image: onlyoffice/documentserver:7.5.1container_name: onlyofficerestart: alwaysenvironment:- JWT_ENABLEDfalse#- USE_UNAUTHORIZED_STORAGEtrue#- ONLYOFFICE_HTTPS_HSTS_ENABLEDfalseports:- "8080:8…...

LC低通滤波器Bode图分析(传递函数零极点)

LC低通滤波器 我们使得L4.7uH,C220uF;电感L的阻抗为Xl;电容C的阻抗为Xc; 传递函数 H ( s ) u o u i X C X C X L 1 s C 1 s C s L 1 1 s 2 L C (其中 s j ω ) H(s)\frac{u_{o} }{u_{i} } \frac{…...

【机器学习】机器学习的基本分类-无监督学习(Unsupervised Learning)

无监督学习(Unsupervised Learning) 无监督学习是一种机器学习方法,主要用于没有标签的数据集。其目标是从数据中挖掘出潜在的结构和模式。常见的无监督学习任务包括 聚类、降维、密度估计 和 异常检测。 1. 无监督学习的核心目标 1.1 聚类…...

六、docker compose单机容器编排工具

六、docker compose单机容器编排工具 6.1 compose简介 Compose是一个用于定义和运行多容器Docker应用程序的工具。您可以使用Compose文件来配置应用程序的服务,然后使用单个命令从配置中创建并启动所有服务。compose的配置文件示例如下 compose的github网址&#…...

Python3 operator 模块

Python2.x 版本中,使用 cmp() 函数来比较两个列表、数字或字符串等的大小关系。 Python 3.X 的版本中已经没有 cmp() 函数,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象,包含的方法有: o…...

沪合共融 “汽”势如虹 | 昂辉科技参加合肥上海新能源汽车产业融合对接会

为积极响应制造业重点产业链高质量发展行动号召,促进合肥、上海两地新能源汽车产业链上下游企业融合对接、协同发展,共同打造长三角世界级新能源汽车产业集群,11月28日,合肥市工信局组织部分县区工信部门及全市30余户新能源汽车产…...

访问http网页强制跳转到了https的解决办法

目录 解决浏览器自动从 HTTP 重定向到 HTTPS 的问题问题原因:HSTS(HTTP Strict Transport Security)什么是 HSTS?HSTS 的工作原理 如何解决?1. 清除浏览器的 HSTS 信息在 Chrome 中清除 HSTS 信息:在 Firef…...

PDF处理的创新工具:福昕低代码平台尝鲜

在当今数字化时代,PDF文件的处理和管理变得越来越重要。福昕低代码平台是新发布的一款创新的工具,旨在简化PDF处理和管理的流程。通过这个平台,用户可以通过简单的拖拽界面上的按钮,轻松完成对Cloud API的调用工作流,而…...

EmoAva:首个大规模、高质量的文本到3D表情映射数据集。

2024-12-03,由哈尔滨工业大学(深圳)的计算机科学系联合澳门大学、新加坡南洋理工大学等机构创建了EmoAva数据集,这是首个大规模、高质量的文本到3D表情映射数据集,对于推动情感丰富的3D头像生成技术的发展具有重要意义…...

SpringMVC ——(1)

1.SpringMVC请求流程 1.1 SpringMVC请求处理流程分析 Spring MVC框架也是⼀个基于请求驱动的Web框架,并且使⽤了前端控制器模式(是⽤来提供⼀个集中的请求处理机制,所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计,再根据请求…...

测试工具LoadRunner Professional脚本编写-脚本设置

勾选扩展日志-全选 原因:在并发完成后,通过抽查关键用户日志的方式,检查参数化是否如预期一致,比如抽查用户1(仓库一,物品一),用户11(仓库二,物品一),用户100(仓库十,物品十) 设置忽略思考时间 原因:是否忽略思考时间,请求数可能会有几十倍的差距…...

运用蓝光三维扫描仪的艺术与科技的完美融合-石膏头像模型3D扫描真实复刻

石膏头像具有独特的魅力,每一处细节都彰显着艺术之美。无论是深邃的眼神,还是精致的轮廓,都让人陶醉其中。 随着雕塑形式的日渐丰富,越来越多的新材料和新的塑造手法被运用到雕塑创作中,蓝光三维扫描技术的应用&#…...

文本域设置高度 加上文字限制并show出来:

文本域设置高度 :rows"4" 加上文字限制并show出来&#xff1a; maxlength"30" show-word-limit 效果: <el-form-item label"产品备注" prop"remark"><el-input v-model"form.remark" type"textarea"…...

探索数据确权、隐私保护、安全共享等方面的挑战与解决方案

在数据确权、隐私保护、安全共享等方面&#xff0c;当前确实面临着诸多挑战&#xff0c;同时也存在一些有效的解决方案。以下是对这些方面的详细探讨&#xff1a; 一、数据确权 挑战 权属关系模糊&#xff1a;由于数据具有复杂性和隐蔽性等特点&#xff0c;使得数据的权属关…...

麒麟 V10(ky10.x86_64)无网环境下 openssl - 3.2.2 与 openssh - 9.8p1 升级【最全教程】

目录 背景 安装包下载 上传解压安装包 安装zlib 安装OpenSSL 安装OpenSSH 验证 背景 近期&#xff0c;项目上线已进入倒计时阶段&#xff0c;然而在至关重要的安全检查环节中&#xff0c;却惊现现有的 OpenSSH 存在一系列令人担忧的漏洞&#xff1a; OpenSSH 资源管理错…...

前端技术(23) : 聊天页面

来源: GPT生成之后微调 效果图 HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>聊天</t…...

ArcMap 处理河道坡度、计算污染区、三维爆炸功能

ArcMap 处理河道坡度、计算污染区、三维爆炸功能今天分析 一、计算河道方向坡度 1、折线转栅格 确定 2、提取河道高程值 确定后展示河流的高程值 3、计算坡向数据 确定后展示 4、计算坡度数据 确定后展示 二、计算上游集水区污染值 1、填挖处理 确定 2、计算流向 确定 3、计算…...

数据结构 (30)计算式查找法——哈希法

前言 数据结构中的计算式查找法&#xff0c;特别是哈希法&#xff08;又称散列法、杂凑法、关键字地址计算法&#xff09;&#xff0c;是一种高效的查找技术。 一、哈希法的基本概念 哈希法是通过一个哈希函数将关键字映射到哈希表中的某个位置&#xff0c;从而实现快速查找的技…...

电子商务人工智能指南 4/6 - 内容理解

介绍 81% 的零售业高管表示&#xff0c; AI 至少在其组织中发挥了中等至完全的作用。然而&#xff0c;78% 的受访零售业高管表示&#xff0c;很难跟上不断发展的 AI 格局。 近年来&#xff0c;电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…...

交易系统:线上交易系统流程详解

大家好&#xff0c;我是汤师爷~ 今天聊聊线上交易系统流程详解。 线上交易系统为新零售连锁商家提供一站式线上交易解决方案。其核心目标是&#xff0c;通过数字化手段扩大商家的服务范围&#xff0c;突破传统门店的地理限制。系统支持电商、O2O等多种业务形态&#xff0c;为…...

如何通过自学成长为一名后端开发工程师?

大家好&#xff0c;我是袁庭新。最近&#xff0c;有星友向我提出了一个很好的问题&#xff1a;如何通过自学成为一名后端开发工程师&#xff1f; 为了解答这个疑问&#xff0c;我特意制作了一个视频来详细分享我的看法和建议。 戳链接&#xff1a;如何通过自学成长为一名后端开…...

实际车辆行驶轨迹与预设路线偏离检测的Java实现

准备工作 本项目依赖于两个关键库&#xff1a;JTS Topology Suite&#xff08;简称JTS&#xff09;&#xff0c;用于几何对象创建和空间分析&#xff1b;以及GeoTools&#xff0c;用于处理坐标转换和其他地理信息任务。确保开发环境中已经包含了这两个库&#xff0c;并且正确配…...

pci_resource相关函数

一、介绍 pci_resource_start函数用于获取PCI设备中指定Bar寄存器记录资源起始地址&#xff0c; 函数原型&#xff1a; resource_size_t pci_resource_start(struct pci_dev *dev, int bar) 参数&#xff1a; dev: PCI 设备结构体指针 bar: BAR 寄存器索引 (0-5) 返回&a…...

Android Studio 历史版本下载

Android Studio 历史版本下载 官方链接&#xff1a;https://developer.android.google.cn/studio/archive 通过gradle插件版本反查Android Studio历史版本 Android Studio Ladybug | 2024.2.1 October 1, 2024 【https://redirector.gvt1.com/edgedl/android/studio/ide-zip…...

Jupyter Lab打印日志

有时候在 jupyter 中执行运行时间较长的程序&#xff0c;且需要一直信息&#xff0c;但是程序执行到某些时候就不再打印了。 可以开启 日志控制台&#xff0c;将日志信息记录在控制台中。 参考&#xff1a;https://www.autodl.com/docs/jupyterlab/...