新闻详情

新闻详情

首页 / 资讯中心 / 详情

手语识别实战:Python+OpenCV+Mediapipe关键点提取与分类

发布时间:2026/9/28 14:36:24来源:尧图网络
手语识别实战:Python+OpenCV+Mediapipe关键点提取与分类
简介一套基于Python、OpenCV与Mediapipe的手语手势识别检测项目源码面向计算机相关专业学生、高校教师及初级开发者适用于课程设计、毕业设计或二次学习。项目以Mediapipe完成手部关键点提取结合OpenCV做图像处理与实时检测流程覆盖数据采集、数据集构建、模型训练到推理识别代码结构清晰并附有说明文档便于理解整套手势识别实现路径。压缩包共6个文件以4个Python脚本为主另含1个说明文档和1个依赖环境清单整体仅4KB轻量易部署适合快速阅读与修改调试。目前已有210人学习/下载作者提供使用问题私信解答与远程指导对想提升动手能力的开发者是一个低门槛、可扩展的优质选择。1. 手语识别项目到底在做什么为什么用 PythonOpenCVMediapipe 这套组合一个叫“基于pythonOpenCV和Mediapipe实现手语手势识别检测项目源码.zip”的压缩包标题已经把技术栈写得很直白Python 写逻辑OpenCV 做图像读写和画面处理Mediapipe 提供手部关键点检测。真正做完你会发现手语识别不是“识别一只手”而是把一帧帧手部画面变成 21 个关键点的坐标序列再对这个序列做分类或匹配。这套组合能解决的是不买深度相机、不训练大模型只用普通摄像头就能把手势和简单手语词实时转成文本或语音提示。适合刚入门计算机视觉、想在本地跑一个可演示项目的人也适合想把自己的静态手势升级成动态手语词的进阶玩家。这篇文章按我实际复现同类项目的顺序来拆先讲关键点怎么提取再讲怎么分类最后把最容易翻车的几个配置一次讲透。2. 识别链路与关键点提取Mediapipe 的 21 个手部关键点怎么变成特征2.1 从视频帧到 HAND_CONNECTIONSMediapipe 检测管线的工作原理Mediapipe Hands 这个模块内部不是一步到位直接输出 21 个关键点的它走的是“先找手再找手的关键点”两级管线。第一步用掌检测器在整帧图像上扫描框出每只手的大致位置第二步在框出的区域内做关键点回归输出 21 个三维坐标x、y、z其中 z 表示深度相对值基本是玄学实际用得多的还是 x、y。这两步分开的好处是每帧只对手部区域做精细回归计算量可控CPU 上也能跑到 30 帧上下。用 Python 调用时最核心的是mp.solutions.hands.Hands这个类关键参数有三个static_image_mode、max_num_hands、min_detection_confidence。第一个参数控制是否把每一帧都当成独立图片处理如果设成 False 会启用跟踪模式帧间关键点更平滑适合摄像头实时手势如果设成 True每帧都重新检测适合图片或离线视频。max_num_hands控制最多检测几只手手语场景一般设 2 就够了。最后一个参数是置信度阈值低于 0.5 的检测会被丢弃背景干扰大时把它调低到 0.3 左右会更灵敏代价是误检抖动变多。连接关系在mp.solutions.hands.HAND_CONNECTIONS里列好了一共 20 条线段把 21 个点串成手掌、拇指、食指、中指、无名指和小拇指的结构。这个结构只在画图时用吗不是。你在做特征工程时会反复依赖“相邻关键点相连”这件事来算角度和距离。比如想判断食指是否伸直就得拿指尖点LANMARK_8和食指根部LANMARK_5做比较而不是单独看一个点飞到哪里。理解了这个管线后面所有收据预处理才有依据。2.2 用 OpenCV 读帧、送检、画点最小代码跑通关键点提取先用最小代码把关键点从摄像头里拉出来。下面这段我一般放在项目入口的 main 区域先把数据通路打通再往上加业务逻辑。import cv2 import mediapipe as mp mp_hands mp.solutions.hands mp_draw mp.solutions.drawing_utils cap cv2.VideoCapture(0) # 0 表示默认摄像头 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) with mp_hands.Hands( static_image_modeFalse, # 视频流用跟踪模式 max_num_hands2, min_detection_confidence0.7, min_tracking_confidence0.5) as hands: while cap.isOpened(): ret, frame cap.read() if not ret: break frame cv2.flip(frame, 1) # 镜像避免左右手反 rgb cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results hands.process(rgb) # 注意送 RGB if results.multi_hand_landmarks: for hand_landmarks in results.multi_hand_landmarks: mp_draw.draw_landmarks( frame, hand_landmarks, mp_hands.HAND_CONNECTIONS) cv2.imshow(hand tracking, frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows()这段代码的逻辑分四步读帧、转色、推理、画图。很多人栽在两处第一处是process()必须收 RGB 格式OpenCV 读出来的是 BGR不转换会让 Mediapipe 检不准第二处是waitKey(1)必须有否则画面卡死。min_detection_confidence我给到 0.7是希望视频流一开始就少误检如果你摄像头景深大或者手速快可以先试 0.5。跑通后你会看到results.multi_hand_landmarks是一个列表每个元素有 21 个点每个点的x和y是相对图像宽高的归一化坐标0.0 到 1.0z是相对手腕的深度值。这就是下一步特征工程的原始输入。2.3 为什么不能直接用原始坐标归一化、相对编码与特征维数从 Mediapipe 拿到的坐标已经是相对于帧尺寸的归一化值普通人手离摄像头远近不一样同一手势在画面里的绝对像素值会差出好几倍。即便坐标已经归一化如果直接拿 42 维21 × 2原始坐标喂给分类模型模型很容易学到的是“手在画面里的绝对位置”而不是手势本身的形态。解决思路是把手腕关键点编号 0作为原点把剩余 20 个点全部减去手腕坐标变成相对坐标再除以手部尺寸比如食指根部到手腕的距离做尺度归一。这样同一个手势无论手出现在画面左上角还是右下角无论离摄像头近还是远特征向量都基本一致。做完相对化之后还可以顺手把每个关键点相对上一个点的向量转成角度特征。21 个点产生的向量夹角是固定结构里的角度比如拇指尖和拇指根的连线角度能直接反映拇指是张开还是贴着掌心。角度特征比坐标特征更稳因为它天然不受手平移、旋转和缩放影响。我一般在静态手势分类里用“相对坐标 曲率角度”拼接特征维数大概是 20×2相对坐标加 20向量角度等于 60 维左右比直接用 42 维坐标效果好不少。这里要注意动态手语识别时特征维度会多一维时间。每一帧提取一组 60 维特征后要把连续 N 帧的特征堆成N×60的张量后面才能做序列分类。很多人忽略这一点把每一帧独立分类再求和动态手语词比如“你好”“谢谢”就会碎成一帧帧孤立的手势精度一定起不来。3. 从静态手势到动态手语构建手势分类器与序列判断3.1 静态手势分类收集样本、训练 Random Forest 还是规则匹配拿到关键点和归一化特征后最直接的需求是对静态手势分类比如数字手势 1 到 10、握拳、竖大拇指这类固定动作。这里有一个选择分叉规则匹配还是训练分类器。如果你的手势集合很少5 个以内且手指伸展模式差异极大直接用规则是最快的。最常见的规则是算每个手指尖到手掌中心的距离再跟“手指伸直/弯曲”的阈值比。比如拇指伸直时拇指尖编号 4到手腕编号 0的距离会明显变长食指伸直时食指指尖编号 8和食指根编号 5的连线会拉直角度接近 180 度。规则匹配的好处是可解释不用采集样本坏处是手势一旦相似就会误判比如数字 3 和 4 只差一个拇指头的位置。手势超过 5 个或者同一手势不同人做的形态差异很大我会直接上随机森林。样本采集不需要那么痛苦录 2 分钟视频每帧记录特征和标签就行。下面这段代码是从视频里采集某个手势样本的标准做法我一般每个手势采集 300 到 500 帧样本。def collect_samples(label, save_path, frame_limit500): 采集某个手势的关键点相对坐标特征 label: 手势标签比如 1 save_path: 保存 npy 的路径 mp_hands mp.solutions.hands cap cv2.VideoCapture(0) features, labels [], [] with mp_hands.Hands(max_num_hands1, min_detection_confidence0.5) as hands: while len(labels) frame_limit: ret, frame cap.read() if not ret: continue rgb cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results hands.process(rgb) if not results.multi_hand_landmarks: continue lm results.multi_hand_landmarks[0].landmark wrist lm[0] feats [] for point in lm: feats.append(point.x - wrist.x) feats.append(point.y - wrist.y) features.append(feats) labels.append(label) np.save(save_path f_x.npy, np.array(features)) np.save(save_path f_y.npy, np.array(labels))采集完成后用sklearn.ensemble.RandomForestClassifier训练非常省事几百个样本、60 维特征训练时间按秒计。我选随机森林而不是神经网络的原因是手语关键点特征维度低、样本量小决策树类模型不容易过拟合而且特征重要性能告诉你哪个关键点最影响判断方便回头看采集过程有没有坏帧。from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split x np.load(label_x.npy) y np.load(label_y.npy) x_train, x_test, y_train, y_test train_test_split(x, y, test_size0.2, random_state42) clf RandomForestClassifier(n_estimators100, max_depth8, random_state42) clf.fit(x_train, y_train) print(accuracy:, clf.score(x_test, y_test))随机森林两个参数要盯住max_depth我一般限制在 6 到 8 之间防止样本少时学过头n_estimators100 到 200 足够。如果准确率只有八成先去查数据而不是调参后面避坑章节会专门讲。3.2 动态手语词的判断滑动窗口、关键点序列与 DTW 思路静态手势只能表达“单帧动作”手语里大量词是靠时间序列表达的比如“你好”是手掌摊开再朝一侧挥动单帧上看像“五指张开”和“五指张开”光看一帧根本分不清是“你好”还是“停顿”。动态手语词识别的核心是把连续帧当作序列处理。最轻量且常见做法是滑动窗口加多数投票。假设以 30 帧每秒录像一个手语词大约持续 0.5 到 1.5 秒那就取最近 20 帧的特征每帧用静态分类器预测一个标签对这个窗口里 20 个标签做统计取出现最多的那个作为当前输出。窗口太短抖动大太长则手势切换延迟高。我一般从 15 帧起步按实际响应速度调到 20 到 30 帧。如果你想要更严谨的时序匹配可以用动态时间规整DTW。它的思想是预先把某个词的标准动作录成模板序列识别时把当前窗口的序列和模板序列做对齐匹配算最小累积距离。DTW 不需要训练适合样本不充足的情况缺点是每个词都要录模板且对模板长度和手速敏感。早几年的手语识别论文包括 CVPR 工作里动态词法常用这种思路只是模板换成神经网络编码后的特征序列。def dtw_distance(seq_a, seq_b): 两个序列的 DTW 距离seq_a/seq_b 形状都是 (T, feat_dim) n, m len(seq_a), len(seq_b) dp [[float(inf)] * (m 1) for _ in range(n 1)] dp[0][0] 0 for i in range(1, n 1): for j in range(1, m 1): cost ((seq_a[i-1] - seq_b[j-1]) ** 2).sum() dp[i][j] cost min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) return dp[n][m]注意这个 DP 版本的复杂度和序列长度平方相关20 帧对 20 帧在 CPU 上完全没问题但如果你把整个视频流都丢进去比较会明显卡顿。我一般只对滑动窗口内做 DTW窗口外不计算。3.3 把模型封装成 detect() 函数项目源码的核心模块怎么组织拿到一个标题带源码的压缩包打开后你大概会看到这样的组织结构main.py、detector.py、model/、data/、requirements.txt。不管原作者怎么排我建议你把核心逻辑收敛成一个detect()函数这样实时演示和离线测试可以复用同一套代码。class HandGestureRecognizer: def __init__(self): self.hands mp.solutions.hands.Hands(static_image_modeFalse, max_num_hands1) self.clf joblib.load(model/rf_gesture.pkl) self.window [] def detect(self, frame): frame 是 OpenCV BGR 帧 返回 (手势标签, 当前帧关键点图) rgb cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results self.hands.process(rgb) if not results.multi_hand_landmarks: return None, frame lm results.multi_hand_landmarks[0].landmark feats self._extract_feats(lm) self.window.append(feats) if len(self.window) 20: self.window.pop(0) # 滑动窗口多数投票 labels [self.clf.predict([f])[0] for f in self.window] label max(set(labels), keylabels.count) return label, frame def _extract_feats(self, lm): feats [] wrist lm[0] hand_size ((lm[5].x - wrist.x) ** 2 (lm[5].y - wrist.y) ** 2) ** 0.5 for point in lm: feats.append((point.x - wrist.x) / hand_size) feats.append((point.y - wrist.y) / hand_size) return featsdetect()设计时要注意一点不要在函数内部去开摄像头或操作窗口它只负责“给帧返回标签”。视频捕获、画框、退出这些放 main 里这样以后换视频文件或者接树莓派摄像头都不用改识别逻辑。我自己做项目时习惯先写这个类再写 main 调用调试粒度清晰很多。4. 复现这个源码项目的 5 个避坑点从安装到推理全踩一遍4.1 opencv-python 和 opencv-contrib-python 不能混装Mediapipe 版本冲突如何锁定现象按标题装了源码import cv2没报错但import mediapipe时提示找不到扩展模块或者 Mediapipe 运行中突然段错误崩溃。原因这台机器以前装过opencv-contrib-python后来又装了opencv-python两个包都提供了cv2的顶层模块文件被互相覆盖Mediapipe 编译时依赖的cv2API 被顶掉了。尤其是 pip 把两个 OpenCV 包装进了不同路径运行时加载了错版本。解决先卸载干净再统一安装一个版本。pip uninstall opencv-python opencv-contrib-python mediapipe -y pip install opencv-python mediapipe我一般建议在 Python 3.8 到 3.10 的虚拟环境里做Mediapipe 在 3.11 以上的某些版本还有编译期问题。锁版本用pip freeze把opencv-python和mediapipe记下来下次部署直接建 requirements.txt。千万不要图省事装上 4.x 最新 OpenCV 再装 Mediapipe等跑起来报No module named cv2.aruco就已经晚了。4.2 摄像头画面镜像导致左右手判别反转现象把手掌朝摄像头预览画面里手和现实方向相反原本应该判成“右手”的样本被 Mediapipe 标成左手导致左手势和右手势的类别混淆。原因电脑摄像头默认输出的是镜像画面Mediapipe 检测的是画面里的手画面左右翻转后大拇指方向也翻转左右手标签自然对调了。解决在送进process()之前先翻转帧让画面和现实一致。frame cv2.flip(frame, 1)有人问为什么很多 demo 画出来之后又翻转一次那是为了预览显示正常识别用翻转后的帧。我在采集手势样本时统一这一条规则识别和训练都用翻转后的画面这样线上和线下的一致性不用额外操心。4.3 背景复杂时手部检测丢失min_detection_confidence 怎么调现象室内灯光正常时手势一切正常换到窗边逆光或者身后有移动的人multi_hand_landmarks频繁为空识别输出断断续续。原因Mediapipe 的掌检测器是轻量模型对光照和背景复杂度敏感。逆光时手掌和背景对比度太低掌检测器找不到矩形框关键点回归根本没机会执行。解决优先调min_detection_confidence从 0.5 降到 0.3让检测器接受更不明确的候选框。这个参数降到 0.3 以下一般不建议因为会出现大量误检手没伸出来它也画一堆点。第二个措施是固定摄像头曝光避免自动曝光让手掌过曝。第三个措施是把画面裁剪到只包含手部动作区域减少背景干扰比如只取中央 400×400 的 ROI 再送检。如果降置信度还是丢手检查摄像头是不是在 640×480 分辨率下运行分辨率太高会让掌检测器变慢但不会更准太低则关键点精度下降我一般锁 640×480 再用。4.4 手指遮挡和自遮挡为什么精度卡在 80% 上不去现象握拳、比心这类遮挡严重的手势某些帧的指尖关键点会突然跳到手掌外侧或者静止不动时关键点也在小范围抖动。静态手势准确率卡在 80% 附近怎么调分类器都上不去。原因Mediapipe 的关键点回归在手指重叠时只能靠“猜测”。握拳时拇指尖经常被其他手指挡住图像里根本没有可见边缘回归网络只能给一个看起来合理的预测。这不是分类器的问题是特征输入本身噪声很大。解决在特征层面加约束。比如算手指伸直程度时不要只依赖指尖和根部的距离还要加上中间关节的弯曲角度如果两个特征明显矛盾就让这个样本不算数直接丢弃。我经常在采集端加一个简单规则如果手部关键点之间有多条连线相交说明手指折叠并且当前手势是“需要手指伸展”的标签就丢弃该帧。这样训练集干净了准确率自然上来。对识别端可以用上一帧的关键点位置来修正当前帧的突变点也就是做简单平滑避免单帧乱跳影响窗口投票。4.5 视频解码和帧率不匹配手势识别结果“跳变”怎么处理现象用本地视频或网络流测试时识别结果在几个标签之间来回跳明明是一个连续动作输出却像帧率不均匀导致的一卡一卡。原因摄像头输入帧率稳定分类器每帧都工作问题不大但本地视频解码可能一帧快一帧慢某些帧被重复处理或者等待唤醒时被略过。滑动窗口里塞进了大量重复帧和丢帧后的空洞投票结果就被噪声带偏。解决控制输入帧率识别前先做帧率计数只有时间戳变化达到阈值才处理。fps_check time.time() frame_interval 1/30 # 期望 30 FPS last_processed time.time() while cap.isOpened(): ret, frame cap.read() if not ret: break current_time time.time() if current_time - last_processed frame_interval: continue last_processed current_time label, out_frame recognizer.detect(frame)另一个常见做法是不要对每一帧都做识别隔一帧识别一次把窗口长度从帧数改成时间长度。我在动态手势里用时间窗口固定取最近 0.8 秒内的 20 个有效识别结果而不是最近 20 帧。这样即使解码掉帧时间语义依然一致。5. 验证模型效果与进阶优化把准确率从 90% 拉到 97% 的具体做法5.1 用录制好的视频离线回放测试避免摄像头抖动干扰验证模型建议不要直接对着摄像头试手的位置、前后距离每次都不一样没法定量对比。我都是先录一段包含固定手势序列的视频再用离线脚本逐帧回放统计每帧预测结果和人工标注的差异。这样改一个参数立刻能看到前后准确率变化。cap cv2.VideoCapture(gesture_test.mp4) total, correct 0, 0 while cap.isOpened(): ret, frame cap.read() if not ret: break label, _ recognizer.detect(frame) if label is None: continue total 1 if label annotated_label: # 人工标注读到数组里 correct 1 print(faccuracy: {correct / total:.2f})注意离线测试时要把static_image_mode设成 False保持和实时推理一致。很多人用视频测试时忘了重置 Mediapipe 内部状态导致帧间追踪缓存从上一段视频带到下一段结果很脏。5.2 特征对比指尖距离特征比坐标特征更稳坐标特征包含全部关键点位置信息量大但这个较大。我观察到一个规律在手语识别里真正区分手势的往往是若干组端点距离和关节夹角而不是每个点的绝对坐标。把 60 维相对坐标换成 8 到 10 个“指尖到手腕距离”和“指尖到指尖距离”后随机森林的准确率普遍能涨 3 到 5 个百分点而且模型更小。# 一个好用的 6 维特征4 根手指指尖到手腕的距离 拇指尖到食指根的距离 无名指弯曲角 feats [] wrist lm[0] for tip_id in [8, 12, 16, 20]: # 食、中、无名、小 dx lm[tip_id].x - wrist.x dy lm[tip_id].y - wrist.y feats.append((dx*dx dy*dy) ** 0.5) dx_op lm[4].x - lm[5].x # 拇指尖到食指根 dy_op lm[4].y - lm[5].y feats.append((dx_op*dx_op dy_op*dy_op) ** 0.5) # 无名指弯曲角用向量夹角公式 v1 [lm[15].x - lm[14].x, lm[15].y - lm[14].y] # 中-无名根 v2 [lm[16].x - lm[15].x, lm[16].y - lm[15].y] # 无名根-尖 dot v1[0]*v2[0] v1[1]*v2[1] n1 (v1[0]**2 v1[1]**2) ** 0.5 n2 (v2[0]**2 v2[1]**2) ** 0.5 feats.append(dot / (n1 * n2 1e-6))这个 6 维特征在“数字手势”这类场景特别好用因为数字手势的本质就是哪根手指伸出来伸出手指指尖离手腕一定远收着的手指尖一定近。角度特征补充了指尖距离无法区分的“V 手”和“双指横”差异。5.3 把 Mediapipe 关键点换成自定义训练的特征点何时值得前面说的所有方法都基于 Mediapipe 的 21 点。如果你尝试完这些还是发现某些特定手语的准确率上不去比如手语里的“捏合”动作手指细节太多Mediapipe 的关键点精度不够这时候才值得考虑自定义关键点模型。MediaPipe Model Maker 支持自定义手部检测任务你可以收集自己的手势图片训练新的关键点检测模型但训练数据量在几百到上千张不是随便玩玩的水平。我的建议是先花一周时间把特征工程和时序窗口做好90% 准确率如果达到就没有必要贸然换模型只有在目标手势集里有大量相似动作且绕不开关键点精度问题时才去碰 Model Maker。毕竟一个压缩包源码项目的核心价值在于让你快速验证链路而不是让你先重建标注工具。最后说句实在话手语识别项目做到最后瓶颈往往不在模型而在数据清洗和时序对齐。我见过太多人在min_detection_confidence上反复试来试去结果发现是训练样本里混了一堆没检测到手的空帧。把你自己的手势录下来回放看每一帧的关键点比调任何参数都有效。希望这份笔记能帮你少走这几条弯路把更多时间花在真正有用的特征上也祝你复现过程顺利。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

《职住一体科创载体模式实践|锦邻创享 OPC 社区空间架构与运营体系研究》 2026/9/28 21:15:21

《职住一体科创载体模式实践|锦邻创享 OPC 社区空间架构与运营体系研究》

引言国内传统孵化器、联合办公载体发展多年,普遍存在一个结构性矛盾:办公空间与人才居住场景物理分离。创业者既要承担办公租金,又要另行租赁住房,每日通勤消耗大量时间成本;初创项目尤其是单人创业、超级个体项目&…

阅读更多 →
以餐厅后厨为例讲清楚十大AI技术概念 2026/9/28 21:15:20

以餐厅后厨为例讲清楚十大AI技术概念

1 文章概述 大家在接触AI相关概念时,可能会被其中繁多的技术名词所困扰,例如LLM、Tool Use、ReAct、Planning、Memory、RAG等等,导致望而却步不敢深入。 本文以餐厅后厨为例,采用类比方式介绍AI技术相关概念,你会发现一…

阅读更多 →
Fibonacci球面晶格+正交投影:thinking-orbs点阵动画做到“真3D“的数学原理 2026/9/28 21:15:14

Fibonacci球面晶格+正交投影:thinking-orbs点阵动画做到“真3D“的数学原理

Fibonacci球面晶格正交投影:thinking-orbs点阵动画做到"真3D"的数学原理 【免费下载链接】thinking-orbs Dotted thought-orb loading indicators for AI & agent UIs, 9 tuned types, two sizes, auto dark/light 项目地址: https://gitcode.com/g…

阅读更多 →
如何为wterm编写自定义终端核心:TerminalCore接口与WasmBridge深入剖析 2026/9/28 21:15:14

如何为wterm编写自定义终端核心:TerminalCore接口与WasmBridge深入剖析

如何为wterm编写自定义终端核心:TerminalCore接口与WasmBridge深入剖析 【免费下载链接】wterm A terminal emulator for the web 项目地址: https://gitcode.com/gh_mirrors/wterm1/wterm wterm 是一个 Web 终端模拟器,终端核心用 Zig 编写并编译…

阅读更多 →
Android蓝牙后台保活实战:前台服务、PendingIntent与锁屏持续扫描方案 2026/9/28 21:15:07

Android蓝牙后台保活实战:前台服务、PendingIntent与锁屏持续扫描方案

1. 蓝牙后台保活到底难在哪:从Android 8.0的后台限制说起做过Android蓝牙外设对接的人基本都踩过同一个坑:App切到后台或者手机锁屏之后,蓝牙扫描莫名其妙就停了,设备连不上、数据收不到,用户投诉一堆,自己…

阅读更多 →
大模型实践指南:从本地部署到微调接入全流程 2026/9/28 21:15:07

大模型实践指南:从本地部署到微调接入全流程

“大模型学习V1.0”这个标题,如果光看名字,其实挺“自嗨”的。它既不是一个课程,也不是一个能下载的软件包,而是我自己在过去几个月里,把学大模型这件事从“刷论文标题”到“跑通一条完整链路”的过程,做了…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉