Python http.server模块详解:快速搭建本地静态文件服务器
1. 项目概述为什么需要一个简易HTTP服务器在开发、测试或者日常工作中我们经常会遇到一个看似简单却非常实际的需求快速地把本地的一个目录变成一个可以通过浏览器访问的网站。比如你想给同事分享一个刚写好的前端页面或者需要临时测试一个静态资源能否正确加载又或者只是想快速查看一下本地的图片、文档。这时候如果去配置一个完整的Nginx或Apache无异于“杀鸡用牛刀”不仅耗时还引入了不必要的复杂性。Python自带的http.server模块就是为解决这类“轻量级、临时性”需求而生的利器。它不是一个用于生产环境的重量级服务器而是一个单线程的、基础的HTTP服务器实现。它的核心价值在于“快速”和“零配置”。你不需要安装任何第三方库只需要有Python环境一行命令就能让一个目录“活”起来通过HTTP协议对外提供服务。我从业十多年在无数个调试前端、演示原型、共享文档的场合都依赖这个看似简陋的工具。它可能没有高性能没有负载均衡但它的“即开即用”特性在特定场景下无可替代。接下来我将带你彻底拆解这个模块不仅告诉你如何用更会深入分析其原理、适用边界并分享一系列从实战中积累的配置技巧和避坑经验。2. 核心模块解析http.server 的双重身份要玩转http.server首先要理解它的两个核心类HTTPServer和SimpleHTTPRequestHandler。这是理解其工作原理和进行自定义扩展的基础。2.1 HTTPServer服务器的骨架HTTPServer继承自socketserver.TCPServer它的职责是建立网络连接监听端口并将接收到的客户端请求分发给指定的处理程序。你可以把它想象成一个餐厅的前台负责接待客人客户端连接然后把客人引到对应的服务员RequestHandler那里。创建一个最基本的服务器实例非常简单from http.server import HTTPServer, SimpleHTTPRequestHandler server_address (‘’, 8000) # 空字符串表示绑定本机所有可用IP httpd HTTPServer(server_address, SimpleHTTPRequestHandler)这里的关键参数是第二个SimpleHTTPRequestHandler。它告诉服务器对于每一个到来的请求都使用这个类的一个新实例来处理。HTTPServer本身不处理任何HTTP协议细节它只负责TCP层面的通信。2.2 SimpleHTTPRequestHandler请求的处理核心SimpleHTTPRequestHandler继承自http.server.BaseHTTPRequestHandler它是真正干活的“服务员”。当一个HTTP请求比如GET /index.html HTTP/1.1到达时服务器会创建一个该处理程序的新实例并调用其相关方法来处理。它的核心工作流程是解析请求自动解析HTTP请求行、头部信息。路径映射将请求的URL路径映射到服务器当前工作目录下的文件系统路径。文件服务如果映射到的路径是一个文件则读取文件内容设置正确的Content-Type头部基于文件扩展名并发送给客户端。如果路径是一个目录它会尝试寻找目录下的index.html或index.htm文件如果没有则生成一个简单的HTML列表来显示目录内容。错误处理如果文件不存在或无权限访问则返回404 Not Found或403 Forbidden错误。这个处理程序已经实现了对GET和HEAD方法的支持足以满足静态文件服务的需求。它的设计是“开箱即用”的但同时也通过一系列可重写的方法如do_GET()为自定义行为留出了空间。注意SimpleHTTPRequestHandler默认使用当前工作目录os.getcwd()作为文档根目录。这是很多新手困惑的地方——为什么我运行命令的目录就成了网站的根目录3. 三种启动方式从命令行到自定义脚本根据不同的使用场景我们可以选择三种不同粒度的启动方式。3.1 单行命令最快捷这是最经典、最常用的方式在终端中直接执行python -m http.server 8080这条命令做了以下几件事-m http.server以模块方式运行http.server。8080指定监听端口。如果不指定默认是8000。默认绑定到0.0.0.0所有网络接口。这意味着同一局域网内的其他设备通过你的IP地址和端口也能访问。常用参数解析--bind或-b指定绑定的IP地址。例如python -m http.server 8080 --bind 127.0.0.1只允许本机访问更安全。--directory或-d指定服务的根目录。这是Python 3.7加入的极其有用的参数。例如python -m http.server -d /path/to/your/files 8000。在这之前你只能先cd到目标目录再启动服务或者用下面的脚本方式。3.2 基础脚本灵活控制当你需要更多控制权时比如想集成到其他Python脚本中或者需要自定义一些简单的逻辑编写一个脚本是更好的选择。#!/usr/bin/env python3 import http.server import socketserver PORT 8000 DIRECTORY “public_html” # 可以指定相对或绝对路径 class Handler(http.server.SimpleHTTPRequestHandler): def __init__(self, *args, **kwargs): # 关键在初始化父类前修改其类变量从而改变文档根目录 super().__init__(*args, directoryDIRECTORY, **kwargs) with socketserver.TCPServer((“”, PORT), Handler) as httpd: print(f“Serving at port {PORT} from directory ‘{DIRECTORY}’“) try: httpd.serve_forever() except KeyboardInterrupt: print(“\nServer stopped.”)这个脚本的优势在于目录固定无论你在哪里运行脚本服务都会从DIRECTORY变量指定的目录提供文件。逻辑清晰所有配置集中在一处易于管理和修改。可扩展起点这个Handler类是你进行所有自定义扩展的起点。3.3 进阶自定义脚本处理特定需求SimpleHTTPRequestHandler提供了许多可以重写的方法以满足特定需求。下面是一个增强版的脚本示例它解决了几个常见痛点#!/usr/bin/env python3 import http.server import socketserver import urllib.parse import os PORT 8000 DIRECTORY “.“ class CustomHTTPRequestHandler(http.server.SimpleHTTPRequestHandler): # 1. 解决中文文件名或路径在目录列表和日志中显示乱码的问题 def list_directory(self, path): try: list os.listdir(path) except OSError: self.send_error(404, “No permission to list directory”) return None list.sort(keylambda a: a.lower()) r [] enc self.encoding # 通常是 ‘utf-8‘ for name in list: fullname os.path.join(path, name) displayname linkname name # 如果是目录在名字后加’/‘ if os.path.isdir(fullname): displayname name “/” linkname name “/” # 对链接名进行URL编码确保中文等特殊字符能正确访问 linkname urllib.parse.quote(linkname, errors‘surrogatepass’) # 对显示名进行HTML转义防止XSS displayname html.escape(displayname, quoteFalse) r.append(‘lia href“%s”%s/a/li’ % (linkname, displayname)) ... # 这里省略了后续组装完整HTML页面的代码核心是使用了urllib.parse.quote和html.escape # 2. 自定义日志输出格式增加时间戳 def log_message(self, format, *args): import datetime print(“%s - - [%s] %s” % (self.address_string(), datetime.datetime.now().strftime(“%Y-%m-%d %H:%M:%S”), format%args)) # 3. 添加简单的CORS支持方便前端开发调试 def end_headers(self): self.send_header(‘Access-Control-Allow-Origin’, ‘*’) self.send_header(‘Access-Control-Allow-Methods’, ‘GET, OPTIONS’) self.send_header(‘Access-Control-Allow-Headers’, ‘*’) super().end_headers() # 4. 处理OPTIONS预检请求针对CORS def do_OPTIONS(self): self.send_response(200) self.end_headers() # 使用自定义的处理类启动服务器 with socketserver.TCPServer((“”, PORT), CustomHTTPRequestHandler) as httpd: httpd.directory DIRECTORY # Python 3.7 可以通过构造函数传递这里用属性模拟 print(f“Serving HTTP on 0.0.0.0 port {PORT} (http://localhost:{PORT}/) ...”) httpd.serve_forever()这个自定义处理程序解决了原生模块的几个不足中文支持原生方法在处理非ASCII文件名时可能出错通过urllib.parse.quote进行编码。日志可读性添加时间戳方便排查问题。跨域支持添加CORS头部使得本地的前端页面可以方便地通过Fetch或Axios请求本地服务器上的API模拟数据而不会遇到跨域错误。这在前后端分离开发联调时非常有用。4. 关键配置与安全实践虽然http.server是临时工具但正确的配置和安全意识依然重要尤其是在非完全可控的网络环境中。4.1 绑定地址与端口选择绑定到127.0.0.1(localhost)这是最安全的做法。服务只对本机可用。适用于纯粹本地预览和测试。python -m http.server 8000 --bind 127.0.0.1绑定到0.0.0.0服务对所有网络接口开放局域网内的其他设备如手机、平板可以通过你的内网IP访问。这在需要移动端调试或团队间快速共享时非常方便。python -m http.server 8000 --bind 0.0.0.0重要提醒在公共网络如咖啡厅Wi-Fi、公司开放网络中绝对不要使用0.0.0.0绑定来服务敏感或私人目录。你可能会无意中将文件暴露给同一网络下的任何人。端口选择优先使用8000,8080,8888等常用开发端口。如果端口被占用服务器会报OSError: [Errno 48] Address already in use。你需要换一个端口或者用lsof -i :8000和kill命令结束占用该端口的进程。4.2 性能与并发处理必须清醒认识到http.server的性能限制单线程默认情况下它是单线程的。这意味着它一次只能处理一个请求。如果一个请求比如加载一个大文件耗时很长其他所有请求都会被阻塞浏览器会一直处于等待状态。无性能优化它没有缓存、没有压缩gzip、没有持久连接Keep-Alive优化。这些都会影响页面加载速度尤其是对于有很多小文件如图标、CSS、JS的现代网站。对于需要稍好并发能力的场景可以使用socketserver.ThreadingMixIn来创建一个多线程的服务器但这依然不改变其本质不是为生产环境设计的事实。from http.server import HTTPServer, SimpleHTTPRequestHandler from socketserver import ThreadingMixIn class ThreadingHTTPServer(ThreadingMixIn, HTTPServer): “”“一个简单的多线程HTTP服务器。”“” pass server_address (‘’, 8000) httpd ThreadingHTTPServer(server_address, SimpleHTTPRequestHandler) httpd.serve_forever()这样每个请求都会在一个独立的线程中被处理避免了单个慢请求阻塞整个服务。但这只是“聊胜于无”的改进对于真正的压力测试或公开服务请务必使用Nginx、Apache或专业的Python ASGI服务器如Uvicorn。4.3 常见文件类型与MIME类型SimpleHTTPRequestHandler使用一个内置的、有限的MIME类型映射extensions_map来设置Content-Type响应头。这对于常见文件类型.html,.css,.js,.png,.jpg是足够的。但是如果你需要服务一些特殊文件比如.wasm(WebAssembly) 或.mjs(ES模块)服务器可能会错误地将其标记为text/plain导致浏览器无法正确解析。你可以在自定义处理程序中扩展这个映射class CustomHandler(http.server.SimpleHTTPRequestHandler): extensions_map { **http.server.SimpleHTTPRequestHandler.extensions_map, # 继承默认映射 ‘.wasm’: ‘application/wasm’, ‘.mjs’: ‘application/javascript’, ‘.jsonld’: ‘application/ldjson’, ‘.webmanifest’: ‘application/manifestjson’, }这个小小的改动能确保浏览器以正确的方式处理这些现代Web文件。5. 典型应用场景与实战技巧了解了基本原理后我们来看看它在实际工作中如何大显身手。5.1 场景一前端开发与静态页面预览这是最核心的用途。你写了一个index.html和一些CSS、JS文件双击index.html在浏览器中打开有时会因为file://协议的限制导致某些API如Fetch或资源加载失败。使用http://localhost协议则完全模拟了真实的Web环境。实战技巧创建一键启动脚本在项目根目录创建一个serve.py或start_server.sh脚本。对于前端项目你甚至可以结合npm scripts// package.json “scripts”: { “serve”: “python -m http.server 8080 -d dist/”, “serve:dev”: “python -m http.server 3000 -d src/” }这样团队成员只需要npm run serve就能启动一个预览服务器无需关心Python命令的具体参数。5.2 场景二局域网文件共享与演示在团队内部快速分享设计稿、演示文档、数据集等。假设你在一个会议上需要把一份PDF分享给所有参会者。将PDF文件放入一个空目录。在该目录下打开终端运行python -m http.server 9000 --bind 0.0.0.0查看本机在内网的IP地址在Mac/Linux上用ifconfig在Windows上用ipconfig假设是192.168.1.100。告诉同事“请在浏览器打开http://192.168.1.100:9000”他们就能看到并下载这个PDF了。这比用U盘拷贝、用聊天软件发送可能有限制都要快得多。5.3 场景三API接口模拟与Mock Server在后端API尚未开发完成时前端开发需要数据来进行联调。你可以用http.server快速搭建一个Mock Server。#!/usr/bin/env python3 from http.server import HTTPServer, BaseHTTPRequestHandler import json class MockAPIHandler(BaseHTTPRequestHandler): def do_GET(self): if self.path ‘/api/user’: self.send_response(200) self.send_header(‘Content-Type’, ‘application/json’) self.end_headers() response {“id”: 1, “name”: “测试用户”, “status”: “active”} self.wfile.write(json.dumps(response, ensure_asciiFalse).encode(‘utf-8’)) elif self.path ‘/api/products’: # 模拟更多数据... else: self.send_error(404) def do_POST(self): # 模拟POST请求处理读取请求体返回模拟结果 if self.path ‘/api/login’: content_length int(self.headers[‘Content-Length’]) post_data self.rfile.read(content_length) # 解析post_data... self.send_response(200) self.send_header(‘Content-Type’, ‘application/json’) self.end_headers() self.wfile.write(json.dumps({“token”: “fake-jwt-token”}).encode()) if __name__ ‘__main__’: server HTTPServer((‘localhost’, 8001), MockAPIHandler) print(‘Mock API server running on http://localhost:8001’) server.serve_forever()这个Mock Server可以返回固定的JSON数据让前端开发在真实网络请求的环境下进行开发而不是硬编码假数据。5.4 场景四网络诊断与请求检查有时你需要查看一个HTTP请求的原始信息或者测试某个客户端如爬虫、IoT设备的请求格式是否正确。用http.server启动一个服务然后让客户端向它发送请求你就能在服务器终端看到完整的请求头、请求行和请求体如果有的话。技巧启用详细日志自定义log_request方法让它打印出请求体class DebugHandler(http.server.SimpleHTTPRequestHandler): def log_request(self, code‘-’, size‘-’): # 先调用父类方法打印基础信息 super().log_request(code, size) # 如果是POST/PUT等有请求体的方法尝试打印 if self.command in [‘POST’, ‘PUT’, ‘PATCH’]: content_len int(self.headers.get(‘Content-Length’, 0)) if content_len: body self.rfile.read(content_len) print(f“Request Body: {body.decode(‘utf-8’, errors‘ignore’)}”)这样任何发送到该服务器的请求细节都将无所遁形。6. 常见问题、故障排查与进阶提示即使是一个简单的工具在使用中也难免会遇到问题。下面是我总结的常见“坑”和解决方法。6.1 端口被占用问题启动时报告OSError: [Errno 48] Address already in use。排查换端口最简单的办法将8000改为8001、8080等。找出并关闭占用进程Linux/macOS:sudo lsof -i :8000查看PID然后用kill -9 PID结束进程。Windows:netstat -ano | findstr :8000查看PID然后在任务管理器中结束对应进程或使用taskkill /PID PID /F。6.2 客户端无法访问非本地问题本机可以访问http://localhost:8000但同一局域网内的手机或电脑无法通过IP访问。排查步骤检查绑定地址确保启动命令包含了--bind 0.0.0.0。只绑定127.0.0.1是无法从外部访问的。检查防火墙本地防火墙可能阻止了外部对8000端口的连接。macOS系统偏好设置 - 安全性与隐私 - 防火墙 - 防火墙选项… 添加端口允许。Windows控制面板 - Windows Defender 防火墙 - 高级设置 - 入站规则新建规则允许端口。Linux (ufw)sudo ufw allow 8000/tcp。检查路由器/网络策略在一些企业或公共网络中非标准端口可能被屏蔽。6.3 文件下载而不是在浏览器中打开问题访问一个.html或.pdf文件浏览器却提示下载。原因服务器发送的Content-Type响应头不正确或缺失。最可能的原因是MIME类型映射中没有该文件扩展名或者文件没有扩展名。解决确保文件有正确的扩展名如.html,.pdf。如前面所述在自定义处理程序中扩展extensions_map。检查服务器控制台是否有错误日志。6.4 性能极差加载缓慢现象页面加载时间很长尤其是包含很多小图片、图标字体如Font Awesome的页面。原因如前所述单线程、无Keep-Alive、无压缩导致每个资源都需要建立独立的TCP连接开销巨大。解决方案仅用于开发预览接受其性能限制它本就不是为性能而生。需要更好性能将http.server仅作为“文件提供者”在前端使用Vite、Webpack Dev Server等现代开发工具它们内置的服务器经过了高度优化支持热更新、模块热替换HMR等。用于生产预览将静态文件构建到dist目录后使用nginx -s stop nginx -c /path/to/nginx.conf或serve(Node.js全局包) 等更专业的静态服务器来预览生产包。6.5 目录列表不显示或样式错乱SimpleHTTPRequestHandler生成的目录列表页面样式非常简陋。如果你希望禁用目录列表返回403或者自定义列表页面可以重写list_directory方法直接返回错误或生成你自己的HTML。def list_directory(self, path): # 直接禁止目录浏览 self.send_error(403, “Directory listing is forbidden”) return None # 或者返回一个简单的自定义页面 # self.send_response(200) # self.send_header(“Content-Type”, “text/html; charsetutf-8”) # self.end_headers() # self.wfile.write(b“htmlbodyh1Index of //h1pListing disabled./p/body/html”)6.6 进阶提示与其他工具结合与watchdog结合实现文件变化自动刷新浏览器。可以写一个脚本使用watchdog监控文件变动然后通过WebSocket或简单的轮询通知浏览器刷新。与zipfile结合创建一个临时的HTTP服务器直接提供ZIP压缩包中的内容而无需解压。作为中间件在更复杂的Python Web应用中可以将http.server作为一个简单的静态文件中间件来使用虽然这通常不是最佳实践但在某些内部工具中足够用。http.server模块是Python标准库中“小而美”的典范。它用最少的代码解决了一个高频的痛点。理解它的原理和局限能让你在需要“快速搭个临时服务器”的时候游刃有余。记住它的定位一个优秀的开发辅助工具和临时解决方案而非生产级服务器。当你需要更强大的功能时就该请出Nginx、Apache或专业的Python Web框架了。但在它们登场之前http.server永远是那个值得信赖的、能快速帮你打开局面的老朋友。

相关新闻

ROS Noetic摄像头标定全流程:从原理到实践,规避视觉算法精度陷阱

ROS Noetic摄像头标定全流程:从原理到实践,规避视觉算法精度陷阱

1. 项目概述:为什么ROS摄像头标定是机器人视觉的“第一课”如果你正在用ROS捣鼓机器人,无论是做SLAM建图、机械臂抓取,还是小车导航,只要用到了摄像头,那“标定”就是你绕不开、也绝对不能跳过的第一步。很多人&#x…

2026/10/17 2:19:30 阅读更多 →
Ubuntu服务器SWAP分区扩容实战:从原理到无损调整

Ubuntu服务器SWAP分区扩容实战:从原理到无损调整

1. 项目缘起:为什么需要调整SWAP分区? 最近在折腾一台跑在Ubuntu 20.04上的老旧服务器,主要用来跑一些数据处理的脚本和一个小型数据库。机器内存是8GB,当初安装系统时图省事,SWAP分区就按默认的2GB来设置了。一开始相…

2026/10/17 2:19:36 阅读更多 →
Qwythos-9B-v2 GGUF模型本地部署实战:从零搭建私有AI助手

Qwythos-9B-v2 GGUF模型本地部署实战:从零搭建私有AI助手

1. 项目概述:为什么选择Qwythos-9B-v2与GGUF格式? 最近在折腾本地大模型的朋友,估计没少被各种格式和部署工具搞得头大。我自己也是,从早期的PyTorch .bin 文件,到后来的Safetensors,再到如今几乎成为“事…

2026/10/17 2:19:45 阅读更多 →

最新新闻

含冰蓄冷空调的冷热电联供微网多时间尺度优化调度

含冰蓄冷空调的冷热电联供微网多时间尺度优化调度

“含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度”这个标题,我第一次接手的时候心里其实挺没底的。因为这几个关键词单拆出来每一个都能单独撑起一篇论文,合在一起又是一个非常典型的“系统级优化”问题。但它真正要解决的事情,落到底层…

2026/10/19 6:16:45 阅读更多 →
Fluid自定义弹性伸缩实战:让数据缓存跟着业务节奏自动调整

Fluid自定义弹性伸缩实战:让数据缓存跟着业务节奏自动调整

开头直接进入主题,不搞花架子。做数据平台的同学,这两年一定听过 Fluid 这个词——云原生数据编排与加速引擎。我最初接触 Fluid 的时候,感觉它最漂亮的地方不是缓存加速那一套,而是“让数据弹性跟着业务跑”这件事。这个项目标题…

2026/10/19 6:16:45 阅读更多 →
自适应巡航控制算法深度拆解:目标筛选、间距策略与实车调试要点

自适应巡航控制算法深度拆解:目标筛选、间距策略与实车调试要点

1. ACC到底在解决什么问题:核心目标与系统架构自适应巡航控制算法,英文全称Adaptive Cruise Control,缩写ACC,在智能驾驶的演进路径上是个承上启下的关键节点。往上它能衔接领航辅助、城市NOA这类高阶功能,往下它是定速…

2026/10/19 6:16:45 阅读更多 →
Artcraft创作方法论:从艺术灵感到工艺实现的完整路径

Artcraft创作方法论:从艺术灵感到工艺实现的完整路径

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个标题,我脑子里蹦出来的第一反应是:这大概率不是一个单纯的绘画工具,也不是一个纯粹的手工教程合集。它更像是一个把“艺术(art&#xf…

2026/10/19 6:16:45 阅读更多 →
artcraft:从灵感到成品的创作流程管理方法论

artcraft:从灵感到成品的创作流程管理方法论

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个词,我脑子里蹦出来的第一反应是“艺术”加“手艺”的组合。这不是一个随便拼出来的名字,它背后指向的是一类非常具体的东西——把创意想法变成看得见摸得着的作…

2026/10/19 6:16:45 阅读更多 →
LuatOS-Air迁移LuatOS:API、调度、硬件失效模式全解析

LuatOS-Air迁移LuatOS:API、调度、硬件失效模式全解析

从LuatOS-Air把老脚本搬到LuatOS平台,十次有九次不是“跑起来有点小问题”,而是从第一行就开始报错:require失败、模块找不到、函数直接not found。我手头一个老项目就是这样,脚本复制过去,分分钟被打回原形。很多人以…

2026/10/19 6:15:44 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于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/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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 阅读更多 →