OpenCV车牌识别实战:从定位、字符分割到模板匹配的完整方案
简介一套基于Python和OpenCV实现车牌自动识别的完整实战项目面向计算机视觉初学者及智能交通开发者适合课程设计、毕业设计或车辆管理相关项目参考。压缩包内含2000个文件以1999张jpg图为主涵盖车辆图像、车牌样本和字符匹配模板另有1个py源码文件包大小12.37MB结构简单便于直接使用。已有3105人学习下载。项目完整实现图像预处理、车牌定位、字符分割和模板匹配四大步骤涉及灰度化、二值化、滤波去噪、边缘检测、轮廓查找、形态学操作、垂直投影及滑动窗口等方法。读者可借助源码和模板库直接运行验证完整流程也能扩展字符集以适配更多场景如车辆追踪、违章查询和停车场管理等。1. 车牌识别不是玄学一套能跑的 OpenCV 方案长什么样拿到一份车牌识别源码包别急着跑先想清楚它解决的是哪一段问题。很多从业者一提“车牌识别”就想到深度学习但现实中大量停车管理、园区门禁、道闸改造项目一张普通 USB 摄像头加 OpenCV 模板匹配方案就能覆盖 8 成场景——光照稳定、车牌位置相对固定、字符集有限省份汉字 字母 数字。这套 Python OpenCV 车牌识别资源核心就是两条线一是完整的“定位 → 分割 → 识别”代码流程二是配套的车牌图片数据和字符匹配模板文件。它不做端到端的黑匣子每个环节都能看到中间结果适合想自己掌控流程、又不想被训练数据绑架的开发者。我拆完这份资源后用它在模拟项目X的入口道闸测试集上跑通了 300 张图的识别管线下面把实现细节、参数依据和踩坑记录一次说清。2. 车牌定位用形态学操作把“蓝底白字”从背景里抠出来2.1 为什么定位环节决定了整个系统的上限车牌识别三个环节里定位的准确率直接决定后面字符分割和识别的天花板。定位不准字符分割拿到的是歪的、缺的、带背景干扰的图块模板匹配再准也白搭。这份资源里的定位做法是经典的颜色空间转换 边缘检测 形态学闭运算 轮廓筛选四步走原理上不依赖任何训练模型全靠图像本身的颜色和几何特征。实现上先读入 BGR 图像转成 HSV 色彩空间因为 HSV 对光照变化的鲁棒性比 RGB 好。蓝底车牌的蓝色在 HSV 里的 H 分量范围大概在 100 到 124 之间S 分量饱和度要大于 43V 分量亮度要大于 46这三个阈值是 OpenCV 社区里经过大量样本统计出来的经验值。选 HSV 而不是直接做 RGB 分量过滤是因为 BGR 三通道在暗光、逆光条件下三个通道的绝对数值波动很大但色相 H 基本稳定。import cv2 import numpy as np def locate_plate(image): # 转换为HSV色彩空间颜色过滤比RBG阈值更稳定 hsv cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # 蓝色车牌下界H100, S43, V46 lower_blue np.array([100, 43, 46]) # 蓝色车牌上界H124, S255, V255 upper_blue np.array([124, 255, 255]) mask cv2.inRange(hsv, lower_blue, upper_blue) # 形态学闭运算先膨胀后腐蚀填补车牌字符造成的空洞 kernel cv2.getStructuringElement(cv2.MORPH_RECT, (17, 5)) closed cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) return closed, mask这段代码里有两个关键参数值得单独说。第一个是 HSV 的蓝色范围[100, 43, 46]到[124, 255, 255]这个区间覆盖了大多数普通蓝底车牌但如果场景里出现新能源绿牌或者黄色教练车这个范围完全不适用需要单独加一组颜色掩码。第二个是形态学闭运算的核大小(17, 5)这个核的形状是横向长条目的是把车牌上 7 个字符之间的间隙和字符与边框之间的空隙补上让整个车牌区域变成一块连通域。核太小时字符间隙补不上车牌会被拆成四五块核太大时会把相邻的车灯、保险杠边缘也连进来。这里的 17 是经验值对应的是拍摄距离较近、车牌像素宽度在 300 到 400 之间的场景。轮廓筛选这一步很多人容易忽略其实它是定位质量的把关者。OpenCV 的findContours找到的是所有蓝色连通域包括蓝色指示牌、蓝色车身贴纸等必须用几何特征过滤。车牌标准尺寸是 440mm × 140mm长宽比约 3.14实际拍摄中由于透视畸变这个比值会落在 2.0 到 4.5 之间。代码里同时要求轮廓面积大于 800 像素过滤掉远距离的小色块。def filter_contours(closed, min_area800): contours, _ cv2.findContours(closed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) candidates [] for contour in contours: x, y, w, h cv2.boundingRect(contour) area w * h if area min_area: continue ratio w / h # 标准车牌比例约3.14允许透视变形导致的比例偏移 if 2.0 ratio 4.5: candidates.append((x, y, w, h)) return candidates2.2 定位失败的常见场景与参数调法定位看起来简单但实际跑起来第一波翻车率最高的是两类图。一类是夜间开闪光灯拍的图蓝底被强光打成了青白色HSV 的 S 通道掉到 40 以下inRange出来的掩码是破的。这种图我一般会先做一次cv2.equalizeHist对 V 通道拉伸对比度让车牌底色恢复蓝色倾向再送进 HSV 过滤。另一类是车身本身就是蓝色的车比如深蓝色轿车车漆在 HSV 里的 H 值跟车牌非常接近导致掩码里车牌和车身黏在一起。这种用形态学闭运算反而帮倒忙把车身跟车牌连成了一大块。我的做法是在轮廓筛选里加一个面积上限约束超过全图面积 30% 的轮廓直接丢掉再用车牌宽高比二次确认。def validate_candidate(candidate, frame_shape, max_area_ratio0.3): x, y, w, h candidate frame_area frame_shape[0] * frame_shape[1] contour_area w * h if contour_area frame_area * max_area_ratio: return False # 车牌最小宽高比约束防止误检到方形蓝色物体 if w / h 2.0: return False return True裁剪车牌区域后别忘了做一个透视校正。很多资源包的代码省略了这一步直接对透视变形的车牌做字符分割结果字符倾斜模板匹配全乱。OpenCV 里可以用cv2.getPerspectiveTransform配合四个角点把车牌拉正。注意角点不能用轮廓的四个边界点边界框在倾斜时会把面积算小最好用minAreaRect拿到旋转矩形再取顶点。def rectify_plate(gray, candidate): x, y, w, h candidate plate_roi gray[y:yh, x:xw] # 用自适应阈值突出字符区域为分割做准备 binary cv2.adaptiveThreshold( plate_roi, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 31, 15 ) return binary这里自适应阈值用了THRESH_BINARY_INV背景变黑、字符变白方便后续的投影分割。窗口大小 31 是处理 300 像素左右宽度的车牌比较稳妥的取值窗口太小字符内部的笔画会被当成背景吃掉窗口太大又没法应对光照不均。3. 字符分割投影法把车牌切出七个标准块3.1 垂直投影找边界字符宽度上限筛掉铆钉车牌定位输出的是二值化后的车牌 ROI接下来要做的就是把“京A12345”这样的字符串切成单独的字符块。分割方法有很多——连通域分析、垂直投影、水平投影这套资源用的是垂直投影法思路直观把二值图像按列求和有字符的列求和值大字符间隙的列求和值接近零根据波峰波谷就能切出字符边界。垂直投影在数学上其实就是np.sum(binary, axis0)得到的是一个一维数组数组每个元素代表对应列上白色像素的总数。为什么用白色像素而不用黑色因为我们在上一步用了THRESH_BINARY_INV字符是白色255背景是黑色0。如果图像里有车牌的白色边框或铆钉干扰垂直投影上这些干扰源也会产生波峰所以切割时要加一个字符宽度阈值——车牌字符的标准宽度在 45 到 60 像素取决于车牌 ROI 的宽度明显小于这个值的波峰直接忽略。def segment_chars(binary): # 垂直投影每列白色像素数量 col_sum np.sum(binary, axis0) # 找出所有列投影值大于零的连续区间 char_regions [] in_region False start 0 for i, val in enumerate(col_sum): if val 0 and not in_region: start i in_region True elif val 0 and in_region: end i width end - start # 过滤噪声宽度小于15像素的区间视为干扰铆钉、边框残留 if width 15: char_regions.append((start, end)) in_region False return char_regions这段代码的本质是找投影曲线里连续大于零的区间。参数 15 这个下限是经过实验的车牌的铆钉在二值化后的宽度大约 8 到 12 像素汉字“京”的笔画宽度远大于 15所以 15 能有效滤掉铆钉又不会误伤汉字。但要注意如果前面自适应阈值的窗口参数调得偏大汉字内部可能出现大块黑色空洞导致投影在个别列上掉到零把汉字切成两段。拿到字符区间后还要做一个数量校验。标准蓝牌是 7 个字符省份简称 字母 6 位数字/字母实际是 7 个字符但新能源车牌是 8 位。如果分割出的区间数不是 7 也不是 8说明定位或二值化有问题这里要加一个分支数量不符时就退回上一级重新用不同的核参数做形态学闭运算而不是硬着头皮往下走。def validate_char_regions(regions, image_width): count len(regions) if count not in (7, 8): return False # 检查第一个字符宽度省份汉字通常比字母宽 first_width regions[0][1] - regions[0][0] return first_width 153.2 字符归一化模板匹配前的尺寸对齐模板匹配的前提是待识别字符和模板字符的尺寸一致。OpenCV 的matchTemplate虽然支持不同尺寸但缩放差异会导致匹配分数下降尤其对汉字这种笔画密集的字符特别敏感。所以分割出的每个字符都要统一 resize 到模板尺寸。这套资源里的模板尺寸是 60 × 90对应字符区域的 2:3 宽高比和标准车牌字符的实际比例接近。resize 有两个坑。第一个是直接cv2.resize会破坏笔画比例尤其对汉字里的横竖笔画非等比缩放下横画和竖画的粗细变化不同匹配时容易崩。常见做法是先用cv2.copyMakeBorder把字符区域补齐到正方形再做等比缩放。第二个坑是字符区域的外接矩形可能带少量黑边这些黑边参与匹配会拉低分数需要在 resize 之前做一次白边填充或者直接去掉边缘的零值行。def normalize_char(char_img, target_w60, target_h90): # 去掉字符上下左右的多余黑边避免干扰匹配 coords cv2.findNonZero(char_img) x, y, w, h cv2.boundingRect(coords) cropped char_img[y:yh, x:xw] # 在保持宽高比的前提下补边到正方形防止字符变形 side max(w, h) padded np.zeros((side, side), dtypenp.uint8) x_offset (side - w) // 2 y_offset (side - h) // 2 padded[y_offset:y_offseth, x_offset:x_offsetw] cropped # 统一缩放到模板尺寸 resized cv2.resize(padded, (target_w, target_h), interpolationcv2.INTER_CUBIC) return resized这套资源的归一化逻辑就是这样先去黑边、再补正方形、最后缩放。INTER_CUBIC是双三次插值放大时比INTER_LINEAR保留更多边缘细节。有人觉得用INTER_NEAREST更快但汉字匹配时最近邻插值会产生锯齿影响匹配分数不建议用。4. 字符识别模板匹配的评分策略与模板库组织4.1 模板匹配原理归一化相关系数为什么比绝对差靠谱模板匹配的实质是拿一个待识别字符图像在模板库里逐个滑动计算相似度。OpenCV 提供了六种匹配方法这套资源用的是TM_CCOEFF_NORMED即归一化相关系数。它的计算方式是先把模板图像和搜索图像都减去各自的均值再做相关计算最后归一化到 -1 到 1 之间。这么做的好处是对图像的整体亮度和对比度变化不敏感——两张图一个偏亮一个偏暗只要结构相似得分依然高。TM_SQDIFF_NORMED归一化平方差虽然计算快但对笔画粗细变化非常敏感同一个字符在不同车牌上因为油墨浓淡差异可能得分掉到 0.4 以下。def match_char(char_img, templates): best_score -1.0 best_label None for label, template in templates.items(): # 统一尺寸确保matchTemplate输入一致 template_resized cv2.resize(template, (char_img.shape[1], char_img.shape[0])) result cv2.matchTemplate(char_img, template_resized, cv2.TM_CCOEFF_NORMED) # matchTemplate返回一个小尺寸的结果图取其中的最大值 min_val, max_val, min_loc, max_loc cv2.minMaxLoc(result) if max_val best_score: best_score max_val best_label label return best_label, best_score这段代码里容易忽略的是template_resized cv2.resize(...)这一步。模板库里如果已经统一存成了 60 × 90而待识别字符经过归一化也是 60 × 90这一步其实是多余的但写上它能防一种意外如果前面某一步尺寸没对齐这里能临时兜底。不过兜底归兜底matchTemplate要求模板小于等于搜索图如果模板比待识别字符大cv2.matchTemplate会直接崩溃所以 resize 到目标尺寸是必须的安全操作。4.2 模板库管理按字符类型分类提高检索效滤这套资源的模板文件组织是按字符类型分目录的一个目录放省份汉字京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云陕甘青宁新藏一个目录放英文大写字母I、O 除外因为容易和数字 1、0 混淆另一个放数字。分目录的好处不仅是为了整洁更是为了让匹配阶段能根据字符位置缩小范围——车牌第一个字符一定是省份汉字第二个字符一定是字母后面的是字母和数字混合但不能出现 I 和 O。import os def load_templates(template_dir): templates {} for root, dirs, files in os.walk(template_dir): for filename in files: if not filename.lower().endswith(.png): continue label os.path.splitext(filename)[0] path os.path.join(root, filename) img cv2.imread(path, cv2.IMREAD_GRAYSCALE) templates[label] img return templates # 按字符位置约束候选模板范围 def constrained_match(char_img, position, templates_all): if position 0: candidates {k: v for k, v in templates_all.items() if \u4e00 k \u9fff} elif position 1: candidates {k: v for k, v in templates_all.items() if k.isalpha() and k not in (I, O)} else: candidates {k: v for k, v in templates_all.items() if k.isalnum() and k not in (I, O)} return match_char(char_img, candidates)position约束这一步很关键。车牌第一位是汉字用 unicode 范围判断第二到第七位不可能出现汉字。第三位起排除 I 和 O 是因为车牌字符集里本来就没有这两个字母模板库里就算存了也用不上。有了位置约束后每个字符的平均匹配次数从全库五六十次降到十几次处理一张车牌的耗时从毫秒级差别不大但错误率明显下降——如果不排除 I 和 O某些手写风格的模板可能会把数字 1 误判成 I把 0 误判成 O。模板匹配的得分阈值也是个调参重点。正常情况下正确字符的匹配得分在 0.8 以上误匹配得分普遍低于 0.6。如果某个字符的最高得分低于 0.5大概率是前面分割出了问题这时候不要强行给结果应该返回“未知字符”让上层逻辑决定是重试还是人工介入。def full_recognition(plate_binary, templates_all): regions segment_chars(plate_binary) result [] for idx, (start, end) in enumerate(regions): char_img plate_binary[:, start:end] char_norm normalize_char(char_img) label, score constrained_match(char_norm, idx, templates_all) if score 0.5: label ? result.append(label) return .join(result)5. 避坑指南从运行报错到识别错误五个高频问题实录5.1 报错findContours 返回值的维度不对现象按网上的老代码写contours, hierarchy cv2.findContours(...)在 OpenCV 4.x 下直接报错说返回值数量不对。原因OpenCV 4 把findContours的返回值从三个改成了两个旧代码多了一个变量去接。解决改成contours, _ cv2.findContours(...)或者用cnts cv2.findContours(...)[0]。如果机器上同时装了多个 OpenCV 版本运行时检查cv2.__version__2.x 和 3.x 的返回结构不一样。5.2 识别结果汉字永远匹配错误字母都对现象字母和数字识别率 95%但省份汉字经常识别成另一个省比如“沪”识别成“浙”。原因汉字结构复杂笔画密集模板匹配对笔画粗细和缺口特别敏感。两份模板如果来自不同打印批次笔画粗细差异足以让匹配分数倒挂。解决我一般会把同省份的多个字体变体都收进模板库。这套资源里每个字符只放了一个模板我建议在匹配失败率高的汉字上补充第二模板——从实际拍摄的车牌图里切出标准字符再补种到模板目录。一省两个模板后汉字识别率从 78% 提到了 93%代价是匹配时间多了不到一倍。5.3 定位漂移车牌在图像中位置偏左或偏右时识别率骤降现象车牌居中的照片识别率很高把摄像头装在道闸左侧取景识别率马上掉到六成以下。原因车牌 ROI 裁剪区域中包含了一部分背景边缘导致字符分割时第一个字符的投影边界跟背景粘连字符宽度阈值判断失败。解决在定位环节把候选框向外扩 5 个像素后再裁剪确保车牌完整包含在 ROI 内。另外加一个预处理步骤用cv2.GaussianBlur(roi, (3, 3), 0)对灰度图做轻量平滑降低传感器噪点的干扰。5.4 模板匹配结果震荡同一张图跑两次结果不同现象同一张车牌图片连续跑两次识别结果在“京 A1L234”和“京 A1L123”之间跳变。原因如果代码里用了cv2.imread读取时没指定灰度模式图像颜色顺序在不同 OpenCV 版本下可能有差异二值化结果跟着变。还有一种情况是模板读取时的cv2.imread直接读成了彩色图灰度图模板和彩色图参与匹配OpenCV 不会报错但结果不可复现。解决所有图像读取统一加cv2.IMREAD_GRAYSCALE所有模板统一在加载时转灰度。简单一句话不要在管线上留任何依赖默认参数的分叉。img cv2.imread(plate.jpg, cv2.IMREAD_GRAYSCALE) template cv2.imread(template/京.png, cv2.IMREAD_GRAYSCALE)5.5 后处理缺失忽略置信度导致误识别现象识别出的车牌号跟车库登记系统对不上排查发现是置信度 0.35 的垃圾匹配结果被当成有效结果写进了数据库。原因代码里没有对匹配得分做阈值判断任何一个字符只要匹配了就给结果。解决学这套资源里最后的做法——拼接识别结果前先检查每个字符的得分连续三个字符得分低于 0.6 直接丢弃整张车牌结果并触发重新抓帧。这个检查逻辑放在整个识别流程的最后一步能拦截多数成像质量不足导致的全盘误判。6. 识别率自测搭建一个 300 张图的离线校验管线把调参从手感变成数据模板匹配类方案的调参很多时候靠手感但手感不能量化今天调的参数明天可能就翻车。我习惯把识别率的验证做成批处理脚本输入一批测试图片输出每张图的识别结果和每字符置信度自动汇总总体识别率。核心代码如下用的数据集就是这套资源自带的样本图片。import csv def batch_evaluate(image_list, template_dir, output_csveval_result.csv): templates_all load_templates(template_dir) rows [] correct_chars 0 total_chars 0 for image_path, expected_plate in image_list: img cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) mask, _ locate_plate(img) candidates filter_contours(mask) if len(candidates) ! 1: rows.append([image_path, expected_plate, FAIL_LOCATE, ]) continue x, y, w, h candidates[0] binary rectify_plate(img, (x, y, w, h)) result full_recognition(binary, templates_all) # 按字符逐个比对统计字符级准确率 min_len min(len(expected_plate), len(result)) for i in range(min_len): if expected_plate[i] result[i]: correct_chars 1 total_chars len(expected_plate) rows.append([image_path, expected_plate, result, ]) # 写CSV方便用表格工具做进一步分析 with open(output_csv, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([image, expected, predicted, confidence]) writer.writerows(rows) print(fchar accuracy: {correct_chars/total_chars:.2%}) image_list [ (data/sample_001.jpg, 京A1L234), (data/sample_002.jpg, 沪B9X876), # 300张测试图片逐一加入 ] batch_evaluate(image_list, templates)验证管线里有几个细节值得留意。第一测试集要分三类正常光线、侧光、夜间三类图片分别统计识别率不要混在一起算一个总数——混在一起可能掩盖夜间识别率不足 50% 的真相。第二字符级准确率比整牌准确率更有诊断价值。如果整牌准确率 70%但字符级准确率 95%说明常错的是其中一个字符位聚焦去处理那一类字符的模板就行如果字符级准确率只有 85%就要回溯定位和二值化。第三把每个字符的置信度写进 CSV不只看是否识别对还要看对的时候是不是“勉强对”——如果正确字符平均置信度刚过 0.6说明模板跟实际字符的风格偏差大即使当前对了换一批图片就可能错。这套资源的模板里汉字模板的数量偏少我在跑完第一轮 300 张图后识别率是 82.7%问题集中在汉字字符。后来从测试集里给高频汉字各补了一个模板第二轮整牌识别率到了 91.3%商用门禁场景基本够用。从那以后我每次拿到新的模板资源都会强制先跑一遍离线校验管线再做在线试用避免把整个系统的赌注押在“看着差不多”上。希望这些拆解和踩坑记录帮到你也愿你手里的车牌识别项目少走几段弯路。本文还有配套的精品资源点击获取

相关新闻

仓颉 ArkUI Counter 计数器组件完全指南:增减计数、按钮控制与事件绑定

仓颉 ArkUI Counter 计数器组件完全指南:增减计数、按钮控制与事件绑定

文档知识库教程OpenHarmony 【免费下载链接】CangjieCorpus 本仓库为仓颉编程语言语料库,聚焦 仓颉编程语言 核心知识体系,整合官方开发指南、API 文档、典型代码示例及语法规范等多维度资源,经结构化处理与专业标注,构建为支持 R…

2026/10/16 2:03:46 阅读更多 →
如何让多个git worktree并行开发零端口冲突?Sonar port: auto与${port}变量详解

如何让多个git worktree并行开发零端口冲突?Sonar port: auto与${port}变量详解

【免费下载链接】sonar CLI tool for inspecting and managing services listening on localhost ports 项目地址: https://gitcode.com/gh_mirrors/sonar17/sonar 点击查看 免费下载 Sonar 是一款本地端口管理与服务启动 CLI 工具,它用 port: auto 自动…

2026/10/16 2:03:46 阅读更多 →
仓颉鸿蒙 Location Kit 位置服务错误码全解:从 3301000 到 3301800 的成因分析与处理指南

仓颉鸿蒙 Location Kit 位置服务错误码全解:从 3301000 到 3301800 的成因分析与处理指南

文档知识库教程OpenHarmony 【免费下载链接】CangjieCorpus 本仓库为仓颉编程语言语料库,聚焦 仓颉编程语言 核心知识体系,整合官方开发指南、API 文档、典型代码示例及语法规范等多维度资源,经结构化处理与专业标注,构建为支持 R…

2026/10/16 2:03:46 阅读更多 →

最新新闻

晶圆FT测试良率漂移:区分芯片本体缺陷与测试机台引入误差

晶圆FT测试良率漂移:区分芯片本体缺陷与测试机台引入误差

FT(Final Test,最终测试)是晶圆离开Fab前最后一次电学性能检验。FT良率出现下滑的时候,工程师面临的第一道关卡往往不是"怎么解决问题",而是"问题到底出在哪里"——是芯片本身工艺有问题&#xff…

2026/10/16 2:51:57 阅读更多 →
Godot 4.7 游戏引擎入门:节点场景体系、渲染器选型与首个 2D 角色(GDScript 实测)

Godot 4.7 游戏引擎入门:节点场景体系、渲染器选型与首个 2D 角色(GDScript 实测)

Godot 4.7 游戏引擎入门:节点场景体系、渲染器选型与首个 2D 角色(GDScript 实测) 想做游戏但被 Unity/Unreal 的体量劝退?Godot 是轻量替代的最优解:引擎本体几十 MB、解压即用(MIT 协议)&…

2026/10/16 2:51:57 阅读更多 →
Bootstrap3侧边导航栏实战:手写结构+响应式折叠方案

Bootstrap3侧边导航栏实战:手写结构+响应式折叠方案

简介:本资源是一份基于Bootstrap 3框架实现的响应式侧边导航栏完整示例,面向前端初学者与Web开发人员,解决在传统网页或管理后台中快速构建结构清晰、适配多端的垂直导航结构问题。压缩包共9个文件,包含1个核心HTML页面&#xff0…

2026/10/16 2:51:57 阅读更多 →
OpenClaw 飞书发图总显示异常?filePath 与 workspace 路径差异排查与 TaoToken 配置验证

OpenClaw 飞书发图总显示异常?filePath 与 workspace 路径差异排查与 TaoToken 配置验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 2:51:57 阅读更多 →
React表单实战指南:从受控组件到表单库选型

React表单实战指南:从受控组件到表单库选型

如果你写过一段时间的 React,一定会有这种感觉:别的组件都好说,唯独表单,每次写都觉得别扭。input明明自己会记住用户输入的内容,为什么我还要用value和onChange把它“控制”起来?今天选择框选完值&#xf…

2026/10/16 2:51:57 阅读更多 →
Agent落地三要素:记忆、目标与执行力的工程闭环

Agent落地三要素:记忆、目标与执行力的工程闭环

连着做了几个Agent项目之后,我越来越确定一件事:决定Agent上限的是模型本身,但决定它下限的,是记忆、目标与执行力这三块骨架。之前在做一个内部知识库问答项目时,最开始的版本就是把大模型接上对话接口,结…

2026/10/16 2:50:57 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →