news 2026/10/22 4:57:28

从YOLO v5检测框到中心点三维坐标:D435i深度相机实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从YOLO v5检测框到中心点三维坐标:D435i深度相机实战

从"看见"到"定位":把YOLO v5的检测框,换算成真实的中心点三维坐标

如果你已经能在Ubuntu下用RealSense D435i流式显示画面,也跑通了YOLO v5的检测,那么这个项目标题里的"中心点三维坐标"就是你绕不开的下一道坎。检测框只是告诉你"目标在图像上的哪个位置",而三维坐标才是机器能真正理解"目标在空间里哪个位置"的关键。这个系列到了第三篇,我们不再停留在"看到目标",而是要让程序说出"目标离我多远、在左边还是右边、偏上还是偏下"这一类空间信息。

这篇博文面向的是已经装好相机驱动、跑过YOLO检测、想往抓取、导航或测量方向走的开发者。我会按实际调试顺序,把整条链路拆开讲清楚:如何从YOLO的检测框拿到中心点像素坐标,如何让深度图和彩色图对齐,如何把"像素+深度"换算成相机坐标系下的三维坐标,以及这一系列操作里最容易踩的坑。整套过程我都会给出行之有效的代码和验证方法,不需要你具备比"学过Python、看懂Keras模型"更高的基础。

1. 先想清楚:这一整套流程到底在做什么

1.1 需求本质:从像素坐标系跳到空间坐标系

在纯目标检测任务里,模型给出的结果是:图像上某个矩形框的四个边界值,比如 x1、y1、x2、y2,外加一个类别标签和置信度。这个矩形框说明"目标在我视野的这个区域",但不告诉你它到底在物理空间的哪里。

要得到"中心点三维坐标",本质是需要回答三个数字:目标相对相机在 x 方向偏移多少、y 方向偏移多少、z 方向距离多少。这个从二维像素到三维空间点,看起来只是多一个深度值,实际上要做两件事。

第一件事是"对齐"。D435i 有两个成像传感器,一个彩色、一个深度(红外双目+结构光),两路画面各自有自己的坐标系。如果直接用彩色图上检测到的像素位置去深度图里取深度,会差出一截,尤其近距离时候很明显。所以必须先做图像对齐,让深度图和彩色图"站在同一个视角"再操作。

第二件事是"反投影"。图像上的一个像素点,本质上是一束方向上的光线,它对应三维空间中的一整条线。没有深度值,你就不知道目标在线上哪个位置;有了深度值,再结合相机的内参矩阵(焦距、主点),就可以把这束光线"钉"在某个具体的三维点上。这正是相机模型里的单目测距原理,只是我们使用深度传感器直接提供距离,而不是像双目视觉那样靠视差计算。

1.2 方案选型:为什么选 D435i 配 YOLO v5

这个问题我其实在系列第一篇、第二篇里已经回答过一部分,这里再做一次总结。D435i 的优势在于:输出深度图是硬件算好的,直接提供逐像素的毫米级深度值,不用自己做立体匹配;同时内置IMU,后续要做视觉惯性里程计或者机械臂手眼标定,也能用上。YOLO v5 则胜在工程生态成熟,模型导出成 ONNX 或者 TensorRT 都方便,推理帧率可以轻松跑到实时,做测量类应用的检测前端非常合适。

用这套组合做一个"目标测点"的Demo,目的并不是替代专业的激光雷达测量设备,而是验证一个交互逻辑:机器人看到一个目标,通过深度学习知道它是什么,再通过深度传感器知道它在哪。这个逻辑可以平移到抓取、避障、导航、分拣等场景,这也是为什么很多人选择这套技术栈入门。

1.3 整套系统的数据流:从相机像素到三维坐标的完整管道

我把整个流程拆成五个环节:取流、检测、对齐、取深度、反投影。取流是从 D435i 获取彩色图和深度图;检测是 YOLO 在彩色图上找到目标框;对齐是把深度图配准到彩色图视角;取深度是在目标中心点读一个距离值;反投影则是用内参把二维像素坐标转成三维坐标。

这几个环节里,取流和检测很多人已经做了,但常常没有意识到后两步才是测点成败的胜负手。我在调试过程中发现,不少人的结果"看起来有数、实际却不准",就是因为深度取值位置和像素坐标没有对应好,或者直接用未对齐的深度帧导致误差。接下来我会按照环境准备、代码实现、精度优化、问题排查的顺序,逐步把这套管道跑通并调准。

2. 环境准备与关键依赖:先有一条能稳定输出的基线

2.1 相机驱动和Python包的版本匹配

如果你是从零开始装,推荐直接用 RealSense 官方提供的 Linux 安装包脚本装 librealsense,再通过 pip 安装 pyrealsense2。这么做的好处是驱动的用户态部分和内核模块都由官方脚本统一处理,比较省心。但有一个点必须注意:pyrealsense2 的版本号和 librealsense 的内核补丁版本要尽量保持同步,否则可能出现"API 新特性识别不了,或者打开相机时报固件错误"的情况。

安装完成后,先用官方自带的 realsense-viewer 验证一下相机能不能正常出图、深度有没有抖动,再进入写代码阶段。这一步很关键,因为如果相机本身输出不稳定,后面所有测量的结果都会跟着漂,排查难度直接上一个台阶。

2.2 YOLO v5的推理环境搭建

YOLO v5 的官方仓库可以直接用。如果你之前跑过检测,建议把手头比较成熟的模型权重作为基础,重新用一张自定义数据集微调,或者直接用仓库自带的预训练权重做通用目标测点。个人经验是:如果目标是固定几类(比如人、箱子、瓶子),先在公开权重上验证流程,再考虑要不要标注自有数据,否则会陷入"数据标注做了很久,流程还没通"的困境。

推理时不一定非要用 PyTorch 实时跑。我建议把模型转成 ONNX 或者在 GPU 上直接用官方推理脚本跑,重点在于把检测结果快速拿到。如果你的机器只有CPU,YOLO v5s 的推理速度也能接受,但实时性会差一些,后面做滤波时会比较痛苦。

2.3 快速验证整条链路的正确顺序

环境装好之后,不要急着写完整的测量程序。我推荐的验证顺序是:先用 realsense-viewer 确认相机输出正常;再用 YOLO 官方推理脚本在彩色图上跑一次检测,确认模型能出框;接着在相机回传的画面上叠加画一个十字,确认我们能拿到实时图像;最后才是把检测结果和深度结合起来算坐标。

按这种逐步递进的方式,可以把问题隔离在单个环节里。否则遇到"深度测不准"的情况,你很难判断是相机标定漂了、对齐代码错了,还是模型误检导致的。

3. 核心实现:从彩色图检测到深度值获取

3.1 检测结果的数据结构:从Tensor到一组边界框

YOLO v5 在 PyTorch 推理时,model(img)返回的结果是一个Detections对象,默认情况下results.pandas().xyxy[0]可以拿到带列名的表格,每行数据包含xmin、ymin、xmax、ymax、confidence、class。如果你用 ONNX 导出,通常会有一个(N, 6)的输出,按x1, y1, x2, y2, score, cls的顺序排列。

这一步要特别强调:拿到框之后先确定你的坐标系方向。OpenCV 的像素坐标原点在左上角,x 向右增大,y 向下增大。这个方向在下一步做反投影时不会改变(因为内参就是这么定义的),但你大脑里要清楚,中心点的 y 坐标越大,目标在画面里越靠下,而不是越靠上。

3.2 从边界框到中心点:常见的像素换算方式

很多教程会直接写center_x = (x1 + x2) / 2和center_y = (y1 + y2) / 2。在大部分情况下这没问题,但我要提醒一个细节:如果框坐标是浮点数,请保留浮点计算;如果你在做完检测后立即把坐标强转成int,最后深度读取时可能正好落在框的边界上,导致深度值跳变。

更稳妥的方法是:在计算中心点之后,用一个小的邻域窗口(比如5x5或者7x7)取深度的中值,而不是只取单个像素的深度。因为单个像素的深度噪声很大,尤其在边缘、光反射和透明物体上,一个噪声点就能让你的三维坐标跳出去几厘米甚至几十厘米。后面我会具体写这个滤波操作。

3.3 深度图与彩色图对齐:一键调用背后的本质

对齐的目的是让深度图的视角和彩色图完全一致。代码上,一条命令就能完成:

import pyrealsense2 as rs pipeline = rs.pipeline() config = rs.config() config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30) config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) profile = pipeline.start(config) align = rs.align(rs.stream.color) # 深度图对齐到彩色图 frames = pipeline.wait_for_frames() aligned_frames = align.process(frames) aligned_depth = aligned_frames.get_depth_frame() color_frame = aligned_frames.get_color_frame()

这条命令背后做的事,是使用两个传感器外参(旋转和平移矩阵)以及各自内参做视角变换,把深度图重新投影到彩色相机的视角。对齐之后,深度图上(u, v)那个像素的深度值,就和彩色图上(u, v)那个像素一一对应了,这时你拿着YOLO检测的中心点去深度图取距离才是有效的。

对齐这一步是"精确测量"和"大概感知"的分水岭。如果不做对齐,直接用原始深度图和原始彩色图,误差会随着物体左右移动而变大,近处偏差尤其严重,我曾经实测过在0.5米距离、画面边缘位置,偏差能达到5厘米以上。

3.4 取深度值的工程细节:有效深度与噪声处理

深度图里的像素值是uint16,单位是毫米,但真正使用时需要乘以相机的深度缩放比例depth_scale,D435i 默认是 0.001,也就是1毫米每单位。通过profile.get_device().first_depth_sensor().get_depth_scale()可以拿到这个值。

读取某个像素深度可以参考:

depth_intrin = aligned_depth.profile.as_video_stream_profile().intrinsics depth_pixel = [int(center_x), int(center_y)] depth_value = aligned_depth.get_distance(depth_pixel[0], depth_pixel[1]) # 单位:米

get_distance返回的已经是米。需要注意:如果这个点在深度图上是无效区域,返回0,这时不能直接用。常见原因包括目标太近(低于D435i的最小工作距离,约0.2米)、反光表面、黑色吸光材质、以及遮挡导致的空洞。我习惯在读取之后加一个有效性判断,确认深度大于0且距离合理范围,再进入坐标计算。

4. 从深度到三维坐标:反投影公式与代码实践

4.1 为什么有深度还不够:相机内参的引入

单纯拿到深度值,你只知道目标离相机多远。要确定目标在相机前方哪个具体位置,还需要知道"这束光往哪个方向射出去"。方向由像素坐标和相机内参共同决定。

相机内参通常用fx、fy、cx、cy表示。其中fx和fy是焦距(单位是像素),cx和cy是主点坐标,也就是光轴和成像平面的交点。D435i 的彩色相机内参可以通过color_frame.profile.as_video_stream_profile().intrinsics获取,打印出来就是一组数值。这个内参在出厂时是经过标定的,正常情况下不用自己再做单目标定。

4.2 反投影公式的直观推导

想象相机的位置就是三维坐标系的原点,光轴指向 z 轴正方向,图像平面在 z = f 处(f 就是焦距)。一个图像点(u, v),它在归一化平面上的坐标是( (u - cx) / fx, (v - cy) / fy, 1.0 )。这意味着,从真实空间点(X, Y, Z)投影到图像上,满足:

u = (fx * X / Z) + cx v = (fy * Y / Z) + cy

反解这个方程就能得到:

X = (u - cx) * Z / fx Y = (v - cy) * Z / fy Z = depth_value

这是一个非常简单但极其基础的关系。它说明:如果目标中心点在画面正中央,即u = cx,那么X = 0,目标在相机正前方;如果目标偏左,u - cx < 0,X为负,坐标就会说明目标在左边。这套关系是所有基于图像测距的基础。

4.3 完整代码实现:一个可跑的D435i+YOLO测点程序

我把关键代码整合成了一个可直接运行的版本,它做了三件事:启动相机并对齐深度、跑一次YOLO检测、计算并打印检测到的目标中心点三维坐标。

import cv2 import torch import pyrealsense2 as rs import numpy as np # 加载模型 model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True).autoshape() model.conf = 0.25 model.iou = 0.45 # 启动Realsense管线 pipeline = rs.pipeline() config = rs.config() config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30) config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) profile = pipeline.start(config) align = rs.align(rs.stream.color) try: while True: frames = pipeline.wait_for_frames() aligned_frames = align.process(frames) color_frame = aligned_frames.get_color_frame() depth_frame = aligned_frames.get_depth_frame() if not color_frame or not depth_frame: continue # 转numpy color_image = np.asanyarray(color_frame.get_data()) depth_intrin = depth_frame.profile.as_video_stream_profile().intrinsics color_intrin = color_frame.profile.as_video_stream_profile().intrinsics # YOLO检测 results = model(color_image) dets = results.pandas().xyxy[0] for _, row in dets.iterrows(): x1, y1, x2, y2 = row['xmin'], row['ymin'], row['xmax'], row['ymax'] cx = (x1 + x2) / 2.0 cy = (y1 + y2) / 2.0 # 中心邻域中值滤波获取深度 u = int(round(cx)) v = int(round(cy)) depth_values = [] for du in range(-3, 4): for dv in range(-3, 4): nu, nv = u + du, v + dv if 0 <= nu < 640 and 0 <= nv < 480: d = depth_frame.get_distance(nu, nv) if d > 0: depth_values.append(d) if not depth_values: continue depth = np.median(depth_values) # 反投影计算三维坐标 # 使用彩色相机内参(对齐后深度图视角与彩色图完全一致) X = (cx - color_intrin.ppx) * depth / color_intrin.fx Y = (cy - color_intrin.ppy) * depth / color_intrin.fy Z = depth label = results.names[int(row['class'])] print(f"{label}: center=({cx:.1f}, {cy:.1f}), " f"depth={depth:.3f}m, 3D=({X:.3f}, {Y:.3f}, {Z:.3f})") cv2.circle(color_image, (int(cx), int(cy)), 3, (0, 0, 255), -1) cv2.putText(color_image, f"({X:.2f}, {Y:.2f}, {Z:.2f})", (int(cx) + 10, int(cy)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) cv2.imshow("yolo+d435i", color_image) if cv2.waitKey(1) & 0xFF == ord('q'): break finally: pipeline.stop() cv2.destroyAllWindows()

这段代码基本可以直接复制到你的工程里。有几个地方我做了特殊处理,值得解释。

一个是深度获取时用的中值滤波窗口。直接把深度取在中心点像素上,D435i在暗光、带纹理目标、远距离场景下会有个别像素的跳变噪声,用7x7邻域取中值可以稳住读数,代价只是很小的计算量。

另一个是内参选择。很多人会直接拿深度内参转换坐标,但我们的像素坐标来自彩色图。对齐之后,深度图和彩色图在几何上重合,但各自的内参不一样,所以反投影必须用彩色内参。这一点写错,误差会立刻出现,尤其在画面边缘。

4.4 一个容易忽略的细节:彩色图和深度图刚好差了一个crop

如果你用的是640x480的分辨率,上面代码没问题。但有些情况下,彩色图的默认FOV和深度图稍有不同,对齐后深度图会被裁切到彩色图范围。如果你发现画面边缘的深度读取为0,先检查对齐后的深度图尺寸,再确认是否脱离有效区域。个人实践下来,D435i在VGA分辨率下对齐效果最稳定,如果你用1280x720,深度图会裁剪得更明显,中心区域没问题,边缘区域容易空洞。

4.5 更真实的坐标:将相机坐标转换到目标物坐标系

如果目标只是一个静态物体,相机也固定不动,那么上面的三维坐标就是"相对相机的位置",可以直接理解为目标在相机前方哪个位置。但如果你是在机械臂抓取场景,或者想让机器人移动到一个点上,你需要把相机坐标转换到一个固定的世界坐标系。这个过程分两步。

第一步是固定相机:如果相机安装在固定支架上,姿态不变,你可以通过一个已知尺寸的目标做手眼标定,标出相机相对世界坐标系的旋转和平移。第二步是移动相机:相机装在机械臂末端或移动底盘上,这时需要手眼标定得到"相机到机械臂末端"的外参,然后再结合机械臂的当前姿态算出目标在世界坐标系的坐标。

这个转换公式不复杂,一个旋转矩阵乘以相机坐标向量,再加平移向量:

# 假设你用标定得到 R(3x3旋转矩阵)和 t(3x1平移向量) camera_coord = np.array([X, Y, Z]).reshape(3, 1) world_coord = R @ camera_coord + t

难点在标定过程本身。入门阶段建议先用"固定相机、测量相对坐标"的方案跑通流程,等数据可信了再上机械臂手眼标定,否则误差叠加会让你怀疑人生。

5. 精度分析:误差从哪来,怎么让测量结果更可信

5.1 三层误差模型:传感器、标定和应用

测量出的三维坐标精度,受三个层级影响。传感器层,D435i本身的深度精度随距离变化,通常在0.3米到1米范围内误差在百分之几的量级,距离越远绝对误差越大,到了3米开外,误差可能达到十几厘米。标定层,相机出厂内参已经可用,但如果你拆装过镜头或者环境温度剧烈变化,内参会漂移。应用层,YOLO检测框和实际目标的贴合程度直接决定中心点像素位置,如果框偏了,深度值和三维坐标自然就偏。

所以当你发现测量结果不稳定,不要立刻怪相机,先逐个排查这三个层面。

5.2 深度噪声的应对策略:时间维度和空间维度滤波

空间维度滤波我上面已经用了中值窗口。时间维度上,连续帧的深度值会有小幅抖动,做滑动平均或用预测算法能明显改善。很多工业场景会把十几帧的有效深度值做平均,再输出一次坐标。

要注意的是,时间滤波不适合快速移动的目标。目标动得快,平均窗口会引入"拖影"误差。我的做法是:目标静止或低速时,用13帧滑动平均;目标运动快时,缩短到3到5帧;如果要做实时抓取,建议结合目标跟踪和运动预测,而不是简单滤波。

5.3 验证你的系统精度:一个简单可行的实验方法

没有验证就没有精度可言。我的习惯是做一个"静止标定物验证":把一个已知尺寸的盒子或者标记物放在距离相机0.5米、1米、1.5米的位置,分别用程序测三维坐标。然后用卷尺或者激光测距仪量出真实位置,对比误差。

这一步为什么重要?有时候你觉得程序写对了,但实际测出来偏移量是持续的系统性偏大或偏小,这往往是内参或者比例理解错了。用三个不同距离实测,你能迅速判断是比例错误(距离越大偏差越大)还是常数平移误差(所有距离偏差基本一样)。

5.4 一个典型的精度陷阱:测量平面上物体时的深度差异

有一个情况经常被忽略:当目标是一个平面物体(比如纸箱的正面),中心点可能落在平面的中间区域,这个区域深度值是稳定的;但如果目标是不规则物体,比如瓶子,中心点正好落在瓶子的弧形曲面顶部,深度值和该物体的实际"重心"位置不同。YOLO框中心并不等于物体物理质心,这在测量体积、抓取位置时必须考虑。

另外一个与精度密切相关的点是:D435i的深度是基于红外纹理的,深色、吸光、透光物体都会影响深度质量。黑色哑光表面容易让深度出现空洞,透明玻璃则直接反射穿透,测出来的深度会飘到玻璃后面去。要用这套方案测量这类物体,得先确定你对精度的预期,必要时换主动光源或者涂点哑光喷剂来改善表面材质。

6. 常见问题速查与避坑心得

6.1 运行时报错和排查

我整理了调试过程中最常遇到的一些问题,放在一个速查表里。

现象可能原因解决方案
打开相机报 "No device connected"USB接口供电不足,或没插USB 3.0换USB 3.0口,拔掉延长线或换短线
画面只有彩色图,深度图全黑深度传感器被遮挡,或者工作距离过近检查前方遮挡,保持0.2米以上距离
深度值读数不稳定、跳动大目标反光/透明/表面无纹理增大中值窗口,调整测量距离,改善表面材质
get_distance 返回0深度无效区域避开该像素,用邻域中值,检查是否超出有效范围
YOLO检测结果没有框模型未加载成功,或者置信度阈值过高降低conf阈值,检查测试图片是否正常
坐标整体偏移一个常量反投影用的内参不对确认使用彩色内参(对齐后),检查ppx和ppy单位
远程调试时画面卡顿传输带宽不足降低分辨率到640x480,或只传输深度图兴趣区域

6.2 我踩过的几个大坑

第一个坑是对齐时机理解不到位。我刚开始直接把彩色帧和深度帧分开处理,YOLO检测框拿到后直接去原始深度图取距离,结果发现目标靠近画面边缘时,深度明显偏小。后来读了官方文档,才意识到必须用align.process(frames)得到对齐后的深度帧,才能和彩色图一一对应。

第二个坑是使用深度内参做反投影而不是彩色内参。这在短距离低分辨率下粗看问题不大,但一旦目标在画面边缘,坐标的X和Y误差就会明显增大。换成彩色内参后,误差显著下降。这个细节,很多教程都不会提。

第三个坑是YOLO模型在GPU上推理和相机线程共用时出现延迟累积。相机是实时流,如果推理太慢,帧会堆积,画面越来越旧,测出的坐标滞后严重。我的建议是独立的线程跑推理和相机取流,用队列连接两个线程,并对队列长度做限制,防止无限堆积。

第四个坑是中心点落在空洞上。某次测一个黑色塑料瓶,检测框中心点正好在瓶身标签反光位置,深度一直读到0。我一开始以为相机坏了,后来把中心点周围30个像素的深度都输出来看,才发现中心区域刚好是一个空洞。从那以后,我所有深度读取都带邻域滤波,并且保留有效深度的数量检查。

6.3 这个方案后续还能怎么扩展

如果你已经稳定拿到目标中心点的三维坐标,可以考虑往两个方向扩展。

第一个方向是目标抓取。在三维坐标基础上,加上目标朝向估计,这里可以用D435i的RGB图像做姿态估计,或者直接用深度点云做平面拟合,计算出目标的旋转方向。第二个方向是目标跟踪与轨迹预测。把每一帧的三维坐标串起来,用卡尔曼滤波或者简单的曲线拟合,就能让机械臂提前预判目标移动终点,实现动态抓取或避让。

另外,YOLO v5在检测速度上和精度上毕竟不如专门压缩部署后的方案。如果设备资源足够,我建议尝试把模型导出为TensorRT,在NVIDIA设备上推理,帧率能从30提升到60以上,对动态测点非常有价值。导出过程不难,但要注意预处理方式,YOLO的输入需要做letterbox后resize,输出要还原到原始尺寸,这个还原步骤直接决定中心像素位置对不对。

我的个人体会:把坐标打印出来之前,先让它"可视化"

我在调这一整套方案时,最大的体会是:三维坐标这个数字,单独看很抽象,你很难判断它到底对不对。所以我强烈建议,在开发阶段把测量结果直接画在彩色图像上,比如在当前帧画出检测框、画出中心点、用文字标注出三维坐标,然后人眼观察这个坐标是否符合直觉:近的目标应该X和Y变化范围较小、Z值明显较小;目标从画面左边移动到右边,X应该从负变正。

这种"可视化调试"比盯着终端数字高效得多。我还在画面里画了一个虚拟的"十字准星",标出相机正前方方向对应的像素位置,这样可以一眼看出目标的X坐标符号和它在画面里的左右关系是否一致。

最后再分享一个实用技巧:在输出三维坐标的同时,把RGB图、对齐后的深度图和坐标一起保存成一个视频或者日志,这样出了问题可以回放排查。很多线上问题都是偶发的,没有记录就等于查无实据。我用了一行代码把每一帧的数据都写入CSV,包括时间戳、检测框、深度值和三维坐标,这个习惯让我后来定位精度问题时轻松很多。

这个主题能延伸的内容还有很多——手眼标定、机械臂抓取规划、点云处理、目标姿态估计——但稳扎稳打的第一步,永远是先把"中心点三维坐标"这个数字测准。希望这篇内容能让你的D435i和YOLO真正"从看见到定位",少走一些我当年走过的弯路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 4:57:12

端侧模型与推理加速双轮驱动:AI应用迈向生产环境的三大主线

这期AI日报本该早上发&#xff0c;结果我上午被一个长文本推理的案例拖住了&#xff0c;现在才整理完。今天是2026年10月5日&#xff0c;圈里的动态不少&#xff0c;但我真正想重点聊聊的其实就三件事&#xff1a;端侧模型再次拉低部署门槛、推理加速方案又往前拱了一步、以及A…

作者头像 李华
网站建设 2026/10/22 4:57:05

连续滑模控制MATLAB仿真:从原理到双连杆机器人轨迹跟踪实践

简介&#xff1a;连续滑模控制&#xff08;变结构控制&#xff09;是机器人控制中常用的非线性鲁棒控制方法&#xff0c;其核心思想是根据系统状态动态切换控制结构&#xff0c;从而获得对参数摄动和外部扰动的较强抑制能力。这份资源包即围绕该主题&#xff0c;面向机器人控制…

作者头像 李华
网站建设 2026/10/22 4:56:43

Ostrakon-VL:餐饮零售门店多模态大模型落地实践复盘

凌晨两点&#xff0c;某连锁餐饮门店的后厨监控里&#xff0c;一位员工进入画面时没有佩戴帽子。传统摄像头只会录像&#xff0c;普通视觉模型能识别出"有人进入"&#xff0c;但回答不了"这个人是不是违反了操作规范"。就在那一刻&#xff0c;我们正在内测…

作者头像 李华
网站建设 2026/10/22 4:56:43

AI培训学什么?算法、数据与工程化三大方向深度解析

一、先说清楚&#xff1a;AI 培训到底在教什么我接触过不少打算入行 AI 的朋友&#xff0c;问得最多的就是“AI 培训主要学什么”。这个问题看似简单&#xff0c;但回答起来特别容易走偏&#xff0c;要么堆一堆名词把人吓退&#xff0c;要么只讲调库调包让人觉得 AI 就是写两行…

作者头像 李华
网站建设 2026/10/22 4:56:30

Universal Links配置全攻略:从Scheme到无缝唤起App

做iOS开发这几年&#xff0c;Universal Links 是个绕不开的话题。我最早接触它还是因为一个挺尴尬的场景&#xff1a;用户从浏览器点了一个链接&#xff0c;明明装了App&#xff0c;结果跳到了一个中间确认页&#xff0c;还得再点一次"打开App"&#xff0c;体验非常割…

作者头像 李华
网站建设 2026/10/22 4:56:26

Shell重定向与文件描述符深度解析:从入门到实战避坑

做shell脚本这些年&#xff0c;我越来越确信一个判断&#xff1a;shell编程重定向操作是区分“会写脚本”和“写好脚本”的一道分水岭。很多人能写出一串能跑的命令&#xff0c;但一旦涉及日志收集、交互输入、错误输出分离、后台任务管理&#xff0c;就开始靠猜和试。重定向看…

作者头像 李华