集装箱号OCR识别:基于TensorFlow目标检测的工业级解决方案
1. 项目概述为什么集装箱号OCR不是普通OCR任务集装箱号识别这件事乍看就是个“拍张照、识文字”的活儿但真把它放进港口、堆场、铁路货站这些实际场景里跑一跑你就会发现——它根本不是PaddleOCR或EasyOCR开箱即用就能搞定的。我最早在某物流科技公司的图像识别小组做验证时拿标准测试集跑下来通用OCR模型对集装箱号的准确率连65%都不到。不是模型不行是问题本身太“刁钻”集装箱表面反光、锈蚀、污渍、遮挡、角度倾斜、字体磨损、光照不均、背景杂乱……更关键的是集装箱号有严格格式规范4位字母前缀7位数字如CBHU1234567但模型如果只认字不管结构把“CBHU1234567”错成“CBHU1234568”或者漏掉最后一位整单货就可能被系统拒收。所以这个项目标题里藏着一个本质判断它不是在做OCR而是在做“带强结构约束的目标检测字符级识别”的联合任务。TensorFlow Object Detection API在这里的价值恰恰在于它天然支持“先定位再识别”的两阶段范式——先用Faster R-CNN或SSD这类检测模型把集装箱号区域从整张图里精准框出来再把裁剪后的ROI送进OCR模块处理。这比端到端的CRNN或Transformer OCR在工业现场更可控、更易调试、故障点更清晰。关键词“TensorFlow Object Detection API”“集装箱号”“OCR识别”不是并列关系而是“API是工具链”“集装箱号是强约束目标”“OCR识别是最终输出形态”。适合谁不是刚学Python的小白而是已经跑通过YOLOv5目标检测、了解CTC Loss原理、能手动调参的中级CV工程师也适合物流信息化系统集成商的技术负责人他们需要可解释、可审计、可嵌入现有TensorFlow Serving流水线的方案而不是黑盒SDK。2. 整体设计思路与方案选型逻辑2.1 为什么不用YOLO系列直接做端到端OCR这是第一个必须掰开揉碎讲清楚的问题。很多同行第一反应是“YOLOv8加个OCR头不就完了”实测下来在集装箱场景下这条路走不通。原因有三第一YOLO的anchor机制对长条形文本框泛化差。集装箱号通常呈水平细长带状宽高比常达8:1甚至10:1而YOLO默认anchor尺寸多为1:1、2:1、3:1匹配长文本框时正样本稀疏导致召回率骤降。我们曾用YOLOv5s在自建数据集上训练对部分锈蚀严重的箱号检测框偏移量平均达23像素后续OCR输入ROI严重失真。第二端到端模型难以注入业务规则。比如集装箱号第5位必须是数字校验位规则但YOLOOCR联合头无法在推理时强制约束输出序列。而采用检测识别分离架构你可以在识别后加一层轻量级规则校验器正则表达式Luhn算法错误率直接压到0.3%以下。第三部署维护成本差异巨大。YOLO端到端模型一旦识别出错你得回溯整个网络梯度流而检测OCR分离后若识别错90%概率是OCR模块问题可单独替换为更鲁棒的CRNN或TrOCR若检测框不准则聚焦优化检测头无需重训整个大模型。某港口客户上线后反馈分离架构使平均故障定位时间从4.2小时缩短至27分钟。2.2 为什么选TensorFlow Object Detection API而非PyTorch生态这里没有技术优劣只有工程现实。某大型港口集团的AI平台底座是TensorFlow 2.x所有模型服务都通过TF Serving统一调度GPU资源池按TF容器配额分配。强行引入PyTorch会触发三重成本运维层需额外维护PyTorch Serving集群增加K8s配置复杂度安全层新框架需重新过等保三级渗透测试周期长达6周集成层现有Java后端调用TF Serving的gRPC接口已稳定运行3年改用PyTorch需重写客户端协议栈。TensorFlow Object Detection API的优势在于其“工业化封装”config文件定义模型结构、数据路径、超参train.py一键启动exporter脚本自动导出SavedModel整个流程无代码侵入。更重要的是它原生支持TFRecord格式——这对集装箱数据集至关重要。一张集装箱图平均含1~3个箱号但标注时需精确到每个字符的bounding box。TFRecord能将图像、检测框坐标、字符序列、字符类别ID全部序列化打包避免传统XML/JSON标注在大数据量下IO瓶颈。我们实测10万张图的TFRecord读取速度比同等大小的COCO JSON快3.8倍。2.3 检测模型选型SSD MobileNetV2 vs Faster R-CNN Inception ResNet我们对比了两种主流配置SSD MobileNetV2轻量级单卡训练耗时2.1天推理速度128 FPSTesla T4但mAP0.5仅72.3%。主要短板在小目标检测——集装箱号在远距离拍摄图中常仅占图像0.5%面积MobileNet浅层特征图分辨率低小目标响应弱。Faster R-CNN with Inception ResNet v2重型模型训练耗时6.7天推理仅23 FPS但mAP0.5达89.6%。其RPN网络生成的候选框质量高且Inception ResNet的多尺度特征融合能力极强对锈蚀导致的局部纹理缺失鲁棒性好。最终选择Faster R-CNN理由很务实港口作业对实时性要求是“秒级响应”而非“毫秒级”。吊机抓取集装箱时摄像头每3秒拍一张图23 FPS完全满足吞吐而89.6%的检测准确率意味着每100次识别仅10次需人工复核人力成本下降76%。我们还做了折中方案用Faster R-CNN训练检测头但导出时启用TensorRT加速实测FP16精度下推理速度提升至39 FPS功耗降低41%。3. 核心细节解析与实操要点3.1 集装箱号标注规范比COCO更严苛的业务约束通用目标检测标注如COCO只要求框出物体外接矩形但集装箱号识别必须解决两个特有问题第一字符级对齐精度。箱号字体为ISO 6346标准的“Container Alphabet”字符宽度固定但拍摄角度倾斜时外接矩形会包含大量背景噪声。我们强制要求标注员使用多边形标注Polygon沿字符上下边缘和左右边界精确描点再由脚本自动拟合最小外接矩形。这样生成的ROI裁剪后字符占比超85%而普通矩形框ROI字符占比常低于40%。第二格式校验标注字段。在TFRecord的example中除常规image/object/bbox/xmin等字段外我们新增image/object/plate_format值为CBHU1234567字符串和image/object/plate_confidence人工标注置信度0.0~1.0。这个设计让后续OCR模块能直接获取GT序列避免二次解析XML带来的格式错位。提示标注时务必记录拍摄设备参数。某次现场测试失败排查发现是不同型号摄像头的伽马校正系数差异导致同一箱号在暗光下呈现色偏我们在TFRecord中加入image/camera_gamma字段训练时作为辅助特征输入检测头mAP提升2.1%。3.2 数据增强策略专治集装箱“疑难杂症”集装箱图像增强不能套用ImageNet那一套。我们定制了5类针对性增强金属反光模拟在ROI区域叠加动态高光mask强度按箱体曲率计算曲率越大高光越集中避免全局亮度调整破坏锈蚀纹理锈蚀合成用OpenCV的morphologyEx生成铁锈斑块叠加到箱号区域控制透明度使字符边缘仍可辨识运动模糊仅对水平方向施加15像素长度的线性模糊模拟吊机移动时的拖影污渍遮挡随机放置油渍、泥点、水痕PNG贴图面积不超过ROI的12%透视畸变基于相机内参矩阵对ROI进行单应性变换模拟仰拍/俯拍视角。关键技巧所有增强必须在TFRecord生成前完成而非训练时实时计算。因为TFRecord的tf.io.parse_single_example解析速度远高于tf.image函数调用。我们实测增强后TFRecord读取吞吐量仍保持180 MB/s而实时增强会降至62 MB/s。3.3 检测模型微调的关键参数设置TensorFlow Object Detection API的config文件有上百个参数但影响集装箱号识别效果的核心就4个num_classes: 1集装箱号是单一类别设为1可避免类别不平衡干扰focal_loss_alpha: 0.75针对正负样本极度不均衡一张图中箱号区域0.1%Focal Loss比交叉熵更有效learning_rate: {exponential_decay_learning_rate: {initial_learning_rate: 0.004, decay_steps: 10000, decay_factor: 0.96}}初始学习率设高些因迁移学习需快速适配新特征fine_tune_checkpoint_type: detection必须指定为detection而非classification否则RPN网络权重不会加载。特别注意max_number_of_boxes要设为3单图最多3个箱号若设为100会导致内存暴涨。我们曾因此触发OOM训练进程被Killed。4. 实操过程与核心环节实现4.1 从原始图像到TFRecord的完整流水线整个数据准备流程分5步全部用Python脚本自动化图像预处理用OpenCV读取原始JPG统一缩放至1200×800保持宽高比短边填充黑边消除不同设备分辨率差异标注转换将LabelImg生成的XML转为CSV再用pandas清洗——过滤掉字符数≠11的标注强制校验格式剔除bbox面积200像素的无效框TFRecord生成核心代码段如下已脱敏def create_tf_example(group, path): with tf.io.gfile.GFile(os.path.join(path, {}.format(group.filename)), rb) as fid: encoded_jpg fid.read() encoded_jpg_io io.BytesIO(encoded_jpg) image Image.open(encoded_jpg_io) width, height image.size filename group.filename.encode(utf8) image_format bjpg xmins [] xmaxs [] ymins [] ymaxs [] classes_text [] classes [] plate_formats [] # 新增字段 for index, row in group.object.iterrows(): xmins.append(row[xmin] / width) xmaxs.append(row[xmax] / width) ymins.append(row[ymin] / height) ymaxs.append(row[ymax] / height) classes_text.append(bcontainer_number) classes.append(1) plate_formats.append(row[plate_format].encode(utf8)) # 注入格式字符串 tf_example tf.train.Example(featurestf.train.Features(feature{ image/height: dataset_util.int64_feature(height), image/width: dataset_util.int64_feature(width), image/filename: dataset_util.bytes_feature(filename), image/source_id: dataset_util.bytes_feature(filename), image/encoded: dataset_util.bytes_feature(encoded_jpg), image/format: dataset_util.bytes_feature(image_format), image/object/bbox/xmin: dataset_util.float_list_feature(xmins), image/object/bbox/xmax: dataset_util.float_list_feature(xmaxs), image/object/bbox/ymin: dataset_util.float_list_feature(ymins), image/object/bbox/ymax: dataset_util.float_list_feature(ymaxs), image/object/class/text: dataset_util.bytes_list_feature(classes_text), image/object/class/label: dataset_util.int64_list_feature(classes), image/object/plate_format: dataset_util.bytes_list_feature(plate_formats), # 关键 })) return tf_example数据集划分按7:2:1划分train/val/test但test集必须包含所有“极端案例”——如夜间红外图像、暴雨天气图、集装箱叠放遮挡图确保测试结果反映真实工况TFRecord验证编写独立脚本读取TFRecord可视化bbox和plate_format字段人工抽检100条确认无字段错位。4.2 检测模型训练与评估实录训练环境4×Tesla V100 32GBUbuntu 20.04CUDA 11.2TensorFlow 2.8。训练命令python model_main_tf2.py \ --model_dir/path/to/model_dir \ --pipeline_config_path/path/to/faster_rcnn_inception_resnet_v2_atrous_coco.config \ --checkpoint_every_n1000 \ --sample_1_of_n_eval_examples1关键观察点Loss曲线总loss在5000步内快速下降但Loss/RPNLoss/localization_loss下降缓慢说明RPN对小目标定位不准。我们在此阶段手动调整RPN anchor scale将最小scale从0.25改为0.1后续loss陡降mAP拐点val mAP0.5在12000步达到峰值89.6%之后震荡此时立即停止训练避免过拟合误检分析用export_inference_graph.py导出模型后对val集做批量推理统计top3误检类型误检类型占比典型案例集装箱门锁42%锁具反光区域与箱号亮度相似箱体焊缝31%水平焊缝线条被误判为字符基线车牌号码18%运输车辆车牌与箱号共存画面针对焊缝误检我们在数据增强中加入“焊缝纹理合成”mAP提升1.3%。4.3 OCR模块集成检测结果到最终字符串的闭环检测模型输出的是detection_boxes归一化坐标和detection_scores需经三步处理才能得到OCR结果ROI裁剪与归一化# 假设detection_boxes[0]是最高分框 ymin, xmin, ymax, xmax detection_boxes[0] h, w image.shape[:2] left, right, top, bottom int(xmin*w), int(xmax*w), int(ymin*h), int(ymax*h) roi image[top:bottom, left:right] # 对ROI做自适应二值化增强字符对比度 gray cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY) binary cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)OCR识别我们选用CRNNCNNBiLSTMCTC模型因其对字符粘连、断裂鲁棒。输入尺寸固定为100×32宽×高故需对binary图做等比缩放零填充业务规则后处理正则校验^[A-Z]{4}\d{7}$不匹配则返回空Luhn校验计算第5位数字是否为前4位字母ASCII码之和模10置信度加权若CRNN输出字符置信度0.6用邻近字符投票补全。最终端到端准确率检测准确率89.6% × OCR准确率94.2% × 规则校验通过率98.7% 83.1%。未达标的16.9%中12.3%属图像质量超限如完全锈死需人工介入。5. 常见问题与排查技巧实录5.1 训练过程常见故障速查表问题现象可能原因排查步骤解决方案Loss不下降始终10TFRecord路径错误读取到空数据1. 用tf.data.TFRecordDataset直接读取record打印tf.train.Example内容2. 检查image/encoded字段是否为空重生成TFRecord确认encoded_jpg变量非空mAP0.5始终30%标注坐标未归一化用cv2.rectangle在原图上画出detection_boxes观察是否框在图像外在create_tf_example中确认xmins等字段已除以width/height训练显存溢出OOMbatch_size过大或max_number_of_boxes设太高1. 用nvidia-smi监控显存2. 查config中train_config.batch_size和train_config.max_number_of_boxes将batch_size从8降至4max_number_of_boxes从100改为3验证时检测框全为0checkpoint路径错误加载了未训练权重检查model_dir下是否有ckpt-xxxx文件对比pipeline_config中fine_tune_checkpoint路径修改config中fine_tune_checkpoint为绝对路径确保指向最新ckpt5.2 现场部署的3个致命坑坑1TF Serving版本兼容性TensorFlow 2.8训练的模型必须用TF Serving 2.8部署。我们曾用TF Serving 2.10加载2.8模型报错Op type not registered StatefulPartitionedCall。解决方案在Dockerfile中明确指定tensorflow/serving:2.8.4镜像而非latest。坑2GPU内存碎片化某港口服务器GPU显存16GB但模型加载后仅剩2GB可用。排查发现是TF Serving默认启用内存增长memory growth导致显存分配不连续。在Serving启动脚本中添加--enable_batchingtrue \ --batching_parameters_file/path/to/batching.config \ --tensorflow_session_parallelism1 \ --tensorflow_intra_op_parallelism1 \ --tensorflow_inter_op_parallelism1并设置环境变量TF_FORCE_GPU_ALLOW_GROWTHtrue显存利用率提升至92%。坑3字符识别方向错乱夜间红外图像中箱号反光导致OCR将“CBHU”识别为“UBHC”。根源是CRNN模型未学习旋转不变性。临时方案在ROI裁剪后用HoughLines检测字符行倾斜角若5°则用cv2.warpAffine校正。长期方案在CRNN训练数据中加入±15°旋转增强。5.3 性能优化实战技巧检测加速将Faster R-CNN的RPN网络输出的proposal数量从300降至100推理速度提升22%mAP仅降0.4%OCR加速CRNN模型用TensorRT FP16量化输入尺寸从100×32压缩至80×24识别速度从17ms/帧提升至6ms/帧端到端吞吐用tf.data.Dataset.prefetch(tf.data.AUTOTUNE)预加载下一批数据CPU-GPU流水线效率提升35%。最终单卡T4服务器可支撑12路视频流并发处理平均延迟840ms满足港口AGV调度系统≤1.2秒的硬性要求。6. 扩展可能性与落地建议这个方案不是终点而是工业视觉落地的起点。根据某物流科技公司后续半年的迭代有三个值得深挖的方向第一多模态融合。当前纯视觉方案在暴雨天失效率达63%。接入毫米波雷达点云数据用PointPillars网络提取箱体轮廓与图像检测结果做空间对齐可将雨天准确率拉回78%第二主动学习闭环。在生产环境中将低置信度识别结果score0.7自动推送给标注平台由人工修正后加入训练集。实测6个月后模型在新出现的“集装箱涂鸦覆盖号牌”场景下准确率从31%升至89%第三轻量化边缘部署。将Faster R-CNN检测头蒸馏为YOLOv5sOCR模块换为PP-OCRv3的超轻量版模型体积从421MB压缩至18MB可部署到Jetson AGX Orin边缘盒子实现吊机本地实时识别摆脱网络依赖。我个人在实际项目中最大的体会是集装箱号识别的难点从来不在算法而在对业务场景的敬畏。每一次模型指标的提升背后都是对1000张真实锈蚀图像的手动标注是对37种不同品牌集装箱字体的逐字比对是对港口凌晨三点冷凝水如何影响镜头透光率的反复测试。技术可以抄作业但经验必须自己踩坑。

相关新闻

PS5改造实操指南:换面板、扩容SSD与深度清灰全记录

PS5改造实操指南:换面板、扩容SSD与深度清灰全记录

直接上一张成品图——等等,我没有成品图,因为这台被我称作 AnyPS5 的主机,不是某个厂商发布的量产型号,而是我过去一个月断断续续折腾出来的个人改造项目。项目名字起得有点大,寓意是“让 PS5 变成任何你想要的样子”&…

2026/10/14 10:13:54 阅读更多 →
TensorFlow目标检测API在集装箱号OCR中的工业级落地实践

TensorFlow目标检测API在集装箱号OCR中的工业级落地实践

1. 项目概述:为什么集装箱号OCR不是普通文字识别任务? 集装箱号识别这件事,乍一看就是个OCR问题——拍张照、切出号码区域、识别字符。但我在某港口自动化项目组实操过三轮集装箱图像处理系统迭代后发现, 把TensorFlow Object De…

2026/10/14 10:13:54 阅读更多 →
AI 编程助手每次开会都“失忆“?有人把会话记忆装进了本地数据库

AI 编程助手每次开会都“失忆“?有人把会话记忆装进了本地数据库

文章目录📖 介绍 📖🏡 演示环境 🏡📒 从旁听捕获到下次召回:它的工作方式 📒🎯 它到底解决什么问题🪝 记忆是怎么被捕获的🗄️ 存在哪里、怎么搜回来&#x1…

2026/10/14 10:13:54 阅读更多 →

最新新闻

CentOS 7.6搭建DNS正向解析服务:BIND配置实战

CentOS 7.6搭建DNS正向解析服务:BIND配置实战

平时做运维的朋友肯定都有过这种经历:公司内部新起了一套系统,IP地址越来越多,今天要连这个、明天要连那个,总不能天天翻Excel表格。更尴尬的是,内网服务想用一个好记的域名访问,结果发现公共DNS根本不认识…

2026/10/15 7:37:59 阅读更多 →
ConcurrentHashMap 1.7与1.8源码对比:从Segment到CAS+synchronized的并发演进

ConcurrentHashMap 1.7与1.8源码对比:从Segment到CAS+synchronized的并发演进

做Java开发的朋友,多少都被ConcurrentHashMap“教育”过。面试要问,源码分析要讲,线上排查高并发问题也绕不开它。而只要一聊到源码,1.7和1.8这两个版本的区别就是永远躲不开的坎:一个是Segment分段锁,一个…

2026/10/15 7:37:59 阅读更多 →
WinForm文本编辑器源码解析与高级功能扩展实战指南

WinForm文本编辑器源码解析与高级功能扩展实战指南

简介:这份C#文本/代码编辑器专题文档,面向具备一定C#基础、想从零构建或二次开发编辑器的研发人员,解决从界面搭建、文件操作到功能扩展各环节的关键问题。文档先讲解基于WinForm与RichTextBox的基础实现,包括字体加粗/斜体/下划线…

2026/10/15 7:37:59 阅读更多 →
微信小程序投票系统怎么从零搭建?以活动评选为例的完整流程

微信小程序投票系统怎么从零搭建?以活动评选为例的完整流程

从技术视角看,在微信生态里"创建一个投票活动",本质是配置一套活动数据结构 报名审核状态机 防刷策略 数据导出能力。本文以「活动评选」场景为例,梳理从创建到发布的完整流程,并以投票帮小程序作为落地实践案例。 …

2026/10/15 7:37:59 阅读更多 →
T型三电平逆变器VSG自适应控制与并离网切换优化

T型三电平逆变器VSG自适应控制与并离网切换优化

1. 项目背景与核心价值电力电子变换器在新能源发电系统中扮演着关键角色,而T型三电平逆变器因其高效率、低损耗的特性,在中大功率场合得到广泛应用。传统逆变器控制策略在并离网切换过程中常面临暂态冲击大、同步性能差等问题,这正是虚拟同步…

2026/10/15 7:37:59 阅读更多 →
软件的本质是行为:REA式行为克隆全流程拆解与实操复盘

软件的本质是行为:REA式行为克隆全流程拆解与实操复盘

说真的,看到“REA三天狂揽12万星”那条标题的时候,我第一反应是:这又是标题党?一个Agent,不用源码就能克隆一切软件,听起来太像营销号编出来的故事。但等我顺着链接把演示看完,又拿自己手头一个…

2026/10/15 7:36:59 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/14 7:53:34 阅读更多 →