【论文笔记】Text2QR

论文:Text2QR: Harmonizing Aesthetic Customization and Scanning Robustness for Text-Guided QR Code Generation

Abstract

二维码通常包含很多信息但看起来并不美观。stable diffusion的出现让平衡扫描鲁棒性和美观变为可能。
为了保证美观二维码的稳定生成,引入了QR美观蓝图(QR Aesthetic Blueprint, QAB)模块,生成蓝图图像,对整个生成过程进行控制。随后,可扫描性增强潜在细化(the Scannability Enhancing Latent Refinement, SELR)过程在潜在空间内细化输出,从而强化了可扫描的鲁棒性。
这个方法利用了stable diffusion的强大生成能力,在图像美观性和二维码可扫描行之间进行权衡。

Github仓库

1 Introduction

现在有很多工作致力于改善二维码的美观性,但是大多导致了扫描的不稳定。

本文提出了Text2QR,提供无缝生成二维码的解决方案,平衡用户定义的美观性和强大的可扫描性。
框架通过三个关键步骤展开:

  • 用户通过使用stable diffusion生成他们喜欢的图案来启动该流程。
  • 协同作用开始于QAB模块中图像的混合。这个模块生成一张蓝图,合并预先生成的图像(引导图像)中的内容,并准确反映QR码中的编码信息。然后将这张蓝图图像输入ControlNet,指导Stable Diffusion保留用户定义的美观性,并维持QR码明暗块之间的所需关系。虽然生成的结果会带来解码挑战,但是其表现出明显的明暗块分布,同时保持与用户偏好一致。
  • 构建了能量方程,量化生成结果中的内容和消息的一致性。通过对潜在代码进行梯度上升迭代来优化该能量方程,逐渐增强扫描鲁棒性,同时保持内容一致性。

本文的贡献:

  • Text2QR,在二维码生成中协调用户定义的美观性和强大的可扫描性。
  • 引入QAB模块和SELR流程,用于保持美观的同时优化扫描稳健性。
  • 更优越的效果

3 Preliminary

先阐明QR码扫描仪从美观的QR码图像中解码二进制信息的过程。
给定带有QR码的彩色图像,首先通过提取亮度通道(YCbCr颜色空间中的Y通道),将其转化为灰度表示,表示为 I ∈ R H × W I\in \mathbb{R}^{H\times W} IRH×W,包含 L L L个灰度级(通常为256)。
设QR码包含 n × n n\times n n×n个模块,每个模块的大小为 a × a a\times a a×a个像素,有 n ⋅ a ≤ min ⁡ ( H , W ) n\cdot a\leq \min(H, W) namin(H,W)。这样就构建出了一个包含 n 2 n^2 n2个模块的网格,记作 M k M_k Mk,其中 k ∈ [ 1 , 2 , ⋯ , n 2 ] k\in [1,2,\cdots,n^2] k[1,2,,n2]。这个网格将图像 I I I划分为 n 2 n^2 n2个块,表示为 I M k ∈ R a × a I_{M_k}\in\mathbb{R}^{a\times a} IMkRa×a

k k k个模块被解码为1位信息 I ~ k \tilde{I}_k I~k,代表0或1,其中 I ~ ∈ R n × n \tilde{I}\in \mathbb{R}^{n\times n} I~Rn×n表示整张二进制图的结果。
通常扫描仪对于每个模块的中心子区域内的像素进行采样。
θ \theta θ为以模块 M k M_k Mk为中心、大小为 x × x x\times x x×x的正方形区域, p ∈ { 1 , 2 , ⋯ , H } × { 1 , 2 , ⋯ , W } \mathbf{p}\in\{1,2,\cdots,H\}\times \{1,2,\cdots,W\} p{1,2,,H}×{1,2,,W}表示 I I I的像素坐标。解码后的二进制值 I ~ k \tilde{I}_k I~k可以记作:
v k = 1 x 2 ∑ p ∈ θ I M k ( p ) ; I ~ k = { 0 if  v k ≤ T b , 1 if  v k ≥ T w , − 1 otherwise . v_k=\frac{1}{x^2}\sum_{\mathbf{p}\in\theta}I_{M_k}(\mathbf{p});\tilde{I}_k= \begin{cases} 0 \qquad & \text{if} \ v_k\leq\mathcal{T}_b, \\ 1 \qquad & \text{if} \ v_k\geq\mathcal{T}_w, \\ -1 \qquad & \text{otherwise}. \end{cases} vk=x21pθIMk(p);I~k= 011if vkTb,if vkTw,otherwise.
其中 T b \mathcal{T}_b Tb T w \mathcal{T}_w Tw是二值化的阈值。考虑到对称性,令 T b = L ⋅ ( 1 − η ) / 2 \mathcal{T}_b=L\cdot (1-\eta)/2 Tb=L(1η)/2 T w = L ⋅ ( 1 + η ) / 2 \mathcal{T}_w=L\cdot(1+\eta)/2 Tw=L(1+η)/2,其中 η ∈ ( 0 , 1 ) \eta\in(0,1) η(0,1)。超参数 η \eta η可以控制二值化过程的严格性。
在这里插入图片描述

4 Method

![[Pasted image 20240330222807.png]]

4.1 Overall

第一阶段,用户准备 I g I^g Ig M \mathcal{M} M(依赖关联参数 c c c z 0 z_0 z0)。
第二阶段,关键一步是通过创新的QAB模块将 I g I^g Ig M \mathcal{M} M中封装的信息无缝集成,以制定全面的蓝图,记为 I b I^b Ib
随后, I b I^b Ib在ControlNet C \mathcal{C} C中进行处理,以对stable diffusion model施加影响。这个影响涉及通过受控过程调整中间特征,定义为:
I s = G ( c , z 0 ∣ C ( I b , c , z 0 ) ) I^s=\mathcal{G}(c,z_0|\mathcal{C}(I^b,c,z_0)) Is=G(c,z0C(Ib,c,z0))
这种整合确保了协同输出 I s I^s Is和谐地平衡了源自 I g I_g Ig的审美偏好和 M \mathcal{M} M的结构约束。
最后阶段, I s I^s Is通过SELR模块进行迭代微调,改进了扫描鲁棒性,同时保留了美术品质。

最后输出是一个美观的二维码 Q Q Q

4.2 QR Aesthetic Blueprint

该模块旨在通过集成二维码信息和引导图像细节来创建可扫描的蓝图。

最初,从引导图像 I g I^g Ig中提取亮度通道,表示为 I y g I^g_y Iyg。为了确保可以比较的分布,分别使用直方图偏振(Histogram polarization)进行亮度调整和模块重组的方法进行像素重新排列来预处理 I y g I^g_y Iyg M \mathcal{M} M。最后,应用自适应半色调方法(Adaptive-Halftone)将二者混合,产生蓝图图像 I b I^b Ib

4.2.1 Histogram polarization

该模块的主要目的是协调 I y g I^g_y Iyg的直方图分布和QR码的直方图分布。该过程增强了 I y g I^g_y Iyg的对比度,产生高对比度的图像 I h c I^{hc} Ihc
直方图偏振操作由查找表 H \mathcal{H} H表示,其将像素值从一个灰度级映射到另一个灰度级。

对于每一个像素 p \mathbf{p} p,令 τ = I y g ( p ) \tau=I^g_y(\mathbf{p}) τ=Iyg(p) τ ′ = I h c ( p ) \tau'=I^{hc}(\mathbf{p}) τ=Ihc(p),将过程表示为:
τ ′ = H ( τ ) \tau'=\mathcal{H}(\tau) τ=H(τ)
n τ n_\tau nτ表示灰度级 τ ∈ [ 0 , L ) \tau\in[0,L) τ[0,L)的出现次数,为每一个灰度级 τ \tau τ引入累积分布函数(Cumulative Distribution Function, CDF):
cdf ( τ ) = ∑ i = 0 τ n i H × W \text{cdf}(\tau)=\sum_{i=0}^\tau \frac{n_i}{H\times W} cdf(τ)=i=0τH×Wni
目标是令生成的 I h c I^{hc} Ihc [ 0 , T b ) ∪ [ T w , L ) [0,\mathcal{T}_b)\cup[\mathcal{T}_w,L) [0,Tb)[Tw,L)范围内具有平坦的直方图。同时排除在 [ T b , T w ) [\mathcal{T}_b,\mathcal{T}_w) [Tb,Tw)中出现的情况。为了实现这一点,首先创建一个新图像 I h e I^{he} Ihe,其线性化CDF的值的范围为 [ 0 , L − T w + T b ) [0,L-\mathcal{T}_w+\mathcal{T}_b) [0,LTw+Tb)。令 τ ~ = I h e ( p ) \tilde{\tau}=I^{he}(\mathbf{p}) τ~=Ihe(p),于是有:
τ ~ = ( L − T w + T b ) ⋅ cdf ( τ ) \tilde{\tau}=(L-\mathcal{T}_w+\mathcal{T}_b)\cdot \text{cdf}(\tau) τ~=(LTw+Tb)cdf(τ)
随后,通过添加 T w − T b \mathcal{T}_w-\mathcal{T}_b TwTb来移动值的范围 [ T b , L ) [\mathcal{T}_b,L) [Tb,L)从而获得 I h c I^{hc} Ihc
τ ′ = H ( τ ) = { τ ~ if  τ ~ < T b , τ ~ + T w − T b if  τ ~ ≥ T b . \tau'=\mathcal{H}(\tau)=\begin{cases} \tilde{\tau} \qquad & \text{if} \ \tilde{\tau}<\mathcal{T}_b, \\ \tilde{\tau}+\mathcal{T}_w-\mathcal{T}_b \qquad & \text{if} \ \tilde{\tau}\geq\mathcal{T}_b. \\ \end{cases} τ=H(τ)={τ~τ~+TwTbif τ~<Tb,if τ~Tb.
![[Pasted image 20240331123739.png]]

4.2.2 Module reorganization

为了将QR码 M \mathcal{M} M I h c I^{hc} Ihc混合,首先将 I h c I^{hc} Ihc二值化为二值图像 I b i n I^{bin} Ibin。该二值图像指导module reorganization方法,记为 E r \mathcal{E}_r Er,该方法在保留编码信息的同时重新排列 M \mathcal{M} M的模块。该过程可以表述为:
I b i n ( p ) = { 0 if  I h c ( p ) < T b , 1 if  I h c ( p ) > T w , I^{bin}(\mathbf{p})=\begin{cases} 0 \qquad & \text{if} \ I^{hc}(\mathbf{p})<\mathcal{T}_b, \\ 1 \qquad & \text{if} \ I^{hc}(\mathbf{p})>\mathcal{T}_w, \\ \end{cases} Ibin(p)={01if Ihc(p)<Tb,if Ihc(p)>Tw,
M r = E r ( M , I b i n ) \mathcal{M}^r=\mathcal{E}_r(\mathcal{M},I^{bin}) Mr=Er(M,Ibin)

4.2.3 Adaptive-Halftone blending

考虑第 k k k个模块区域 M k M_k Mk,我们输入经过histogram polarization后的图像块 I M k h c I_{M_k}^{hc} IMkhc和一个目标值 M k r = 0 or  1 M_k^r=0\ \text{or} \ 1 Mkr=0 or 1。目标是获得蓝图 I b I^b Ib,其中 I M k b I_{M_k}^b IMkb可以被解码为正确的信息,同时保留尽可能多的图像内容。

为了达成这个目标,引入了全新的blending method:Adaptive-Halftone blending(自适应半色调混合)。
具体地,对于每个模块 M k M_k Mk,令 θ k \theta_k θk是一个大小为 u × u u\times u u×u的方形区域,以图像块 I M k h c ( u ≤ a ) I^{hc}_{M_k}(u\leq a) IMkhc(ua)为中心。用 M k r \mathcal{M}_k^r Mkr来填充 I θ k h c I_{\theta_k}^{hc} Iθkhc以生成 I M k b I_{M_k}^b IMkb。通过最小化该模块内的编码距离来优化放行区域大小 u u u u u u对应的该模块的模拟解码值定义为 E k ( I M k b ∣ u ) E_k(I_{M_k}^b|u) Ek(IMkbu)
E k ( I M k b ∣ u ) = 1 a 2 [ ∑ p ∈ θ k L ⋅ M k r + ∑ p ∉ θ k I M k b ( p ) ] = 1 a 2 [ u 2 ⋅ L ⋅ M k r + ∑ p ∉ θ k I M k b ( p ) ] \begin{align} E_k(I_{M_k}^b|u)&=\frac{1}{a^2}[\sum_{\mathbf{p}\in\theta_k} L\cdot \mathcal{M}_k^r+\sum_{\mathbf{p}\notin\theta_k} I_{M_k}^b(\mathbf{p})] \\ &=\frac{1}{a^2}[u^2\cdot L\cdot\mathcal{M}_k^r+\sum_{\mathbf{p}\notin\theta_k} I_{M_k}^b(\mathbf{p})] \end{align} Ek(IMkbu)=a21[pθkLMkr+p/θkIMkb(p)]=a21[u2LMkr+p/θkIMkb(p)]
特别地,当 u = a u=a u=a时,有 E k ( I M k b ∣ u ) = L ⋅ M k r E_k(I_{M_k}^b|u)=L\cdot\mathcal{M}_k^r Ek(IMkbu)=LMkr。目标是最小化编码距离:
u k = argmin ⁡ v ∣ ∣ E k ( I M k b ∣ u ) − L ⋅ ( η ⋅ M k r + 1 − η 2 ) ∣ ∣ u_k={\underset{v}{\operatorname{arg min}}}||E_k(I_{M_k}^b|u)-L\cdot(\eta\cdot\mathcal{M}_k^r+\frac{1-\eta}{2})|| uk=vargmin∣∣Ek(IMkbu)L(ηMkr+21η)∣∣
根据 T b \mathcal{T}_b Tb T w \mathcal{T}_w Tw的定义,可以简写上式:
s k = { argmin ⁡ s ∣ ∣ E k ( I M k b ∣ u ) − T b ∣ ∣ if  M k r = 0 , argmin ⁡ s ∣ ∣ E k ( I M k b ∣ u ) − T w ∣ ∣ if  M k r = 1 , s_k=\begin{cases} {\underset{s}{\operatorname{arg min}}}||E_k(I_{M_k}^b|u)-\mathcal{T}_b|| \qquad & \text{if} \ \mathcal{M}_k^r=0, \\ {\underset{s}{\operatorname{arg min}}}||E_k(I_{M_k}^b|u)-\mathcal{T}_w|| \qquad & \text{if} \ \mathcal{M}_k^r=1, \\ \end{cases} sk= sargmin∣∣Ek(IMkbu)Tb∣∣sargmin∣∣Ek(IMkbu)Tw∣∣if Mkr=0,if Mkr=1,
为每个模块都填充了合适尺寸的同心方形块后,继续将标记(包括查找器和对齐标记)粘贴到最终的蓝图 I b I^b Ib上。

下图展示了从不同的蓝图生成不同的 I s I^s Is
在这里插入图片描述

此调整涉及当 I h c I^{hc} Ihc有效封装模块信息以保留更多图像内容时缩小块的大小。
相反,当需要更明显的控制信号来确保模块在 I s I^s Is中的可扫描性时,它会扩大块的大小。

4.3 Scannability Enhancing Latent Refinement

生成的 I s I^s Is遵循施加的 M r \mathcal{M}^r Mr的结构约束,但因为仍有大量错误的模块,因此不可扫描。为了解决此问题,可扫描性增强潜在细化(Scannability Enhancing Latent Refinement, SELR)提供了很细致的强化过程来增强扫描鲁棒性。

包括取景器和对其图案的标记对于确定QR码的位置和角度至关重要,从而影响其扫描性。因此,在细化之前将它们的外观整合到 I s I^s Is上,记作 I s ^ \hat{I^s} Is^
在这里插入图片描述

使用VAE将增强图像 I s ^ \hat{I^s} Is^编码为潜在代码 z s z_s zs,将VAE的模型记作 E V \mathcal{E}_V EV。总体目标函数 L L L可以被分为三项之和:标记损失 L m \mathcal{L}_m Lm,编码损失 L c \mathcal{L}_c Lc,协调损失 L h \mathcal{L}_h Lh
L ( z ) = λ 1 L m ( D V ( z ) , I b ) + λ 2 L c ( D V ) ( z ) , I b ) + λ 3 L h ( D V ) ( z ) , I s ) \begin{aligned} \mathcal{L}(z)&=\lambda_1\mathcal{L}_m(\mathcal{D}_V(z),I^b) \\ &+\lambda_2\mathcal{L}_c(\mathcal{D}_V)(z),I^b) \\ &+\lambda_3\mathcal{L}_h(\mathcal{D}_V)(z),I^s) \end{aligned} L(z)=λ1Lm(DV(z),Ib)+λ2Lc(DV)(z),Ib)+λ3Lh(DV)(z),Is)
其中, λ 1 \lambda_1 λ1 λ 3 \lambda_3 λ3用于平衡各项之间的权重。 D V \mathcal{D}_V DV代表VAE编码器的解码器。 z z z是由 z s z_s zs初始化并在不断迭代中通过最小化目标函数来微调的潜变量,控制生成的QR码 Q = D V ( z ) Q=\mathcal{D}_V(z) Q=DV(z)的可扫描性和美观质量。代码损失 L c \mathcal{L}_c Lc是通过Artcoder: an end-to-end method for generating scanning-robust stylized qr codes这篇文章提出的方法计算的,该方法采用SSLayer提取模块值,通过竞争机制计算基于模块的代码损失。

4.3.1 Marker loss

扫描仪根据标记区域中的特定像素比来识别QR码。
引入一个二元掩码 K c c \mathcal{K}_{cc} Kcc,专门用于过滤标记的交叉中心区域,目的是保护基本标记功能免受因美学定制而造成的潜在损害。形式上,标记损失函数 L m \mathcal{L}_m Lm定义如下:
L m ( Q , I b ) = K c c ⋅ ∣ ∣ Q y − I b ∣ ∣ 2 \mathcal{L}_m(Q,I^b)=\mathcal{K}_{cc}\cdot||Q_y-I^b||^2 Lm(Q,Ib)=Kcc∣∣QyIb2
其中 Q y Q_y Qy表示二维码 Q Q Q的亮度通道。
这个公式确保了标记的完整性,同时允许对QR码的非标记区域进行美观修改。重点是优化视觉质量,同时保持原始扫描能力。

这个损失函数计算了 L 2 L^2 L2-Wasserstein距离,记为 W 2 W_2 W2,计算 Q Q Q的特征图和 I s I^s Is的距离。
特别地,

4.3.2 Harmonizing Loss

解决了与标记和代码相关的可扫描性问题后,要进一步确保通过协调损失来保留美学品质。特征图 f i f_i fi通过预训练的VGG-19网络的 i ∈ [ 1 , 6 , 11 , 18 , 25 ] i\in[1,6,11,18,25] i[1,6,11,18,25]层提取而出,损失可以被计算为:
L h = ∑ i W 2 ( f i ( Q ) , f i ( I s ) ) \mathcal{L}_h=\sum_i W_2(f_i(Q),f_i(I^s)) Lh=iW2(fi(Q),fi(Is))
P 1 , P 2 P_1,P_2 P1,P2分别为 R n \mathbb{R}^n Rn上具有 μ 1 , μ 2 ∈ R n \mu_1,\mu_2\in\mathbb{R}^n μ1,μ2Rn的平均值、非奇异协方差矩阵 C 1 , C 2 ∈ R n × n C_1,C_2\in\mathbb{R}^{n\times n} C1,C2Rn×n L 2 L^2 L2-Wasserstein距离 W 2 ( P 1 , P 2 ) W_2(P_1,P_2) W2(P1,P2)可以被定义为:
A = trace ( C 1 + C 2 − 2 ( C 1 C 2 C 1 ) 1 2 ) A=\text{trace}(C_1+C_2-2(\sqrt{C_1}C_2\sqrt{C_1})^{\frac{1}{2}}) A=trace(C1+C22(C1 C2C1 )21)
W 2 ( P 1 , P 2 ) = ∣ ∣ μ 1 − μ 2 ∣ ∣ 2 + A W_2(P_1,P_2)=\sqrt{||\mu_1-\mu_2||^2+A} W2(P1,P2)=∣∣μ1μ22+A
协调损失的集成确保优化的输出不仅满足功能要求,而且保留美学品质。本质上,SELR模块利用标记、编码、协调损失来优化生成的QR码的可扫描性和美观性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

06 | Swoole 源码分析之 Coroutine 协程模块

首发原文链接&#xff1a;Swoole 源码分析之 Coroutine 协程模块 大家好&#xff0c;我是码农先森。 引言 协程又称轻量级线程&#xff0c;但与线程不同的是&#xff1b;协程是用户级线程&#xff0c;不需要操作系统参与。由用户显式控制&#xff0c;可以在需要的时候挂起、或…

分享一种快速移植OpenHarmony Linux内核的方法

移植概述 本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开发者&#xff0c;介绍一种借助三方芯片平台自带 Linux 内核的现有能力&#xff0c;快速移植 OpenHarmony 到三方芯片平台的方法。 移植到三方芯片平台的整体思路 内核态层和用户态层 为了更好的解释整个内核…

曲线降采样之道格拉斯-普克算法Douglas–Peucker

曲线降采样之道格拉斯-普克算法Douglas–Peucker 该算法的目的是&#xff0c;给定一条由线段构成的曲线&#xff0c;找到一条点数较少的相似曲线&#xff0c;来近似描述原始的曲线&#xff0c;达到降低时间、空间复杂度和平滑曲线的目的。 附赠自动驾驶学习资料和量产经验&…

通过提交容器的方式修改ubuntu镜像的apt源

通过提交容器的方式修改ubuntu镜像的apt源 步骤总结 问题&#xff0c;每次创建容器之后&#xff0c;都要在容器内手动更改镜像源。 不如&#xff0c;干脆修改镜像的apt源&#xff0c;一次到位。 步骤 先创建一个容器&#xff0c;到容器内执行变更命令。 D:/sandbox> dock…

【Vue】vue3简介与环境配置

文章目录 项目编码规范什么是 Vue&#xff1f;安装node环境nvm针对node版本惊醒管理的工具 项目编码规范 组合式API Typescript setup(语法糖) 什么是 Vue&#xff1f; Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;…

【SQL】1633. 各赛事的用户注册率(COUNT函数 表达式用法)

题目描述 leetcode题目&#xff1a;1633. 各赛事的用户注册率 Code select contest_id, round(count(*)/(select count(*) from Users)*100, 2) as percentage from Register group by contest_id order by percentage desc, contest_id ascCOUNT()函数 COUNT函数用法&#…

docker容器之etcd安装

一、etcd介绍 1、etcd是什么 etcd是CoreOS团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。 2、etcd特点 简单的接口&#xff0c;通过标准的HTTP API进行调用&#xff0c;也可以使用官方提供的 etcdctl 操作存储的数据。…

1999-2022年上市公司员工人数数据

1999-2022年上市公司员工人数数据 1、时间&#xff1a;1999-2022年 2、指标&#xff1a;证券代码、时间、员工人数 3、来源&#xff1a;整理自csmar 4、范围&#xff1a;上市公司 5、指标解释&#xff1a; 上市公司员工人数是衡量公司规模和发展状的重要指标。该数据直接…

编程新手必看,python中的转义字符及注释!(4)

1、常见的转义字符 Python中的转义字符用于在字符串中表示一些特殊的字符&#xff0c;这些字符通常无法直接输入或具有特殊的意义。以下是一些常见的转义字符及其含义&#xff1a; 在Python中&#xff0c;可以使用转义字符来表示一些特殊的字符。以下是使用转义字符的几种常见…

VuePress基于 Vite 和 Vue 构建优秀框架

VitePress 是一个静态站点生成器 (SSG)&#xff0c;专为构建快速、以内容为中心的站点而设计。简而言之&#xff0c;VitePress 获取用 Markdown 编写的内容&#xff0c;对其应用主题&#xff0c;并生成可以轻松部署到任何地方的静态 HTML 页面。 VitePress 附带一个用于技术文档…

Java复习第十六天学习笔记(JSP、Servlet),附有道云笔记链接

【有道云笔记】十六 4.2 JSP、Servlet https://note.youdao.com/s/QccA5g1G 一、软件的结构 C/S (Client - Server 客户端-服务器端) 典型应用&#xff1a;QQ软件 &#xff0c;飞秋&#xff0c;印象笔记。 特点&#xff1a; 必须下载特定的客户端程序。服务器端升级&#…

保护Android应用安全:全面探究代码混淆在加固中的作用

Android APP 加固是优化 APK 安全性的一种方法&#xff0c;常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆&#xff0c;使得反编译出来的代码很难阅读和理解&#xff…

CSS面试题---基础

1、css选择器及优先级 选择器优先级&#xff1a;内联样式>id选择器>类选择器、属性选择器、伪类选择器>标签选择器、微元素选择器 注意&#xff1a; !important优先级最高&#xff1b; 如果优先级相同&#xff0c;则最后出现的样式生效&#xff1b; 继承得到的样式优先…

腾讯云2024年4月优惠券及最新活动入口

腾讯云是腾讯集团倾力打造的云计算品牌&#xff0c;提供全球领先的云计算、大数据、人工智能等技术产品与服务。为了吸引用户上云&#xff0c;腾讯云经常推出各种优惠活动。本文将为大家分享腾讯云优惠券及最新活动入口&#xff0c;助力大家轻松上云&#xff01; 一、优惠券领取…

大模型prompt技巧——思维链(Chain-of-Thought)

1、Zero-shot、One-shot、Few-shot 与fintune prompt的时候给出例子答案&#xff0c;然后再让模型回答。 2、zero-shot-CoT “Let’s think step by step”有奇迹效果 3、多数投票提高CoT性能——自洽性&#xff08;Self-consistency&#xff09; 多个思维链&#xff0c;然后取…

浪潮分布式存储AS13000G6-M36改扩配后管理界面不能识别和标记硬盘的处理方法

AS13000G6 改配出问题的场景 浪潮分布式存储AS13000G6-M36渠道备货的分布式存储通常是流量机型&#xff0c;实际出货可能会涉及改配 集群部署完以后建议在系统视图下查看一下盘是否能识别 这个是正常的情况&#xff0c;可以正确管理到盘,硬盘侧边有绿色的指示灯。 如图是管理…

如果符合这7点,说明你经历过职场PUA。

今天聊聊在职场中比较普遍&#xff0c;但又容易被忽视的问题——职场PUA。 工作是为了更好的生活&#xff0c;但有时候可能会发现&#xff0c;这份工作怎么越做越不对劲&#xff0c;感觉像是偏航了。 简单来说&#xff0c;职场PUA就是一种精神控制&#xff0c;常常以批评和否…

java的警示之有危险的行为

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;&#x1f468;&#x1f3fb;‍&#x1f393;告别&#xff0c;今天 &#x1f4d4;高质量专栏 &#xff1a;☕java趣味之旅 欢迎&#x1f64f;点赞&#x1f5e3;️评论&#x1f4e5;收藏&#x1f493;关注 &#x1f496;衷心的希…

MATLAB科研绘图与学术图表绘制从入门到精通

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

vue-ueditor-wrap上传图片报错:后端配置项没有正常加载,上传插件不能正常使用

如图所示,今天接收一个项目其中富文本编辑器报错 此项目为vue2项目,富文本编辑器为直接下载好的资源存放在public目录下的 经过排查发现报错的函数在ueditor.all.min.js文件内,但是ueditor.all.min.js文件夹是经过压缩的 所以直接,将index.html中的引用路径修改为ueditor…