进阶|HDR-ISP支持ROS2以及GPU实时处理啦!

引言

之前我们开源了一份HDR-ISP代码供大家入门学习,但很多后台同学反馈CPU版本是实时性不够、对于相机无法实时处理。没关系,今天Cuda加速、支持ROS2可以实时处理的的HDR-ISP GPU版本来啦!

此次GPU版本开源版本只提供lib供学习测试!加入星球后可以找星主获取资料以及源码,白嫖党、伸手党可以自行走开!

1. 项目描述

1.1 项目特点

一个使用C++编写的、使用GPU加速用于HDR相机的ISP Pipeline

  • ISP模块使用C风格编写
  • 除仓库文件外,无其它第三方库依赖
  • 可以通过json配置自定义你的pipeline
  • 可以在任意支持C++的嵌入式平台上部署
  • 可以在支持Cuda的PC上运行,同时支持Nvidia Jeston嵌入式设备
  • 支持文件离线处理、支持ROS2实时Online运行
  • 支持通过配置选择ISP Pipeline是在CPU上运行还是GPU上运行

1.2 默认Pipeline

默认Json配置pipeline:

Pipeline

1.3 当前支持的模块

支持的ISP模块列表(CPU and GPU):

  • Raw Domain
    • MipiUnPack: Mipi原始数据转RAW16
    • DePwl: 解压缩数据
    • Dpc: 动态坏点校准
    • Lsc: 镜头阴影校准
    • Blc: 黑电平校准
    • Rns: Raw域降噪
    • WbGain: 白平衡增益
    • Demoasic: 解马赛克
  • RGB Domain
    • Ltm: 局部色调映射
    • RgbGamma: rgb伽马曲线
    • Ccm: 色彩校准矩阵
    • Rgb2Yuv: rgb域转yuv域
  • YUV Domain
    • YGamma: 灰度伽马曲线
    • Contrast: 对比度提升
    • Sharpen: 锐化边缘增强
    • Cns: 颜色滤波
    • Saturation: 色度提升
    • Yuv2Rgb: yuv域rgb域

2. 如何编译与运行

2.1 Linux系统

开发环境 :

  • nvcc
  • cmake
  • g++

编译

  • 不使用ROS2
1
2
3
4
5
6
git clone https://github.com/JokerEyeAdas/HDR-ISP
cd HDR-ISP/
git checkout gpu_dev
mkdir build
cmake ..
make -j12
  • 使用ROS2编译
  1. 克隆仓库
1
2
3
git clone https://github.com/JokerEyeAdas/HDR-ISP
cd HDR-ISP/
git checkout gpu_dev
  1. 编辑 CMakeLists.txt,设置ROS2_ENABLE成true
1
set(ROS2_ENABLE true)
  1. 编译
1
2
cd ${ros2_wk}
colcon build

2.2 Windows

开发环境 (x64):

  • vs code
  • cmake
  • nvcc
  • vs2019 c++ gen tool

build tool

编译

  • 不使用 ROS2
1
2
3
4
5
6
git clone https://github.com/JokerEyeAdas/HDR-ISP
code HDR-ISP
git checkout gpu_dev
#cmake choose Debug or Release
#compiler choose xxx-amd64
#build all
  • 使用ROS2
  1. 克隆仓库
1
2
3
git clone https://github.com/JokerEyeAdas/HDR-ISP
cd HDR-ISP/
git checkout gpu_dev
  1. 编辑CMakeLists.txt设置ROS2_ENABLE为true
1
set(ROS2_ENABLE true)
  1. 编译
1
2
cd ${ros2_wk}
colcon build --merge-install

2.3 运行

  • 离线模式
1
2
3
4
5
6
cd build
#cp cfgs and data
cp -r ../data/ ./
cp -r ../cfgs/ ./
#run isp
./HDR_ISP ./cfgs/isp_config_cannon.json
  • 在线模式
1
2
3
ros2 run hdr_isp pub_raw ./cfgs/xxxx.json
ros2 run hdr_isp hdr_isp ./cfgs/xxxx.json
ros2 run rviz2 rviz2

2.4 改变模式以及运行设备

  • 使用GPU加速(通过Json进行配置):
1
"device":"gpu",
  • 使用CPU运行(通过Json进行配置):
1
"device":"cpu",
  • ROS2实时处理模式以及修改Topic
1
2
"mode":"online",
"topic":"/raw/connan",
  • 离线处理RAW图
1
2
3
"mode":"offline",
"raw_file": "./data/connan_raw14.raw",
"out_file_path": "./",

2.5 如何调试参数

通过修改json配置来配置ISP模块的基本参数

如,修改sensor基本参数:

1
2
3
4
5
6
7
8
9
10
"info": {
"sensor_name": "cannon",
"cfa": "RGGB",
"data_type": "RAW16",
"bpp": 16,
"max_bit": 14,
"width": 6080,
"height": 4044,
"mipi_packed": 0
},

修改rgb gamma参数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"rgbgamma": {
"enable": true,
"in_bit": 10,
"out_bit": 8,
"gammalut_nums": 11,
"gammalut": [
0,
0.3504950718773984,
0.48243595264750255,
0.57750428843709,
0.6596458942714417,
0.731034378464739,
0.7925580792857235,
0.8509817015104557,
0.9029435754464383,
0.9534255851019492,
1.0
]
}

3. GPU性能与ROS2支持

使用ROS以及GPU

  • GPU性能(不发布ISP处理结果)
Index Resolution GTX1080 MX550
1 6080*4044 15 8
2 3840*2160 40 20
3 1920*1080 125 60
  • ROS2 Online mode

ROS2

4. 后续工作

4.1 TBD工作

  • 编写Python或者GUI调试工具

4.2 资料获取

  • 如果想学习源码、获取模块说明,请加入星球,我们共同开发!(毕竟开发者也要恰饭)

knowledge

  • 加入星球:

知识星球

4.3 项目支持

  • 感谢您的支持,希望我的项目对您有帮助~

Appreciation Code

5. 结束语

今天我们给大家介绍了HDR-ISP-GPU,希望对于入门的新人有一定的借鉴作用,同时希望我们的开源对于处于行业里面的你们有所帮助!

如果您对自动驾驶感兴趣,可以关注本公众号,当然有想了解的话题,也可以私信我,我们将对各位看官感兴趣的话题进行技术分享。

项目地址:https://github.com/JokerEyeAdas/HDR-ISP

项目分支:gpu_dev

项目GitHub快速传送门:HDR-ISP

6. 项目预告

哈哈,还没完!后台有老哥想要3D AVM实现方法,没关系,现在已经在准备实现中了,目前3D碗以及车的模型已经导入工作已经完成,状态如下:

3D AVM

想学习的加入知识星球,第一时间获取资料。今天就到这,peace。


如果您对ADAS感兴趣,欢迎关注我的公众号、知乎、CSDN等,同时发表文章中使用源码会在我的GitHub进行开源(网页About Me中有公众号、Github等信息)


进阶|HDR-ISP支持ROS2以及GPU实时处理啦!
https://jokereyeadas.github.io/2023/10/29/12.HDR-ISP支持ROS2以及GPU啦/
作者
Joker.Mao
发布于
2023年10月29日
许可协议