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

摄像头应用编程(三):多平面视频采集

文章目录

  • 1、前言
  • 2、环境介绍
  • 3、步骤
  • 4、应用程序编写
  • 5、测试
    • 5.1、编译应用程序
    • 5.2、运行应用程序
  • 6、总结

1、前言

在查看摄像头类型时,大致可以分为两类:Video Capture 和 Video Capture Multiplanar。

本次应用程序主要针对类型为Video Capture Multiplanar的相机。

2、环境介绍

rk3566 + ov8858

3、步骤

应用程序编写主要分为以下几个步骤:

1、打开设备节点。

2、查询设备能力。

3、枚举支持的视频格式。

4、设置格式。

5、请求buffer。

6、buffer入队列。

7、打开相机。

8、buffer出队列。

9、保存为yuv文件。

10、buffer重新入队列。

11、关闭相机。

4、应用程序编写

完整的应用程序如下:


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <linux/types.h>          
#include <linux/videodev2.h>
#include <poll.h>
#include <sys/mman.h>
#include <jpeglib.h>
#include <linux/fb.h>#define FRAME_SIZE_X    640
#define FRAME_SIZE_Y    480int main(int argc, char **argv)
{int fd;int ret;void *buffers[VIDEO_MAX_FRAME][VIDEO_MAX_PLANES];int type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;int buffer_cnt;struct pollfd fds[1];int i;int num_planes;char filename[32];int file_cnt = 0;if (argc != 2){printf("Usage: %s </dev/videoX>\n", argv[0]);return -1;}/* 1. open /dev/video* */fd = open(argv[1], O_RDWR);if (fd < 0){printf("can not open %s\n", argv[1]);goto _err;}/* 2. query capability */struct v4l2_capability cap;memset(&cap, 0, sizeof(struct v4l2_capability));if (0 == ioctl(fd, VIDIOC_QUERYCAP, &cap)){        if ((cap.capabilities & V4L2_CAP_VIDEO_CAPTURE_MPLANE) == 0) {fprintf(stderr, "Error opening device %s: video capture mplane not supported.\n", argv[1]);goto _ioc_querycap_err;}if(!(cap.capabilities & V4L2_CAP_STREAMING)) {fprintf(stderr, "%s does not support streaming i/o\n", argv[1]);goto _ioc_querycap_err;}}else{printf("can not get capability\n");goto _ioc_querycap_err;}/* 3. enum formt */struct v4l2_fmtdesc fmtdesc;struct v4l2_frmsizeenum fsenum;int fmt_index = 0;int frame_index = 0;while (1){fmtdesc.index = fmt_index;  fmtdesc.type  = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;  if (0 != ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc))break;// printf("format %s:\n", fmtdesc.description);frame_index = 0;while (1){memset(&fsenum, 0, sizeof(struct v4l2_frmsizeenum));fsenum.pixel_format = fmtdesc.pixelformat;fsenum.index = frame_index;if (ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &fsenum) == 0){// printf("\t%d: %d x %d\n", frame_index, fsenum.discrete.width, fsenum.discrete.height);}else{break;}frame_index++;}fmt_index++;}/* 4. set formt */struct v4l2_format fmt;memset(&fmt, 0, sizeof(struct v4l2_format));fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;fmt.fmt.pix.width = FRAME_SIZE_X;fmt.fmt.pix.height = FRAME_SIZE_Y;fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_NV21;fmt.fmt.pix.field = V4L2_FIELD_ANY;if (0 == ioctl(fd, VIDIOC_S_FMT, &fmt)){num_planes = fmt.fmt.pix_mp.num_planes;printf("the final frame-size has been set : %d x %d\n", fmt.fmt.pix.width, fmt.fmt.pix.height);}else{printf("can not set format\n");goto _ioc_sfmt_err;}/* 5. require buffer */struct v4l2_requestbuffers rb;memset(&rb, 0, sizeof(struct v4l2_requestbuffers));rb.count = 32;rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;rb.memory = V4L2_MEMORY_MMAP;if (0 == ioctl(fd, VIDIOC_REQBUFS, &rb)){buffer_cnt = rb.count;for(i = 0; i < rb.count; i++) {struct v4l2_buffer buf;struct v4l2_plane planes[num_planes];memset(&buf, 0, sizeof(struct v4l2_buffer));memset(&planes, 0, sizeof(planes));buf.index = i;buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;buf.memory = V4L2_MEMORY_MMAP;buf.m.planes = planes;buf.length = num_planes;if (0 == ioctl(fd, VIDIOC_QUERYBUF, &buf)){for (int j = 0; j < num_planes; j++){buffers[i][j] = mmap(NULL, buf.m.planes[j].length, PROT_READ | PROT_WRITE, MAP_SHARED,fd, buf.m.planes[j].m.mem_offset);if (buffers[i][j] == MAP_FAILED) {printf("Unable to map buffer\n");goto _err;}}}else{printf("can not query buffer\n");goto _err;}            }}else{printf("can not request buffers\n");goto _ioc_reqbufs_err;}/* 6. queue buffer */for(i = 0; i < buffer_cnt; ++i) {struct v4l2_buffer buf;struct v4l2_plane planes[num_planes];memset(&buf, 0, sizeof(struct v4l2_buffer));memset(&planes, 0, sizeof(planes));buf.index = i;buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;buf.memory = V4L2_MEMORY_MMAP;buf.m.planes = planes;buf.length = num_planes;if (0 != ioctl(fd, VIDIOC_QBUF, &buf)){perror("Unable to queue buffer");goto _ioc_qbuf_err;}}/* start camera */if (0 != ioctl(fd, VIDIOC_STREAMON, &type)){printf("Unable to start capture\n");goto _err;}printf("start camera ...\n");while (1){/* poll */memset(fds, 0, sizeof(fds));fds[0].fd = fd;fds[0].events = POLLIN;if (1 == poll(fds, 1, -1)){/* dequeue buffer */struct v4l2_buffer buf;struct v4l2_plane planes[num_planes];memset(&buf, 0, sizeof(struct v4l2_buffer));buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;buf.memory = V4L2_MEMORY_MMAP;buf.m.planes = planes;buf.length = num_planes;if (0 != ioctl(fd, VIDIOC_DQBUF, &buf)){printf("Unable to dequeue buffer\n");goto _ioc_dqbuf_err;}/* save as file */sprintf(filename, "video_raw_data_%04d.yuv", file_cnt++);int fd_file = open(filename, O_RDWR | O_CREAT, 0666);if (fd_file < 0){printf("can not create file : %s\n", filename);}printf("capture to %s\n", filename);for (int i = 0; i < num_planes; i++)write(fd_file, buffers[buf.index][i], buf.m.planes[i].bytesused);close(fd_file);/* queue buffer */if (0 != ioctl(fd, VIDIOC_QBUF, &buf)){printf("Unable to queue buffer");goto _ioc_qbuf_err;}}}/* close camera */if (0 != ioctl(fd, VIDIOC_STREAMOFF, &type)){printf("Unable to stop capture\n");goto _ioc_streamoff_err;}close(fd);return 0;_ioc_qbuf_err:
_ioc_reqbufs_err:
_ioc_sfmt_err:
_ioc_querycap_err:
_ioc_streamoff_err:
_ioc_dqbuf_err:
_err:return -1;
}

5、测试

5.1、编译应用程序

如果你使用的buildroot系统,需要交叉编译。

这里测试所使用的板子跑的是ubuntu,执行如下命令直接编译:

sudo gcc -o mipi_to_yuv mipi_to_yuv.c 

5.2、运行应用程序

sudo ./mipi_to_yuv /dev/video0

在windows下使用yuv播放器打开任意一张图片:

6、总结

参考文章:

Camera | 4.瑞芯微平台MIPI摄像头应用程序编写_瑞芯微-CSDN专栏

源码gitee仓库:

仓库主页:
https://gitee.com/cattle_l/v4l2_app.git
直接拉取:
git clone https://gitee.com/cattle_l/v4l2_app.git

相关文章:

摄像头应用编程(三):多平面视频采集

文章目录 1、前言2、环境介绍3、步骤4、应用程序编写5、测试5.1、编译应用程序5.2、运行应用程序 6、总结 1、前言 在查看摄像头类型时&#xff0c;大致可以分为两类&#xff1a;Video Capture 和 Video Capture Multiplanar。 本次应用程序主要针对类型为Video Capture Multi…...

用工厂函数简化redis配置

工厂函数&#xff08;Factory Function&#xff09;不同于构造函数&#xff0c;工厂函数就是一个普通函数&#xff0c;通常用于创建对象或实例。它的核心思想是通过一个函数来封装对象的创建逻辑&#xff0c;而不是直接使用类的构造函数。工厂函数可以根据输入参数动态地决定创…...

网页制作11-html,css,javascript初认识のCCS样式列表(上)

Advantage. 更加精确的控制网页的内容、形式。样式更加丰富。定义样式灵活。 一、css的基本语法 Css的语法结构由三部分组成&#xff1a; 1、选择符 Selector&#xff1a; 指这种样式编码所要针对的对象&#xff0c;可以是一个xhtml标签&#xff0c;例如body hl&#xff1b…...

VSCode 移除EmmyLua插件的红色波浪线提示

VSCode 中安装插件EmmyLua&#xff0c;然后打开lua文件的时候&#xff0c;如果lua代码引用了C#脚本的变量&#xff0c;经常出现 “undefined global variable: UnityEngineEmmyLua(undefined-global)” 的红色波浪线提示&#xff0c;这个提示看着比较烦人&#xff0c;我们可以通…...

【PHP】fastadmin框架后台开关的传值问题

文章目录 概要技术细节 概要 fastadmin的后台ui框架中&#xff0c;处理列表开关的场景比较多见&#xff0c;有时传值不是0和1&#xff0c;而是1和2&#xff0c;那么就需要调整js的代码了。 技术细节 处理开关字段的js代码&#xff1a; {field: is_sellOut,title: 销售中,yes…...

机器学习数学基础:37.统计学基础知识1

统计学基础概念入门教程 在统计学的世界里&#xff0c;概率和数据分布是基础且重要的概念&#xff0c;它们能帮助我们理解和分析各种数据现象。除此之外&#xff0c;点估计与区间估计也是在对总体参数进行推断时常用的方法。下面&#xff0c;就为统计学小白详细讲解这些关键的…...

HTB academy ---Active Directory Enumeration Attacks---An ACE in the Hole

ACL Enumeration 那么章节开始我们先枚举一下用户的GUID&#xff0c;也就是如图所示objectacetype这一块儿的内容&#xff0c;这一步的目的其实是观察我们已获得的用户对其他用户的权限&#xff0c;这个权限就是通过这个GUID得出来的&#xff08;当然枚举的时间会比较长可能需…...

2025华为OD机试真题目录【E卷+A卷+B卷+C卷+D卷】持续收录中...

摘要 本专栏提供2025最新最全的华为OD机试真题库&#xff08;EABCD卷&#xff09;&#xff0c;包括100分和200分题型。题目包含题目描述、输入描述、用例、备注和解题思路、多种语言解法&#xff08;Java/JS/Py/C/C&#xff09;。希望小伙伴们认真学习、顺利通过。 声明 本专…...

【Linux第一弹】Linux基础指令(上)

目录 1.ls指令 1.1 ls使用实例 2.pwd指令 3.cd指令 3.1 cd使用实例 4.touch指令 4.1touch使用实例 5.mkdir指令 5.1mkdir使用实例 6.rmdir指令和rm指令 6.1 rmdir指令使用实例->: 6.2 rm指令使用实例 7.man指令 8.cp指令 8.1 cp 使用实例 9.mv指令 9.1mv使用…...

linux下自旋锁(spin_lock)

文章目录 Linux自旋锁&#xff1a;单核与多核环境下的实现差异与核心原理 &#x1f5a5;️&#x1f512;一、自旋锁的核心特性 ⚙️&#x1f3af; 适用场景&#xff1a; 二、单核环境下的自旋锁实现 &#x1f6d1;1. **实现原理** &#x1f504;2. **关键代码解析** &#x1f4…...

【华为OD机考】2024E+D卷真题【完全原创题解 详细考点分类 不断更新题目 六种主流语言Py+Java+Cpp+C+Js+Go】

可上 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 oj1441了解算法冲刺训练&#xff08;备注【CSDN】否则不通过&#xff09; 文章目录 相关推荐阅读模拟 数学排序字符串基础数组基础系统设计蒙特卡洛模拟其他 栈 常规栈单调栈 队列&#xff08;题目极少&#xff0c;几乎不…...

VirtualBox虚拟机转VM虚拟机

前言&#xff1a;部分靶机只适用于VirtualBox&#xff0c;VM打不开VirtualBox的文件&#xff0c;所以需要进行转换 前置条件&#xff1a;本机已经下载VM和VirtualBox 第一步&#xff1a;文件转换 找到VirtualBox.exe所在位置&#xff0c;启动cmd窗口 文件转换的命令&#xf…...

UE5设置打开新窗口默认停靠在主窗口

打开引擎所在位置 找到路径 ...\UE_5.5\Engine\Config 找到 BaseEditorPerProjectUserSettings.ini 文件 打开后CtrlF搜索 [/Script/UnrealEd.EditorStyleSettings] 在末尾添加一行 AssetEditorOpenLocationMainWindow 保存即可,之后的项目都是默认主窗口打开...

vi常见操作命令

vi&#xff08;Visual Editor&#xff09;是Linux和Unix系统中广泛使用的文本编辑器&#xff0c;它以其高效、强大的功能深受程序员和系统管理员的喜爱。这个“常用vi命令集合.zip”压缩包包含了一份详细记录了vi编辑器常用命令的文档“常用vi命令集合.doc”。下面&#xff0c;…...

AIGC和搜索引擎的异同

AIGC&#xff08;生成式人工智能&#xff09;与搜索引擎的核心差异体现在信息处理方式和输出形态上&#xff0c;我们可以从以下维度对比&#xff1a; 一、工作原理的本质差异 信息检索机制 搜索引擎&#xff1a;基于关键词匹配&#xff08;如"中暑怎么办"→返回相关…...

【ATXServer2】Android无法正确显示手机屏幕

文章目录 现象原因分析与解决排查手机内部minicap 解决minicap问题查看移动端Android SDK版本查看minicap支持版本单次方案多次方案 现象 原因分析与解决 由于atxserver2在与Android动终端的链接过程中使用了agent&#xff1a;atxserver2-android-provider&#xff0c;按照项目…...

fps项目总结:动画蓝图

文章目录 状态不同状态的并存性。 状态 不同状态的并存性。...

Trae:国内首款AI原生IDE,编程效率大提升

今年一月&#xff0c;在新闻上看到字节跳动面向海外市场推出了一款名为Trae的AI集成开发环境&#xff08;IDE&#xff09;。起初&#xff0c;我并未给予过多关注&#xff0c;因为市面上已有不少IDE集成了AI插件&#xff0c;功能也非常全面&#xff0c;而字节跳动自家的MarsCode…...

《深度学习进阶》第8集:多模态学习与跨领域融合**

第8集&#xff1a;多模态学习与跨领域融合 在深度学习的浪潮中&#xff0c;单模态模型&#xff08;如仅处理图像或文本的模型&#xff09;已经取得了令人瞩目的成就。然而&#xff0c;随着人工智能应用场景的复杂化和多样化&#xff0c;多模态学习逐渐成为研究和应用的热点。多…...

大模型在败血症预测及围手术期管理中的应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、败血症概述 2.1 定义与流行病学 2.2 病因与发病机制 2.3 临床表现与诊断标准 2.4 并发症与危害 三、大模型技术原理及在医疗领域的应用 3.1 大模型技术概述 3.2 大模型在医疗领…...

Hadoop架构详解

Hadoop 是一个开源的分布式计算系统&#xff0c;用于存储和处理大规模数据集。Hadoop 主要由HDFS&#xff08;Hadoop Distributed File System&#xff09;、MapReduce、Yarn&#xff08;Jobtracker&#xff0c;TaskTracker&#xff09;三大核心组件组成。其中HDFS是分布式文件…...

【操作系统】文件

文件 一、文件的概念二、文件目录2.1 FCB2.2 目录结构2.2.1 单机目录2.2.2 两级目录2.2.3 树形目录结构2.2.4 无环图目录结构 三、文件的逻辑结构和物理结构3.1 文件的逻辑结构3.1.1 顺序文件3.1.2 索引文件3.1.3 索引顺序文件 3.2 文件的物理结构3.2.1 连续分配3.2.2 隐式链接…...

我的ChatGPT怎么登不上?

近期&#xff0c;不少用户反馈在使用ChatGPT时遇到登录困难、连接超时等问题。本文将从技术角度分析常见原因&#xff0c;并提供合规、安全的解决方案&#xff0c;同时结合开发者实际需求推荐实用工具&#xff0c;助您高效应对登录障碍。 ChatGPT登录失败的常见原因 网络环境限…...

实时金融信息搜索的新突破:基于大型语言模型的智能代理框架

“An Agent Framework for Real-Time Financial Information Searching with Large Language Models” 论文地址&#xff1a;https://arxiv.org/pdf/2502.15684 摘要 在金融决策过程中&#xff0c;需要处理海量的实时信息以及复杂的时序关系。然而&#xff0c;传统的搜索引擎在…...

Linux服务器Ubuntu系统环境中安装Jupyter Notebook并且配置内核以便在网页端调用

一、前提 在使用终端访问&#xff0c;并且个人目录下已创建环境。如果还不知道创建环境和安装包&#xff0c;请参考之前文章 机器学习模型算法代码需要在环境中安装的库和包 二、安装相关库Jupyter Notebook 使用pip 或 conda指令安装&#xff0c;确保服务器上安装了 Python …...

Magic 1-For-1: 在一分钟内生成一分钟视频片段(基于Python实现,视频生成模型)

一、前言 文章所有代码都使用Python实现&#xff0c;并且可以分享开源&#xff0c;文章末尾联系博主或者往期文章末尾联系&#xff0c;欢迎探讨学习分享专业领域前言研究和技术分享。 二、摘要 在本技术报告中&#xff0c;我们介绍了 Magic 1-For-1 &#xff08;Magic141&#…...

基于RK3588的重症监护信息系统应用解决方案

重症监护信息系统是医院临床信息系统的重要组成部分&#xff0c;也是医院信息化建设的重要组成部分。通过集成化的电子病历、实时监测、决策支持等功能&#xff0c;提高重症患者的诊疗效率和质量。 图片来源于网络 重症监护信息系统主要由数据信息采集单元、信息处理单元、通信…...

二十三种设计模式

2 工厂方法模式 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通…...

网络安全六层模型

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、单选题&#xff08;一&#xff09; 1、在以下人为的恶意攻击行为中&#xff0c;属于主动攻击的是&#xff08; &#xff09;A A&#xff0e;数据篡改及破坏 B…...

BrainSCK:通过知识注入和再激活进行大脑结构和认知对齐以诊断脑部疾病

文章目录 BrainSCK: Brain Structure and Cognition Alignment via Knowledge Injection and Reactivation for Diagnosing Brain Disorders摘要方法实验结果 BrainSCK: Brain Structure and Cognition Alignment via Knowledge Injection and Reactivation for Diagnosing Bra…...

【在Spring Boot项目中接入Modbus协议】

【在Spring Boot项目中接入Modbus协议】 在Spring Boot项目中接入Modbus协议&#xff0c;可以通过使用第三方库&#xff08;如jamod或modbus4j&#xff09;来实现。以下是一个基本的步骤指南&#xff0c;帮助你在Spring Boot项目中集成Modbus。 1. 添加依赖 首先&#xff0c;…...

CSS_复合选择器

目录 7. 复合选择器 7.1 交集选择器 7.2 并集选择器 7.3 后代选择器 7.4 子代选择器 7.5 兄弟选择器 7.6 属性选择器 7.7 伪类选择器 7.7.1动态伪类 7.7.2结构伪类 7.7.3否定伪类 7.7.4 UI伪类 7.7.5 目标选择器 7. 复合选择器 7.1 交集选择器 作用&#xff1a;…...

QT-信号与槽

1.在注册登录的练习里面&#xff0c;追加一个QListWidget项目列表 要求:点击注册之后&#xff0c;将账号显示到列表窗口小部件上面去 以及&#xff0c;在列表窗口小部件中双击某个账号的时候&#xff0c;将该账号删除 头文件 #ifndef WIDGET_H #define WIDGET_H #include <…...

在python语言中,请详细介绍一下比较运算符中等于符号(==)的情况?

李升伟 整理 一、有关思考 嗯&#xff0c;我现在要详细了解一下Python中的等于运算符&#xff08;&#xff09;。首先&#xff0c;我得回忆一下自己之前学过的知识&#xff0c;可能有些地方不太确定&#xff0c;需要仔细思考或者查阅资料。 首先&#xff0c;等于运算符&#…...

halcon学习笔记1

环境的搭建就不说了&#xff0c;主要是作者在入职后的实际学习与实践。 打开应用程序 这里作者的个人理解是1号区域主要是可以观察到读取的图像以及后续对图像进行何种操作&#xff0c;2的算子类似于Opencv中的API&#xff0c;可以在上面进行参数的调整&#xff0c;例如read_I…...

解决寻找两个正序数组中位数问题:C语言实现与解析

在算法学习和实际编程应用中&#xff0c;处理数组相关的问题是很常见的。其中&#xff0c;寻找两个正序数组的中位数就是一个经典的题目&#xff0c;不仅考验对数组操作的熟悉程度&#xff0c;还涉及到对算法效率的考量。今天&#xff0c;我们就来深入探讨如何使用C语言解决这一…...

在 ArcGIS Pro 中描绘和绘制流域

查找数字高程模型 (DEM) 对于 DEM&#xff0c;我使用了USGS Lidar Explorer 地图。该地区有 10m 分辨率的 DEM。 设置坐标系 将坐标系设置为 UTM&#xff0c;以尽量减少失真&#xff0c;并使工具在后续过程中进行更精确的计算。对于俄勒冈州&#xff0c;这是 UTM 区域 10。 …...

在华为统信UOS中安装Anaconda,并配置PyCharm

这里写目录标题 1. 下载Anaconda安装包2. 打开终端3. 安装Anaconda4.下载安装PyCharm 1. 下载Anaconda安装包 首先打开 Anaconda官网 : https://www.anaconda.com/products/distribution&#xff0c;接受或拒绝网站投喂的饼干 然后输入自己的邮箱后&#xff0c;进入下载页面…...

谈谈 HTTPS 的工作原理,SSL / TLS 握手流程是什么?

一、HTTPS 核心机制&#xff1a;非对称加密 对称加密 HTTPS HTTP over TLS/SSL&#xff0c;通过 ​混合加密体系​ 解决三大问题&#xff1a; ​防窃听​ - 对称加密传输内容&#xff08;如 AES&#xff09;​防篡改​ - 数字签名验证数据完整性​防冒充​ - 数字证书验证服…...

Linux虚拟机网络配置-桥接网络配置

简介 本文档旨在指导用户如何在虚拟环境中配置Linux系统的桥接网络&#xff0c;以实现虚拟机与物理主机以及外部网络的直接通信。桥接网络允许虚拟机如同一台独立的物理机一样直接连接到物理网络&#xff0c;从而可以被分配一个独立的IP地址&#xff0c;并能够与网络中的其他设…...

‌Transformer架构

‌核心原理‌ ‌自注意力机制‌ 通过计算输入序列中每个位置与其他位置的关联权重&#xff08;Query-Key匹配&#xff09;&#xff0c;动态聚合全局信息&#xff0c;解决了传统RNN/CNN的长距离依赖问题‌。 实现公式&#xff1a;Attention(Q,K,V)softmax(QKTdk)VAttention(…...

Sat- nerf深度损失

首先损失函数定义在metrics.py,代码如下: class DepthLoss(torch.nn.Module):def __init__(self, lambda_ds1.0):super().__init__()# 初始化lambda_ds参数&#xff0c;用于调节深度损失的权重&#xff0c;并且将其缩小为原来的1/3self.lambda_ds lambda_ds / 3.# 初始化均方…...

c++的多态

1.多态的概念 多态&#xff0c;通俗来说&#xff0c;就是多种形态 多态分为编译时多态(静态多态)和运⾏时多 态(动态多态) 静态多态主要是函数重载和函数模板&#xff0c;它们传不同类型的参数就可以调⽤不同的函数&#xff0c;通过参数不同达到多种形态&#xff0c;之所以叫…...

基于 Rust 与 GBT32960 规范构建高并发、高可用、高扩展服务端程序

一、需求背景 如今&#xff0c;数字化发展特别快&#xff0c;各种设备和系统之间要频繁地交换数据&#xff0c;而且这个过程变得越来越复杂。很多行业都有难题&#xff0c;既要处理大量的数据&#xff0c;又得快速响应各种命令。比如说在智能交通这一块&#xff0c;路上跑的车…...

《宝塔 Nginx SSL 端口管理实战指南:域名解析、端口冲突与后端代理解析》

&#x1f4e2; Nginx & SSL 端口管理分析 1️⃣ 域名解析与 SSL 申请失败分析 在使用宝塔申请 www.mywebsite.test 的 SSL 证书时&#xff0c;遇到了解析失败的问题。最初&#xff0c;我认为 www 只是一个附加的前缀&#xff0c;不属于域名的关键部分&#xff0c;因此只为…...

iOS 实现UIButton自动化点击埋点

思路&#xff1a;我们HOOK UIControl的 addtarget:action:forControlEvents方法&#xff0c;交换UIControl的 addtarget:action:forControlEvents 方法的实现&#xff0c; 在交换的方法中添加原来响应的同时&#xff0c;再添加一个埋点响应&#xff0c;该响应方法实现了点击埋点…...

Java 并行流(Parallel Stream)详解

并行流是Java 8引入的高效处理集合数据的工具&#xff0c;通过多线程加速计算。以下是其核心概念、使用方法及注意事项的详细指南&#xff1a; 1. 核心概念与原理 并行处理机制&#xff1a;将数据分割为多个块&#xff0c;利用Fork/Join框架在多个线程上并行处理&#xff0c;…...

开源软件的版权保护措施

开源软件的版权保护措施主要有以下几方面&#xff1a; 著作权保护 明确版权归属与许可使用&#xff1a;开源软件的源代码是著作权法保护的对象&#xff0c;作者享有复制权、发行权、改编权等专有权益。通过开源协议&#xff0c;作者明确授权用户使用、复制和修改软件&#xf…...

11.24 SpringMVC(1)@RequestMapping、@RestController、@RequestParam

一.RequestMapping("/user")//HTTP 请求方法既支持get也支持post&#xff0c;可表示为类路径与方法路径 二.RequestMapping(value "/m7", method {RequestMethod.POST, RequestMethod.GET}) value这个参数指定了请求的 URL 路径。method 参数指定了允许…...

杰和科技GDSM-C数字化信息发布管理系统,信息触达无死角,更全面

在数字化时代&#xff0c;信息的高效传递与精准管理成为商业、教育、公共服务等领域的核心需求。传统信息发布模式常面临设备分散难管控、内容更新滞后、多屏协同效率低等问题。 杰和科技为此开发了一套数字化信息发布管理系统GDSM-C&#xff08;简称 GDSM-C&#xff09;系统&a…...