自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 收藏
  • 关注

原创 Linux_60:camera_venc_thread线程

的API获取VENC的码流数据,然后把VENC码流赋值到video_data_packet_t结构体、最后把video_data_packet_t结构体放到队列里面。线程的工作流程,这个线程最主要的功能是获取VENC的视频编码码流数据,并把VENC的码流存放到队列里面。获取VENC码流数据,VENC编码通道数是从外面传进来(默认是0),模块号是RK_ID_VENC。结构体指针,然后把每一帧的VENC码流数据拷贝到。线程的大体流程图,总共有三步:先获取。的数据放到队列里面,入队的操作是。

2026-05-17 14:37:06 245

原创 Linux_59:show_vi_thread线程讲解

线程的工作流程,首先要获取第二个VI模块的视频数据,然后获取人脸识别的名称(string )和人脸区域信息(rockx_object_array_t)、利用OPENCV描绘人脸区域的矩形框、利用OPENCV显示人脸名称、把处理后的VI数据发送到VENC编码器。我们的思路是,检测的是时候检测最大人脸,然后匹配他的名字。显示的时候,提取最近的检测结果和名字,这个结果包含了所有人脸的坐标信息,也就是说应该也进行一下人脸最大比较,或者保存的时候,保存最大人脸的坐标。), 然后计算出x,y(具体的计算在上图)。

2026-05-17 12:28:51 374

原创 Linux_58:rockx_vi_handle_thread线程的讲解

容器里的一个“游标”。它用来指向容器中的某一个元素。这个map如果你想一个一个访问它们,就需要一个东西来“指向当前访问到哪一项”。iter就像一个指针,刚开始可以指向第一项,然后移动到第二项、第三项。

2026-05-15 20:54:06 434

原创 Linux_57:读取人脸数据库并保存到map

本章节主要介绍如何通过查询人脸数据库数据库表格把数据存储到map容器,map容器底层是内存处理,用map去处理数据能够达到高效,快速查询的效果。在这个项目里面,map起到了快速查询的功能,key存储的是人脸的结构体(People),value存储的是人脸具体的数据(rockx_face_feature_t)。定义 task_id,标识当前任务或线程的ID编号。

2026-05-13 16:58:45 398

原创 Linux_56:读取人脸图片并把特征值保存到sqlite3数据库

本章节主要介绍如何通过rockx读取人脸图像并读取人脸特征值保存到。

2026-05-10 22:21:24 436

原创 Linux_55:RV1126的VENC模块讲解

上面思维导图主要是描述VENC模块设置的大致流程,这里要创建RV1126_VENC_CONFIG结构体并进行参数设置,设置完参数之后,则需要调用rkmedia_venc_init去初始化这两个VENC模块,最后把VENC的ID号存放到数组里面(本章节主要是介绍rockx+rv1126项目的VENC编码模块的讲解,在这个项目中VENC编码模块参数的设置是至关重要的,它可以对VI数据进行硬件编码让其可以进行编码码流的推流,VENC模块的配置在源文件。H264的CBR码率控制GOP设置,这里GOP的设置是25。

2026-05-10 17:18:02 342

原创 Linux_54:RV1126的VI模块讲解

本章节主要是介绍rockx+rv1126人脸识别推流项目的VI模块的初始化,这个项目的VI模块需要初始化两个,一个是用于rockx的人脸检测、人脸识别的处理。另外一个则用于显示AI处理结果。设置VI模块的代码在里面。

2026-05-10 17:16:56 370

原创 Linux_53:ROCKX+RV1126人脸识别推流项目讲解

这个项目运用的功能很多,包括了rockx人脸检测、识别功能,sqlite3数据库存储人脸功能,rkmedia的VENC编码功能,rkmedia的VI采集功能,ffmpeg推流、OPENCV画框描绘文字功能。线程主要功能是读取第一个模块的VI数据,并使用rockx框架对VI数据进行人脸检测和人脸识别:当检测到人脸数据后,先进行人脸过滤,然后再调用人脸识别API对其进行人脸特征值的提取,并把摄像头提取的人脸特征和数据库的人脸特征进行对比,若相似度<=1.2则认为是同一个人,若识别到同一个人则输出这个人的名字。

2026-05-10 17:12:14 388

原创 Linux_52:ROCKX+RV1126实现1->N人脸识别功能

主流程是先读取单张图片的图像并提取人脸特征值,然后死循环获取VI的码流数据,然后用rockx的人脸检测模块RV1126的VI数据是否有人脸,如果有人脸则调用rockx的人脸识别模块识别出RV1126视频流的人脸数据并且提取出来。使用rockx_create创建人脸识别rockx_handle_t句柄。这里关键要赋值的是data(data =(uint8_t *)RK_MPI_MB_GetPtr(mb) )和size(size = RK_MPI_MB_GetSize(mb))。

2026-05-09 22:18:36 424

原创 Linux_51:ROCKX+RV1126检测人脸并进行拍照

获取每一帧VI模块的数据,并把每一帧VI模块的缓冲区和长度传输给rockx_image_t。具体的代码是rv1126_rockx_image.data = (uint8_t *)RK_MPI_MB_GetPtr(mb)(把每一帧VI缓冲区数据赋值到rockx_image_t的data)、rv1126_rockx_image.size = RK_MPI_MB_GetSize(mb)(把每一帧VI大小赋值到rockx_image_t的size),cols的长度是width,通道数是单通道(

2026-05-09 22:13:44 416

原创 Linux_50:ROCKX+RV1126视频流检测人脸

include "rkmedia_api.h" // RKMedia 多媒体API(VI/VENC等)#include "rockx.h" // RockX AI推理引擎API#include <opencv2/opencv.hpp> // OpenCV 图像处理#define CAMERA_PATH "rkispp_scale0" // ISP设备路径#define CAMERA_ID 0 // 摄像头ID#define CAMERA_CHN 0 // VI通道号。

2026-05-09 22:07:51 448

原创 Linux49:rockx读取单张图片并检测图片内人脸的矩形

可以看到周董的脸上就已经出现矩形检测的框框。

2026-05-08 21:37:12 382 4

原创 Linux48:rockx常用的API

函数解释:rockx_create创建rockx的句柄。

2026-05-08 21:36:47 403

原创 dr4_rv1126_rv1109问题总结

1.必须添加系统初始化。

2026-03-24 20:58:26 59

原创 使用新版子开发的问题总结

要点说明CPU 相同 ≠ 程序通用外设、设备树、库版本都不同每个板子需要自己的 SDK厂商提供的 SDK 针对自家板子优化重新编译是标准做法不是系统问题,是开发流程的一部分代码可以复用用条件编译或运行时检测适配不同板子静态编译可通用但体积大,适合小工具Docker 不能解决硬件差异只能统一编译环境,不能统一硬件配置易百纳板子 荣品板子易百纳 SDK 荣品 SDK编译程序 A ←─ 代码复用 ─→ 编译程序 A。

2026-03-23 14:34:47 370

原创 嵌入式 Linux 开发知识总结

在 x86 电脑上编译出 ARM 开发板能运行的程序。│ 完整开发流程 ││ 1. 获取 SDK(已解压) ││ 2. 编译 Buildroot(获得编译环境)← 你现在在这里 ││ 3. 编写应用程序代码 │。

2026-03-23 14:18:40 440

原创 Linux47: Rockx-SDK的简介

开发者可以使用ROCKX的AI组件快速搭建AI的应用,这些应用可以是车牌识别、人脸识别、目标识别,人体骨骼识别等等,具体的如上图。人体姿态检测模型,人体姿态指的是将图片中已检测到的人体关键点正确连接起来,并正确估计人体的姿态,人体的姿态一般如:肩、颈、腰、膝盖等。人体姿态检测模型,人体姿态指的是将图片中已检测到的人体关键点正确连接起来,并正确估计人体的姿态。人体姿态检测模型,人体姿态指的是将图片中已检测到的人体关键点正确连接起来,并正确估计人体的姿态。车牌检测模型,主要是用于图像中的车牌图像的检测。

2026-03-16 20:15:46 443 1

原创 Linux45:RV1126+OPENCV对视频流进行视频腐蚀操作

本章节属于实战课程,主要是利用RV1126的视频流结合OPENCV的API对视频流进行腐蚀,然后对其进行编码保存。线程的具体实现,首先我们要通过RK_MPI_SYS_GetMediaBuffer获取每一帧的VI视频原始数据,然后把每一帧的原始数据通过OPENCV转换成Mat矩阵。然后调用erode的对其Mat矩阵进行腐蚀,这里的膨胀参数我们设置成矩形和Size(15,15),具体的(关于这方面的参数设置,我们就不详细说了,因为这方面的内容之前的课程已经详细说过。的具体实现,在这个线程里面要通过。

2026-03-16 20:06:41 246

原创 Linux46:RV1126+OPENCV在视频中添加时间戳

, 1+p->tm_mon(gmtime返回的月份是从0开始,换言之就是第一个月对应的索引值是0而不是1,所以我们要得到真正的月份都需要加1),p->tm_mday(日的输出,正常输出就行),8 + p->tm_hour(由于格林威治获取的小时和北京时间有8个小时的时差,因此我们要获取当前的本地时间需要+8小时才能够得到真实的小时),p->tm_min(分钟的输出,正常输出),p->tm_sec(输出秒数)。做完上述步骤后,把每一帧经过处理后的VI原始数据发送到H264的VENC编码器,调用的API是。

2026-03-16 20:03:29 620

原创 Linux44:opencv在H264码流中添加LOGO

这是一个Mat构造器,第一个参数是HEIGHT:1080,第二个参数WIDTH:1920,第三个参数:图像格式CV_8UC1,第四个参数:具体的图像数据。通过Mat的构造器,就可以把RV1126的VI视频数据转换成Mat,转换成Mat之后,我们就需要对Mat进行图层叠加操作。// 就是一个大数组。进行上述所有的操作后,就需要把RV1126叠加过后的视频VI数据发送到H264的VENC编码器,调用的API是。转换成灰度图片(由于VI模块的图像格式是NV12,所以我们的图片必须要以灰度图的方式进行添加)。

2026-03-15 22:07:02 873

原创 Linux43:cvtColor和puttext

cvtColor是OPENCV里面颜色转换的转换函数,它的功能非常强大。能够实现RGB图像转换成灰度图、灰度图转换成RGB图像、RGB转换成HSV等等。下面我们来看看。

2026-03-14 21:57:10 420

原创 Linux 42:膨胀和腐蚀

erode是OPENCV实现腐蚀效果的API第一个参数:src的类型是InputArray,它指的是输入图像,它可以是Mat类的数据。图像的通道数可以是任意数,但是图像的深度一般是CV_8UCV_16UCV_16SCV_32FCV_64F第二个参数:dst的类型是OutputArray,它指的是目标图像,值得注意的是输出图像的尺寸、类型要和输入图像是一致的。第三个参数:InputArray类型的kernel,膨胀操作的核。当这个值为NULL的时候,表示使用的核参考点默认是3*3。

2026-03-14 20:12:42 395

原创 Linux41:OPENCV图形计算面积、弧长API讲解

前两节课我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天这节课我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API如arcLengthrectangleline等等。的API讲解主要的用途是计算轮廓的曲线面积,也就是去计算图像本身的面积,如上图。countArea就是计算白色区域的面积,计算的过程一般是用微积分等方式去计算。contour指的是每一个轮廓的数据,也称之为轮廓的点oriented。

2026-03-13 21:23:42 445

原创 Linux40:查找图形轮廓

在OPENCV中通常使用findContours函数去寻找图片的轮廓,也是OPENCV中处理轮廓最重要的函数之一,它常用于找到二值图像中所有物体的轮廓。它的实现原理是通过扫描一张二值图像,然后找到所有的轮廓,并把所有的数据存储在向量里面。下面我们来看看findContours的函数定义image输入的二值图像,这个图像通常是用在边缘检测、阈值处理等等contours输出的轮廓集合,每一个轮廓都是由点组成,通常用来表示。

2026-03-11 21:52:55 735

原创 Linux39:OPENCV图像叠加

图像叠加顾名思义就是在原图像里面,添加一些其他图像数据,最常见的就是在原图像中添加一些水印图像。这些水印图像可以是:时问戳、L0G0图像等等。

2026-03-11 21:46:40 669

原创 CAN总线

1.防止回波反射《传输线理论》1.TX接TX,无需交叉。

2026-03-11 18:21:12 68

原创 Linux38:AT函数

AT函数是OPENCV中重要的函数之一,它的作用是修改Mat的矩阵某个像素值,换言之,我们需要修改图像中的像素点就需要利用AT函数去获取并且修改,AT函数的修改一般需要循环cols和rows然后对每个像素点进行修改,如上图,AT函数的定义如下Vec2bVec3bVec4bVec2sVec3sVec4s需要注意的是:一般OPENCV对像素的处理大部分都是用uchar类型,其他类型用的很少。第二个参数:I,指的是rows.图像的行数据第三个参数:j,指的是cols.图像的列数据。

2026-03-10 21:31:10 391

原创 Linux37:利用OPENCV 的imread读取图片信息和imwrite写入数据

在OPENCv中常用imwrite去保存图片,下面我们来看看imwrite的定义.第一个传参:filenamme表示要保存的文件名第二个传参:image表示需要保存的图像数据。

2026-03-10 20:10:49 437

原创 Hal库的使用

/ 参数1: &IndefLenUsart - 串口句柄(指向huart2)// 参数2: receive_buff - 接收缓冲区(数据存放地址)这是为了方便移植,如果你想换到USART1,只需要改这几行宏定义即可。1. DMA自动把串口数据搬运到缓冲区(无需CPU干预)【DMA传输】自动将数据存入receive_buff。// 参数3: 255 - 要接收的字节数。2. 空闲中断表示"数据包结束"【数据处理】CPU介入处理数据。初始化systick和分组。【空闲中断】检测到总线空闲。

2026-03-10 18:34:43 487

原创 Linux36:Mat结构体

在OPENCV中,Mat是整个图像存储的核心也是所有图像处理的最基础的类。Mat主要存储图像的矩阵类型,包括向量、矩阵、灰度或者彩色图像等等。Mat的对象可以分成矩阵头和矩阵数据两个大部分,矩阵头是存储图像的。

2026-03-09 21:56:05 421

原创 Linux35:Opencv交叉编译和Makefile

在交叉编译之前需要把交叉编译工具链安装好,在我们Ubuntu里面它放在/opt目录里面,如下图:

2026-03-09 21:38:35 386

原创 Linux34:Opencv介绍

目标检测指的是根据现有的AI模型找出所有感兴趣的目标,并且确定他们的类别和位置。图像增强指的是通过一些特殊的手段对原图像进行一些数据信息的变换或添加,并且有选择地突出图像中感兴趣区域的特征或者抑制原图像中一些不要的元素。在OPENCV中提供的丰富的API去对图像进行增强的功能,如:均值滤波、高斯滤波、伽马矫正、锐化、膨胀等等,这些功能能够成功有效对图像质量进行有效改造。后面我们的课程会详细见到OPENCV的基础功能,并和RV1126的API结合在一起进行视频图像的处理。和计算机视觉方面的很多通用算法。

2026-03-09 21:29:55 194

原创 Linux33:队列

队列是C/C++中最基础的数据结构之一,队列本质上是一种线性表。它遵循着先进先出(fifo)的特点,在队列中一般在队尾插入,队头出队。这就相当于排队一样,刚入队的人需要排在队尾(rear),每次出队的都是在队首(front)。在实际开发中队列发挥着巨大的作用,比方说多线程数据传输、缓存数据的存储、中间件的设计等等。从上面这张图我们可以看到,队尾入队了三个元素分别是1,2,3。1号数据最早入队、2号数据第二入队、3号数据最后入队。

2026-03-07 16:20:45 385

原创 Linux32:低分辨率(1280 * 720)编码码流推送流媒体

如何通过低分辨率队列的每一帧数据,并且通过FFMPEG推流器传输到低码流分辨率流媒体服务器,本章节代码在rkmedia_assignment_manage.cpp和rkmedia_data_process.cpp里面。低分辨率编码码流推送的过程和高分辨率编码码流的推送的过程基本上一致,唯一的区别在于分辨率的设置。2.低分辨率编码码流推流的流程上面是低分辨率推流的过程,总共分成6个步骤。2.1.初始化结构体我们来看看RKMEDIA_FFMPEG_CONFIG的成员变量。

2026-03-06 21:06:33 325

原创 Linux_31:FFMPEG时间戳、时间基、时间转换的讲解

时间基也称之为时间基准,它代表的是每个刻度是多少秒。比方说:视频帧率是那它的时间刻度是{1,25}。相当于1s内划分出25个等分,也就是每隔1/25秒后显示一帧视频数据。具体的如下图所示:在FFMPEG中时间基准都是用在视频时间基都是以帧率为单位,比方说25帧。FFMPEG就以video_timebase = {1, 25}来表示。在音频时间基都是以采样率为单位,比方说音频采样率是48000HZ。FFMPEG就以audio_timebase = {1, 48000}来表示。帧率。

2026-03-06 15:39:10 573

原创 Linux_30:RTMP协议

RTMP协议是实时消息传输协议的缩写(Real Time Messaging Protocol)的缩写。RTMP协议是基于TCP协议开发的消息传输协议,它是Adobe公司开发的一种私有传输协议。它主要的用途是音视频推流、实时交互语音和数据交互等功能。RTMP交互的过程总共可以分为以下几步:握手、建立网络对话、创建网络流、播放。下面是一个大体的RTMP 客户端和服务端交互的过程。

2026-03-06 14:29:29 397

原创 Linux_29:FLV数据流

FLV流媒体协议是美国。

2026-03-06 11:02:37 357

原创 Linux_28:FFMPEG输出模块初始化

其中time_base的值要和视频帧率必须要一致。若RV1126编码器的分辨率是1280 * 720,则FFMPEG推流器的WIDTH = 1280,HEIGHT = 720;主要是讲解FFMPEG输出模块,输出模块的最大作用是对音视频推流模块进行初始化让其能够正常工作起来,RV1126的码流通过FFMPEG进行推流,输出模块一般由几个步骤。是存储音视频封装格式中包含的信息的结构体,所有对文件的封装、编码都是从这个结构体开始。打开对应的文件,注意这里的文件不仅是指本地的文件也指的是网络流媒体文件,下面是。

2026-03-05 19:25:44 413

原创 Linux_27:FFMPEG推流器

在我们这个项目里面,FFMPEG主要的作用是进行视频推流的功能,就是把RV1126编码的视频码流利用FFMPEG框架推送到流媒体服务器。AVCODECID编码器的ID号,这里的编码器ID包含了视频的编码器ID,如:AV_CODEC_ID_H264、AV_CODEC_ID_H265等等。它是在FFMPEG中具体应用很多,它类似于C++中的虚基类的结构体,用于实现多继承的功能。AVStream包含了每一个视频/音频流信息的结构体,同样的这个结构体也有很多重要的成员变量,我们来看看这些成员变量具体的含义。

2026-03-05 16:53:53 247

原创 Linux_26:获取高低分辨率码流

上图是获取1920 * 1080视频编码数据的思维导图,整个流程最关键是get_vi_container获取VI节点,get_venc_container获取VENC节点,然后调用RK_SYS_MPI_Bind绑定VI和VENC节点,并启动camera_venc_thread线程获取编码数据赋值到video_data_packet_t结构体,然后入队列。上面的截图就是如何通过get_rga_thread和low_camera_thread线程的结合获取低分辨率(1280 * 720)的编码码流。

2026-03-02 11:45:12 552

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除