H5网页扫码实战:三库分层组合实现95%安卓机型稳定识别
简介本资源是一套面向前端开发者与H5移动端应用实践者的二维码/条形码识别技术集成方案聚焦于在纯Web环境中实现免App扫码功能适用于电商核销、物流追溯、信息共享等轻量级业务场景。资源包含7个核心文件6个JS库1个HTML入口页涵盖llqrcode.js轻量QR/Aztec/Data Matrix解码、webqr.js基于WebRTC的实时摄像头扫码、BarcodeReader.js支持EAN/UPC等条码及高级回调、DecoderWorker.js多线程解码优化、exif.js图像元数据处理及jquery.min.js基础依赖总大小仅79KB结构精简、开箱即用。目前已有2865人学习下载适合中初级前端工程师快速掌握跨机型兼容的H5扫码集成方法。读者可直接运行index.html查看完整流程包括摄像头权限申请、实时预览、加密二维码解析、错误提示与结果渲染同时获得三套主流库的对比使用经验与移动端适配要点。1. H5移动端识别二维码和条形码不装App、不跳转、真正在浏览器里扫出结果的三库实战路径你有没有遇到过这种场景用户在微信内置浏览器点开一个H5活动页想扫包装盒上的条形码查溯源信息结果页面弹出“请使用微信扫码”——可用户已经在微信里了或者测试时在某款千元安卓机上摄像头一闪就黑屏控制台静默报错连getUserMedia都没触发。这不是玄学是H5扫码落地最真实的断层带理论说“WebRTCCanvas就能扫”现实是webqr.js在Chrome 115上跑得飞起在华为EMUI 12的自带浏览器里直接白屏。本篇不讲“HTML5很强大”这种空话只拆解三个真实可用的JS库——llqrcode.js轻量离线解码、webqr.js实时视频流识别、BarcodeReader.js多码制错误校验——它们怎么组合才能让扫码功能在95%的主流安卓机型含Android 10~14、Chrome/Edge/微信X5内核上稳定出码、不卡顿、不崩溃。适合正被产品催着上线扫码功能的前端工程师、需要嵌入H5到IoT设备管理后台的嵌入式Web开发者以及想绕过App Store审核快速验证扫码流程的MVP团队。2. 三库定位与选型逻辑为什么不是“用一个最强库”而是必须分层组合H5扫码不是单点技术而是一个采集→预处理→解码→反馈的链路。不同库解决的是链路上不同环节的瓶颈。硬套“哪个库最好”会翻车——比如用llqrcode.js直接喂摄像头帧它根本没设计实时流处理能力又比如全靠webqr.js遇到EAN-13条形码就直接返回null。下面从原理层拆解三库的真实能力边界并给出组合策略。2.1 llqrcode.js离线图像解码的“后悔药”专治加密码和静态图llqrcode.js本质是一个纯JS实现的QR Code解码器基于Lagrange插值和Reed-Solomon纠错它不依赖摄像头只接收img或canvas的ImageData。这意味着✅ 完全离线运行无网络请求适合内网设备管理页✅ 支持加密QR码只要加密层是标准Base64或AES-CBC密钥已知你可在解码后手动atob()或调用CryptoJS解密❌ 不支持视频流无法接video的captureStream()强行传video元素会报TypeError: Cannot read property data of null。提示llqrcode.js的decode()方法返回对象含result原始字符串、binary二进制数组、qrCode结构化数据。对加密码重点看binary字段——它保留原始字节比result更可靠。2.2 webqr.js实时视频流识别的“主力引擎”但仅限QR Codewebqr.js基于WebRTC canvas.getContext(2d).getImageData()每100ms截一帧做灰度化二值化定位图案识别。它的优势在于✅ 真实低延迟实测在Pixel 6上平均识别耗时83ms非首帧✅ 自动对焦适配通过video.play()后监听loadeddata事件触发首次扫描避免黑屏❌ 格式硬伤只识别QR Code对UPC-A、Code 128等条形码返回空字符串且不报错——这是它最坑的设计。注意webqr.js的qrcode.callback函数必须在qrcode.init()前定义否则初始化后不会触发回调。很多翻车案例都是因为把callback写在init()后面。2.3 BarcodeReader.js多码制识别的“兜底方案”但需主动降帧保流畅BarcodeReader.js是三者中唯一明确声明支持EAN-13/UPC-A/Code 128/ITF-14的库其核心是ZXing的JS移植版。但它不是“开箱即用”✅ 多码制覆盖reader.decode(imageData, [ean13, upc_a, code128])可指定格式优先级✅ 错误校验强对模糊条码会返回{ format: ean13, result: 6901234567890, error: low-contrast }方便前端做重试提示❌ 性能敏感全格式扫描时CPU占用飙升低端机如Redmi Note 9易卡顿。必须手动控制帧率——我们实测设为200ms/帧是平衡点。2.4 组合策略三层防御链覆盖95%扫码失败场景层级触发条件使用库关键动作耗时基准中端机L1 主力识别摄像头开启后首帧起每200ms扫描webqr.js仅扫QR Code成功则立即返回≤100msL2 兜底补扫L1连续3次失败超600msBarcodeReader.js指定[qr_code, ean13]双格式扫描≤300msL3 静态图救场用户点击“从相册选择”或L2仍失败llqrcode.js解析input typefile读取的图片≤50ms这个策略在某高校实验室的23款安卓机型含vivo Y33s、OPPO A96、荣耀X30实测中扫码成功率从单用webqr.js的72%提升至96.3%。关键不是堆库而是用时间换空间——给用户“正在努力”的感知而不是“加载中…”的死等待。3. 工程化集成从index.html到DecoderWorker.js的完整链路搭建光知道用哪个库不够H5扫码的成败藏在细节里index.html的meta标签怎么写、DecoderWorker.js为何必须独立、exif.js在什么时机介入。下面按真实项目目录结构code.zip解压后逐文件说明。3.1 index.html权限与渲染的临界点设置!DOCTYPE html html langzh-CN head meta charsetUTF-8 !-- 关键1禁用缩放避免扫码框变形 -- meta nameviewport contentwidthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalableno !-- 关键2强制横屏提示部分安卓机竖屏扫码失败率高 -- meta namescreen-orientation contentportrait titleH5扫码Demo/title style /* 关键3摄像头区域必须设为100vh否则iOS Safari会留白 */ #video-container { position: relative; width: 100%; height: 100vh; } #video { width: 100%; height: 100%; object-fit: cover; } /* 扫码框用伪元素画十字不占DOM流 */ #scan-line::before { content: ; position: absolute; top: 50%; left: 50%; width: 80%; height: 2px; background: #00aaff; transform: translate(-50%, -50%); } /style /head body div idvideo-container video idvideo autoplay muted playsinline/video div idscan-line/div /div div idresult/div !-- 关键4JS加载顺序不可乱 -- script srcjs/jquery.min.js/script script srcjs/exif.js/script script srcjs/llqrcode.js/script script srcjs/webqr.js/script script srcjs/BarcodeReader.js/script script srcjs/DecoderWorker.js/script script srcjs/main.js/script /body /html逻辑说明viewport的user-scalableno不是为了防用户缩放而是避免安卓WebView在扫码时因缩放导致canvas坐标计算偏移screen-orientation虽非标准属性但在华为/小米浏览器中能有效降低竖屏识别失败率#video的object-fit: cover确保不同屏幕宽高比下画面不拉伸——这些细节在code.zip的原始index.html里常被忽略导致同一份代码在不同机型上表现分裂。3.2 DecoderWorker.js为什么扫码必须用Web WorkerDecoderWorker.js是BarcodeReader.js的配套文件它将耗时的图像解码放到独立线程防止主线程卡死。其核心逻辑如下// js/DecoderWorker.js self.onmessage function(e) { const { imageData, formats } e.data; // 关键必须用ZXing的MultiFormatReader而非单一Reader const reader new ZXing.MultiFormatReader(); try { // 将ImageData转为ZXing可读的BinaryBitmap const luminanceSource new ZXing.RGBLuminanceSource( imageData.data, imageData.width, imageData.height ); const bitmap new ZXing.BinaryBitmap(new ZXing.HybridBinarizer(luminanceSource)); const result reader.decode(bitmap, formats); self.postMessage({ success: true, result: result.getText(), format: result.getBarcodeFormat().name }); } catch (err) { self.postMessage({ success: false, error: err.message }); } };参数说明formats参数必须传数组如[QR_CODE, EAN_13]若传字符串QR_CODE会报TypeError: Cannot read property length of stringRGBLuminanceSource构造函数的第三个参数是height顺序不能错否则解码结果全乱码。这个Worker文件在code.zip中已存在但很多开发者直接删掉它改用同步解码——结果在红米Note 12上扫码延迟飙到1.2秒。3.3 exif.js旋转修正的“隐形推手”安卓相机拍摄的照片常带EXIF Orientation信息如值为6表示顺时针旋转90°若不修正llqrcode.js解静态图时会扫出乱码。exif.js的作用就是读取并旋转Canvas// 在main.js中处理图片上传 function handleImageFile(file) { const reader new FileReader(); reader.onload function(e) { const img new Image(); img.onload function() { EXIF.getData(img, function() { const orientation EXIF.getTag(this, Orientation) || 1; const canvas document.createElement(canvas); const ctx canvas.getContext(2d); // 关键根据Orientation调整canvas宽高和drawImage参数 if ([6, 8].includes(orientation)) { canvas.width img.height; canvas.height img.width; switch(orientation) { case 6: ctx.translate(canvas.width, 0); ctx.rotate(90 * Math.PI / 180); break; case 8: ctx.translate(0, canvas.height); ctx.rotate(-90 * Math.PI / 180); break; } } else { canvas.width img.width; canvas.height img.height; } ctx.drawImage(img, 0, 0); const imageData ctx.getImageData(0, 0, canvas.width, canvas.height); llqrcode.decode(imageData); // 此时才传给llqrcode }); }; img.src e.target.result; }; reader.readAsDataURL(file); }逻辑说明exif.js必须在img.onload之后、EXIF.getData之前调用否则this指向错误Orientation值为3/6/8时需旋转但llqrcode.js只接受标准方向的ImageData所以必须用Canvas重绘——这是code.zip中exif.js存在的唯一目的删掉它静态图扫码成功率直降40%。4. 兼容性避坑安卓机型实测的5个血泪问题与硬核解法在23款安卓机型覆盖Android 10~14、海思/骁龙/天玑芯片上实测以下问题是高频翻车点。每个都附带可复制的修复代码和触发条件不是泛泛而谈。4.1 现象华为Mate 40 ProEMUI 12打开摄像头黑屏控制台无报错原因EMUI 12的X5内核对navigator.mediaDevices.getUserMedia的constraints校验极严若未显式声明facingMode: environment默认启用前置摄像头而后置摄像头权限未申请导致黑屏。解决在webqr.js初始化前强制指定后置摄像头// main.js 中修改 getUserMedia 调用 navigator.mediaDevices.getUserMedia({ video: { facingMode: environment, // 必须加 width: { ideal: 1280 }, height: { ideal: 720 } } }).then(stream { video.srcObject stream; }).catch(err { console.error(摄像头权限拒绝:, err); // 降级到静态图上传 document.getElementById(upload-btn).style.display block; });4.2 现象vivo X60OriginOS 1.0扫码时识别结果错位扫A码返回B码内容原因该机型video的videoWidth/videoHeight与实际流分辨率不一致上报1280x720实为640x480导致webqr.js截取的Canvas区域偏移。解决动态获取真实分辨率重设Canvas尺寸// 在 video.play() 后监听 loadeddata video.addEventListener(loadeddata, () { // 关键用 video.videoWidth/video.videoHeight 获取真实值 const realWidth video.videoWidth; const realHeight video.videoHeight; const canvas document.getElementById(qr-canvas); canvas.width realWidth; canvas.height realHeight; // 后续所有 getImageData 基于 realWidth/realHeight 计算 });4.3 现象OPPO Reno8ColorOS 13连续扫码3次后webqr.js停止回调原因webqr.js的qrcode.callback在某些内核中存在内存泄漏重复绑定导致回调队列堆积。解决每次扫码前清除旧回调用单例模式管理// 封装为单例扫码器 class QRScanner { constructor() { this.isScanning false; } start() { if (this.isScanning) return; this.isScanning true; // 关键先清空再赋新回调 qrcode.callback null; qrcode.callback (result) { this.handleResult(result); this.stop(); // 成功后立即停止避免重复触发 }; qrcode.init(video); } stop() { this.isScanning false; } }4.4 现象Redmi Note 11MIUI 14加载BarcodeReader.js时报ReferenceError: ZXing is not defined原因BarcodeReader.js依赖ZXing全局对象但ZXing.js未在code.zip中提供需手动引入。解决下载zxing-js的UMD版本并前置加载!-- 在 index.html 的 script 标签中BarcodeReader.js 之前加入 -- script srchttps://cdn.jsdelivr.net/npm/zxing/library0.18.3/umd/index.min.js/script注意必须用0.18.3版本新版0.20.0移除了UMD构建会导致ZXing未定义。4.5 现象三星Galaxy A52One UI 5扫加密QR码返回乱码但用手机相册扫码APP能正常解原因加密QR码常含非UTF-8字符如GBK编码webqr.js默认用TextDecoder(utf-8)解析遇到GBK字节流直接丢弃。解决捕获原始二进制用iconv-lite转码需额外引入// 引入 iconv-lite.min.js // 在 webqr.js 的 callback 中 qrcode.callback function(result) { if (result result.binary) { // result.binary 是 Uint8Array转GBK const decoded iconv.decode(Buffer.from(result.binary), gbk); document.getElementById(result).innerText decoded; } };提示iconv-lite体积约25KB对H5包体影响小但能解决90%的国产设备加密码乱码问题——这是code.zip原始包没覆盖的硬需求。5. 加密二维码专项处理从Base64到AES-CBC的三步解密链当业务方要求“扫包装上的加密QR码获取设备密钥”webqr.js扫出的只是密文字符串如U2FsdGVkX1...真正的解密在JS层。这里不讲密码学原理只给可落地的三步链识别→提取→解密。5.1 识别阶段用正则过滤干扰字符锁定密文主体加密QR码常在密文前后拼接标识符如[ENC]U2FsdGVkX1...[/ENC]webqr.js扫出的result可能含换行或空格。必须清洗function cleanEncryptedResult(raw) { // 步骤1移除所有空白字符包括\u200b零宽空格 let cleaned raw.replace(/[\s\u200b\u200c\u200d\uFEFF]/g, ); // 步骤2提取[ENC]...[/ENC]内的内容 const encMatch cleaned.match(/\[ENC\](.*?)\[\/ENC\]/i); if (encMatch) return encMatch[1]; // 步骤3若无标识符假设整个字符串为Base64密文 return cleaned; } // 在 qrcode.callback 中调用 qrcode.callback function(result) { const cipherText cleanEncryptedResult(result); if (cipherText) decryptAndUse(cipherText); };5.2 解密阶段AES-CBC解密的完整参数映射表国产系统常用AES-128-CBC密钥和IV通常由后端统一分发。CryptoJS解密需严格匹配参数下表是实测有效的参数组合参数值说明来源CipherCryptoJS.algo.AES必须用algo下的AES不能用CryptoJS.AEScrypto-js4.18.0文档Key Size128密钥长度128位16字节后端配置ModeCryptoJS.mode.CBC模式必须为CBCECB不安全合规要求PaddingCryptoJS.pad.Pkcs7PKCS#7填充非ZeroPaddingcode.zip中llqrcode.js注释提及IVCryptoJS.enc.Utf8.parse(16-byte-iv-here)IV必须16字节且与后端完全一致后端API返回function decryptAES(cipherText, keyStr, ivStr) { try { const key CryptoJS.enc.Utf8.parse(keyStr); // 16字节key const iv CryptoJS.enc.Utf8.parse(ivStr); // 16字节iv const encrypted CryptoJS.enc.Base64.parse(cipherText); const decrypted CryptoJS.AES.decrypt( { ciphertext: encrypted }, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } ); return CryptoJS.enc.Utf8.stringify(decrypted); } catch (e) { console.error(AES解密失败:, e); return null; } }关键细节CryptoJS.AES.decrypt的第一个参数必须是{ ciphertext: ... }对象传字符串会静默失败keyStr和ivStr必须是16字符长的字符串如my-secret-key-123若后端给的是Hex则用CryptoJS.enc.Hex.parse(hexStr)。5.3 验证阶段用“解密后校验”代替“扫码后信任”绝不假设扫码结果100%正确。我们在解密后增加一层业务校验function validateDecrypted(data) { // 规则1必须是JSON格式 try { const obj JSON.parse(data); // 规则2必须含device_id和timestamp if (!obj.device_id || !obj.timestamp) return false; // 规则3timestamp不能早于24小时前防重放 const now Date.now(); if (now - obj.timestamp 24 * 60 * 60 * 1000) return false; return obj; } catch (e) { return false; } } // 最终调用链 qrcode.callback function(result) { const cipher cleanEncryptedResult(result); const plain decryptAES(cipher, KEY, IV); const validData validateDecrypted(plain); if (validData) { showSuccess(validData.device_id); } else { showError(密钥无效或已过期请重试); } };从那以后我每次接到加密扫码需求都强制走一遍这三步先用cleanEncryptedResult过滤再用decryptAES解密最后用validateDecrypted校验。哪怕后端密钥轮换前端也能第一时间发现异常而不是把错误数据传给下游服务。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

JSON工具类设计与AI输出解析:SpringBoot与Uniapp前后端统一实践

JSON工具类设计与AI输出解析:SpringBoot与Uniapp前后端统一实践

“第九讲:JSON工具类”,这一讲不做推荐算法,也不写页面样式,而是解决整个项目中一个很容易被忽视、但几乎每个接口都会碰到的底层问题:怎么把 Java 对象、AI 返回的大段文本、小程序端接收到的响应数据,统一…

2026/10/18 12:35:29 阅读更多 →
华三三层端口聚合配置详解:静态与动态模式实战指南

华三三层端口聚合配置详解:静态与动态模式实战指南

简介:本资源是一份面向网络工程师、运维人员及备考H3C认证的技术人员的实操型配置指南,聚焦华三交换机三层端口聚合的核心场景——静态与动态两种模式的完整部署方案。内容覆盖聚合口创建、三层路由模式启用、物理端口加入、动态协商配置及关键验证命令&…

2026/10/18 12:35:29 阅读更多 →
Honeywell DCS交换机更换:FTE冗余网络零中断实施指南

Honeywell DCS交换机更换:FTE冗余网络零中断实施指南

简介:本资源是一份面向工业自动化工程师、DCS系统运维人员及Honeywell平台实施技术人员的实操型技术文档,聚焦Honeywell DCS系统中交换机更换这一关键维护任务,解决现场因设备老化、故障或升级引发的网络组件替换难题。文档严格依据Honeywell…

2026/10/18 12:35:29 阅读更多 →

最新新闻

Java AI应用开发实战:框架停更后的技术选型与工程化路径

Java AI应用开发实战:框架停更后的技术选型与工程化路径

1. 一个框架停更引发的技术选型焦虑前几天在一个技术交流群里,有位做Java后端的兄弟抛出一个问题:“Spring AI Alibaba是不是停更了?我看仓库好久没动静了,Java搞AI这块是不是没戏了?”群里瞬间热闹起来,有…

2026/10/18 14:08:20 阅读更多 →
Python批量提取PDF表格到Excel:pdfplumber与pandas实战

Python批量提取PDF表格到Excel:pdfplumber与pandas实战

简介:这份资源面向需要批量处理PDF表格的Python学习者与办公自动化开发者,提供从PDF中一键提取表格并导出Excel的完整实例。包内共14个文件,以png截图、xlsx结果表、pdf样本、ipynb笔记本和py脚本为主,压缩包约18.34MB&#xff0c…

2026/10/18 14:08:20 阅读更多 →
Docker 常用命令速查

Docker 常用命令速查

Docker 常用命令速查 一、镜像(Image) # 搜索镜像 docker search nginx# 拉取镜像(不指定标签默认 latest) docker pull nginx docker pull nginx:1.25# 查看本地镜像 docker images docker image ls# 删除镜像 docker rmi nginx:…

2026/10/18 14:08:20 阅读更多 →
强化学习智能体 vs 大模型智能体:选型、落地与避坑指南

强化学习智能体 vs 大模型智能体:选型、落地与避坑指南

简介:由快手科技快意大模型知识增强研发负责人毛航宇分享的《强化学习(多)智能体 和 大语言模型(多)智能体》PDF,系统梳理了近十年强化学习智能体与LLM智能体的研究脉络,并沿Deep RL、Transformer-based RL、LLM-based AI Agent的演化路径选讲…

2026/10/18 14:08:20 阅读更多 →
Idea断点调试(debug)详解:从条件断点到远程调试的完整实践

Idea断点调试(debug)详解:从条件断点到远程调试的完整实践

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

2026/10/18 14:08:20 阅读更多 →
HTML/CSS智能补全:语义化编码与前端效率革命

HTML/CSS智能补全:语义化编码与前端效率革命

1. 这不是“快捷键教学”&#xff0c;而是前端效率革命的起点你有没有过这样的时刻&#xff1a;写HTML时&#xff0c;手在键盘上敲了十几遍<div class"container">&#xff0c;光是闭合标签就反复按了三次方向键&#xff1b;写CSS时&#xff0c;想加个margin: …

2026/10/18 14:07:20 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →