CN117714643A - 一种相机数据处理方法、系统和装置 - Google Patents
一种相机数据处理方法、系统和装置 Download PDFInfo
- Publication number
- CN117714643A CN117714643A CN202311713752.8A CN202311713752A CN117714643A CN 117714643 A CN117714643 A CN 117714643A CN 202311713752 A CN202311713752 A CN 202311713752A CN 117714643 A CN117714643 A CN 117714643A
- Authority
- CN
- China
- Prior art keywords
- data
- camera
- processing
- preset
- pointer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 11
- 238000012545 processing Methods 0.000 claims abstract description 126
- 238000000034 method Methods 0.000 claims abstract description 46
- 230000005540 biological transmission Effects 0.000 claims abstract description 20
- 238000003384 imaging method Methods 0.000 claims description 33
- 230000011218 segmentation Effects 0.000 claims description 4
- 230000008569 process Effects 0.000 description 21
- 238000012546 transfer Methods 0.000 description 12
- 238000012986 modification Methods 0.000 description 8
- 230000004048 modification Effects 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 7
- 230000006835 compression Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 4
- 230000006872 improvement Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N7/00—Television systems
- H04N7/18—Closed-circuit television [CCTV] systems, i.e. systems in which the video signal is not broadcast
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/50—Information retrieval; Database structures therefor; File system structures therefor of still image data
- G06F16/51—Indexing; Data structures therefor; Storage structures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/76—Television signal recording
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/76—Television signal recording
- H04N5/765—Interface circuits between an apparatus for recording and another apparatus
- H04N5/77—Interface circuits between an apparatus for recording and another apparatus between a recording apparatus and a television camera
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Studio Devices (AREA)
Abstract
本说明书实施例公开了一种相机数据处理方法、系统和装置,其中,该方法包括:获取相机数据,将相机数据保存至第一数据缓冲区;将相机数据对应的数据指针保存至预设数据结构;基于数据指针和预设数据结构,从第一数据缓冲区获取相机数据并进行数据处理;将处理后的相机数据保存至第二数据缓冲区,第二数据缓冲区提供数据传输接口。
Description
技术领域
本说明书涉及数据处理技术领域,特别涉及一种相机数据处理方法、系统和装置。
背景技术
相机采集数据后,需进行相机数据的进一步存储及处理,例如,自动驾驶车辆的相机装置采集周边环境信息后,需将相机数据进行进一步的传输和处理,以供后续目标检测、路径规划等使用。相机的驱动装置直接影响图像质量,而现有驱动装置存在性能不足的问题,计算资源占用带宽较大,与系统其他进程争抢计算资源。并且图像发送延迟较大,例如,传输前后的图像压缩和解压缩严重消耗计算资源和增大了图像传输的延迟时间。
因此,本说明书一些实施例提出了一种相机数据处理方法和系统,以提高相机数据的处理效率。
发明内容
本说明书实施例之一提供一种相机数据处理方法,相机数据处理方法包括:获取相机数据,将所述相机数据保存至第一数据缓冲区;将所述相机数据对应的数据指针保存至预设数据结构;基于所述数据指针和所述预设数据结构,从所述第一数据缓冲区获取所述相机数据并进行数据处理;将处理后的相机数据保存至第二数据缓冲区,所述第二数据缓冲区提供数据传输接口。
在一些实施例中,所述将所述相机数据保存至第一数据缓冲区,包括:对所述相机数据进行数据分割,得到多个数据块;通过多个数据拷贝线程,以并行处理方式将所述多个数据块从成像设备拷贝至所述第一数据缓冲区。
在一些实施例中,在通过所述多个数据拷贝线程进行数据拷贝时,所述多个数据块按字节对齐。
在一些实施例中,所述预设数据结构无锁且使用共享智能指针。
在一些实施例中,所述预设数据结构允许多个线程基于所述数据指针和所述预设数据结构同时进行读取和写入操作。
在一些实施例中,所述预设数据结构包括环形队列,其中,新拷贝数据对应的数据指针添加至所述环形队列尾部;需处理数据时,从所述环形队列头部读取待处理数据对应的数据指针;所述环形队列填满后,新拷贝数据对应的数据指针覆盖所述环形队列头部的数据对应的数据指针,并将所述环形队列头部变更为环形队列尾部。
在一些实施例中,所述基于所述数据指针和所述预设数据结构,从所述第一数据缓冲区获取所述相机数据并进行数据处理,包括:通过多个处理线程,基于所述数据指针以并行处理方式从所述第一数据缓冲区获取所述相机数据并进行数据处理。
在一些实施例中,所述方法还包括:将所述处理后的相机数据存储至预设共享内存区域,在所述共享内存区域,所述处理后的相机数据以环形队列形式存储。
本说明书实施例之一提供一种相机数据处理系统,相机数据处理系统包括:获取模块,用于获取相机数据;第一存储模块,用于将所述相机数据保存至第一数据缓冲区,将所述相机数据对应的数据指针保存至预设数据结构中;数据处理模块,用于基于所述数据指针和所述预设数据结构,从所述第一数据缓冲区获取所述相机数据并进行数据处理;第二存储模块,用于将处理后的相机数据保存至第二数据缓冲区,所述第二数据缓冲区提供数据传输接口。
本说明书实施例之一提供一种相机数据处理装置,包括处理器,所述处理器用于执行上述相机数据处理方法。
附图说明
本说明书将以示例性实施例的方式进一步说明,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:
图1是根据本说明书一些实施例所示的示例性相机数据处理系统的应用场景示意图;
图2是根据本说明书一些实施例所示的相机数据处理方法的示例性流程图;
图3是根据本说明书一些实施例所示的相机数据处理方法的示意图;
图4A-图4B是根据本说明书一些实施例所示的环形队列的示意图;
图5是根据本说明书一些实施例所示的示例性相机数据处理系统的模块图。
具体实施方式
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本说明书的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。
应当理解,本文使用的“系统”、“装置”、“单元”和/或“模块”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。
如本说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。
本说明书中使用了流程图用来说明根据本说明书的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
相机驱动是一种软件或固件,能够管理和控制计算机与相机之间的通信和数据交互。目前,相关技术中的相机驱动技术方案,不管是厂商定制的相机驱动,还是开源的相机驱动,大部分软件设计和实现都是基于CPU代码实现。
例如,1.使用开源或者特定的库从相机设备中获取基于数据流的数据,该相机数据一般支持多种格式,最常用的是YUV数据格式,这种数据格式数据量小,并且能够保证数据完整性。在获取到YUV数据之后会通过YUV到RGB图像转换算法将YUV图像转换成客户需要的RGB数据。为了保证通用性,这个过程一般都是在CPU上进行,但是这个过程消耗资源比较大。显然,在实时性要求较高的场景(例如,自动驾驶场景)中,将严重影响系统性能,甚至会影响到其他子系统的正常运行。
2.大部分相机驱动没有提供图像去畸变功能,需要客户端(例如,自动驾驶场景中驾驶系统内的各个设备和/或组件)根据相机参数进行去畸变操作,而大部分去畸变算法都是基于CPU处理,比较消耗CPU资源,增加客户端处理的复杂度。
3.通用相机驱动在将相机数据转换成RGB图像数据之后,会提供一个通用接口,用户需要根据自己的需求调用相机驱动接口获取图像数据,这会增加数据拷贝的操作。因为图像数据本身都比较大,所以每次数据拷贝都会消耗一定的系统性能,增加系统负担。
4.大部分相机驱动不支持动态尺寸的输出,因为图像数据在做缩放时耗时很长,为了减少图像的传输延迟而没有缩放操作,转而将缩放操作的损耗转嫁到用户身上。
可见,相关技术中的相机驱动技术方案为了通用性而牺牲掉性能,为了减少数据传输延迟,将一部分图像操作(例如,去畸变、图像缩放)推迟到用户端,这会增加用户的工作负担,并且不能满足特殊场景的定制功能。
有鉴于此,本说明书一些实施例提供了一种相机数据处理方法和系统,不仅能够大幅提升相机图像读取性能,减少数据传输时间,并且在图像处理以及图像传输过程中性能提升明显,减少性能损耗、传输延迟,从而满足各种实时性要求较高的场景(例如,自动驾驶场景)对于相机数据的需求。
图1是根据本说明书一些实施例所示的示例性相机数据处理系统的应用场景的示意图。
如图1所示,相机数据处理系统的应用场景100中包括成像设备110、处理设备120、终端设备130、存储设备140和网络150。
成像设备110是指能够用于采集图像数据的设备。在一些实施例中,成像设备110包括透镜、传感器、快门和图像处理单元等。在一些实施例中,成像设备110,能够通过图像处理单元将静止或动态图像转化为电子信号或数字数据以供存储、处理或显示。
在一些实施例中,成像设备110具有多种类型和/或视角。例如,自动驾驶场景中,成像设备110可以包括车载的前视相机、后视相机、侧视相机、顶部相机、内部相机等,设置于驾驶环境(例如,建筑物上、灯柱上、路口处)中的路侧相机等,在一些实施例中,成像设备110还可以包括鱼眼相机、红外相机、高动态范围相机等。
上述成像设备110的相关描述仅用于说明目的,而无意限制本说明书的范围。
处理设备120能够用于处理从成像设备110、终端设备130、存储设备140和/或相机数据处理系统的应用场景100的其他组件获取的数据和/或信息,并对数据和/或信息进行分析和/或处理。例如,处理设备120从成像设备110获取相机数据;并对相机数据进行处理。在一些实施例中,处理设备120可以设置于自动驾驶车辆上,例如,设置于自动驾驶车辆上的计算设备(例如,嵌入式设备、小型电脑等)等。在一些实施例中,处理设备120可以包括CPU(中央处理器)和/或GPU(图形处理器)。GPU是指具有图像处理单元,例如,CUDA(ComputeUnified Device Architecture)单元、流处理器等的设备。GPU可以包括GeForce GTX1080Ti、GeForce RTX 3080、Quadro P5000、Radeon RX 580、Radeon RX Vega 64、RadeonVII、Intel Iris Xe Graphics等。
在一些实施例中,相机驱动在处理设备120运行。
在一些实施例中,处理设备120是单一服务器或服务器组。服务器组可以是集中式的或分布式的。在一些实施例中,处理设备120可以是本地或远程的。例如,处理设备120可以通过网络150从成像设备110、终端设备130和/或存储设备140访问信息和/或数据。又例如,处理设备120可以直接连接到成像设备110、终端设备130和/或存储设备140以访问信息和/或数据。在一些实施例中,处理设备120在云平台上实现。例如,云平台包括私有云、公共云、混合云、社区云、分布式云、云间云、多云等或其任意组合。
在一些实施例中,处理设备120和成像设备110可以集成为一体。在一些实施例中,处理设备120和成像设备110可以直接或间接相连接,联合作用实现本说明书所述的方法和/或功能。
终端设备130可以与成像设备110、处理设备120和/或存储设备140通信和/或连接。在一些实施例中,可以通过终端设备130实现与用户的交互。在一些实施例中,终端设备130可以包括移动设备131、平板电脑132、笔记本电脑133等或其任意组合。在一些实施例中,终端设备130(或其全部或部分功能)可以集成在处理设备120中。在一些实施例中,终端设备130可以是本说明书所提到的客户端。
存储设备140可以存储数据、指令和/或任何其他信息。在一些实施例中,存储设备140可以存储从成像设备110、处理设备120、终端设备130和/或获取的数据(例如,相机数据等)。在一些实施例中,存储设备140可以存储处理设备120用来执行或使用以完成本说明书中描述的示例性方法的数据和/或指令。
在一些实施例中,存储设备140可以包括一个或多个存储组件,每个存储组件可以是一个独立的设备,也可以是其他设备的一部分。在一些实施例中,存储设备140可包括随机存取存储器(RAM)、只读存储器(ROM)、大容量存储器、可移动存储器、易失性读写存储器等或其任意组合。在一些实施例中,存储设备140可在云平台上实现。在一些实施例中,存储设备140可以是成像设备110、处理设备120和/或终端设备130的一部分。
网络150可以包括能够促进信息和/或数据交换的任何合适的网络。在一些实施例中,相机数据处理系统的应用场景100的至少一个组件(例如,成像设备110、处理设备120、终端设备130、存储设备140)可以通过网络150与相机数据处理系统的应用场景100中至少一个其他组件交换信息和/或数据。例如,处理设备120可以通过网络150从成像设备110获取相机数据等。
应当注意,上述关于相机数据处理系统的应用场景100的描述仅仅是为了说明的目的而提供,并不意图限制本说明书的范围。对于本领域的普通技术人员来说,可以根据本说明书的描述,做出多种修改或变化。例如,相机数据处理系统的应用场景100可以在其它设备上实现类似或不同的功能。然而,这些变化和修改不会背离本说明书的范围。
图2是根据本说明书一些实施例所示的相机数据处理方法的示例性流程图。在一些实施例中,流程200可以由处理设备(例如,处理设备120中的CPU或GPU)执行。例如,流程200可以以程序或指令的形式存储在存储装置(如处理设备的自带存储单元或外接存储设备)中,所述程序或指令在被执行时,可以实现流程200。流程200可以包括以下操作。
步骤210,获取相机数据,将相机数据保存至第一数据缓冲区。在一些实施例中,步骤210可以由处理设备或获取模块510执行。
相机数据是指由成像设备捕获的图像或视频信息。例如,以自动驾驶场景为例,相机数据可以包括成像设备捕获的驾驶环境的图像或视频信息等。在一些实施例中,驾驶环境中包括道路、交通标志、信号灯、行人、非机动车、车辆等。在一些实施例中,驾驶环境中包括装卸设备(例如,重机、吊车、装卸机和输送带等)、仓库、货物、集装箱、码头、导航标志、工作人员、车辆等。
在一些实施例中,成像设备110能够实时采集相机数据并保存在成像设备110的内存中,获取模块510可以通过有线和/或无线接口、传感器数据总线等从成像设备110的内存获取相机数据。
第一数据缓冲区是指用于临时存储相机数据的内存区域。例如,以自动驾驶场景为例,第一数据缓冲区可以为设置于自动驾驶车辆上的计算设备(也可称为相机驱动装置)的内存中的一块区域。
在一些实施例中,处理设备可以提前分配第一数据缓冲区,以减少实时运行时的时间成本。
在一些实施例中,获取模块510可以在从成像设备的内存中读取到相机数据后,直接将相机数据保存至第一数据缓冲区。
在一些实施例中,在获取相机数据时,处理设备可以对相机数据进行数据分割,得到多个数据块;并通过多个数据拷贝线程,以并行处理方式将所述多个数据块从成像设备拷贝至所述第一数据缓冲区。
在一些实施例中,获取模块510可以基于线程数量和/或相机数据的大小对相机数据进行数据分割。例如,多个数据块的数量可以是数据拷贝线程数量的整数倍,这样可以使每个线程处理的相同数量的数据块,以充分利用每个线程的性能。又例如,相机数据越大时,可以将相机数据分成越多的数据块,确保每个数据块的大小合理,以减少大块内存的使用,避免内存访问冲突。
数据拷贝线程是指用于执行数据拷贝操作的线程。数据拷贝线程可以通过多种方法实现,例如,迭代拷贝、异步I/O、内存映射、向量化指令、使用并行计算库或框架(如OpenMP、CUDA、OpenCL等)等。本实施例对具体实现方法不作限定。
并行处理是指在同一时间内执行多个任务或操作。并行处理可以将一个任务分解为多个子任务,并使用多个处理单元(如CPU、线程等)同时处理这些子任务,以加快整体计算速度。并行处理可以显著提高计算机系统的性能和效率。在并行处理中,不同的任务可以同时进行,而不需要按顺序逐个完成。
示例地,当成像设备中具有12个数据块时,获取模块510可以通过3个数据拷贝线程同时拷贝这些数据块,例如,拷贝线程1拷贝数据块1-4,拷贝线程2拷贝数据块5-8,拷贝线程3拷贝数据块9-12。
在一些实施例中,每个数据拷贝线程内部,可以使用NEON(New EvolvedOptimized Instruction)指令集来进行内存拷贝操作。NEON指令集是为ARM架构的处理器设计的SIMD(Single Instruction,Multiple Data,单指令多数据)。SIMD指令通过在单个指令中操作多个数据元素来实现数据并行性,相当于一条SIMD指令拷贝多个数据块,在每个数据拷贝线程内部实现数据的并行拷贝,从而实现高效的数据并行操作。例如,拷贝线程1内部,可以通过SIMD指令同时拷贝数据块1-4。在一些实施例中,每个数据拷贝线程内部还可以通过其他SIMD指令实现,例如,Intel SSE(Streaming SIMD Extensions)、AMD SIMD、IBM Altivec/VMX(Vector Multimedia eXtension)、MIPS SIMD、SIMT(SingleInstruction,Multiple Thread)等,本实施例对具体实现方法不作限定。
通过多个数据拷贝线程并行处理,以及在每个数据拷贝线程内部使用SIMD指令,相当于数据拷贝时进行了双重的并行(即多个数据拷贝线程并行和每个数据拷贝线程内通过SIMD指令并行拷贝多个数据块),大大提高了数据拷贝效率。
在一些实施例中,获取模块510可以对数据拷贝过程进行性能测试和优化,以确定最佳的拷贝线程数量、数据块大小和SIMD指令的使用方式。优化的目标是最大化数据传输的吞吐量。例如,执行多次测试,并计算每次测试的数据传输的吞吐量;每次测试中使用不同数量的拷贝线程、将相机数据分割成不同大小的数据块和/或一条SIMD指令拷贝不同数量的数据块;基于吞吐量最大的若干次测试优化数据拷贝过程。
在一些实施例中,在通过多个数据拷贝线程进行数据拷贝时,多个数据块按字节对齐。例如,一条指令能够拷贝128个字节,对相机数据进行数据分割时,要使每个数据块的大小尽量跟128字节靠齐,例如,每个数据块的大小是128字节的整数倍。确保要拷贝的数据块是按字节对齐的,能够提高NEON指令的效率。在一些实施例中,如果数据块没有按照所需的字节对齐,可能需要使用NEON指令来执行非对齐内存操作。
步骤220,将相机数据对应的数据指针保存至预设数据结构。在一些实施例中,步骤220可以由处理设备120或第一存储模块520执行。
相机数据对应的数据指针为指向相机数据的存储地址的变量。在一些实施例中,多个数据块可以对应多个数据指针,每个数据指针为指向对应数据块的存储地址的变量。
预设数据结构是指预先确定好的用于存储相机数据的方式。其定义了数据元素之间的关系以及对这些数据元素进行操作的规则。数据结构表明了将相机数据存储在计算机内存中的方式,以便有效地访问和操作相机数据。
在一些实施例中,预设数据结构包括数组、链表、栈、队列、树、图等。数组能够提供随机访问和连续存储的能力,链表支持动态插入和删除操作,栈和队列分别采用先进后出和先进先出的策略,树和图用于表示层次结构和复杂关系等。
在一些实施例中,预设数据结构为无锁安全队列。无锁安全队列允许多个线程或进程同时对队列进行读取和写入操作,而无需使用传统的锁机制来保护共享资源。
在一些实施例中,预设数据结构允许多个线程基于数据指针和预设数据结构同时进行读取和写入操作。
图3是根据本说明书一些实施例所示的相机数据处理方法的示意图。
如图3所示,预设数据结构允许多个数据拷贝线程TN1、TN2、…、TNN和多个处理线程TM1、TM2、…、TMM同时进行读取和写入操作,其中,N和M为正整数。多个数据拷贝线程TN1、TN2、…、TNN将多个数据指针PN1、PN2、…、PNN写入预设数据结构,多个处理线程TM1、TM2、…、TMM从预设数据结构读取出多个数据指针PM1、PM2、…、PMM。
在一些实施例中,预设数据结构无锁且使用共享智能指针。例如,预设数据结构可以是无锁安全队列。无锁安全队列在用于保存从成像设备中读取的数据指针时,可使用共享智能指针,无需担心内存管理问题。
在一些实施例中,无锁安全队列的工作流程可以包括:入队(Enqueue):将数据指针添加到队列尾部;出队(Dequeue):从队列头部获取数据指针。无锁安全队列能够保证线程安全性,例如,确保在多个线程同时操作队列时不会导致数据竞争。
无锁指的是实现队列操作时不使用锁机制,例如,互斥锁或自旋锁等。即,多个线程可以并发地访问和修改预设数据结构中的数据,而无需等待锁的释放。
无锁的预设数据结构可以减少线程之间的竞争和等待,提高并发性能,并降低由锁带来的开销。
共享智能指针(Shared Smart Pointer)是一种在编程语言中用于管理动态内存的工具。它允许多个智能指针对象同时引用同一个堆内存对象,从而实现数据的共享和协同管理。“共享”可以指多个智能指针可以同时拥有对相同堆内存对象的引用。
在一些实施例中,第一存储模块520可以将相机数据对应的数据指针逐个保存至预设数据结构。例如,将多个数据块对应的数据指针依次保存至数组中。
保存数据指针,可以避免将数据块加入到预设数据结构中,从而节省内存,提高效率。
在一些实施例中,预设数据结构包括环形队列。环形队列的结构呈环形,即队列的首尾相连。在环形队列中,当队列尾部指针指向队列的最后一个元素时,如果有新元素入队,该元素将被放置在队列的开头,形成一个环。
在一些实施例中,新拷贝数据对应的数据指针添加至环形队列尾部。图4A-图4B是根据本说明书一些实施例所示的环形队列的示意图。
例如,如图4A所示,数据拷贝线程TNi(N、i为正整数,i<=N),将数据块BNi(图中未示出)拷贝至第一数据缓冲区,并将数据块BNi对应的数据指针PNi添加至环形队列尾部。
在一些实施例中,需处理数据时,从环形队列头部读取待处理数据对应的数据指针。例如,如图4A所示,处理线程TMj(M、j为正整数,j<=N),从环形队列头部读取待处理数据(数据块BMj(图中未示出))对应的数据指针PMj。
在一些实施例中,环形队列填满后,新拷贝数据对应的数据指针覆盖环形队列头部的数据对应的数据指针,并将环形队列头部变更为环形队列尾部。例如,如图4B所示,新拷贝数据对应的数据指针PNk(N、k为正整数,k<=N)覆盖环形队列头部的数据对应的数据指针,并将环形队列头部变更为环形队列尾部。
步骤230,基于数据指针和预设数据结构,从第一数据缓冲区获取相机数据并进行数据处理。在一些实施例中,步骤230可以由处理设备120或数据处理模块530执行。
在一些实施例中,数据处理模块530可以从预设数据结构读取得到相机数据的数据指针,通过数据指针指向的地址,得到相机数据。在一些实施例中,数据处理模块530可以从预设数据结构读取得到对应多个数据块的多个数据指针,通过多个数据指针指向的多个地址,得到多个数据块。
在一些实施例中,数据处理模块530可以通过多个处理线程,基于数据指针以并行处理方式从第一数据缓冲区获取相机数据并进行数据处理。
处理线程是指用于对相机数据作数据处理的线程。数据处理是指为了满足某种需求或目标对相机数据所做的转换、分析和/或加工等操作。数据处理可以包括格式转换、图像缩放、图像去畸变等。
在一些实施例中,多个处理线程可以同时从预设数据结构读取不同的数据指针,分别处理这些数据指针对应的数据块。
在一些实施例中,数据处理可以在GPU上进行。
在一些实施例中,相机数据为YUV格式的数据,部分显示设备(如计算机显示器、电视、摄像机)使用RGB颜色表示。因此,需要将YUV格式转换为RGB格式。例如,数据处理模块530可以通过利用GPU并行加速格式转换,充分利用GPU的算力优势,减少图像转换延迟。
在一些实施例中,数据处理模块530可以在GPU上执行图像缩放操作,减少图像传输损耗。例如,数据处理模块530可以使用GPU实现双线性插值算法进行图像缩放,相比CPU实现,图像缩放的性能提升明显。
在一些实施例中,数据处理模块530可以在GPU上实现针对镜头畸变的校正,以确保图像的准确性。在一些实施例中,数据处理模块530可以根据成像设备的参数实现去图像去畸变的过程。例如,使用相机标定工具来获取畸变参数,并借助图像处理库(如OpenCV)来实现去畸变的过程。又例如,通过参数的校正和畸变模型的逆操作来实现去畸变的过程。在一些实施例中,数据处理模块530可以将去畸变操作设置为可选操作,以适应不同成像设备的去畸变和/或不去畸变的需求。
在一些实施例中,在对相机数据处理之前,可以直接将相机数据从第一数据缓冲区传输到GPU的全局内存,以避免GPU和CPU之间的频繁数据交换。这样GPU可以在全局内存中一次性完成多种数据处理,而不必经过CPU的数据中转。例如,在对原始的相机数据做完图像缩放操作后,虽然相机数据在GPU的大小和/或内存地址发生了改变,但是数据处理模块530仍然可以在GPU上对相机数据继续执行去畸变操作,去畸变操作完成之后,再将相机数据拷贝出来。这样每一帧数据或每一个数据块只需要两次拷贝,即,第一次是从第一数据缓冲区拷贝到GPU的内存,第二次是在GPU完成数据处理后,从GPU拷贝到第二数据缓冲区。
在一些实施例中,GPU的内存可以被预先分配。预先分配可以是在相机驱动初始化阶段,由用户指定或加载预设分配参数等。GPU内存分配好之后,GPU上进行拷贝和/或数据处理操作的时候,则不再对内存进行分配和/或释放。预分配的内存大小可以根据经验和/或需求确定,例如,根据相机数据量的历史峰值确定。GPU预分配可以降低GPU和处理设备之间的数据传输延迟,提高GPU的处理效率。
在一些实施例中,数据处理模块530可以使用GPU的异步内存传输操作以进一步提高效率。异步内存传输是指进行内存数据传输时不阻塞当前线程或进程的操作,允许在数据传输过程中继续执行其他任务,而不必等待传输完成。
在一些实施例中,数据处理模块530可以使用GPU的锁页内存,例如,将第一数据缓冲区和/或第一数据缓冲区的内存地址映射到GPU的一段内存。利用锁页内存,将相机数据从第一数据缓冲区拷贝到GPU的内存,或者,将处理后的相机数据从GPU的内存拷贝到第二数据缓冲区,能够充分利用GPU和处理设备之间的传输带宽,提升传输效率。
步骤240,将处理后的相机数据保存至第二数据缓冲区,第二数据缓冲区提供数据传输接口。在一些实施例中,步骤240可以由处理设备120或第二存储模块540执行。
第二数据缓冲区是指临时存储相机数据的内存区域。第二数据缓冲区可以与第一数据缓冲区相同或不同。例如,第一数据缓冲区和第二数据缓冲区可以为处理设备的内存中的同一块区域。又例如,第一数据缓冲区和第二数据缓冲区可以为处理设备的内存中的不同区域。
在一些实施例中,第二存储模块540可以将处理后的多个数据块保存至第二数据缓冲区。例如,第二存储模块540可以从GPU的内存获取经过缩放、去畸变和/或格式转换等处理的多个数据块,并将处理后的多个数据块保存至处理设备的内存。
数据传输接口是指用于在计算机系统和外部设备之间传输数据的连接标准或协议。在一些实施例中,数据传输接口可以包括共享内存接口、ROS(Robot OperatingSystem,机器人操作系统)接口等。共享内存接口是指用于访问共享内存中的数据的接口。ROS接口指的是在ROS中用于节点之间进行通信的机制或接口。ROS接口允许不同的ROS节点之间交换消息和数据,以实现ROS节点之间的协同工作。
在一些实施例中,数据传输接口通过共享内存API、开源库等实现。
通过提供数据传输接口,第二数据缓冲区中的数据可以传输到客户端(例如,自动驾驶感知子系统的其他组件、自动驾驶其他子系统等),供客户端使用。
在一些实施例中,第二存储模块540可以将处理后的相机数据存储至预设共享内存区域。
预设共享内存区域是指是一个特殊的内存区域,用于多个进程或线程之间共享数据。例如,预先设定的自动驾驶的感知子系统内各个设备和/或组件可以共享的内存区域。
在一些实施例中,在共享内存区域,处理后的相机数据以环形队列形式存储。在一些实施例中,该环形队列的每一个队列项包括处理后的相机数据、数据长度、数据指针等。该环形队列首尾相接,填充新数据时,将新数据的处理后的相机数据、数据长度以及数据指针填充到该环形队列的尾部。获取数据时,从该环形队列的头部获取数据。在共享内存区域,使用环形队列形式存储处理后的相机数据,该环形结构也可以是无锁安全队列,从而提升了处理后的相机数据的存取性能。
在一些实施例中,为了确保用户端可以正确解析相机数据,在处理后的相机数据保存至第二缓冲区之前,可以将处理后的相机数据格式化和/或序列化。例如,格式化方法为数据结构(例如,队列项)中首先是数据大小,其次是数据指针,接着是数据内容。在一些实施例中,可以采用4字节对齐的方式将数据存储到第二缓冲区中,即数据结构总的字节数固定不变,为4的倍数。在一些实施例中,数据结构总的字节数也可以是其他倍数,本实施例对此不作限定。
在一些实施例中,第二存储模块540提供数据通知功能,当有新数据存入共享内存时,通知客户端(例如,港口自动驾驶系统内的各个设备和/或组件)有新数据可用,以减少客户端使用轮询方式带来的性能损耗和时间延迟。数据通知可以在数据保存完成之后,向已经注册的客户端发送一个通知,告知客户端共享内存中已经有数据存在,客户端收到通知后立即获取数据,不再等待,从而降低等待时间。
在一些实施例中,在自动驾驶系统初始化时统一分配所需的共享内存,在自动驾驶系统停止时释放共享内存,自动驾驶系统运行期间不做任何的分配和释放动作,以保证高效运行。
在一些实施例中,为了满足自动驾驶多个子系统协同工作的场景,第二存储模块540还提供了ROS通讯接口,并且对ROS通讯接口做了相应的优化。例如,相关技术中的ROS的接口是通过在CPU上调用open CV的压缩接口实现,这会导致CPU占用率较高,例如,同时处理7-8个成像设备的数据时,CPU占用率可能会超过200%。在一些实施例中,第二存储模块540提供的ROS通讯接口通过重新实现open CV的压缩接口来提高压缩效率,例如,使用GPU来并行执行压缩操作,通过并行操作提高压缩的效率,达到既能充分利用GPU资源提升压缩效率,又不影响ROS通讯接口的工作的目的,可以兼容多个场景。
图5是根据本说明书一些实施例所示的示例性相机数据处理系统的模块图。在一些实施例中,相机数据处理系统500可以通过处理设备120或其他处理设备或计算设备实现。
如图5所示,在一些实施例中,相机数据处理系统500可以包括获取模块510、第一存储模块520、数据处理模块530和第二存储模块540。
获取模块510可以用于获取相机数据。关于相机数据获取的更多内容可以参考步骤210及其相关描述。
第一存储模块520可以用于将相机数据保存至第一数据缓冲区,将相机数据对应的数据指针保存至预设数据结构中。关于相机数据和数据指针保存的更多内容可以参考步骤220及其相关描述。
数据处理模块530可以用于基于数据指针和预设数据结构,从第一数据缓冲区获取相机数据并进行数据处理。关于从第一数据缓冲区获取相机数据并进行数据处理的更多内容可以参考步骤230及其相关描述。
第二存储模块540可以用于将处理后的相机数据保存至第二数据缓冲区,第二数据缓冲区提供数据传输接口。关于将处理后的相机数据保存至第二数据缓冲区,以及提供数据传输接口的更多内容可以参考步骤240及其相关描述。
应当理解,图5所示的系统及其模块可以利用各种方式来实现。例如,通过硬件、软件或者软件和硬件的结合来实现。本说明书的系统及其模块不仅可以有诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合(例如,固件)来实现。
需要注意的是,以上对于系统及其模块的描述,仅为描述方便,作为示意,并不能把本说明书限制在所举实施例范围之内。可以理解,对于本领域的技术人员来说,在了解该系统的原理后,可能在不背离这一原理的情况下,对各个模块进行任意组合,或者构成子系统与其他模块连接。
上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书进行各种修改、改进和修正。该类修改、改进和修正在本说明书中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。
同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
此外,除非权利要求中明确说明,本说明书所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的服务器或移动设备上安装所描述的系统。
同理,应当注意的是,为了简化本说明书披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
一些实施例中使用了描述成分、属性数量的数字,应当理解的是,此类用于实施例描述的数字,在一些示例中使用了修饰词“大约”、“近似”或“大体上”来修饰。除非另外说明,“大约”、“近似”或“大体上”表明所述数字允许有±20%的变化。相应地,在一些实施例中,说明书和权利要求中使用的数值参数均为近似值,该近似值根据个别实施例所需特点可以发生改变。在一些实施例中,数值参数应考虑规定的有效数位并采用一般位数保留的方法。尽管本说明书一些实施例中用于确认其范围广度的数值域和参数为近似值,在具体实施例中,此类数值的设定在可行范围内尽可能精确。
针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。
最后,应当理解的是,本说明书中所述实施例仅用以说明本说明书实施例的原则。其他的变形也可能属于本说明书的范围。因此,作为示例而非限制,本说明书实施例的替代配置可视为与本说明书的教导一致。相应地,本说明书的实施例不仅限于本说明书明确介绍和描述的实施例。
Claims (10)
1.一种相机数据处理方法,其特征在于,所述方法包括:
获取相机数据,将所述相机数据保存至第一数据缓冲区;
将所述相机数据对应的数据指针保存至预设数据结构;
基于所述数据指针和所述预设数据结构,从所述第一数据缓冲区获取所述相机数据并进行数据处理;
将处理后的相机数据保存至第二数据缓冲区,所述第二数据缓冲区提供数据传输接口。
2.根据权利要求1所述的方法,其特征在于,所述将所述相机数据保存至第一数据缓冲区,包括:
对所述相机数据进行数据分割,得到多个数据块;
通过多个数据拷贝线程,以并行处理方式将所述多个数据块从成像设备拷贝至所述第一数据缓冲区。
3.根据权利要求2所述的方法,其特征在于,在通过所述多个数据拷贝线程进行数据拷贝时,所述多个数据块按字节对齐。
4.根据权利要求1所述的方法,其特征在于,所述预设数据结构无锁且使用共享智能指针。
5.根据权利要求1所述的方法,其特征在于,所述预设数据结构允许多个线程基于所述数据指针和所述预设数据结构同时进行读取和写入操作。
6.根据权利要求1所述的方法,其特征在于,所述预设数据结构包括环形队列,其中,
新拷贝数据对应的数据指针添加至所述环形队列尾部;
需处理数据时,从所述环形队列头部读取待处理数据对应的数据指针;
所述环形队列填满后,新拷贝数据对应的数据指针覆盖所述环形队列头部的数据对应的数据指针,并将所述环形队列头部变更为环形队列尾部。
7.根据权利要求6所述的方法,其特征在于,所述基于所述数据指针和所述预设数据结构,从所述第一数据缓冲区获取所述相机数据并进行数据处理,包括:
通过多个处理线程,基于所述数据指针以并行处理方式从所述第一数据缓冲区获取所述相机数据并进行数据处理。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述处理后的相机数据存储至预设共享内存区域,在所述共享内存区域,所述处理后的相机数据以环形队列形式存储。
9.一种相机数据处理系统,其特征在于,所述系统包括:
获取模块,用于获取相机数据;
第一存储模块,用于将所述相机数据保存至第一数据缓冲区,将所述相机数据对应的数据指针保存至预设数据结构中;
数据处理模块,用于基于所述数据指针和所述预设数据结构,从所述第一数据缓冲区获取所述相机数据并进行数据处理;
第二存储模块,用于将处理后的相机数据保存至第二数据缓冲区,所述第二数据缓冲区提供数据传输接口。
10.一种相机数据处理装置,其特征在于,包括处理器,所述处理器用于执行权利要求1~8中任一项所述的相机数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311713752.8A CN117714643A (zh) | 2023-12-13 | 2023-12-13 | 一种相机数据处理方法、系统和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311713752.8A CN117714643A (zh) | 2023-12-13 | 2023-12-13 | 一种相机数据处理方法、系统和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117714643A true CN117714643A (zh) | 2024-03-15 |
Family
ID=90156454
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311713752.8A Pending CN117714643A (zh) | 2023-12-13 | 2023-12-13 | 一种相机数据处理方法、系统和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117714643A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101105786A (zh) * | 2006-07-14 | 2008-01-16 | 中兴通讯股份有限公司 | 一种基于共享存储器的双cpu通信方法 |
CN103218176A (zh) * | 2013-04-02 | 2013-07-24 | 中国科学院信息工程研究所 | 数据处理方法及装置 |
CN104104888A (zh) * | 2014-07-01 | 2014-10-15 | 大连民族学院 | 一种并行多核fpga数字图像实时缩放处理方法和装置 |
CN114490439A (zh) * | 2022-02-11 | 2022-05-13 | 武汉中旗生物医疗电子有限公司 | 基于无锁环形共享内存的数据写入、读取、通信方法 |
CN114840354A (zh) * | 2022-05-06 | 2022-08-02 | 山东浪潮科学研究院有限公司 | 实现进程间高效处理数据请求的方法及系统 |
CN116400964A (zh) * | 2023-05-25 | 2023-07-07 | 平安科技(深圳)有限公司 | 多线程无锁的数据处理方法及相关设备 |
-
2023
- 2023-12-13 CN CN202311713752.8A patent/CN117714643A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101105786A (zh) * | 2006-07-14 | 2008-01-16 | 中兴通讯股份有限公司 | 一种基于共享存储器的双cpu通信方法 |
CN103218176A (zh) * | 2013-04-02 | 2013-07-24 | 中国科学院信息工程研究所 | 数据处理方法及装置 |
CN104104888A (zh) * | 2014-07-01 | 2014-10-15 | 大连民族学院 | 一种并行多核fpga数字图像实时缩放处理方法和装置 |
CN114490439A (zh) * | 2022-02-11 | 2022-05-13 | 武汉中旗生物医疗电子有限公司 | 基于无锁环形共享内存的数据写入、读取、通信方法 |
CN114840354A (zh) * | 2022-05-06 | 2022-08-02 | 山东浪潮科学研究院有限公司 | 实现进程间高效处理数据请求的方法及系统 |
CN116400964A (zh) * | 2023-05-25 | 2023-07-07 | 平安科技(深圳)有限公司 | 多线程无锁的数据处理方法及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3685345B1 (en) | Fully extensible camera processing pipeline interface | |
US10733019B2 (en) | Apparatus and method for data processing | |
EP2131278A1 (en) | Scheduling of multiple tasks in a system including multiple computing elements | |
CN113849293B (zh) | 数据处理方法、装置、系统及计算机可读存储介质 | |
WO2021248423A1 (zh) | 人工智能资源的调度方法、装置、存储介质和芯片 | |
US20220222129A1 (en) | System for parallel processing middleware node application algorithms using threads | |
CN115220921B (zh) | 资源调度方法及相关装置、图形处理器、摄像器件和介质 | |
US11940931B2 (en) | Turnstile API for runtime priority boosting | |
US12111778B2 (en) | Image processing accelerator | |
US11620816B1 (en) | Hardware efficient RoI align | |
WO2014039457A1 (en) | Protocol for communications between platforms and image devices | |
CN116820764A (zh) | 一种计算资源的提供方法、系统、电子设备及存储介质 | |
CN112422832B (zh) | 图像数据的传输方法、移动终端及存储介质 | |
US11055144B2 (en) | Method, apparatus, and system for multi-module scheduling | |
CN113347450B (zh) | 一种多应用共享音视频设备的方法、装置和系统 | |
CN117714643A (zh) | 一种相机数据处理方法、系统和装置 | |
CN115589527B (zh) | 自动驾驶图像发送方法、装置、电子设备和计算机介质 | |
CN117075819A (zh) | 命令处理方法、装置、存储介质及存储设备 | |
US20230276422A1 (en) | System and method for gpu-initiated communication | |
CN116360915A (zh) | 多应用访问相机的方法及设备 | |
WO2021179222A1 (zh) | 一种调度装置、调度方法、加速系统及无人机 | |
US11216307B1 (en) | Scheduler for vector processing operator readiness | |
US11615043B2 (en) | Systems, methods, and apparatus to enable data aggregation and adaptation in hardware acceleration subsystems | |
US20240056589A1 (en) | Optimization of direct memory accesses for real-time data streaming applications | |
US20230276301A1 (en) | System and method for gpu-initiated communication |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |