GeoServer跨域问题全解析:CORS原理与Nginx反向代理实践
做Web GIS开发的十有八九都被GeoServer跨域问题支配过。GeoServer在8080端口跑得好好的浏览器直接访问WMS、WFS也正常一旦前端页面用OpenLayers、Leaflet去加载图层或请求要素就冒出一串红通通的CORS报错。这篇文章就围绕这个GeoServer跨域问题拆解跨域是怎么发生的再把常见解决方案按使用场景整理出来改GeoServer自身配置、加反向代理、开发环境代理、JSONP兜底以及一份可以直接照着走的排错清单。无论你是刚接触Web GIS的新手还是被生产环境跨域折腾过几次的开发者都能按图索骥。1. 问题复现跨域到底卡在哪一步1.1 一个典型的调用场景先还原一下大多数人的翻车现场。前端项目跑在http://localhost:3000GeoServer跑在http://localhost:8080/geoserver代码里用OpenLayers加载一个WMS图层const wmsLayer new TileLayer({ source: new TileWMS({ url: http://localhost:8080/geoserver/ows, params: { LAYERS: demo:area, SERVICE: WMS, VERSION: 1.1.1, REQUEST: GetMap }, crossOrigin: anonymous }) });页面一跑起来浏览器Console立刻报错Access to XMLHttpRequest at http://localhost:8080/geoserver/ows?... from origin http://localhost:3000 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource.这里要注意一个反直觉的点浏览器报错说的是“access blocked”并不代表请求没发出去。实际上请求一般都发到GeoServer了GeoServer也正常处理并返回了结果只是浏览器发现响应头里没有Access-Control-Allow-Origin按同源策略把响应“扣留”了前端代码拿不到数据。这个理解非常重要因为很多人一看到报错就怀疑GeoServer服务挂了其实服务端压根没毛病。1.2 跨域的本质同源策略与预检请求同源策略是浏览器最基础的安全机制。这里“源”由三部分组成协议、域名、端口。三个都相同才算同源。http://localhost:3000和http://localhost:8080端口不同跨域。http://localhost:9000和http://192.168.1.10:9000域名不同跨域。http://localhost:9000和https://localhost:9000协议不同也跨域。所以不只是前后端分离的“远程部署”会跨域本地开发时前端端口和GeoServer端口不同一样会被浏览器拦。跨域请求又分简单请求和预检请求。满足以下条件的算简单请求请求方法是GET、HEAD、POST三者之一并且Content-Type只允许application/x-www-form-urlencoded、multipart/form-data、text/plain这三种。简单请求不会触发预检浏览器直接发出请求响应回来后检查CORS头。一旦请求带了自定义Header或者Content-Type是application/json、text/xml或者使用了PUT、DELETE等方法浏览器就会先发一个OPTIONS预检请求拿到服务端的允许列表后再发真实请求。GeoServer的WFS Transaction请求经常用POSTContent-Type是text/xml不属于简单请求允许的范围所以必然会触发预检。如果预检没通过真实请求根本不会发出去前端看到的就是“Preflight failed”之类的错误。1.3 还有一类容易被忽略的“图片跨域”WMS GetMap返回的是图片按理说通过img标签加载跨域图片是不受同源策略限制的这也是为什么有些人页面里加载地图瓦片“看起来没报跨域”。但你一旦在OpenLayers的TileWMS里加了crossOrigin: anonymous浏览器就会把图片请求升级为CORS模式要求服务端返回CORS头。那为什么要自找麻烦加这个参数因为不加的话图片虽然能显示但会被浏览器标记为“跨域资源”Canvas读取像素、WebGL贴图、前端做像素分析等操作全部被禁。简单说只是“看一眼”可以不管跨域想“用数据”就必须解决CORS。2. 方案选型先从架构上想清楚2.1 五种方案的对比很多人一上来就搜“GeoServer 跨域”看到第一个教程就照着改web.xml改完没生效又怀疑人生。我建议先花两分钟做方案选型不同场景的最优解差别很大。方案适用场景改动成本生产可用性核心说明管理界面开启全局CORS小团队、内部系统、GeoServer版本较新最低中等勾选一个选项所有接口返回CORS头修改web.xml加过滤器任意版本、需要精确控制允许来源低中等分Tomcat和Jetty依赖要匹配反向代理Nginx等生产环境、已有网关层中高从架构上把跨域变成同域开发环境代理Vite/Webpack本地开发阶段低不适合生产前端框架代理转发最省事JSONP或图片标签只读请求、历史遗留项目低低只支持GET错误难捕获不推荐新项目2.2 我推荐的路线做了几年GIS开发我的习惯是分场景处理本地开发优先用前端框架的devServer代理改几个配置文件就行完全不动GeoServer。生产环境优先用Nginx或其他网关做反向代理让前端只访问同源地址。内部工具、小项目GeoServer版本够新的话直接在管理界面勾选“启用CORS头信息”一分钟解决。老版本GeoServer、需要精确白名单手动改web.xml加过滤器。这里有个原则跨域不是一个“必须靠GeoServer解决”的问题很多时候是架构问题。如果生产环境允许把GeoServer藏到代理后面比直接暴露给浏览器要安全得多。GeoServer本身有鉴权机制但粗放的Access-Control-Allow-Origin: *等于允许任何网站通过浏览器读取你的地图服务虽然不至于直接拖走数据但被第三方站点盗用接口的风险是实打实的。3. 方案一让GeoServer自己把CORS头吐出来3.1 最省事的办法管理界面开全局CORS近几年发布的GeoServer管理界面里已经内置了CORS开关。登录http://localhost:8080/geoserver进入“全局设置”Global Settings切到“设置”标签页找到“启用CORS头信息”Enable CORS headers这个复选框勾上保存即可。这个选项生效后GeoServer对WMS、WFS、REST API等几乎所有接口的响应都会加上Access-Control-Allow-Origin: *。也就是说前端请求不再挑来路任何源的浏览器请求都能正常读响应。实际操作中保存后通常立即生效个别版本需要重启GeoServer才能看到效果。如果勾选后依然报错先刷新浏览器页面试试Chrome对跨域响应头有缓存旧响应可能被缓存好一会儿。这个方案的局限也很明显只能全开成*不支持在界面上配置域名白名单。想限定http://localhost:3000一个源界面做不到。如果前端代码请求时用了credentials: include浏览器规范不允许Access-Control-Allow-Origin: *和携带凭据同时出现必须换成具体源此时这个方案不适用。所以这个开关适合内部系统、演示项目不适合对外提供服务的严谨场景。3.2 手动改web.xml兼容更多容器GeoServer的部署方式五花八门有的用官方自带Jetty有的打WAR包扔进Tomcat还有的用Docker镜像。CORS本质是Servlet规范里的过滤器机制所以最通用的做法是改WEB-INF/web.xml加一个过滤器。关键区别在于用哪个过滤器实现类。如果GeoServer部署在Tomcat中优先用Tomcat自带的CorsFilter。web.xml路径一般是$TOMCAT_HOME/webapps/geoserver/WEB-INF/web.xml打开web.xml在web-app节点内添加filter filter-nameCorsFilter/filter-name filter-classorg.apache.catalina.filters.CorsFilter/filter-class init-param param-namecors.allowed.origins/param-name param-valuehttp://localhost:3000/param-value /init-param init-param param-namecors.allowed.methods/param-name param-valueGET,POST,HEAD,OPTIONS,PUT,DELETE/param-value /init-param init-param param-namecors.allowed.headers/param-name param-valueContent-Type,Accept,X-Requested-With,Origin,Authorization/param-value /init-param /filter filter-mapping filter-nameCorsFilter/filter-name url-pattern/*/url-pattern /filter-mapping如果用的是GeoServer官方标准安装包内置的Jettyorg.apache.catalina.filters.CorsFilter这个类是不存在的应该用Jetty的CrossOriginFilter。web.xml位置通常在$GEOSERVER_HOME/webapps/geoserver/WEB-INF/web.xml添加配置filter filter-namecross-origin/filter-name filter-classorg.eclipse.jetty.servlets.CrossOriginFilter/filter-class init-param param-nameallowedOrigins/param-name param-value*/param-value /init-param init-param param-nameallowedMethods/param-name param-valueGET,POST,PUT,DELETE,HEAD,OPTIONS/param-value /init-param init-param param-nameallowedHeaders/param-name param-value*/param-value /init-param init-param param-namechainPreflight/param-name param-valuefalse/param-value /init-param /filter filter-mapping filter-namecross-origin/filter-name url-pattern/*/url-pattern /filter-mapping这里有个容易踩的坑改完web.xml之后必须重启GeoServer进程让过滤器注册到容器中。很多人改完不重启然后接着报错还以为配置不对。另一个坑是chainPreflight这个参数。它控制预检OPTIONS请求是否继续往后传给GeoServer的Servlet。GeoServer对OPTIONS请求不一定有友好处理如果预检请求被传下去后返回了405或403浏览器一样会拦截。所以设成false让过滤器直接处理预检并返回是最稳的。如果启动时看到ClassNotFoundException: org.eclipse.jetty.servlets.CrossOriginFilter说明当前环境的Jetty包里缺jetty-servlets这个依赖。解决办法是把对应版本的jetty-servlets.jar放到WEB-INF/lib下或者干脆换用Tomcat部署再用Tomcat自带的CorsFilter。以前很多教程推荐第三方的com.thetransactioncompany.cors.CORSFilter它也有效但要额外下载jar还要处理一堆初始化参数现在不推荐了。3.3 手动改global.xml兜底如果你用的GeoServer版本比较新但管理界面的“启用CORS头信息”选项被隐藏或者环境不允许开界面还可以直接改数据目录下的global.xml。在settings节点里加一行enableCORStrue/enableCORS保存后重启GeoServer。这里要强调能走管理界面就走管理界面手动改全局配置文件风险在于格式写错会导致整个服务启动失败而且有些运行状态变量在global.xml里是被运行时重写的改得不小心可能被覆盖。3.4 验证是否生效配置完成并重启后不要急着开前端页面先用curl直接验证GeoServer响应头这样能快速定位问题在哪一层。执行curl -H Origin: http://localhost:3000 \ -D - -o /dev/null \ http://localhost:8080/geoserver/ows?serviceWMSrequestGetCapabilities如果配置生效响应头里会多出access-control-allow-origin: *如果没看到这个头说明配置没加载或者被别的过滤器提前拦截了。此时先确认改的是不是当前进程实际读取的web.xml再确认有没有重启成功。4. 方案二用反向代理把跨域变成同域4.1 为什么生产环境首选代理跨域是浏览器侧的规则只要浏览器请求的地址和页面属于同源就根本没有跨域一说。反向代理干的事情就是前端页面请求https://map.example.com/geoserver/...Nginx把这个请求转发给内网的http://127.0.0.1:8080/geoserver/...响应对浏览器来说依然来自https://map.example.com。这样做的优势很明显前端代码里只出现一个正式域名不用把GeoServer端口暴露到公网。可以在代理层统一处理HTTPS证书、日志、限流、请求体大小。GeoServer响应头里即使不加CORS浏览器也不会拦。缺点是要多维护一层代理配置而且代理路径如果拼错了排错时要多绕一圈。4.2 Nginx具体配置Nginx配置的核心是一个带location /geoserver/的server块server { listen 80; server_name map.example.com; location /geoserver/ { proxy_pass http://127.0.0.1:8080/geoserver/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; } }这里最需要注意的是proxy_pass末尾的斜杠。写成http://127.0.0.1:8080/geoserver/带斜杠请求/geoserver/ows会被转发到http://127.0.0.1:8080/geoserver/ows如果不带斜杠写成http://127.0.0.1:8080则会被拼接成/geoserver/ows。看起来结果一样但一旦location的路径带参数或前缀复杂化斜杠问题就会变成隐形炸弹。建议保持“成对写法”location路径末尾带/proxy_pass末尾也带/。如果希望代理服务本身也能被其他域的页面直接跨域调用可以在Nginx层加CORS头location /geoserver/ { add_header Access-Control-Allow-Origin * always; add_header Access-Control-Allow-Methods GET, POST, OPTIONS always; add_header Access-Control-Allow-Headers Content-Type, Accept, Authorization always; # 处理预检请求 if ($request_method OPTIONS) { return 204; } proxy_pass http://127.0.0.1:8080/geoserver/; ... }不过既然页面和代理同源这里通常用不上除非你有多个前端站点同时访问这个代理。还有一个容易忽略的点GeoServer在生成WMS GetCapabilities、WFS DescribeFeatureType等文档时会基于请求的Host头生成内部链接地址。代理转发时如果没有显式设置proxy_set_header Host $hostGeoServer拿到的Host可能是内网IP返回的链接全错前端跳转或二次请求就会失败。这个和跨域不是同一个问题但往往一起出现所以一定要带上那几个proxy_set_header。4.3 开发环境前端代理本地开发时前端项目用Vite或Webpack自带的devServer代理是效率最高的方案完全不用碰GeoServer。Vite的配置在vite.config.jsserver: { proxy: { /geoserver: { target: http://localhost:8080, changeOrigin: true } } }Webpack在vue.config.js或webpack.config.js里配置devServer: { proxy: { /geoserver: { target: http://localhost:8080, changeOrigin: true } } }配置好之后前端代码里请求地址要改成相对路径const url /geoserver/ows;而不是原来的http://localhost:8080/geoserver/ows。浏览器看到请求发往http://localhost:3000/geoserver/ows和自己同源自然放行。devServer再把请求转发到8080端口的GeoServer。开发环境代理有个隐蔽的小坑如果你给GeoServer配置了登录鉴权Cookie和Session的域可能不匹配。此时把changeOrigin: true打开让代理转发时改写Host头一般就能解决。4.4 代理上线后的常见翻车点代理方案不是配置完就万事大吉上线后常见几个问题页面是HTTPS代理到内网HTTP如果Nginx没有正确处理证书或X-Forwarded-ProtoGeoServer生成的链接会变成http://...前端混合内容报错。代理路径/geoserver/被防火墙或上游网关二次改写导致GeoServer的控制台、REST API路径对不上。如果Nginx层同时开启了缓存某些WFS POST请求会被缓存层意外处理返回陈旧结果或405。建议对/geoserver/ows的POST请求关闭代理缓存。5. 方案三不优雅但能用的替代手段5.1 JSONP只适合读接口GeoServer的WFS服务可以用JSONP的方式绕过跨域核心思想是script标签不受同源策略限制服务器返回一段JavaScript调用回调函数。GeoServer在输出GeoJSON时通过format_options参数指定回调函数名大致请求格式/geoserver/ows?serviceWFSversion2.0requestGetFeature typeNamesdemo:areaoutputFormatapplication/json format_optionscallback:handleData然后前端预先定义window.handleData函数接收数据。JSONP能解决一部分读取场景但缺点非常扎眼只支持GET请求WFS Transaction的插入、更新、删除全做不了。请求失败时没有标准错误码调试体验很差。回调函数是全局的容易和页面其他脚本互相污染。多个并发请求时回调名不能重复管理麻烦。所以新项目不建议用它更适合老系统里的临时救急。5.2 图片标签与同源策略的“擦边球”前面说过WMS GetMap返回的是图片通过img标签加载跨域图片并不会被同源策略拦截这是浏览器长期以来的行为。所以如果你只是把WMS当图层底图显示不读取像素、不参与Canvas处理可以不设crossOrigin页面确实不会报跨域错。但这个“没问题”是假象。一旦需求变成“我要在前端把地图截图导出”“我要用WebGL渲染地形”“我要对像素做颜色分类”图片被Canvas读取之后就会因为跨域污染而抛异常。到时候再回头补CORS改动成本反而更高。所以我的建议是新代码里统一加crossOrigin: anonymous并配套服务端CORS别贪图一时省事。5.3 浏览器插件的“危险解法”网上有一些教程让人装Chrome插件跳过CORS检查或者给Chrome加启动参数--disable-web-security。这个做法我只能说“只配在本机临时调试时用”别写进任何项目文档更别推荐给同事。关闭浏览器安全意味着所有跨域请求全部放行等于把浏览器最基础的安全边界拆了。你在本地测一个页面如果这个页面刚好加载了恶意第三方脚本对方可以随便读你内网服务的响应。这个风险不值得冒。6. 常见问题与排查清单6.1 为什么配置后还是报错现象可能原因检查点响应头里没有 Access-Control-Allow-Origin服务端配置没生效或改错了文件用curl直连验证确认web.xml路径确认重启OPTIONS预检请求返回403/405过滤器没处理OPTIONS或chainPreflight没设false看Network里OPTIONS状态码检查allowedMethods是否含OPTIONS报错 Request header field xxx is not allowed自定义请求头没加入allowedHeaders前端用了Authorization等头服务端对应放行代理后依然报跨域浏览器访问的还是直连地址代理没生效看Network里的Request URL确认走的是代理路径配置了 credentials: include 后报错Access-Control-Allow-Origin: *不能和credentials共存改为具体源如http://localhost:3000明明改好了刷新还是报错浏览器缓存了旧响应无痕窗口或强制刷新6.2 预检请求的专项排查预检失败是跨域问题里最磨人的一类。它的特点是报错信息和实际原因经常对不上。排查时打开Chrome DevTools的Network面板筛选OPTIONS请求重点看三件事OPTIONS请求本身的状态码。正常情况应该是204、200或302如果看到403、405说明服务端对OPTIONS处理有问题。响应头里的Access-Control-Allow-Methods是否包含真实请求要用的方法。很多配置只写了GET和POST结果前端发了PUT预检直接挂。Access-Control-Allow-Headers是否覆盖前端自定义Header。如果前端Axios默认带X-Requested-With或者加了Authorization这里必须写全。有一个小技巧把浏览器当前请求的Origin、Method、Headers都复制出来用curl手动构造一个OPTIONS请求能更快定位是浏览器的问题还是服务端的问题。6.3 排查步骤的顺序经验踩过几次坑以后我给自己定了一套固定的排查流程照着走基本半小时内定位先看Network面板请求到底发出去没有状态码是多少响应头有哪些。这一步能区分“服务端没处理”和“浏览器拦截”。判断当前请求是简单请求还是预检请求。如果带了application/json、text/xml、自定义Header所有有关“Allow-Origin”的报错都要先想预检的事。用curl带Origin头直连GeoServer确认GeoServer本身返回了什么。如果curl能看到CORS头问题就在代理层或浏览器缓存如果curl都看不到问题就在GeoServer配置。再检查代理。确认前端实际请求的URL是不是代理路径代理是否正确转发有没有把上游CORS头吃掉。最后才是质疑浏览器。开一个无痕窗口排除缓存因素后看是否仍然报错。按这个顺序排查不会出现“改了半天web.xml最后发现是Nginx没加proxy_set_header”这种白忙活的情况。做GIS开发这些年我最大的感受是跨域问题本身不难难得是搞不清它发生在哪一层。很多人一看到CORS报错就冲去改GeoServer其实先分清楚是“服务端没给头”“预检没通过”还是“代理路径错了”比着急动手重要得多。如果你是第一次遇到建议先走一遍第六节的检查单再决定用哪个方案。实际项目里开发环境用前端代理、生产环境用Nginx反向代理基本能覆盖九成场景真的没必要为了图快把GeoServer的CORS全开。

相关新闻

微信小程序自定义导航栏:解决分享进入无返回的胶囊按钮实现

微信小程序自定义导航栏:解决分享进入无返回的胶囊按钮实现

简介:这份PDF资料面向微信小程序开发者,尤其是电商类小程序的开发人员,聚焦于自定义导航栏中“胶囊按钮”返回与首页功能的实现。当商品页被转发后页面栈仅剩一层,系统默认返回按钮消失,用户难以浏览其他商品或回到首页…

2026/10/18 1:39:48 阅读更多 →
如何快速上手olmOCR-bench:5分钟搭建你的第一个PDF转Markdown评测环境(新手完整教程)

如何快速上手olmOCR-bench:5分钟搭建你的第一个PDF转Markdown评测环境(新手完整教程)

数据集AI 评测模型评测人工智能OCR 【免费下载链接】olmOCR-bench 项目地址: https://ai.gitcode.com/hf_mirrors/allenai/olmOCR-bench 点击查看 免费下载 👋 想评估你的 OCR 系统把 PDF 转 Markdown 的能力有多强?本文带你 5 分钟用上 olm…

2026/10/18 1:39:48 阅读更多 →
C# TCP套接字通信实战:从粘包拆包到异步多客户端完整指南

C# TCP套接字通信实战:从粘包拆包到异步多客户端完整指南

1. 从零理解TCP套接字通信到底在做什么1.1 为什么选择TCP而不是UDP很多刚接触网络编程的朋友会问:同样是传数据,为什么一上来就要学TCP?我直接用UDP不是更简单吗?这个问题我在带新人的时候被问过不下几十次。答案其实不复杂——TC…

2026/10/18 1:38:48 阅读更多 →

最新新闻

Helium智能网卡DPU深度解析:可编程卸载与性能调优实战

Helium智能网卡DPU深度解析:可编程卸载与性能调优实战

/* 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 2:18:57 阅读更多 →
深度学习NLP实操全解:从词向量、Transformer到BERT微调部署

深度学习NLP实操全解:从词向量、Transformer到BERT微调部署

做深度学习自然语言处理这几年,我最大的感受是:网上讲原理的教程一大堆,讲实践的也不少,但能把“原理”和“实践”串成一条线讲清楚的,真不多。原理看得懂,代码跑不通;代码跑通了,换…

2026/10/18 2:18:57 阅读更多 →
嵌入式单片机工程师就业现状与突围策略:从招聘需求到技能提升

嵌入式单片机工程师就业现状与突围策略:从招聘需求到技能提升

/* 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 2:18:57 阅读更多 →
长江存储Xtacking 2.0入局UFS 3.1旗舰赛道:技术架构与性能实测

长江存储Xtacking 2.0入局UFS 3.1旗舰赛道:技术架构与性能实测

/* 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 2:18:57 阅读更多 →
AI智能体端侧算力瓶颈:DSP芯片与OpenClaw运行时框架的软硬件协同实践

AI智能体端侧算力瓶颈:DSP芯片与OpenClaw运行时框架的软硬件协同实践

/* 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 2:18:57 阅读更多 →
老电脑跑虚拟机:VMware Workstation 9.0.2精简绿色版

老电脑跑虚拟机:VMware Workstation 9.0.2精简绿色版

简介:VMware-9.0.2 虚拟机精简绿色版面向开发者、测试人员以及教学实验用户,解决标准版安装体积大、启动慢等痛点,提供免安装、轻量化的虚拟机运行方案。压缩包内共289个文件,以动态链接库、可执行程序、系统驱动和配置文件为主&a…

2026/10/18 2:17:57 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

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

周新闻

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

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

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

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

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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/16 14:23:36 阅读更多 →