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

V4L2应用程序开发实战:枚举摄像头所有支持的格式和分辨率

V4L2应用程序开发实战枚举摄像头所有支持的格式和分辨率这节课我们只做一件事用手把手的方式从零写出一个完整的 V4L2 程序它能列出你的摄像头设备所有支持的像素格式比如 YUYV、MJPEG以及每种格式下的所有分辨率比如 640x480、1280x720。我会带你一步步写代码、编译、传到开发板并运行同时讲解每个关键知识点。你不需要有多个摄像头一个就够。写完这个程序你就掌握了 V4L2 中最常用的查询接口以后写任何摄像头应用都心里有底。 这节课你将收获什么技能点重要性说明编写完整的 V4L2 枚举程序⭐⭐⭐ 必须掌握你以后开发摄像头应用第一步几乎都是先查摄像头能力理解VIDIOC_ENUM_FMT和VIDIOC_ENUM_FRAMESIZES⭐⭐⭐ 必须掌握面试常问实际项目必备交叉编译主机 → ARM 开发板⭐⭐⭐ 必须掌握嵌入式开发的标配流程使用 ADB 上传并运行程序⭐⭐ 重点掌握调试嵌入式程序最快的方法调试常见错误权限、设备节点、工具链⭐⭐ 重点掌握实际开发中一定会遇到文章目录V4L2应用程序开发实战枚举摄像头所有支持的格式和分辨率 这节课你将收获什么一、准备工作1.1 你需要什么1.2 验证摄像头设备二、编写完整代码可直接复制三、在 Ubuntu 主机上先本地测试可选四、交叉编译生成开发板能运行的程序4.1 设置工具链路径4.2 交叉编译五、将程序传到开发板并运行5.1 连接 ADB5.2 上传程序5.3 进入开发板 shell 并运行5.4 查看输出六、逐行讲解代码中的关键点面试/考试重点6.1 为什么需要 memset 清零结构体6.2 VIDIOC_ENUM_FMT 的 index 从 0 开始递增6.3 VIDIOC_ENUM_FRAMESIZES 需要传入 pixel_format6.4 fsenum.type 的作用七、常见错误与解决方法八、必须搞懂的 5 个核心问题问题1为什么每次循环都要用 memset 清零问题2VIDIOC_ENUM_FMT 的 index 为什么从 0 开始递增它何时停止问题3为什么 VIDIOC_ENUM_FRAMESIZES 必须放在内层循环问题4分辨率的“离散”和“连续”是什么意思分别怎么处理问题5如果枚举过程中 ioctl 返回 -1 且 errno 不是 EINVAL代表什么九、面试官提问环节必背第1问V4L2 中如何枚举摄像头支持的像素格式请说明使用的 ioctl 和关键数据结构。第2问在枚举完一种格式后如何知道该格式支持哪些分辨率需要用到什么 ioctl为什么这个 ioctl 必须放在格式枚举的循环内部第3问v4l2_frmsizeenum 结构体中的 type 字段有哪些取值分别代表什么第4问枚举过程中ioctl 返回 -1 是否一定表示错误如何正确判断枚举结束第5问为什么要先用 memset 清零 V4L2 结构体不清零会有什么后果第6问请画出或描述枚举所有格式及分辨率的程序流程图。十、总结一、准备工作1.1 你需要什么一台Ubuntu 虚拟机或主机装有交叉编译工具链我们使用百问网 T113 开发板的工具链。一块6ull 开发板已烧录 Tina Linux 系统并通过 USB OTG 线连接到电脑ADB 能识别。一个USB 摄像头或开发板自带的摄像头接口插入开发板后会出现/dev/video0或/dev/video1。如果你还没有交叉编译工具链不用担心我会给出路径和设置方法。1.2 验证摄像头设备在开发板上通过adb shell或串口执行bashls /dev/video*如果显示/dev/video0或/dev/video1说明摄像头已经被驱动识别。二、编写完整代码可直接复制下面是一个完整的 C 程序它会打开指定的视频设备枚举所有格式和分辨率然后打印出来。代码里写了详尽的注释即使你没学过 V4L2也能看懂每一步在做什么。创建一个文件video_enum.cc#include stdio.h #include stdlib.h #include string.h #include fcntl.h #include unistd.h #include sys/ioctl.h #include linux/videodev2.h int main(int argc, char **argv) { int fd; struct v4l2_fmtdesc fmtdesc; struct v4l2_frmsizeenum fsenum; int fmt_index 0; int frame_index; /* 1. 检查命令行参数 */ if (argc ! 2) { fprintf(stderr, Usage: %s video_device\n, argv[0]); fprintf(stderr, Example: %s /dev/video0\n, argv[0]); return 1; } /* 2. 打开设备 */ fd open(argv[1], O_RDWR); if (fd 0) { perror(open); return 1; } printf(Device: %s\n, argv[1]); printf(\n); /* 3. 循环枚举所有像素格式 */ while (1) { memset(fmtdesc, 0, sizeof(fmtdesc)); fmtdesc.index fmt_index; fmtdesc.type V4L2_BUF_TYPE_VIDEO_CAPTURE; if (ioctl(fd, VIDIOC_ENUM_FMT, fmtdesc) 0) { break; // 枚举结束 } /* 打印格式信息 */ printf(Format %d: %s (fourcc0x%08x)\n, fmt_index, fmtdesc.description, fmtdesc.pixelformat); /* 4. 对于当前格式枚举所有支持的分辨率 */ frame_index 0; while (1) { memset(fsenum, 0, sizeof(fsenum)); fsenum.index frame_index; fsenum.pixel_format fmtdesc.pixelformat; if (ioctl(fd, VIDIOC_ENUM_FRAMESIZES, fsenum) 0) { break; // 该格式的分辨率枚举结束 } /* 只处理离散分辨率绝大多数摄像头都是离散的 */ if (fsenum.type V4L2_FRMSIZE_TYPE_DISCRETE) { printf( %d x %d\n, fsenum.discrete.width, fsenum.discrete.height); } else if (fsenum.type V4L2_FRMSIZE_TYPE_STEPWISE) { /* 连续范围极少见简单打印范围 */ printf( continuous: %d..%d x %d..%d\n, fsenum.stepwise.min_width, fsenum.stepwise.max_width, fsenum.stepwise.min_height, fsenum.stepwise.max_height); } frame_index; } fmt_index; printf(\n); // 格式之间空一行 } close(fd); return 0; }代码核心逻辑打开设备文件。用VIDIOC_ENUM_FMT依次查询每种像素格式直到返回错误。对每一种格式用VIDIOC_ENUM_FRAMESIZES查询它支持的分辨率直到返回错误。打印出每种格式的名称、fourcc 码以及所有分辨率。三、在 Ubuntu 主机上先本地测试可选为了确保代码逻辑正确你可以在 Ubuntu 主机上插一个 USB 摄像头或者使用虚拟机里的虚拟摄像头先用本地 gcc 编译测试。bashsudo apt install gcc # 如果没有安装 gcc -o video_enum video_enum.c ./video_enum /dev/video0如果主机上有摄像头你会看到类似输出textDevice: /dev/video0 Format 0: YUYV 4:2:2 (fourcc0x56595559) 640 x 480 800 x 600 1280 x 720 Format 1: MJPEG (fourcc0x47504a4d) 640 x 480 1280 x 720如果主机没有摄像头可以跳过这一步直接交叉编译到开发板上运行。四、交叉编译生成开发板能运行的程序我们使用 T113 开发板的交叉编译工具链。工具链在 Tina-SDK 的prebuilt目录下。4.1 设置工具链路径假设你的 Tina-SDK 放在/home/ubuntu/tina-d1-h则执行bashexport PATH$PATH:/home/ubuntu/tina-d1-h/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin为了确认是否设置成功输入basharm-buildroot-linux-gnueabihf-gcc --version应该能看到版本信息。如果没有请检查路径是否正确你的用户名和 SDK 目录可能不同。4.2 交叉编译basharm-buildroot-linux-gnueabihf-gcc -o video_enum video_enum.c编译成功后用file命令查看bashfile video_enum输出应该包含ELF 32-bit LSB executable, ARM说明是 ARM 架构的可执行文件。五、将程序传到开发板并运行5.1 连接 ADB用 USB 线连接开发板的OTG 口到电脑。在 Ubuntu 终端输入bashadb devices如果看到类似20080411 device的设备说明连接成功。如果显示no permissions可以尝试sudo adb kill-server后重新插拔。5.2 上传程序bashadb push video_enum /root/5.3 进入开发板 shell 并运行bashadb shell cd /root chmod x video_enum # 如果没有可执行权限 ./video_enum /dev/video0如果摄像头是video1就改成/dev/video1。5.4 查看输出你应该会看到类似下面的输出根据你的摄像头支持情况可能不同textDevice: /dev/video0 Format 0: YUYV 4:2:2 (fourcc0x56595559) 640 x 480 160 x 120 320 x 240 352 x 288 800 x 600 1280 x 720 1280 x 1024 Format 1: Motion-JPEG (fourcc0x47504a4d) 640 x 480 160 x 120 320 x 240 352 x 288 800 x 600 1280 x 720 1280 x 1024恭喜你已经成功列出了摄像头的所有能力。六、逐行讲解代码中的关键点面试/考试重点6.1 为什么需要memset清零结构体cmemset(fmtdesc, 0, sizeof(fmtdesc));V4L2 的结构体中有很多保留字段内核要求应用程序把它们初始化为 0否则 ioctl 可能失败或行为异常。这是一个好习惯。6.2VIDIOC_ENUM_FMT的 index 从 0 开始递增内核维护了一个格式列表你每次传入一个 index它返回第 index 个格式的信息。当传入的 index 超过最后一个时ioctl 返回 -1我们跳出循环。6.3VIDIOC_ENUM_FRAMESIZES需要传入pixel_format只有先知道格式才能查询该格式的分辨率。这也是为什么要在内层循环中的原因。6.4fsenum.type的作用V4L2_FRMSIZE_TYPE_DISCRETE离散分辨率直接读取discrete.width/height。V4L2_FRMSIZE_TYPE_STEPWISE连续范围如最小 32x32 到最大 1920x1080步长 8。这种摄像头非常少见我们简单打印范围即可。七、常见错误与解决方法错误现象原因解决办法open: Permission denied普通用户无权限访问设备开发板上用 root 用户adb shell 默认 root或chmod 666 /dev/video0VIDIOC_ENUM_FMT: Invalid argument传入了错误的type值确保type V4L2_BUF_TYPE_VIDEO_CAPTURE交叉编译时command not foundPATH 未设置重新执行export PATH...并确认路径正确ADB 推文件失败device offlineUSB 线松动或驱动没加载拔插 USB 线重新运行adb devices开发板执行后没有任何输出摄像头设备节点可能不是 video0先用ls /dev/video*查看用正确的节点名八、必须搞懂的 5 个核心问题问题1为什么每次循环都要用memset清零答V4L2 的结构体中包含reserved保留字段。内核要求这些字段必须为 0否则可能被视为要求启用尚未定义的功能导致 ioctl 失败或行为异常。清零是一个好习惯避免栈上的随机值污染。问题2VIDIOC_ENUM_FMT的index为什么从 0 开始递增它何时停止答内核内部维护一个格式的列表index就是数组下标。从 0 开始每成功一次就加 1直到内核返回 -1且errno为EINVAL。这表示已经枚举完所有格式。这种模式在 V4L2 中非常普遍枚举帧率、控制项等也类似。问题3为什么VIDIOC_ENUM_FRAMESIZES必须放在内层循环答该 ioctl 需要输入参数pixel_format即具体的格式 fourcc。这个 fourcc 只能从外层VIDIOC_ENUM_FMT获得。没有外层枚举你无法知道要查哪种格式的分辨率。因此它必须嵌套在格式循环内部。问题4分辨率的“离散”和“连续”是什么意思分别怎么处理答离散摄像头只支持固定的几个分辨率如 640x480、1280x720。直接读取fsenum.discrete.width/height。连续摄像头支持一段范围内的任何分辨率并给出步长。例如最小 16x16最大 1920x1080步长 8x8。应用程序可以选择任意满足步长倍数的分辨率。此类摄像头极少见通常出现在工业领域。问题5如果枚举过程中 ioctl 返回 -1 且errno不是EINVAL代表什么答真正的硬件错误或驱动异常。例如EIOI/O 错误、ENOMEM内存不足。在这种情况下不应继续循环应打印错误并退出。九、面试官提问环节必背第1问V4L2 中如何枚举摄像头支持的像素格式请说明使用的 ioctl 和关键数据结构。参考答案使用VIDIOC_ENUM_FMT命令配合结构体struct v4l2_fmtdesc。设置fmtdesc.type V4L2_BUF_TYPE_VIDEO_CAPTURE然后从index 0开始递增调用ioctl直到返回 -1。每次成功时fmtdesc.pixelformat是格式的 FourCC 码fmtdesc.description是可读字符串。第2问在枚举完一种格式后如何知道该格式支持哪些分辨率需要用到什么 ioctl为什么这个 ioctl 必须放在格式枚举的循环内部参考答案使用VIDIOC_ENUM_FRAMESIZES结构体为struct v4l2_frmsizeenum。必须传入fsenum.pixel_format即从格式枚举得到的 FourCC所以必须在格式枚举的内层循环中调用。内核根据该 FourCC 返回该格式支持的分辨率列表。第3问v4l2_frmsizeenum结构体中的type字段有哪些取值分别代表什么参考答案V4L2_FRMSIZE_TYPE_DISCRETE摄像头支持离散的固定分辨率分辨率信息在fsenum.discrete中。V4L2_FRMSIZE_TYPE_STEPWISE摄像头支持连续范围分辨率信息在fsenum.stepwise中包括最小、最大和步长。绝大多数消费级摄像头都是前一种。第4问枚举过程中ioctl返回 -1 是否一定表示错误如何正确判断枚举结束参考答案不是。当index超过最后一个条目时ioctl返回 -1 并且errno被设置为EINVAL这是正常的枚举结束。真正的错误应检查errno是否为其他值如EIO、ENOMEM。简单示例中通常只判断返回值 0 就退出严谨的程序应区分EINVAL和真实错误。第5问为什么要先用memset清零 V4L2 结构体不清零会有什么后果参考答案V4L2 结构体中有reserved保留字段内核要求这些字段必须为 0。如果不清零栈上的随机值会被内核读取可能被解释为尚未定义的扩展参数导致 ioctl 失败或产生不可预知的行为。清零是一种防御性编程确保兼容性。第6问请画出或描述枚举所有格式及分辨率的程序流程图。参考答案text开始 │ ├─ 打开 /dev/videoX │ ├─ fmt_index 0 │ ├─ while (1) { │ └─ 调用 ioctl( VIDIOC_ENUM_FMT ) │ ├─ 失败 → 跳出外层循环 │ └─ 成功 → 打印格式信息 │ frame_index 0 │ while (1) { │ 调用 ioctl( VIDIOC_ENUM_FRAMESIZES ) │ ├─ 失败 → 跳出内层循环 │ └─ 成功 → 打印分辨率 │ frame_index │ } │ fmt_index │ } │ └─ 关闭设备十、总结这一节我们完成了一个非常实用的 V4L2 程序它不采集图像却能帮你彻底摸清摄像头的“底细”。在真实项目中你会经常先运行类似程序来确认摄像头能力然后再写采集代码。你必须掌握的核心VIDIOC_ENUM_FMT和VIDIOC_ENUM_FRAMESIZES的用法。交叉编译的完整流程设置 PATH、编译、file 验证。ADB 部署与运行。下次当你拿到一个新的摄像头时别忘了先运行video_enum /dev/videoX看看它到底支持什么。 你已经迈出了 V4L2 应用开发的一大步下一个目标写一个可以实时显示摄像头画面的程序结合 LCD 显示。

相关文章:

V4L2应用程序开发实战:枚举摄像头所有支持的格式和分辨率

V4L2应用程序开发实战:枚举摄像头所有支持的格式和分辨率 这节课我们只做一件事:用手把手的方式,从零写出一个完整的 V4L2 程序,它能列出你的摄像头设备所有支持的像素格式(比如 YUYV、MJPEG)以及每种格式下…...

网盘直链工具革新:如何优雅绕过客户端强制安装的8种策略

网盘直链工具革新:如何优雅绕过客户端强制安装的8种策略 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

植物大战僵尸终极修改器:PVZTools免费辅助工具完整使用指南

植物大战僵尸终极修改器:PVZTools免费辅助工具完整使用指南 【免费下载链接】pvztools 植物大战僵尸原版 1.0.0.1051 修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztools 还在为植物大战僵尸的关卡难度而烦恼?想要轻松解锁所有游戏内容…...

HS2必备插件深度解析:BepisPlugins包里到底哪些文件才是核心?

HS2插件架构解密:BepisPlugins核心模块与性能优化指南 当你第一次打开BepisPlugins压缩包时,面对二十多个DLL文件可能会感到无从下手。这个被称为"HS2 MOD基石"的插件包,其实80%的功能都集中在两个核心模块上——这正是许多资深玩家…...

从文本到代码:arrowgram 双向转换工具的设计原理与实战应用

1. 项目概述:从“箭头图”到代码生成最近在梳理一些遗留系统的架构文档时,我又一次被那些错综复杂、信息不全的流程图和时序图给“折磨”了。相信很多开发者和架构师都有同感:我们花费大量时间用绘图工具(无论是 Visio、Draw.io 还…...

使用 Taotoken CLI 工具一键配置开发环境与多工具密钥

使用 Taotoken CLI 工具一键配置开发环境与多工具密钥 1. 安装 Taotoken CLI Taotoken CLI 提供了两种安装方式,开发者可根据实际需求选择: # 全局安装(适合频繁使用) npm install -g taotoken/taotoken# 临时调用(…...

【R 4.5时空可视化革命】:9大新增地理动效函数+3类真实气象数据实战,错过即落后下一个GIS分析周期!

更多请点击: https://intelliparadigm.com 第一章:R 4.5时空可视化增强的核心演进与生态定位 R 4.5 版本标志着时空数据分析能力的一次范式跃迁,其核心不再局限于静态地图渲染,而是通过深度集成 sf、stars、tmap 和 leafem 等包的…...

Docker容器化RouterOS:构建可编程网络实验环境的完整指南

1. 项目概述与核心价值最近在折腾家庭网络和边缘计算环境时,我遇到了一个挺有意思的需求:如何在本地快速部署一个功能完整、可编程的网络设备,用于测试路由策略、防火墙规则,甚至是模拟一个小型ISP的接入环境。直接上物理路由器成…...

Windows 11 下用 Node.js 和 crypto-js 逆向分析网站登录密码加密,保姆级实战拆解

Windows 11 下用 Node.js 和 crypto-js 逆向分析网站登录密码加密,保姆级实战拆解 在当今的Web安全领域,前端加密已成为保护用户敏感数据的标配方案。当我们面对一个加密的登录请求时,如何从黑盒状态一步步揭开其加密逻辑?本文将带…...

FPGA加速实时机器学习:技术与应用解析

1. FPGA加速的实时机器学习技术概述在科学实验领域,数据处理的速度和效率直接决定了研究的深度和广度。传统CPU架构受限于顺序执行模式,在面对高能物理实验中每秒TB级的数据流时往往力不从心。FPGA(现场可编程门阵列)因其可重构特…...

深度探索:如何突破macOS硬件限制,让老Mac焕发新生

深度探索:如何突破macOS硬件限制,让老Mac焕发新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 在技术快速迭代的今天,硬…...

如何实现微信聊天记录永久保存:WeChatMsg本地备份完整指南

如何实现微信聊天记录永久保存:WeChatMsg本地备份完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

Swin Transformer调参实战:在自定义数据集上,如何调整window_size、depths提升模型效果?

Swin Transformer调参实战:从理论到落地的深度优化指南 如果你正在尝试将Swin Transformer应用到自己的图像分类或分割项目中,却苦于模型效果不如预期,这篇文章将为你揭示一套完整的调参方法论。不同于简单的参数罗列,我们将从视觉…...

如何一键备份QQ空间历史说说:GetQzonehistory完整指南

如何一键备份QQ空间历史说说:GetQzonehistory完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心那些记录青春岁月的QQ空间说说会随着时间消失&#xff1f…...

英伟达Nemotron 3 Nano Omni:全模态Agentic AI的架构革命与Golang实战

摘要:2026年4月29日,英伟达正式发布Nemotron 3 Nano Omni,这是专为Agentic AI设计的新一代全模态模型。它将文本、图像、音频与视频统一到一个推理体系中,实现了推理吞吐量提升高达9倍的突破性进展。本文深入剖析Nemotron 3 Nano Omni的技术架构、核心创新点,并提供完整的…...

3分钟搞定B站缓存视频转换:m4s-converter完整使用指南

3分钟搞定B站缓存视频转换:m4s-converter完整使用指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站缓存视频只能在官…...

Tessent ATPG实战:如何用Timing-Aware模式搞定芯片里最难测的小延迟缺陷?

Tessent Timing-Aware ATPG实战:攻克小延迟缺陷的工程化解决方案 在28nm及以下工艺节点中,小延迟缺陷(Small Delay Defects, SDD)导致的良率损失已占测试逃逸(test escape)案例的37%。某头部芯片厂商的失效…...

使用Taotoken后如何通过控制台观测各模型的Token消耗情况

使用Taotoken后如何通过控制台观测各模型的Token消耗情况 1. 控制台用量看板概览 Taotoken控制台提供了直观的用量看板功能,用户登录后可在「用量统计」页面查看所有API调用的Token消耗明细。该看板默认展示最近7天的数据,支持按小时、天、周、月等时间…...

Subtitle Edit:从零到精通的四阶字幕编辑路径

Subtitle Edit:从零到精通的四阶字幕编辑路径 【免费下载链接】subtitleedit the subtitle editor :) 项目地址: https://gitcode.com/gh_mirrors/su/subtitleedit 你是否曾经为字幕不同步而烦恼?是否在多个字幕格式间转换时感到束手无策&#xf…...

EdgeRemover 2025:Windows系统Edge浏览器终极卸载方案

EdgeRemover 2025:Windows系统Edge浏览器终极卸载方案 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover 还在…...

科研图像处理:用Python把实验仪器导出的.dat文件批量转成PNG/JPG(附完整代码)

科研图像处理实战:Python解析仪器.dat文件并批量生成PNG/JPG图像 实验室里的红外热像仪刚刚完成了一组样本扫描,仪器输出的.dat文件堆满了整个文件夹。面对这些看似晦涩难懂的二进制数据,如何快速将其转化为可用于论文发表的PNG图像&#xff…...

Translumo终极指南:3分钟掌握免费实时屏幕翻译,打破语言障碍的完整解决方案

Translumo终极指南:3分钟掌握免费实时屏幕翻译,打破语言障碍的完整解决方案 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mi…...

别再用Ctrl+F了!Notepad++正则查找同时包含两个关键词的行,效率翻倍

告别低效搜索:Notepad正则表达式双关键词精准定位指南 每天面对上千行日志文件时,你是否还在反复按CtrlF切换关键词?上周排查线上故障时,我发现团队里80%的成员仍在用原始方式查找同时包含"ERROR"和"Timeout"…...

告别龟速下载!用国内镜像站5分钟搞定Huggingface模型库配置(附Python/CLI两种方法)

国内开发者极速配置Huggingface镜像站实战指南 每次等待Huggingface模型下载进度条缓慢移动时,那种焦虑感想必各位AI开发者都深有体会。特别是当项目deadline迫在眉睫,或是学术研究需要快速验证某个模型效果时,网络延迟可能成为阻碍效率的最大…...

深度解析:用OpenCore Legacy Patcher突破老旧Mac系统兼容性限制

深度解析:用OpenCore Legacy Patcher突破老旧Mac系统兼容性限制 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当苹果官方宣布你的Mac不再支持最…...

厂房钢柱截面选型---实腹式、格构式

厂房钢柱截面选型---实腹式、格构式 一、楔形实腹柱: 一般适用于无吊车的轻型厂房(柱脚铰接);...

常用压型钢板型号及选择

常用压型钢板型号及选择 压型钢板型号的选择是一个很重要的课题,既要考虑经济适用又要考虑其安全性。压型钢板的型号非常多,在实际的工程建造中使用频率也非常高。 什么是压型钢板?...

SD-PPP:将Photoshop打造成AI绘画工作室的开源革命

SD-PPP:将Photoshop打造成AI绘画工作室的开源革命 【免费下载链接】sd-ppp A Photoshop AI plugin 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp 想象一下,你正在Photoshop中设计一张海报,突然需要一个复杂的3D渲染效果。传统…...

如何用KMS_VL_ALL_AIO智能激活工具永久激活Windows和Office

如何用KMS_VL_ALL_AIO智能激活工具永久激活Windows和Office 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经遇到过这样的烦恼:正在处理重要工作时,Windows突然…...

如何永久保存微信聊天记录:WeChatMsg完整指南助你打造个人数字记忆库

如何永久保存微信聊天记录:WeChatMsg完整指南助你打造个人数字记忆库 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tre…...