论文阅读:Uni-ISP Unifying the Learning of ISPs from Multiple Cameras

这是 ECCV 2024 的一篇文章,文章作者想建立一个统一的 ISP 模型,以实现在不同手机之间的自由切换。文章作者是香港中文大学的 xue tianfan 和 Gu jinwei 老师。

Abstract

现代端到端图像信号处理器(ISPs)能够学习从 RAW/XYZ 数据到 sRGB(或其逆过程)的复杂映射,为图像处理带来了新的可能性。然而,随着相机型号的多样性不断增加,长期开发和维护单个 ISP 是难以持续的,因为其本身缺乏通用性,阻碍了对多种相机型号的适应性。这篇文章提出了一种新颖的流程 —— 统一图像信号处理器(Uni - ISP),它统一了对多个相机的 ISP 学习,为多种相机型号提供了准确且通用的处理器。Uni - ISP 的核心是通过学习正向 / 逆向 ISP 及其特殊的训练方案来利用设备感知嵌入。通过这种方式,Uni - ISP 不仅提高了正向 / 逆向 ISP 的性能,还开启了现有学习型 ISP 无法实现的多种新应用。此外,由于没有由多个相机同步拍摄用于训练的数据集,文章还构建了一个真实世界的 4K 数据集 ——FiveCam,它包含由五部智能手机同步拍摄的 2400 多对 sRGB - RAW 图像。文章进行了大量实验,证明了 Uni - ISP 在正向 / 逆向 ISP 中的准确性(峰值信噪比分别提高了 + 1.5dB/2.4dB)、其在实现新应用方面的通用性以及对新相机型号的适应性。

Introduction

图像信号处理器(ISP)将相机传感器捕获的原始图像数据转换为诸如 sRGB 等可查看的格式,在决定照片的视觉质量方面起着关键作用。通过精心设计它们的 ISP,各个相机品牌塑造出了符合不同用户偏好的独特摄影风格。例如,苹果(Apple)智能手机相机以其清晰且独具特色的 “苹果感” 而广受赞誉,而徕卡(Leica)相机则因其光晕效果和浓郁的色调备受推崇,形成了标志性的徕卡风格。

近期,神经网络已被用于逼近整个图像信号处理器(ISP)或特定模块,即学习型 ISP,这带来了两大主要益处。

  • 1)性能提升。神经网络强大的表征能力使学习型 ISP 能够执行具有挑战性的任务,例如对高光和阴影区域中的细节内容进行脑补。
  • 2)新功能。学习型 ISP 引入了新功能,例如逆向 ISP,它能将 sRGB 图像转换回 RAW/XYZ 空间,为原始域增强和进一步处理(如去模糊、去噪、高动态范围(HDR)摄影等)提供了更大的灵活性和潜力。这些创新拓展了学习型 ISP 的应用范围和潜力。

然而,目前的方法仍然是针对单个相机型号设计和训练 ISP,这可能会限制不同 ISP 之间的协同效益。此外,通用模型在低层级视觉、高层级视觉和多模态等多个领域都展现出了优势。随着相机型号数量的增加,单个学习型 ISP 可能也缺乏广泛应用所需的通用性和适应性,从长远来看可能难以为继。

在本文中,我们旨在对来自不同相机的图像信号处理器(ISP)进行统一学习,这有两个直接的优势。

  • 1)通过利用来自多个相机的 ISP 之间的协同效应来提升视觉质量。统一学习使 ISP 能够理解不同数据中的潜在共性和差异,从而使视觉表现得到整体提升。
  • 2)统一学习提供了新颖的应用,超越了现有学习型 ISP 仅限于正向和逆向 ISP 的能力。这种统一学习实现了诸如跨不同相机型号的影像风格之间的转换、插值和外推等新用途。此外,它还支持基于 ISP 行为自洽性的零样本图像取证,包括图像级别的源相机识别和像素级别的图像拼接检测。

不过为多台相机学习一个具有设备感知能力的图像信号处理器(ISP)模型绝非易事,面临着诸多挑战。首先,我们发现,在现有模型中简单地混合来自多台相机的训练数据并不能带来令人满意的性能。因此,我们提出了 Uni - ISP,这是一种用于多台相机的新型统一 ISP 模型,它包含若干可优化的设备感知嵌入,用于学习不同相机的 ISP。这些设备感知嵌入使模型能够捕捉针对单个设备量身定制的特定特性,而共享的主干网络则能捕捉潜在的共性。

其次,目前的 ISP 数据集并不包含由多台相机拍摄的同步 sRGB - Raw 图像对。尽管这类数据对于学习单个 ISP 并非必需,但对于学习支持不同相机型号协同增效并能开发新应用的统一 ISP 至关重要。为解决这一问题,我们用五部智能手机搭建了一个同步相机阵列,并构建了一个新的数据集 ——FiveCam,该数据集包含 2464 对同步的、空间分辨率为 4K 的高质量 sRGB - Raw 配对图像。所采集的数据集涵盖了从风景到特写等广泛的场景,并且包含不同的光照条件,包括白天和夜晚的室内外环境。

第三,鉴于不同相机拍摄的同步照片对中不可避免地存在错位,需要一种稳健的对齐和训练方案。为了应对这一挑战,我们首先使用基于光流的方法对图像进行粗略对齐,这会在变形图像中引入频率偏差。然后,我们设计了一种频率偏差校正(FBC)损失来减轻纹理模糊。此外,我们引入了自相机 / 跨相机训练方案,以促进在相同 / 不同相机型号上的应用。

通过这三项设计,统一图像信号处理器(Uni - ISP)可应用于广泛的图像任务,例如跨不同相机型号的摄影外观转换、插值和外推。用户可以将一种相机型号的视觉特性应用到另一种相机上,实现独特的美学效果。还可以利用这些 ISP 行为的自洽性来促进零样本图像取证任务,包括源相机识别和图像拼接检测。大量实验表明,Uni - ISP 优于现有技术,在逆向 ISP 中峰值信噪比(PSNR)约高 1.5dB,在正向 ISP 中约高 2.4dB。
在这里插入图片描述

  • 图1 :我们提出了 Uni-ISP 模型,该模型可同时统一多个相机的逆 ISP(图像信号处理)行为和正 ISP 行为的学习。
    通过利用不同相机 ISP 之间的共享特性,与之前仅针对单个相机分别学习的 ISP 方法相比,我们的方法在逆 ISP 和正 ISP(A)方面能够实现更高的性能。同时,Uni-ISP 的设备感知特性使得一个已学习的 ISP 模型能够应用于新的跨相机 ISP 场景,包括摄影外观迁移(B 和 C)、内插 / 外推(D)以及零样本图像取证(E 和 F)。

Method

Overview

首先介绍正向和逆向 ISP 任务中的 XYZ 图像格式。XYZ 图像是与设备无关的辐射度量,学习 XYZ 图像与学习原始图像有相同的好处。因此我们选择将相机拍摄的原始图像处理得到的 XYZ 图像作为原始模态。具体而言,XYZ 图像是通过对真实原始图像 RAW 应用 ISP 的固定流程得到的,这个阶段使用拍摄时的白平衡、固定的线性去马赛克算法以及当前设备的 camera-to-XYZ 矩阵,且不应用伽马色调映射。在这种设置下,XYZ 图像与原始图像呈线性相关,它们可以相互转换且无损失。

图 2 展示了统一图像信号处理器(Uni - ISP)的整体流程,它包含逆向 ISP 模块 g g g 和正向 ISP 模块 h h h。我们的模型旨在学习 ISP 任务时能够识别各种摄像设备。假设我们这里讨论的图像尺寸均为 H × W H \times W H×W,通道数为 C C C。给定由相机 a 生成的 sRGB 图像 I a ∈ R H × W × C I_{a} \in \mathbb{R}^{H \times W \times C} IaRH×W×C ε a ∈ R D \varepsilon_{a} \in \mathbb{R}^{D} εaRD 表示针对相机 a 的尺寸为 D 的设备感知嵌入,逆向 ISP 模块 g g g 通过学习在给定输入 I a I_{a} Ia 的情况下输出相机 a 对应的 XYZ 图像 L ^ a \hat{L}_{a} L^a

L ^ a = g ( I a , ε a ) (1) \hat{L}_{a} = g(I_{a}, \varepsilon_{a}) \tag{1} L^a=g(Ia,εa)(1)

前向 ISP 模块 h h h 学习从给定的实际 XYZ 图像 L a L_{a} La 中预测 I ^ a \hat{I}_{a} I^a

I ^ a = g ( L a , ε a ) (2) \hat{I}_{a} = g(L_{a}, \varepsilon_{a}) \tag{2} I^a=g(La,εa)(2)

模块 g ( ⋅ ) g(\cdot) g() h ( ⋅ ) h(\cdot) h() 学习图像信号处理器(ISP)在不同设备间的通用属性,而设备感知嵌入 ε a \varepsilon_{a} εa 则侧重于相机 a 特定的自有属性。上述公式使我们能够通过将 g , h g, h g,h 与设备感知嵌入 $ {\varepsilon_{a}, \varepsilon_{b}, \varepsilon_{c}, …, \varepsilon_{z} }$ 一起训练,来同时学习多台相机 { a , b , c , … , z } \{a, b, c, …, z\} {a,b,c,,z} 的 ISP 行为。

Model Design

在这里插入图片描述

  • 图 2 Uni-ISP 的模型设计。Uni-ISP 包含两个模块,即逆 ISP 模块 g 和正 ISP 模块 h。这两个模块具有相同的结构。为了视觉上的简洁,我们将逆 ISP 模块 g 绘制成缩略图,其内部结构与正 ISP 模块 h 相同。设备感知嵌入是可优化的参数,在训练或推理过程中,它们将通过 DEIM(动态嵌入交互机制)被选择与瓶颈特征进行交互。

如图 2 所示,统一图像信号处理器(Uni - ISP)使用了逆向 ISP 模块 g g g 和正向 ISP 模块 h h h,每个模块都具有编码器-解码器架构。两个模块都包含局部特征提取块(LFEBs)用于细致的局部处理,以及全局特征操作块(GFMBs)用于大范围的图像调整,这反映了真实相机 ISP 的双重处理机制,即同时处理诸如曝光补偿和色彩校正等全局操作,以及色调映射和高光恢复等局部任务。

Local Feature Extraction Blocks 统一图像信号处理器(Uni - ISP)中的每个编码器和解码器阶段都包含四个局部特征提取块(LFEBs)。编码器阶段的 LFEBs 包含最大池化层,解码器阶段的 LFEBs 包含上采样层。每个 LFEB 包含多个卷积层、激活层、半实例归一化层以及空间 / 通道注意力层。残差连接将编码器和解码器阶段的 LFEBs 连接起来。

Global Feature Manipulation Blocks 全局 ISP 操作受到曝光时间和 ISO 等参数的显著影响,这些参数会改变照片的整体外观。我们设计的全局特征操作块(GFMBs)旨在结合这些参数来修改来自编码器局部特征提取块(LFEBs)的残差特征。然后,这些经过操作的特征会被传递到解码器阶段相应的 LFEBs。使用过的相机参数(曝光、ISO 和光圈值)是从相机生成的 JPEG 图像的 EXIF 元数据中提取出来的。

Device-aware Embedding Interaction Module 设备感知嵌入交互模块(DEIM)位于编码器和解码器阶段之间,通过与设备感知嵌入进行交互,增强了模型适应不同摄像设备的能力。给定一个设备感知嵌入 ε a \varepsilon_{a} εa,DEIM 对来自编码器阶段的瓶颈特征 B 应用基于注意力的变换,并输出 F a F_a Fa。这种设置使模型能够自适应地同时学习多台相机的 ISP 行为。

Training Scheme

文章为统一图像信号处理器(Uni - ISP)精心设计了一种特殊的训练方案,该方案包含两种训练目标,即自相机图像信号处理器(ISP)目标和跨相机 ISP 目标。

Self-Camera Training Objective

在自相机训练目标中,我们的统一图像信号处理器(Uni - ISP)同时学习多台相机的逆向和正向图像信号处理器(ISP)行为。

L I n v = ∥ L a − L ^ a ∥ 1 (3) \mathcal{L}_{Inv} = \left \| L_{a} - \hat{L}_{a} \right \|_{1} \tag{3} LInv= LaL^a 1(3)

L F o r = ∥ I a − I ^ a ∥ 1 (4) \mathcal{L}_{For} = \left \| I_{a} - \hat{I}_{a} \right \|_{1} \tag{4} LFor= IaI^a 1(4)

Cross-Camera Training Objective

跨相机训练目标中的目标照片是由与拍摄输入照片不同的相机拍摄的。具体而言,这种训练目标应用于正向图像信号处理器(ISP)模块 h h h 以处理相机模型转换。假设 I a I_a Ia 是由相机 a 拍摄的, I b I_b Ib 是由相机 b 拍摄的,统一图像信号处理器(Uni - ISP)的逆向 ISP 模块 g g g I a I_a Ia 作为输入并预测 XYZ 图像 L ^ a \hat{L}_a L^a,这与公式 (1) 中描述的过程相同。然后,正向 ISP 模块 h 将预测的 L ^ a \hat{L}_a L^a 转换为相机 b 的 sRGB 图像 I ^ b \hat{I}_b I^b

I ^ b = h ( ε b , L ^ a ) (5) \hat{I}_{b} = h(\varepsilon_{b}, \hat{L}_a) \tag{5} I^b=h(εb,L^a)(5)

其中, ε b \varepsilon_{b} εb 表示相机 b 的设备感知嵌入。

上面的loss 优化有一个问题,因为输入图像 I a I_a Ia 和输出真实值 I b I_{b} Ib 无法对齐,因为它们是用不同的相机拍摄的。这使得像 L1 loss 这样的像素级损失无法驱动最小化 I ^ b \hat{I}_b I^b I b I_{b} Ib 之间距离的跨相机训练目标。因此,文章首先使用基于光流的方法 RAFT 来对用于跨相机训练目标的数据集进行 warp。所有由相机拍摄 b 的 sRGB 图像 I b I_{b} Ib 都将被变形为 I b w I_{b}^{w} Ibw,使其与由相机 a 拍摄的 sRGB 图像 I a I_{a} Ia 对齐。我们对数据集中每一个可能的 camera-to-camera 的 sRGB 图像对都应用这种 warp 操作。在训练过程中,任何无法对齐的区域都将被标注为遮挡区域并进行掩模处理。

在这里插入图片描述

  • 图 3 使用光流法包裹的数据集内频率偏差示意图。与原始图像相比,包裹过程中的插值会使图像看起来模糊,消除了其高频成分。

然而,尽管基于光流的变形方法有效地对齐了这些图像,但它也在我们的数据集中引入了频率偏差。如图 3 所示,与变形前的图像相比,变形后的图像往往缺少高频细节。如果我们直接使用对齐后的图像来训练我们的模型,它将意外地在跨相机 ISP 任务中对图像进行平滑处理。为解决这个问题,我们针对跨相机训练目标提出了频率偏差校正(FBC)损失。公式(6)展示了该任务的过程。FBC 损失可写为:

L F B C = ∥ f l o w ( I ^ b ) − f l o w ( I b w ) ∥ + L f r e q ( I ^ b , I b ) (6) \mathcal{L}_{FBC} = \left \| f_{low}(\hat{I}_b) - f_{low}({I}_{b}^{w}) \right \| + \mathcal{L}_{freq}(\hat{I}_{b}, I_{b}) \tag{6} LFBC= flow(I^b)flow(Ibw) +Lfreq(I^b,Ib)(6)

其中, f l o w f_{low} flow 表示一个低通滤波器,文章用了一个高斯模糊核实现, L f r e q \mathcal{L}_{freq} Lfreq 表示频域的 loss。

Overall Loss

整体的 loss 形式为:

L = L I n v + L F o r + L F B C + λ L N R R (7) \mathcal{L} = \mathcal{L}_{Inv} + \mathcal{L}_{For} + \mathcal{L}_{FBC} + \lambda \mathcal{L}_{NRR} \tag{7} L=LInv+LFor+LFBC+λLNRR(7)

其中 L N R R \mathcal{L}_{NRR} LNRR 是附加的中性渲染正则化项, λ \lambda λ 是它的平衡权重。当中性渲染正则化在设备感知嵌入被给定为零向量时,引导模型学习一个在 XYZ 和 sRGB 色彩空间之间执行标准色彩转换的虚拟相机。

L N R R = ∥ s ( I a ) − g ( I a , 0 ) ∥ 1 + ∥ s − 1 ( L a ) − h ( L a , 0 ) ∥ 1 (8) \mathcal{L}_{NRR} = \left \| s(I_a) - g(I_a, \mathbf{0}) \right \|_1 + \left \| s^{-1}(L_a) - h(L_a, \mathbf{0}) \right \|_1 \tag{8} LNRR=s(Ia)g(Ia,0)1+ s1(La)h(La,0) 1(8)

s ( ⋅ ) , s − 1 ( ⋅ ) s(\cdot), s^{-1}(\cdot) s(),s1() 分别表示 sRGB-XYZ 和 XYZ-sRGB 之间的色彩空间转换。如果用户想要增强或减弱某台相机的摄影风格,而不与另一台相机的设备感知嵌入进行内插或外推操作,中性渲染正则化会为用户提供一个锚点。

Novel Dataset

尽管现有的 sRGB - RAW 数据集允许对逆向和正向 ISP 任务进行模型训练,但仍然需要包含由多个设备同步拍摄的 sRGB - RAW 对的数据集。这类数据集对于训练能够有效处理跨相机 ISP 任务的模型至关重要,而跨相机 ISP 任务对于诸如摄影外观转换和内插 / 外推等应用来说是至关重要的。

为应对这一挑战,我们收集了一个名为 FiveCam 的新数据集,其特点是包含来自五种不同相机型号同步拍摄的 sRGB - RAW 对。该数据集包含 2464 张高分辨率(4K)的原始图像和 JPEG 图像,代表了大约 500 个不同的场景。FiveCam 数据集中使用的相机包括苹果 iPhone 14 Pro Max、谷歌 Pixel 6 Pro、华为 P40、三星 Galaxy S20 和小米 Mi 12。所有相机都通过编程的蓝牙快门进行同步,以确保所有设备的拍摄时间一致。

图 4 展示了与其所使用的拍摄设备一同呈现的三个场景。我们的 FiveCam 数据集场景丰富多样,在多种光照条件下(从白昼到夜间环境,包括室外和室内光照)拍摄了自然景观和城市环境。

此外,我们还创建了这个数据集的 sRGB - XYZ 版本,其中所有相机的原始图像都使用拍摄时的白平衡、线性去马赛克算法进行处理,并转换为标准的相机 - 到 - XYZ 色彩空间。这个版本中的 XYZ 图像保持了线性,这使得它们对于需要保持原始图像线性的下游任务特别有益。
在这里插入图片描述

  • 图 4 我们新数据集中 3 个场景的预览(左图)以及我们的拍摄设备(右图)。每个场景都包含来自五款智能手机相机的同步 sRGB(标准红绿蓝)-Raw(原始)图像对:苹果 iPhone 14 Pro Max、谷歌 Pixel 6 Pro、华为 P40、三星 Galaxy S20 以及小米 Mi 12。这里将原始图像可视化为 XYZ 图像,并且可以无损地转换回原始格式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[免费]SpringBoot+Vue毕业设计论文管理系统【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue毕业设计论文管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue毕业设计论文管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信…

项目技术栈-解决方案-web3去中心化

web3去中心化 Web3 DApp区块链:钱包:智能合约:UI:ETH系开发技能树DeFi应用 去中心化金融P2P 去中心化网络参考Web3 DApp 区块链: 以以太坊(Ethereum)为主流,也包括Solana、Aptos等其他非EVM链。 区块链本身是软件,需要运行在一系列节点上,这些节点组成P2P网络或者半…

使用 Axios 拦截器优化 HTTP 请求与响应的实践

目录 前言1. Axios 简介与拦截器概念1.1 Axios 的特点1.2 什么是拦截器 2. 请求拦截器的应用与实践2.1 请求拦截器的作用2.2 请求拦截器实现 3. 响应拦截器的应用与实践3.1 响应拦截器的作用3.2 响应拦截器实现 4. 综合实例:一个完整的 Axios 配置5. 使用拦截器的好…

Photino:通过.NET Core构建跨平台桌面应用程序,.net国产系统

一、Photino.NET简介: 最近发现了一个不错的框架 Photino.Net 一份代码运行,三个平台 windows max linux ,其中windows10,windows11,ubuntu 18.04,ubuntu 20.04 已测试均可以。mac 因为没有相关电脑没有测试。 github:https://github.com/t…

Python爬虫:如何从1688阿里巴巴获取公司信息

在当今的数字化时代,数据已成为企业决策和市场分析的重要资产。对于市场研究人员和企业分析师来说,能够快速获取和分析大量数据至关重要。阿里巴巴的1688.com作为中国最大的B2B电子商务平台之一,拥有海量的企业档案和产品信息。本文将介绍如何…

如何构建高效的接口自动化测试框架?

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 在选择接口测试自动化框架时,需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说,使用Python相关的测试框架更为便捷。无论选…

创建型设计模式(模版方法、观察者模式、策略模式)

继承过程中,虚函数表的变化。动态多态,继承中虚函数的重写

数据结构(顺序队列——c语言实现)

队列的概念: 队列是限制在两端进行插入和删除操作的线性表,允许进行存入的一端称为“队尾”,允许进行删除操作的一端称为“队头”。当线性表中没有元素时,称为“空队”。特点:先进先出(FIFO)。 …

3C产品说明书电子化转变:用户体验、环保与商业机遇的共赢

在科技日新月异的当代社会,3C产品(涵盖计算机类、通信类和消费类电子产品)已成为我们日常生活中不可或缺的重要元素。与此同时,这些产品的配套说明书也经历了一场从纸质到电子化的深刻变革。这一转变不仅体现了技术的飞速进步&…

web服务nginx实验6:nginx发布动态页面的方法

安装软件: 启动服务: 创建文件: 再vim打开,写东西: 重启服务: Windows客户端测试:(服务端要关防火墙) 删除默认访问发.php文件: 创建一个新的配置文件&#x…

Three.js 相机控制器Controls

在 3D 场景中,摄像机的控制尤为重要,因为它决定了用户如何观察和与场景互动。Three.js 提供了多种相机控制器,最常用的有 OrbitControls、TrackballControls、FlyControls 和 FirstPersonControls。OrbitControls 适合用于查看和检查 3D 模型…

应急响应:玄机_Linux后门应急

https://xj.edisec.net/challenges/95 11关做出拿到万能密码,ATMB6666,后面都在root权限下操作 1、主机后门用户名称:提交格式如:flag{backdoor} cat /etc/passwd,发现后门用户 flag{backdoor} 2、主机排查项中可以…

.NET 9与C# 13革新:新数据类型与语法糖深度解析

记录(Record)类型 使用方式: public record Person(string FirstName, string LastName); 适用场景:当需要创建不可变的数据结构,且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景:当数据结构需…

阿里云IIS虚拟主机部署ssl证书

宝塔配置SSL证书用起来是很方便的,只需要在站点里就可以配置好,但是云虚拟主机在管理的时候是没有这个权限的,只提供了简单的域名管理等信息。 此处记录下阿里云(原万网)的IIS虚拟主机如何配置部署SSL证书。 进入虚拟…

Vue通过file控件上传文件到Node服务器

功能: 1.多文件同时上传、2.拖动上传、3.实时上传进度条、4.中断上传和删除文件、5.原生file控件的美化 搁置的功能: 上传文件夹、大文件切片上传、以及其他限制条件未处理 Node服务器的前置准备: 新建文件夹: file_upload_serve初始化npm: npm …

VSCode+ESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建

VSCodeESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建 1.开发环境搭建(安装ESP-IDF)2.开发环境搭建(安装VS Code)3.开发环境搭建(VSCode中安装ESP-IDF插件及配置) 1.开发环境搭建&am…

个人全栈开发微信小程序上线了(记日记)

个人开发的全栈项目,《每日记鸭》微信小程序上线了! 主要是技术栈:uniapp,koa2,mongodb,langchian; 感兴趣的小伙伴可以来捧捧场!

南京邮电大学算法设计-二叉树先序遍历算法动态演示

二叉树先序遍历算法动态演示 一、课题内容和要求 (1)实验目的: 本实验通过手动输入二叉树结点信息,构建相应的二叉树,并通过图形化界面动态演示先序遍历算法的过程。通过本次实验,我可以深入理解二叉树的数据结构、先序遍历算法…

IntelliJ+SpringBoot项目实战(十)--常量类、自定义错误页、全局异常处理

一、常量类 在项目开发中,经常需要约定一些常量,比如接口返回响应请求指定状态码、异常类型、默认页数等,为了增加代码的可阅读性以及开发团队中规范一些常量的使用,可开发一些常量类。下面有3个常量类示例,代码位于op…

2025蓝桥杯(单片机)备赛--扩展外设之DS1302的使用(九)

1.DS1302数据手册的使用 a. DS1302 features: 工作电压:2V-5.5V 通信协议:3线接口(CE、IO、SCLK) 计时:秒、分、小时、月日期、月、星期、年(闰年补偿器期至2100年) b.原理图接线说明&#xff…