- 博客(118)
- 收藏
- 关注
原创 Claude Code 最佳实践
对于重复性的工作流——例如调试循环、日志分析等——您可以将提示词模板存储在文件夹下的 Markdown 文件中。这样,当您输入时,这些模板就会作为自定义命令出现在菜单中。自定义斜杠命令中可以包含特殊关键词$ARGUMENTS,用于传递调用命令时输入的参数,从而为常见任务实现强大的自动化。claude -p(无头模式) 能以编程方式将集成到更大型的工作流中。扇出 (Fanning out):处理大规模的代码迁移或分析。管道化 (Pipelining):将 Claude 集成到现有的数据/处理管道中。
2025-07-07 08:39:08
523
原创 【通俗易懂】Linux 线程调度策略详解
这两个策略是对这一权衡的明确承认,它们为开发者提供了一个“逃生通道”,让他们可以告诉调度器:“我的任务不符合标准模型,请区别对待”。至关重要的一点是,_任何_实时任务,即便是优先级为1的任务,其调度优先级也永远高于_任何_普通(CFS)任务。主厨的指令是,_只有_在没有任何菜单上的订单,也没有批量任务在进行时,厨师们才能去做这些事。你不再只是告诉主厨“这道菜很重要”(设置优先级),而是给他一份精确的合约:“这道菜需要X单位的工作量,必须在Y时间点前完成,并且每隔Z分钟就会有一份新订单进来。
2025-06-17 14:30:00
712
原创 深入浅出-回声消除(AEC)
声音的回荡,或称回声,是一种我们既熟悉又可能感到困扰的声学现象。在空旷的山谷中呼喊,声音会在山壁间反射,片刻之后传回我们的耳朵,形成清晰的回响。这种自然界的回声通常富有诗意,但在现代通信技术中,类似的现象却可能演变成通话质量的“破坏者”。在电子通信设备,如座机、手机或免提会议系统中,我们都可能经历过声学回声——即在通话时听到自己声音的延迟重复。这种回声的定义是声波形态的重复;在电信领域特指通话时,自己的声音在接收端发生反射并通过听筒传回的现象。如果回声的振幅较低,或者延迟极短,它可能不会被注意到。
2025-06-13 10:58:14
1059
原创 什么是音频?
音频,在其最核心的层面,即是我们通常所说的声音。它起源于物体的振动。这些振动扰动了其周围的介质(例如空气或水),在介质中产生了微小的压力变化,这些压力变化以波的形式传播开来。当这些压力波到达我们的耳朵时,耳内的复杂机制会探测到这些变化,并将其转换成神经信号,我们的大脑随后将这些信号解读为声音。正如一段简练的描述所言:“普遍物体的振动形成声波,即声音”。这种对音频物理基础的理解至关重要,因为它揭示了音频并非一个抽象概念,而是一种可触可感的物理现象。
2025-06-13 10:43:00
1039
原创 基于 Windows11 WSL2 的 ESP-IDF V5.4 开发环境搭建教程
最近因公司业务需要,接触了 ESP32 芯片,中途踩了不少坑,也慢慢熟悉了 ESP32 的开发流程。我使用了乐鑫官方的 ESP-IDF 作为编译工具,其他版本有、PlatformIO,但它们底层也是基于 ESP-IDF,只不过进行了一层 API 封装。为了优雅的使用 ESP-IDF,我选择 WSL2 作为我的开发环境,这样做的好处是可以与宿主机隔离,避免污染宿主机环境。
2025-04-23 19:00:00
827
2
原创 【已开源】【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统
本文主要介绍我最近开发的一个个人实战项目,“基于深度学习的人脸门禁+ IPC 智能安防监控系统”,全程满帧流畅运行。这个项目我目前全网搜了一圈,还没发现有相关类型的开源项目。这个项目只要稍微改进下,就可以变成市面上目前流行的三款产品,人脸识别门禁系统、IPC 安防和 NVR。在最下面会有视频演示。本项目适用于瑞芯微 Rockchip 系列的板端,开源链接在文章最下面。
2025-02-08 09:03:24
4128
17
原创 在 Vscode 中搭建嵌入式 Linux 通用 windows、mac、linux 平台的 docker 容器开发环境
在日常工作中,由于各种原因,我们的电脑可能与同事的电脑存在一些差异,有时候是操作系统的差异(A 同事用的是 Linux,B 同事的是 Windows,而你用的是 Mac),有时候是依赖库环境的差异(A 同事安装了 opencv 1.2,B 同事安装了 opencv 2.3)。而解决这些差异性的问题就成为了重中之重,好在现在世界上最流行的 IDE Vscode 提供了基于 docker 容器的开发环境构建,可以让不同平台不同环境下的电脑在开发时都保持一致,得到同样的开发体验。
2025-02-08 09:00:00
1316
原创 瑞芯微 Rockchip 系列 RK3588 部署 yolo11 模型推理教程
在上一篇文章中,我介绍了如何在瑞芯微 Rockchip 系列芯片将主流深度学习框架模型转换为 RKNN 模型。在这篇文章,我将介绍如何在瑞芯微 Rockchip 系列 RK3588 芯片上部署 yolo11 模型推理。本文章会使用到上一篇文章转换的 rknn 模型,因此如果还没看过上一篇文章的同学,建议优先阅读上一篇文章。本教程不仅适合 RK3588 平台,也适合其他 RK 系列平台,例如 RK3566、RK3568、RK3562 等。具体平台请参考RKNN-Toolkit2 文档。
2025-02-07 10:54:22
4108
6
原创 瑞芯微 Rockchip 系列 RK3588 主流深度学习框架模型转成 rknn 模型教程
在瑞芯微 Rockchip 芯片上进行 NPU 推理,需要先将模型文件转换成 rknn 模型文件,才能执行各种推理任务。本文将介绍如何安装各种工具,并最终实现将各种深度学习框架的模型文件转换成 rknn 文件。本教程不仅适合 RK3588 平台,也适合其他 RK 系列平台,例如 RK3566、RK3568、RK3562 等。具体平台请参考RKNN-Toolkit2 文档。本文介绍了如何在 RK3588 平台上进行主流深度学习框架模型转换,并提供了完整的示例代码。希望对大家有所帮助。
2025-02-07 09:00:00
3126
2
原创 FFmpeg 头文件完美翻译之 libswresample 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库。
2025-02-07 09:00:00
438
原创 FFmpeg 头文件完美翻译之 libavutil 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库。
2025-02-06 09:45:00
582
原创 FFmpeg 头文件完美翻译之 libavformat 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库,下载到本地慢慢品读
2025-02-06 09:30:00
953
原创 FFmpeg 头文件完美翻译之 libavdevice 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库。
2025-02-05 14:00:00
557
原创 FFmpeg 头文件完美翻译之 libavfilter 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库。
2025-02-05 14:00:00
609
原创 FFmpeg 头文件完美翻译之 libavcodec 模块
众所周知,FFmpeg 的代码开发上手难度较高,源于官方提供的文档很少有包含代码教程相关的。要想熟练掌握 FFmpeg 的代码库开发,需要借助它的头文件,FFmpeg 把很多代码库教程都写在头文件里面。因此,熟读头文件的内容很重要,为此,我对 FFmpeg 6.x 版本的头文件进行了翻译,方便大家阅读理解。相信我,通读一遍头文件的注释后,你的 FFmpeg 的代码库开发技能将更上一层。本文适用于有 FFmpeg 代码库开发基础,但想深入熟练使用的同学。同时也可以参考我的Github 仓库,下载到本地慢慢品读
2025-01-22 09:43:54
1369
原创 瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 RGA 2D 图形操作硬件加速-代码版
在上一篇文章中,我介绍了 ffmpeg-rockchip MPP 硬编解码的代码实现方式。在这篇文章,我将介绍 ffmpeg-rockchip RGA 的代码实现方式。RGA 是一个用于图像缩放、旋转、bitBlt、alpha混合等常见的2D图形操作的硬件单元,它的应用场景很广泛,比如可以将 4k 视频缩小到 1080p,再比如可以用于 yolo 模型推理的预处理阶段,提高整个处理链路的效率。本文不仅适用于 RK3588,还适用于 RK 家族系列的芯片,具体的细节可查看官方 RGA 文档。下面分别介绍。
2025-01-13 09:07:34
2889
12
原创 瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 MPP 视频硬件编解码-代码版
在上一篇文章中,我们讲解了如何使用 ffmpeg-rockchip 通过命令来实现 MPP 视频硬件编解码和 RGA 硬件图形加速,在这篇文章,我将讲解如何使用 ffmpeg-rockchip 用户空间库(代码)实现 MPP 硬件编解码。本文不仅适用于 RK3588,还适用于 RK 家族系列的芯片,具体的细节可查看官方 MPP 文档。
2025-01-13 09:02:14
6172
40
原创 瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 MPP 硬件编解码和 RGA 图形加速-命令版
最近使用 RK3588 在做音视频项目开发,过程中使用了该芯片提供的硬件编解码和 2D 图形加速能力,发现相比软编解码,硬编解码无论是处理速度、系统负载还是稳定性,都比软编解码强太多了。本文将分享如何使用 RK 提供的 FFmpeg + MPP + RGA,实现一个硬件编解码+2D图形加速的功能,全部使用命令行来完成。后面也会出一篇使用开发库实现的源码版。本文不仅适用于 RK3588,也还适用于其他 RK 系列的芯片,具体的细节出入请参考官方文档。
2025-01-06 08:59:50
14750
66
原创 瑞芯微 RK 系列 RK3588 CPU、GPU、NPU、VPU、RGA、DDR 状态查看与操作
本文介绍瑞芯微 RK 系列 RK3588 CPU、GPU、NPU、DDR、VPU、RGA 的查看与操作方式
2024-12-30 13:40:57
5841
原创 线程池浅析
线程池是一组预先初始化并准备执行任务的线程集合。与为每个任务反复创建线程并在之后销毁它们不同,线程池的做法是维护一组预先创建的线程,这些线程可以被重复利用来同时执行多个任务。通过这种方式,我们可以减少由于线程的创建和销毁所带来的开销。
2024-12-27 09:16:49
420
原创 一文搞懂 RGB 与 YUV
第一个 4 表示每个像素都有一个亮度分量(Y),第二个 4 表示每个像素都有一个 U 色度分量,第三个 4 表示每个像素都有一个 V 色度分量。4:2:0 表示第一个 4 表示每个像素都有一个亮度分量(Y),第二个 2 表示每两个像素共享一个 U 色度分量,第三个 0 表示每四个像素共享一个 V 色度分量(即每两个像素共享一个色度分量)。4:2:2,第一个 4 表示每个像素都有一个亮度分量(Y),第二个 2 表示每两个像素共享一个 U 色度分量,第三个 2 表示每两个像素共享一个 V 色度分量。
2024-12-25 09:31:03
2065
原创 V4L2 使用教程
V4L2,全称为 Video for Linux 2,是 Linux 操作系统上的一个内核框架,旨在支持视频设备。V4L2 是 V4L 的第二版,V4L2 修复了一些设计缺陷,并开始出现在 2.5.x 内核中。它提供了一组 API 和驱动接口,使得用户空间应用程序能够与摄像头和电视卡等各种视频设备进行交互。
2024-12-18 08:01:07
1230
原创 用 docker 搭建一个统一的 buildroot 编译环境
之前在团队协同开发过程中,经常因为每个人开发环境不一致,导致 buildroot 编译有人成功有人失败。为了解决这个问题而进行了一些方案调研,最终选择 docker 这个方案,docker 的优点是轻量化、跨平台,无论是在 windows、linux 还是 mac,都能统一构建环境。本文将手把手教你如何构建一个 docker 镜像并运行容器来编译 buildroot。
2024-12-16 09:00:00
728
原创 WebRTC 详解
之前在做智能家居网关项目时,用到 WebRTC 技术,使用 C++ 实现了浏览器可以通过 WebRTC 直接观看摄像头的功能。这里分享下之前记录的 WebRTC 的笔记。2010 年 5 月,谷歌收购了 Global IP Solutions(简称 GIPS),这是一家专注于 VoIP 和视频会议软件的公司,已开发出 RTC 所需的多项关键组件,如编解码器和回声消除技术。谷歌随后将 GIPS 技术开源,并与 IETF 和 W3C 等标准机构合作,以确保行业共识。
2024-12-13 17:54:23
1068
原创 Linux D-Bus 详解
在构建复杂应用或服务时,经常会遇到进程间通信的问题。DBus 提供了一个高效、可靠的解决方案,使得不同程序之间可以轻松地进行消息交换和远程调用。本篇文章将带你详细了解 DBus 的工作机制及如何在你的项目中有效利用这一技术。D-Bus是 Linux 及其他类 Unix 系统下的一种进程间通信机制(IPC)。那什么是进程间通信机制(IPC)呢?
2024-12-09 09:00:00
3430
原创 基于LVGL9.0、FFmpeg、OpenCV的Linux智能家居监控安防系统(含演示视频)
智能家居监控安防系统是一个集成监控、安防、人脸识别、环境监测、家居控制的一体化系统。视频监控:支持查看摄像头、拍照、录像、直播和检测到人体时自动拍照,支持同时开启或单个开启,支持浏览图片和视频文件;人脸识别:人脸前后比对检测,模拟人脸识别开门的场景;报警设置:检测到人体时自动报警,通过蜂鸣器模拟报警;环境检测:当前环境的温湿度检测,通过MQTT协议通信;家居控制:通过MQTT协议控制LED灯,模拟真实家居控制场景;
2024-07-25 13:51:19
2062
7
原创 基于LVGL9.0、V4L2的Linux相机项目(含演示视频)
Linux相机是一个基于V4L2驱动的项目,支持拍照、调整相机亮度参数、浏览图片、下载图片,提供了 GUI 的交互界面。
2024-07-22 09:00:00
1751
3
原创 Bash Shell 速查表 Cheat Sheet
合并 => foo1 foo2 A B C D# declare 语法Numbers+=(4 5) # 追加 => 1 2 3 4 5myfunc() {echo "你好 $1"# 同上(另一种语法)echo "你好 $1"
2024-07-11 08:55:33
511
原创 C++ 容器 API 速查表 Cheat Sheet
容器适配器(Container Adapters)是一种容器类,它们提供了特定用途的接口,通过限制和重新定义基础容器(如。是一个无序的关联容器,允许多个元素拥有相同的键,使用哈希函数来组织元素。是一个无序集合,允许多个元素拥有相同的键,使用哈希函数来组织元素。可以通过在模板参数中指定自定义哈希函数和比较函数来改变默认行为。可以通过在模板参数中指定自定义哈希函数和比较函数来改变默认行为。可以通过在模板参数中指定自定义哈希函数和比较函数来改变默认行为。是一个无序的关联容器,使用哈希函数来组织元素。
2024-07-10 08:55:20
732
原创 LVGL V9 加载中文字体教程
之前在使用 LVGL v9 进行项目开发过程中,发现默认情况下是不支持显示中文字体的,而我们常常需要在实际项目中显示中文字符,在阅读官方文档并进行一段时间的实践摸索后,最终解决了该问题。本篇文章将先讲解 LVGL 默认内置的几种字体,然后讲解如何更改内置字体引擎的字体,最后再讲解如何使用 freetype 字体引擎。废话不多说,马上进入正题。
2024-07-06 17:13:24
4692
4
原创 Makefile 速查表 Cheat Sheet
不使用$(eval)endefall:输出$ make使用$(eval)endefall:输出$ makelibfoo.solibbar.so。
2024-07-05 09:30:00
820
原创 LVGL V9 CMake构建源码刨析
最近在基于LVGL v9版本进行项目开发,在开发过程中顺便研究了整个项目的CMake构建原理,以可以支持更好的自定义。因此本篇文章将刨析LVGL v9项目的CMake构建原理,让我们对LVGL v9的项目框架有个更好的理解。通过上面的刨析,我们了解到其实LVGL项目的CMake构建原理也不过如此。CMake的出现是为了解决跨平台构建的问题,它很大程度上提升了搭建项目框架的效率,是一个非常值得掌握的小技能之一。
2024-07-04 14:15:00
4210
2
原创 Linux 中断机制详解
在日常的Linux驱动程序开发过程中,我们经常需要与中断机制打交道。这篇文章将从中断相关概念开始,并介绍Linux中的中断机制,最后以实现一个简单的按键中断驱动程序结束,话不多说,马上开始~
2024-06-28 11:35:47
1756
原创 CMake 实战入门教程
之前学习CMake是通过官方教程文档进行学习的,在学习中发现,CMake官方的教程文档没有详细介绍每个命令和变量的用法,这也导致学一半时会感觉一头雾水。但它也并不无优点,官方教程文档采用了渐进式的实战教程方式,非常注重学习过程中的实践,这一点是很可贵的。为了加深命令和变量的理解,我查阅了很多api文档才搞明白。因此,为了跟大家分享更好的CMake学习文档,本教程诞生了。
2024-06-25 10:09:13
1635
1
原创 C++ 11
移动语义通过右值引用实现,它允许对象的资源从一个对象转移到另一个对象,而不是进行拷贝。右值引用使用&&语法表示。// 42是一个右值,rref是一个右值引用右值引用是一种可以绑定到右值(临时对象或即将销毁的对象)的引用类型。右值引用的语法为T&&,其中T是某种数据类型。与传统的左值引用(T&)不同,右值引用专门用于捕获右值。// 42是一个右值,rref是一个右值引用转发引用是指在模板中,通过类型推导得到的右值引用。具体来说,当模板参数使用T&&
2024-06-22 09:37:31
980
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人