Super Resolve Dynamic Scene from Continuous Spike Streams论文笔记
摘要
近期,脉冲相机在记录高动态场景中展示了其优越的潜力。不像传统相机将一个曝光时间内的视觉信息进行压缩成像,脉冲相机连续地输出二的脉冲流来记录动态场景,因此拥有极高的时间分辨率。而现有的脉冲相机重建方法主要集中在重建和脉冲相机相同分辨率的图像上。然而,作为高时间分辨率的权衡,脉冲相机的空间分辨率是有限的。为了处理这一问题,我们设计了一种脉冲相机超分辨率框架,旨在从低分辨率的二值脉冲流中得到超分辨率的光强图像。由于相机和捕捉物体之间的相对运动,传感器同一像素上激发的脉冲无法形容外在场景中的相同点。本文利用相对运动,推导出光强与每个脉冲之间的关系,以恢复高时间分辨率和高空间分辨率的外部场景。实验结果表明,该方法可以从低分辨率的脉冲流中重建出良好的高分辨率图像。
介绍
随着实时计算机视觉应用的发展,传统数码相机的缺点逐渐暴露。传统相机通常在一个曝光窗口内积累光电信息来形成快照帧。这样的的成像原理可以为静态场景产出富含细节的清晰图片。然而,对于拥有高速移动的动态场景,移动物体上的某一点会被投影到传感器的不同像素点上,导致运动模糊。
为了解决这一问题,脉冲相机被提出。脉冲相机可以持续地监控到达的光子并且激发连续的脉冲流,从而记录高分辨率的动态场景。相比于事件相机,脉冲相机可以记录绝对的光照强度而不是相对光强变化。
在本文中,我们针对脉冲相机设计了一种全新的图像重建框架。通过利用相对运动,我们可以恢复场景的分辨率远远高于由脉冲流直接提供的分辨率。我们仔细分析了脉冲相机的成像原理,基于脉冲相机成像原理,构建了图像光强和每个脉冲之间的关系,从而可以从脉冲流中得到超像素的光强信息。文章的主要贡献如下:
1、我们为脉冲相机提出了一种超分辨率框架。
2、我们不是简单地将图像超分辨率算法应用于脉冲相机的LR(低分辨率,low resolution)重建,而是推导出光强与每个脉冲之间的关系,从而从买从流中估计像素级的超分辨率光强。
3、实验结果显示所提出的方法可以从二值LR脉冲流中重建出不错的HR光强图像,这是现有方法做不到的。
背景知识
脉冲相机的工作机制
脉冲相机包含了一系列的像素点,每一个像素点独立地记录光照强度。每一个像素包含三个主要的部分:感光器、积分器和比较器。感光器从外部场景捕获入射光,并将光强转换为积分器可以识别的电压。积分器对转化而来的电荷做累加,比较器持续地检测积累的信号。一旦达到阈值 θ \theta θ,脉冲则会被激发,积分器重置,开始新一轮的“积累与发射”循环。
由于每一个像素独立工作,我们可以将我们的讨论限定在一个像素 p = ( r , c ) p=(r,c) p=(r,c)上。 p p p在 t t t时刻的电荷量可以表示为:
A ( t ) = ∫ Ω p ∫ 0 t α ⋅ I ( z , x ) d x d z m o d θ (1) A(t)=\int_{\Omega_p}\int_0^t\alpha\cdot I(z,x)dxdz\mod\theta\tag{1} A(t)=∫Ωp∫0tα⋅I(z,x)dxdzmodθ(1)
这里, Ω p \Omega_p Ωp表示像素 p p p包含的空间区域, I ( z , t ) I(z,t) I(z,t)表示 t t t时刻 z = ( x , y ) z=(x,y) z=(x,y)位置上的光照强度, α \alpha α表示光电转化效率。脉冲可以在任意的时间 t t t被激发,但是相机只能以离散时间二值信号 S ( n ) S(n) S(n)的形式读出脉冲(如图二所示)。具体来说,相机以一个固定的短时间间隙 T T T来检查flag,如果 t t t时刻(其中 ( ( n − 1 ) T < t ≤ n T ) ((n-1)T<t≤nT) ((n−1)T<t≤nT))有flag,则 S ( n ) = 1 S(n)=1 S(n)=1。否则, S ( n ) = 0 S(n)=0 S(n)=0。当光子连续到达时,传感器上的像素会同时独立地进行工作,激发出脉冲来表示特定数量光子的到达。随着时间的推进,相机会产生一些列的二值脉冲 S ∈ { 0 , 1 } H × W × N S\in \{0,1\}^{H\times W\times N } S∈{0,1}H×W×N(如图一(a)所示)。


问题描述
脉冲相机的目的是记录高速运动场景的动态光强变化过程。一旦脉冲阵列被捕捉到,我们旨在恢复出任何时刻的瞬时光强。特别是当考虑到脉冲相机有限的空间分辨率,我们的目标是超分辨高质量的光强图像与细节。我们没有采用简单结合脉冲重建算法和现有图像超分辨率算法的方法,而是直接估计每一个像素对应的超分辨率强度。这是一个病态的逆问题,可以表示为如下的形式。给定脉冲阵列 S ∈ { 0 , 1 } H × W × N S\in\{0,1\}^{H\times W\times N } S∈{0,1}H×W×N,我们的目标是从低分辨率的脉冲阵列中恢复高质量的高分辨率强度图像 I H D ∈ [ 0 , 255 ] c H × c W × c N I^{HD}\in[0,255]^{cH\times cW\times cN } IHD∈[0,255]cH×cW×cN,其中 c c c是放大因子。
方法
如图三所示,由于相机和物体之间的相对运动,传感器同一像素所激发的脉冲不再能描述物体上的相同点,而是记录了不同位置的光强。也就是说每一个脉冲会被映射到场景中的不同位置。通过合理地探索相机和场景之间的相对运动,恢复更高分辨率的场景是可能的。为此,我们开发了一个运动引导的脉冲相机超分辨率(MGSR, motion-guided spike camera super-resolution)框架,以从低分辨率的脉冲流中得到超分辨率图像。

强度脉冲关系
每一个脉冲对应了一定量的光子 s : ( p , t s , t e ) s:(p,t_s,t_e) s:(p,ts,te),其中 p = ( r , c ) p=(r,c) p=(r,c)表示像素的位置, t s t_s ts和 t e t_e te分别表示当前脉冲循环的开始和结束时间。基于公式(1),脉冲 s s s和强度 I I I之间的关系可以表示为:
θ = ∫ Ω p ∫ t s t e α ⋅ I ( z , t ) d t d z (2) \theta=\int_{\Omega_p}\int_{t_s}^{t_e}\alpha\cdot I(z,t)dtdz\tag{2} θ=∫Ωp∫tsteα⋅I(z,t)dtdz(2)
假设我们打算重建 k k k时刻的场景。基于灰度一致性假设,给定任意时刻某一点的光强 I ( z , t ) I(z,t) I(z,t),都可以将其转换为 k k k时刻对应物体点的光强 I ( z + u t → k ( z ) , k ) I(z+u_{t\rightarrow k}(z),k) I(z+ut→k(z),k)。其中 u t → k ( z ) u_{t\rightarrow k}(z) ut→k(z)表示将 t t t时刻上 z z z位置映射到 k k k时刻对应位置的偏移量。因此,我们可以构建场景强度和任意脉冲 s : ( p , t s , t e ) s:(p,t_s,t_e) s:(p,ts,te)之间的模型:
θ = ∫ Ω p ∫ t s t e α ⋅ I ( z , k ) M s ( z , t ) d t d z (3) \theta=\int_{\Omega_p}\int_{t_s}^{t_e}\alpha\cdot I(z,k)\mathcal{M}_s(z,t)dtdz\tag{3} θ=∫Ωp∫tsteα⋅I(z,k)Ms(z,t)dtdz(3)
这里, Ω \Omega Ω表示相机传感器的感受野, I ( z , k ) I(z,k) I(z,k)表示 k k k时刻 z z z位置的光强, M s ( z , t ) \mathcal{M}_s(z,t) Ms(z,t)是二值mask,表示强度 I ( z , k ) I(z,k) I(z,k)是否对 t t t时刻的脉冲 s s s有贡献。也就是说,如果 z z z的对应点 z + u k → t ( z ) z+u_{k\rightarrow t}(z) z+uk→t(z)处在像素 p p p包含的空间区域,则 I ( z , k ) I(z,k) I(z,k)对像素有贡献,将 M s ( z , t ) \mathcal{M}_s(z,t) Ms(z,t)设置为1。否则 M s ( z , t ) \mathcal{M}_s(z,t) Ms(z,t)被设为0。从而可以得到 M s ( z , t ) \mathcal{M}_s(z,t) Ms(z,t)的表达式:
M s ( z , t ) = { 1 , z + u k → t ( z ) ∈ Ω p 0 , o t h e r w i s e (4) \mathcal{M}_s(z,t)=\begin{cases} 1, \quad z+u_{k\rightarrow t}(z)\in \Omega_{p}\\ 0, \quad otherwise\\ \end{cases}\tag{4} Ms(z,t)={1,z+uk→t(z)∈Ωp0,otherwise(4)
其中 Ω p \Omega_p Ωp表示 p p p覆盖的空间区域。为了简单起见,我们使用 I k I_k Ik来表示 k k k时刻场景的光照强度。考虑到 I k ( z ) I_k(z) Ik(z)在时间上的连续性,公式(3)可以改写成:
θ = ∫ Ω ∫ t s t e α ⋅ I k ( z ) ⋅ M s ( z , t ) d t d z = ∫ Ω α ⋅ I k ( z ) ( ∫ t s t e M s ( z , t ) d t ) d z = ∫ Ω α ⋅ I k ( z ) ⋅ W s ( z ) d z (5) \theta=\int_{\Omega}\int_{t_s}^{t_e}\alpha\cdot I_k(z)\cdot \mathcal{M}_s(z,t)dtdz=\int_{\Omega}\alpha\cdot I_k(z)(\int_{t_s}^{t_e}\mathcal{M}_s(z,t)dt)dz=\int_{\Omega}\alpha\cdot I_k(z)\cdot \mathcal{W}_s(z)dz\tag{5} θ=∫Ω∫tsteα⋅Ik(z)⋅Ms(z,t)dtdz=∫Ωα⋅Ik(z)(∫tsteMs(z,t)dt)dz=∫Ωα⋅Ik(z)⋅Ws(z)dz(5)
其中 W s ( z ) = ∫ t s t e M s ( z , t ) d t \mathcal{W}_s(z)=\int_{t_s}^{t_e}\mathcal{M}_s(z,t)dt Ws(z)=∫tsteMs(z,t)dt代表 I k ( z ) I_k(z) Ik(z)对脉冲 s : ( p , t s , t e ) s:(p,t_s,t_e) s:(p,ts,te)的贡献程度。
脉冲相机超像素
基于以上的分析,任意的 I k ( z ) I_k(z) Ik(z)和脉冲 s : ( p , t s , t e ) s:(p,t_s,t_e) s:(p,ts,te)之间的关系可以被建模。为了超像素化光强图像,我们可以对重建平面进行重采样,建立如下的关系:
θ = ∑ q α ⋅ I k H R ( q ) ⋅ W s ( q ) (6) \theta=\sum_q\alpha\cdot I_k^{HR}(q)\cdot\mathcal{W}_s(q)\tag{6} θ=q∑α⋅IkHR(q)⋅Ws(q)(6)
这里 q = ( m , n ) q=(m,n) q=(m,n)表示 I k H R I_k^{HR} IkHR的坐标位置, W s ( q ) \mathcal{W}_s(q) Ws(q)表示 I k H R ( q ) I_k^{HR}(q) IkHR(q)对脉冲 s : ( p , t s , t e ) s:(p,t_s,t_e) s:(p,ts,te)的贡献程度。一旦在 k k k时刻附近有足够的脉冲被积累,我们可以通过最小化下面的损失函数 J ( I K h r ) J(I_K^{hr}) J(IKhr)来超分辨率化 I k H R I_k^{HR} IkHR:
J ( I K H R ) = ∑ s = 1 N ∣ ∣ α ⋅ W s I k H R − θ ∣ ∣ 2 2 (7) J(I_K^{HR})=\sum_{s=1}^N||\alpha\cdot\mathcal{W}_sI_k^{HR}-\theta||_2^2\tag{7} J(IKHR)=s=1∑N∣∣α⋅WsIkHR−θ∣∣22(7)
其中 N N N表示选定时间框内的脉冲数量。 W s ∈ R 1 × M \mathcal{W}_s\in\mathbb{R}^{1\times M} Ws∈R1×M, M = c H × c W M=cH\times cW M=cH×cW表示待重建的高分辨率图像中的像素个数。
为了解决这一问题,我们设计了一种运动辅助的脉冲相机超分辨率(MGSR, motion-guided spike camera super resolution)框架,如图四所示。

首先,一个基础的亮度推测算法被运用在脉冲流 S S S中,生成一系列基础的亮度图像 { I t L R } , t ∈ ϕ k \{I_t^{LR}\},t\in\phi_k {ItLR},t∈ϕk。 ϕ k \phi_k ϕk的一个典型选择是 { k , k ± 1 , k ± 2 , ⋅ ⋅ ⋅ } \{k,k±1,k±2,\cdot\cdot\cdot\} {k,k±1,k±2,⋅⋅⋅}。有了基础的重建,我们可以估计出不同帧的位移量并且将 I k H R I_k^{HR} IkHR上的点映射到其他帧中。然后我们可以进一步计算出每个亮度图像像素 I k H R ( q ) I_k^{HR}(q) IkHR(q)对每个脉冲 s : ( p , t s , t e ) s:(p,t_s,t_e) s:(p,ts,te)的贡献程度(这里 q q q指的是图像上的像素点, p p p指的是传感器上的像素点,可以通过图5或者更加直观的理解),构建出一系列的贡献图 { W s } \{\mathcal{W}_s\} {Ws}。基于贡献图 { W s } \{\mathcal{W}_s\} {Ws},高分辨率图像 I H R I^{HR} IHR可以通过求解公式(7)得到。

光强推测
假设一个短脉冲间隔内的光照强度是稳定的,我们粗略地推测出瞬时光强:
I t L R ( p ) = θ α ⋅ ( t e − t s ) (8) I_t^{LR}(p)=\frac{\theta}{\alpha\cdot(t_e-t_s)}\tag{8} ItLR(p)=α⋅(te−ts)θ(8)
其中, t e < t < t s t_e<t<t_s te<t<ts。值得注意的是,这些基本的重建只是用来估计相对运动。
运动估计
我们使用光流法来进行粗略估计,从而得到关键帧 I k L R I_k^{LR} IkLR到参考帧 I t L R I_t^{LR} ItLR的运动场信息:
u k → t = F ( I k L R , I t L R ) (9) u_{k\rightarrow t}=\mathcal{F}(I_k^{LR},I_t^{LR})\tag{9} uk→t=F(IkLR,ItLR)(9)
其中 F ( ⋅ ) \mathcal{F}(\cdot) F(⋅)表示光流法。 u k → t = ( u k → t h , u k → t v ) u_{k\rightarrow t}=(u_{k\rightarrow t}^h,u_{k\rightarrow t}^v) uk→t=(uk→th,uk→tv)表示 I k L R I_k^{LR} IkLR到 I t L R I_t^{LR} ItLR的运动场信息,可以将 I k L R I_k^{LR} IkLR映射到 I t L R I_t^{LR} ItLR。
权重计算
给定运动场信息 u k → t u_{k\rightarrow t} uk→t,给定任意点 z z z,我们都可以轻松地根据公式(4)推断出是否 I k H R ( z ) I_k^{HR}(z) IkHR(z)对脉冲 s : ( p , t s , t e ) s:(p,t_s,t_e) s:(p,ts,te)有贡献。然后可以计算出每个图像像素 I k H R ( q ) I_k^{HR}(q) IkHR(q)对脉冲 s : ( p , t s , t e ) s:(p,t_s,t_e) s:(p,ts,te)的权重(贡献程度):
W s ( q ) = ∫ z ∈ Ω q ∫ t s t e M s ( z , t ) d t d z (10) \mathcal{W}_s(q)=\int_{z\in \Omega_q}\int_{t_s}^{t_e}\mathcal{M}_s(z,t)dtdz\tag{10} Ws(q)=∫z∈Ωq∫tsteMs(z,t)dtdz(10)
其中 Ω q \Omega_q Ωq表示像素 q q q在 I k H R I_k^{HR} IkHR中覆盖的范围。由于相机和场景的相对运动,一个脉冲通常通常和和 I k H R I_k^{HR} IkHR中的多个像素有关。相关像素的数量也会随着运动速度和脉冲生命周期 t e − t s t_e-t_s te−ts的增加而增加。图5展示了权重的计算,图6真实了不同相对运动对应的权重图。

超像素成像
一旦足够的脉冲被积累,我们可以通过解公式(7)来得到 c H × c W cH\times cW cH×cW的超像素图像。在本文中,我们使用了梯度下降法来求解这个问题,可以被表示为:
I k H R : = I K H R − γ ⋅ ∇ I k H R J ( I k H R ; W s ) (11) I_k^{HR}:=I_K^{HR}-\gamma\cdot\nabla_{I_k^{HR}}J(I_k^{HR};\mathcal{W}_s)\tag{11} IkHR:=IKHR−γ⋅∇IkHRJ(IkHR;Ws)(11)
其中 γ \gamma γ是更新梯度。特别地,我们也可以使用这个算法作为一个一般的重建算法,此时我们可以将 c c c设置为1,以重建与脉冲流相同空间分辨率的图像。在算法1中总结了所提出的MGSR方法。

实验结果





相关文章:
Super Resolve Dynamic Scene from Continuous Spike Streams论文笔记
摘要 近期,脉冲相机在记录高动态场景中展示了其优越的潜力。不像传统相机将一个曝光时间内的视觉信息进行压缩成像,脉冲相机连续地输出二的脉冲流来记录动态场景,因此拥有极高的时间分辨率。而现有的脉冲相机重建方法主要集中在重建和脉冲相…...
操作视频的开始与暂停
调用 ref.current.play() 方法来播放视频; 如果视频需要暂停,我们调用 ref.current.pause() 方法来暂停视频。 通过 useRef 创建的 ref 操作视频的开始与暂停 当用户点击按钮时,根据当前视频的状态,我们会开始或暂停视频&…...
使用Docker配置深度学习的运行环境
文章目录 推荐实验环境前言docker安装docker操作docker配置常见方法(安装包、联网、程序管理器)安装驱动的前提要求传统方法安装驱动程序程序管理器安装联网安装deb包安装 安装完成后的设置非传统方法安装-通过容器安装驱动的前提要求安装NVIDIA-Contain…...
三相PMSM的坐标变换
三相PMSM的坐标变换 三相PMSM的数学模型具有复杂性和耦合性的多变量系统。因此需要对其进行降阶和解耦变换。 Vα,Vb,Vc是自然坐标系。 Vα,Vβ是静止坐标系。 Vd,Vq是同步旋转坐标系。 自然坐标系 三相永磁同步电机的驱动电路…...
8.(Python数模)(预测模型一)马尔科夫链预测
Python实现马尔科夫链预测 马尔科夫链原理 马尔科夫链是一种进行预测的方法,常用于系统未来时刻情况只和现在有关,而与过去无关。 用下面这个例子来讲述马尔科夫链。 如何预测下一时刻计算机发生故障的概率? 当前状态只存在0(故…...
Leetcode1006笨阶乘
思路:以4为一个分组分别进行处理 class Solution:def clumsy(self, n: int) -> int:answer_dict {0:0,1: 1, 2: 2, 3: 6, 4: 7}if n > 4:answer n * (n - 1) // (n - 2) n - 3n - 4else:print(answer_dict[n])return answer_dict[n]print(answer)while n …...
阻塞非阻塞IO(BIO和NIO),IO多路复用
1.概念 NIO(New Input/Output)和BIO(Blocking Input/Output)是Java中用于处理输入输出的两种不同的模型。 BIO 会阻塞,等有了消息,立刻返回,一个线程处理一个recv(需要很多线程&…...
HTTP协议初识·中篇
加上目录,会出现导向不正确的情况,可能是bug,目录一长就容易出错? 本篇主要讲解了: 网页分离(网页代码和.c文件分离) html链接跳转 网页添加图片 确认并返回资源类型 填写正文长度属性 添加表单 临时重定向 补充知识&a…...
数学建模:拟合算法
🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 数学建模:拟合算法 文章目录 数学建模:拟合算法拟合算法多项式拟合非线性拟合cftool工具箱的使用 拟合算法 根据1到12点间的温度数据求出温度与时间之间的近似函数关系 F ( t ) F(…...
计算机网络-笔记-汇总
目录 📚 前言 🌸章节汇总 🚀 学习心得 ⌛2023年8月31日 星期四 📚 前言 在学习了【操作系统】、【计算机组成原理】之后 再来学习【计算机网络】,对计算机之间如何通信,有了一个大致的认识。 可以想象…...
STM32定时器定时及其应用
STM32定时器定时及其应用 定时器概述☆定时器相关配置CubeMX工程配置及程序实现固件库程序设计及实现 定时器概述 1. 工作原理 使用精准的时基,通过硬件的方式,实现定时功能。定时器核心就是计数器 2. 定时器分类 基本定时器(TIM6~TIM7…...
(牛客) 游游的字符重排(next_permutation的使用)
题目描述 游游定义一个字符串是“好串”,当且仅当该字符串相邻的字符不相等。例如"arcaea"是好串,而"food"不是好串。 游游拿到了一个字符串,她可以将该字符串的各个字符顺序随意打乱。她想知道一共可以生产多少种不同的…...
RTPEngine 通过 HTTP 获取指标的方式
文章目录 1.背景介绍2.RTPEngine 支持的 HTTP 请求3.通过 HTTP 请求获取指标的方法3.1 脚本配置3.2 请求方式 1.背景介绍 RTPEngine 是常用的媒体代理服务器,通常被集成到 SIP 代理服务器中以减小代理服务器媒体传输的压力,其架构如下图所示。这种使用方…...
聚鑫数藏平台——引领数字资产管理新风向
随着数字经济的飞速发展,新金融生态应运而生。区块链技术的崭新突破,使数字资产的重要性日益凸显,为投资者带来了前所未有的机遇和挑战。在此背景下,聚鑫数藏平台横空出世,引领着数字资产管理的新风向。 聚鑫数藏平台&…...
web3j solidity 转java
需要使用的环境 web3j,nodejs 安装编译sol工具 1 $ npm install -g solc 保存为hello.sol文件到本地 1 2 3 4 5 6 7 8 pragma solidity 0.4.19; contract hello { function main(uint a) constant returns (uint b) { uint result a * 8; …...
uniapp项目实战系列(3):底部导航栏与头部导航栏的配置
目录 系列往期文章(点击跳转)uniapp项目实战系列(1):导入数据库,启动后端服务,开启代码托管(点击跳转)uniapp项目实战系列(2):新建项目,项目搭建,微信开发工具…...
Jwt工具类
导入依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency> <dependency><groupId>javax.xml.bind</groupId><artifactId>jax…...
计算机网络-笔记-第五章-运输层
🌸章节汇总 一、第一章——计算机网络概述 二、第二章——物理层 三、第三章——数据链路层 四、第四章——网络层 五、第五章——运输层 六、第六章——应用层 目录 五、第五章——运输层 1、运输层概述 2、运输层端口号、复用、分用 (1࿰…...
java-参数传递机制
java参数传递机制都是值传递。 基本类型参数传输都是数据值。 传递到方法中的值是拷贝后的值。 引用类型参数传输的都是地址值。 如果是数组的参数传递,那么是引用传递(本质上还是值传递,但是由于数组的值传递是传递数组的内存地址…...
Python编程练习与解答 练习96:字符串是否表示整数
本练习将编写一个名为isInteger的函数,用于确定字符串中的字符是否代表有效整数,确定字符串是否表示整数时,则应忽略开通要或者结尾的任何空白。一旦这个空白被忽略,如果字符串的长度至少是1,且只包含数字,…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
