news 2026/9/24 19:12:01

YOLOv5+大疆Tello TT无人机:目标识别与单目测距追踪实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOv5+大疆Tello TT无人机:目标识别与单目测距追踪实战

简介:基于YOLOv5算法与大疆教育无人机Tello TT构建的目标识别与追踪测距完整方案,覆盖目标检测、实时追踪、测距输出等环节,适合毕业设计、K12科创项目以及希望入门无人机视觉开发的工程师。资源包共1672个文件、约269.35MB,包含50个Python核心脚本、758张jpg训练图像、694个txt标注文件、94个YAML配置、9个训练好的pt模型,以及sh部署脚本、Dockerfile和Markdown说明文档等,从数据标注、模型训练、优化评估到无人机端部署形成完整链路。代码注释详细,模块划分清晰,新手可按说明文档快速搭建环境;已有461人学习浏览,该方案在毕业设计和课程设计中多次获高分认可。下载后简单部署即可实现实时目标识别、追踪与距离估算,支持自定义数据集继续训练,也可作为课题演示或竞赛项目的可扩展底座,兼顾学习与二次开发。

1. 先说结论:这个项目真正难的不是识别,而是测距与跟随

很多人拿到“基于YOLOv5+大疆教育无人机Tello TT实现目标识别检测+追踪测距”这套东西,第一反应是先把目标检测模型训出来,觉得模型准了一切都好办。实际落地一遍你会发现,识别模型在电脑上跑到 mAP 0.9 也不能直接保证无人机追得上人;真正让项目翻车的环节往往是单目测距的误差、控制指令的延迟,以及 Tello TT 那套不太讲情面的 Wi-Fi 连接。这个方向解决的是“从画面到飞行”的完整闭环:先在电脑或板端跑 YOLOv5 做目标识别检测,再把连续帧的检测框串成轨迹,结合测距结果生成飞控指令,让无人机跟着目标移动。它适合两类人:一类是刚接触 AI+无人机结合的学生,想从源码和数据出发完整跑通一个项目;另一类是准备做安防巡检、教育竞赛或视觉跟随的开发者,需要一套能改能调的基线方案。下面的内容按环境、数据、训练、追踪、飞控和排查这条线走,每一步都会给出可直接抄的命令和代码。

2. 环境与数据集:让Tello TT的画面变成YOLOv5能学的格式

整个项目最先动手的不是训练,而是把环境锁死。YOLOv5 对 Python 版本和依赖组合比较敏感,Tello TT 的 Python 控制库倒是很宽松,基本上纯 Python 实现,不挑版本。所以策略是:先把检测环境固定下来,再在这个环境里装无人机控制库,避免后面出现 numpy 或 torch 版本互踩的玄学问题。

2.1 环境选型:用 Conda 锁定 Python 3.8 与依赖组合

我一般会创建一个独立的 Conda 环境给 YOLOv5 用,不用系统全局 Python 去顶,因为实训室的机器往往同时装了 ROS、OpenCV、TensorFlow 等一堆东西,全局环境装 torch 很容易把别的库的 numpy 版本顶掉。

conda create -n yolov5 python=3.8 -y conda activate yolov5 git clone https://github.com/ultralytics/yolov5.git cd yolov5 pip install -r requirements.txt

这段命令干了三件事:建环境、拉 YOLOv5 源码、装依赖。requirements.txt 里已经锁定了 torch、opencv-python、pandas、matplotlib 等常见包,不需要再手动逐个装。需要注意 Python 3.8 是经过验证最稳的组合,Python 3.10 以上也能跑,但某些老版本依赖需要现场编译,网络不好时会卡很久。装完依赖后顺手验证一次 torch 是否可用:python -c "import torch; print(torch.__version__)"。显存低于 6G 的机器优先用 yolov5s 甚至 yolov5n 做训练,不要一上来就选 yolov5l。

2.2 数据采集:用 Tello TT 录视频再抽帧,不要拿手机对着屏幕拍

常见做法是先让 Tello TT 起飞,对着目标区域录一段视频,然后从视频里抽帧做数据集。这里最容易犯的错误是直接拿手机拍电脑屏幕上的无人机画面,这样得到的数据带明显摩尔纹和反光,训练出来的模型识别能力非常差。

from djitellopy import Tello import cv2 import os tello = Tello() tello.connect() tello.streamon() cap = tello.get_frame_read() os.makedirs("frames", exist_ok=True) count = 0 while count < 500: frame = cap.frame if frame is not None: path = f"frames/frame_{count:04d}.jpg" cv2.imwrite(path, frame) count += 1 tello.streamoff()

这段代码用 djitellopy 的底层帧读取接口把视频流直接落盘,比调用 Tello 的录视频再导出的流程更直接。注意cap.frame是 Tello 视频流解码后的 BGR 图像,拿到的分辨率默认是 960x720,对训练来说足够了。建议采集时覆盖不同光照方向和背景环境,比如上午逆光、下午顺光、室内灯光、室外阴影各来一批,数量上每个目标类别至少准备 300 到 500 张有效帧。

2.3 标注与划分:LabelImg 的 YOLO 格式和 train/val 目录

标注工具我习惯用 LabelImg,输出格式直接选 YOLO,每一张图片会生成一个同名的 txt 文件,里面每行是“类别序号 中心点x 中心点y 宽度 高度”,坐标都是归一化到 0~1 的。这个格式是 YOLOv5 训练时的标准输入,不要导出成 VOC XML 再二次转换,多一次转换就多一次坐标出错的风险。

pip install labelimg labelimg

标注完成后的目录结构应该是这样的:

datasets/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── tt_data.yaml

直接用下面的脚本把已经标注好的全部图片按 8:2 划分到训练和验证目录,同时把对应标签文件复制过去。

import os import random import shutil random.seed(42) images = [f for f in os.listdir("frames") if f.endswith(".jpg")] random.shuffle(images) split = int(len(images) * 0.8) for i, img in enumerate(images): target = "train" if i < split else "val" base = img.rsplit(".", 1)[0] shutil.copy(f"frames/{img}", f"datasets/images/{target}/{img}") shutil.copy(f"labels/{base}.txt", f"datasets/labels/{target}/{base}.txt")

脚本里random.seed(42)固定随机种子,保证每次划分结果一致,方便复现实验。划分比例 8:2 在数据集只有几百张时比 9:1 更稳,否则验证集太小,mAP 波动会很大。tt_data.yaml 的内容也很简单:

train: ../datasets/images/train val: ../datasets/images/val nc: 1 names: ['person']

nc是类别数量,names按顺序写类别名,顺序必须和标注时一致。如果你要识别的是车、安全帽、水杯,只需要把 names 改成对应列表。这一步完成后,数据集这边就可以收工了。

3. 训练与评估:从预训练权重到自己的识别模型

数据集准备好之后,训练阶段反而不是最花时间的环节。第一次训练我建议直接用官方预训练权重做微调,不要在 ImageNet 上从头训。YOLOv5 的 COCO 预训练权重已经能识别常见物体,如果你的目标是人,它本身就会认,你做的是让模型更适应 Tello TT 低空视角下的姿态和尺度。

3.1 第一次训练:train.py 的最小命令与参数含义

在 YOLOv5 源码目录下执行下面的命令,这是整个训练流程的最小可行命令:

cd yolov5 python train.py \ --data ../datasets/tt_data.yaml \ --weights yolov5s.pt \ --img 640 \ --epochs 100 \ --batch-size 16 \ --device 0

--weights yolov5s.pt表示加载 COCO 预训练的 s 版本权重,第一次训练不要从--weights ''开始;--img 640控制训练时输入图像的缩放尺寸,Tello 视频流原图是 720p,缩到 640 基本不损失信息;--batch-size在 8G 显存上设 16 通常没问题,如果报 CUDA out of memory,先降到 8 再不行就换 yolov5n;--device 0指定第一块 GPU,没有 GPU 时改成--device cpu,但训练速度会慢十倍以上,建议至少借一台有 GPU 的机器。

提示:训练日志里如果出现 WARNING 说“类名与权重不一致”,优先检查 tt_data.yaml 的 names 顺序,而不是强行忽略这条警告。这个警告往往是后面模型预测结果对不上号的根源。

3.2 影响结果的三类参数:超参数、图像尺寸与数据增强

YOLOv5 默认的hyp.scratch-low.yaml对大多数场景够用,但无人机画面有它的特殊性——运动模糊和亮度抖动比普通监控视频更严重。我会在hyp.scratch-low.yaml里重点调三个增强项:hsv_h色调扰动保持在 0.015 左右,别开大,否则人对肤色的判断会乱;hsv_shsv_v可以适当提高到 0.7 和 0.4,让模型对 Tello 在不同光照下的颜色偏移不敏感。运动模糊不在默认 hyp 参数里,常见做法是在数据预处理里加随机模糊增强,或者简单点,在采集数据时故意在飞行中录一部分带动态模糊的帧。

图像尺寸方面,--img 640训练出来的模型在桌面级显卡上推理速度大概 20~40ms,但放进控制闭环里还是偏重。我一般把推理分成两档:离线分析用 640 的权重,实时跟随用同一份训练权重配合--img 416或 320 的输入尺度,因为在跟随场景里,延迟比单帧精度更重要。你完全不需要为 320 和 640 分别训练两个模型,一个权重两种输入尺度都能跑,只是小尺度会损失对小目标的召回,换来的是一帧推理时间降低到几毫秒。

3.3 用 val.py 看 mAP 而不是只盯 loss

训练结束后的评估也不是光看 tensorboard 里的 loss 曲线,真正决定模型能不能交付的是验证集上的精确率和召回率。YOLOv5 的 val.py 是最直接的评估工具:

python val.py \ --data ../datasets/tt_data.yaml \ --weights runs/train/exp/weights/best.pt \ --img 640

执行完会在 runs/val/exp 下生成一系列图片和指标表。重点看三个数:mAP50mAP50-95Precision/Recall的组合。mAP50 指的是预测框与真实框 IoU 达到 0.5 时判定正确的平均精度,这个数在单一类别、低空视角下的常见数据集上一般要能到 0.9 以上才算合格;mAP50-95 是更苛刻的指标,要求 IoU 从 0.5 到 0.95 取多个档位求平均,它更看重框的贴合度,但无人机跟随场景不要求框非常紧,所以 mAP50 比 mAP50-95 更有参考价值。如果 Precision 很高但 Recall 低,说明模型保守,漏检多,跟随时容易把人跟丢;如果反过来,说明误检多,会把背景里的路人当目标。

4. 检测+追踪+测距:把单帧结果变成连续轨迹和距离

这一章是整个项目最核心的部分。目标识别检测只是单帧结果,无人机要“追踪”一个目标,必须知道这一帧的检测框和上一帧的同一目标是不是同一个。而“测距”在 Tello TT 上没有现成的深度相机,只能靠单目几何模型去做估算。这两块分开看都不复杂,合在一起就有很多细节要处理。

4.1 推理管线:用 torch.hub 加载训练好的模型

训练完的 best.pt 可以直接被 YOLOv5 源码里的推理代码调用,也可以脱离 train.py 独立运行。我通常直接写一个小于 20 行的推理封装,供后面的追踪与跟随代码复用。

import torch model = torch.hub.load( "ultralytics/yolov5", "custom", path="weights/best.pt", force_reload=False ) model.conf = 0.4 model.iou = 0.45 model.max_det = 20 def detect(frame): results = model(frame) return results.xyxy[0].cpu().numpy()

torch.hub.loadcustom模式会加载你自己训练好的 best.pt,而不是官方权重;force_reload=False表示本地有缓存就不重新下载。model.conf是置信度阈值,0.4 适合室内跟人,如果室外光线强导致误检变多,我会调到 0.55。返回的xyxy数组格式是[x1, y1, x2, y2, conf, cls],坐标是相对于输入原图的像素值,后面所有追踪和测距逻辑都基于这个数组。

4.2 追踪:用 IoU 匹配短时轨迹,不需要一上来就上 DeepSORT

常见做法是用 SORT 家族的算法做跨帧匹配。SORT 的思路很简单:对上一帧的每个轨迹预测当前帧的位置,再把当前帧的检测框和预测框做 IoU 匹配,IoU 超过阈值就认为是同一个目标。它不依赖外观特征,计算量小,对 Tello TT 这种计算资源有限的平台非常合适。网上能搜到大量 DeepSORT 教程,但 DeepSORT 需要额外加载 ReID 模型提取行人外观特征,在低功耗场景下性价比不高,除非你后面要做“目标消失一段时间后重新找回”这种重识别功能,否则先不用上。

我实现时用一个轻量的 Track 类维护框和编号,每帧做一次匹配:

class Track: def __init__(self, box, track_id): self.box = box self.id = track_id self.lost_frames = 0 def iou(box_a, box_b): x1 = max(box_a[0], box_b[0]) y1 = max(box_a[1], box_b[1]) x2 = min(box_a[2], box_b[2]) y2 = min(box_a[3], box_b[3]) inter = max(0, x2 - x1) * max(0, y2 - y1) area_a = (box_a[2] - box_a[0]) * (box_a[3] - box_a[1]) area_b = (box_b[2] - box_b[0]) * (box_b[3] - box_b[1]) return inter / (area_a + area_b - inter + 1e-6)

lost_frames字段用来记录这个目标连续多少帧没被匹配上,超过比如 30 帧就删掉这个轨迹,避免轨迹数无限增长。匹配阈值设在 0.3 比较合适:太低会把相挨着的两个目标合并成一串,太高会导致目标转身或者瞬间遮挡时跟丢。这里没有写卡尔曼预测,因为对 Tello 这种室内慢速场景,目标帧间位移有限,IoU 匹配已经能覆盖大部分情况;如果你发现目标在画面里快速移动导致频繁断轨迹,再引入卡尔曼滤波也不迟。

4.3 单目测距:Tello TT 没有深度相机,用先验宽度换距离

Tello TT 只有一个朝前的 720p 摄像头,没有 ToF 深度相机和双目结构光。要测量与目标的距离,只能用单目测距模型:假设目标真实物理宽度已知,通过目标在图像中占据的像素宽度反推距离。公式来自小孔成像模型,距离等于“真实宽度 × 焦距”除以“像素宽度”。

import numpy as np KNOWN_WIDTH = 0.45 # 人的肩宽,单位米 HFOV_DEG = 82.6 # Tello 摄像头水平视场角 FRAME_WIDTH = 960 F_PIX = (FRAME_WIDTH / 2) / np.tan(np.radians(HFOV_DEG / 2)) def distance_from_box_w(w_pixels): if w_pixels <= 1: return None return KNOWN_WIDTH * F_PIX / w_pixels

这里的KNOWN_WIDTH = 0.45是我常用的成年人肩宽假设值,如果追踪目标是车或者安全帽,要根据实际目标物改这个值。HFOV_DEG是 Tello 摄像头的水平视场角,不同版本 Tello 略有差异,可以在飞行前对齐标尺实测校正一下更保险。单目测距的误差来源主要两个:一是目标不垂直于光轴,人斜着站时像素宽度变小,距离会被估远;二是先验宽度本身就有误差。所以测距结果我一般不会直接用原始值,而是维护一个长度为 10 的滑动窗口,输出窗口内距离的中位数,这个细节能让跟随高度控制稳定很多。

注意:单目测距超过 8 米以后误差会快速放大,Tello 的跟随控制建议把期望距离控制在 1.2 到 2.5 米内,超出这个范围只做粗略参考,不要直接驱动飞控。

5. Tello TT联动与常见问题排查:让无人机跟着目标走

模型能识别目标、能给出连续轨迹和距离之后,最后一个环节是把这些信息转换成无人机能执行的运动指令。Tello TT 本身是教育版飞控,安全性比消费级无人机更保守,所以在做自动追踪前,我强烈建议先手动起飞一次确认操纵杆方向和避险反应。

5.1 用 djitellopy 建立控制通道:连接、解锁与起飞

djitellopy 是对 Tello 官方 SDK 的 Python 封装,比直接发 UDP 命令直观得多。Tello TT 和普通 Tello 在使用上没有区别,都是连接无人机的 Wi-Fi 热点后通过命令通道控制。

from djitellopy import Tello import time tello = Tello() tello.connect() print("电量:", tello.get_battery()) tello.streamon() time.sleep(2) tello.takeoff() tello.move_up(50)

tello.connect()会完成与 Tello 的命令握手,成功后 get_battery 可以读到电量。这里有个经验:电量低于 30% 不建议自动起飞,因为 Tello 的电压跌得很快,起飞后拉升阶段容易触发低电量强制降落,在室内砸到人不是小事。tello.streamon()打开视频流后要等 1~2 秒再起飞,让画面稳定下来,否则检测模块一开始拿到的全是花屏帧。

5.2 从图像坐标到飞行速度:一个三通道的 PID 控制器

追踪控制的本质是让目标框的中心接近画面中心,并且让测距结果稳定在期望距离附近。我使用的是三个独立通道的比例控制:左右移动对应横向坐标误差,上升下降对应纵向坐标误差,前后移动对应距离误差。下面代码直接把上一章的检测结果转换成 send_rc_control 的速度指令。

import numpy as np KP_LR = 0.5 KP_UD = 0.5 KP_FB = 0.8 MAX_SPEED = 0.4 TARGET_DIST = 1.5 def control_from_track(frame_width, frame_height, cx, cy, dist): err_lr = (cx - frame_width / 2) / (frame_width / 2) err_ud = (cy - frame_height / 2) / (frame_height / 2) err_fb = dist - TARGET_DIST vx = np.clip(KP_LR * err_lr, -MAX_SPEED, MAX_SPEED) vz = np.clip(-KP_UD * err_ud, -MAX_SPEED, MAX_SPEED) vy = np.clip(KP_FB * err_fb, -MAX_SPEED, MAX_SPEED) return vx, vy, vz vx, vy, vz = control_from_track(960, 720, cx, cy, distance) tello.send_rc_control(vx, vy, vz, 0)

这里的坐标系对应关系是:vx是左右速度,正值向右;vy是前后速度,正值向前;vz是上下速度,正值向上。注意纵向误差err_ud的符号要反一下,因为目标在画面下方时无人机需要下降而不是上升。MAX_SPEED = 0.4是米每秒,对室内追踪来说再大就有点危险了,Tello 在普通室内环境急加速容易打滑,视觉定位会被带偏。四个参数最后一个写 0 表示不让无人机偏航,只平移跟随。你可能会遇到飞机来回震荡的情况,那是 Kp 系数太高,把 KP_LR 和 KP_UD 都降到 0.2,能明显缓解。

5.3 这里最容易翻车:五个常见问题与对应的解决方案

追踪测距系统的故障,现象往往相似,根源却各不相同。以下是 Tello TT 落地过程中最容易踩的五个坑,每一条我都按现象、原因、解决三个层次整理过。

第一,起飞后立刻原地打转或直接掉高度。原因通常是上电后没有留足时间给无人机完成传感器初始化,或者命令通道还在建立中就发出了 takeoff。解决方法是 connect 之后强制 sleep 3 秒再起飞,并且确认 get_battery 返回的是数字而不是 -1,-1 表示通信还没就绪。

第二,画面延迟严重,飞控反应慢半拍。原因往往是推理输入分辨率过高或者控制循环里混入了耗时的可视化绘制代码。解决方法是把推理帧缩到 416 或 320,可视化显示用单独线程跑,不要占用控制线程的时间。

第三,目标明明在画面中间,飞机却左右振荡。原因多半是 KP_LR 和 KP_UD 设置过大,系统进入自激振荡。解决方法是减小比例增益并增加死区,比如err_lr绝对值小于 0.1 时直接输出 0,避免目标微小的像素偏移都触发飞行动作。

第四,测距结果漂移严重,飞机忽远忽近。原因是指标宽度假设不符合实际,比如追踪的是儿童,肩宽却用的 0.45 米。解决方法是给距离加中值滤波,同时把先验宽度改成可配置项,在说明文档里明确标注这个参数的标定方法。

第五,飞机飞到一半突然失去连接。原因通常是 Tello 的 2.4G Wi-Fi 热点被附近路由器或蓝牙设备干扰,导致命令包重传率升高。解决方法是起飞前用手机 Wi-Fi 扫描软件看一下周围信道,尽量在信道 1、6、11 中选空闲的;同时关闭电脑上不必要的蓝牙设备和无线网卡切换功能,让连接稳定在一个网卡上。这一步属于环境问题,排查起来最费时间,但往往就是因为这一条让整个演示翻车。

6. 验证与进阶:回放测试、追赶逻辑与真实部署习惯

在把整套追踪系统交给无人机之前,我强烈建议先做一次离线回放验证。具体做法是:用 Tello 录一段真实的跟随飞行视频,不要连接无人机,让同一套检测、追踪、测距、PID 代码跑在这段视频上,把每一帧产生的 vx、vy、vz 指令记录到 CSV 文件里,然后人工检查这些指令是否符合常识。比如目标在画面右侧,那 vx 应该持续为正值;目标一直保持在中心附近,那 vx 曲线应该在零附近抖动而不是单调偏移。这个过程能让你在完全无风险的情况下发现追踪逻辑的边界问题。

做回放验证时要注意帧率一致性。Tello 视频流实际到手可能只有 10 到 25 帧每秒,如果回放时不控制速度,PID 参数会出现幻觉。我会在循环里加一个简单的时钟控制:

import time frame_interval = 1 / 15 for frame in video_frames: t0 = time.time() run_control_loop(frame) sleep_time = frame_interval - (time.time() - t0) if sleep_time > 0: time.sleep(sleep_time)

把回放帧率固定在 15 帧每秒,能够最大限度地模拟真实控制频率。这比直接去室外拿实机调参安全得多,而且时间成本也低,一次完整回放只要几分钟。

再往后走,进阶方向有三个常见选择。一是多目标切换,当画面里有多个人时,选择距离最近的目标或者画面占比最大的目标作为跟随对象,这需要在追踪模块里加一个目标选择策略。二是目标丢失后的自动搜索,当轨迹丢失超过 2 秒,控制无人机水平旋转 90 度找回目标,这个功能在竞赛场景里非常实用。三是轻量重识别,给每个轨迹保存一个目标区域的颜色直方图或特征向量,用于目标短暂离开画面后重新匹配。我自己现在的习惯是,每次换一个新的场地,都会先录一段 30 秒的巡航视频离线跑一遍追踪回放,确认检测到的目标数量和距离曲线符合直觉,再决定要不要调 KP_FB 的值。这个习惯帮我省掉了好几次不必要的实机炸机。希望帮到你。

本文还有配套的精品资源,点击获取

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

Windows画图工具怎么裁剪图片顶部多余部分?零安装无损操作详解

一张好好的图片&#xff0c;上方偏偏多出半条网址栏、一段广告横幅&#xff0c;或者一截拍歪了的天空——这种“图片顶部有多余部分”的情况&#xff0c;我一个月能碰上好几回。每次处理&#xff0c;我都是直接打开 Windows 自带的画图工具&#xff0c;框选、裁剪、另存&#x…

作者头像 李华
网站建设 2026/9/24 19:11:38

Ryzen APU核显真实性能边界与旧显卡协同策略

1. 这个问题不是“能不能扔”&#xff0c;而是“扔了之后你愿不愿意为它买单”最近在几个硬件交流群里&#xff0c;总能看到类似这样的提问&#xff1a;“我手头有张GTX 1050 Ti&#xff0c;现在换Ryzen 5 8600G&#xff0c;显卡还用留着吗&#xff1f;”“锐龙8000系APU跑《原…

作者头像 李华
网站建设 2026/9/24 19:11:05

JSZip 局限性与边界指南:加密、ZIP64、性能与编码的完整解析

开发工具 【免费下载链接】jszip Create, read and edit .zip files with Javascript 项目地址&#xff1a; https://gitcode.com/gh_mirrors/js/jszip 点击查看 免费下载 JSZip 是一个用 JavaScript 创建、读取和编辑 .zip 文件的库&#xff08;见 README.markdown&#xff0…

作者头像 李华
网站建设 2026/9/24 19:10:47

大数据分析实战:从数据清洗到concat合并的完整流程

1. 大数据分析的“全局观”&#xff1a;从数据到结论到底走几步1.1 我在Day46里重新理解的“大数据”写这个每日总结系列到今天&#xff0c;已经是第46天。前面45天我聊过数据抓取、清洗、可视化、机器学习基础&#xff0c;但说实话&#xff0c;直到昨天完整跑完一个“旅游网站…

作者头像 李华
网站建设 2026/9/24 19:10:27

davhlpr.dll文件丢失怎么办?别乱下载,这样排查修复才安全

“系统找不到davhlpr.dll文件”这类弹窗&#xff0c;很多人第一眼看到就慌了&#xff0c;紧接着下意识去搜索引擎找“davhlpr.dll免费下载”。我的建议是&#xff1a;先别急着下载&#xff0c;这个文件十有八九不是你系统里本来就该有的东西&#xff0c;强行从网上拉一个回来&a…

作者头像 李华
网站建设 2026/9/24 19:10:24

智能家居哪个牌子好?品牌排名之外的四个关键判断指标

1. 品牌排行榜为什么不值得信任总有朋友把"智能家居哪个牌子好"这个问题抛给我&#xff0c;然后甩过来一张从某平台截图的品牌排行榜。我每次都跟他们说&#xff1a;你现在看这个榜单&#xff0c;等于在米其林餐厅门口问路人哪道菜好吃&#xff0c;参考价值有&#x…

作者头像 李华