Python图像处理首选:Pillow核心用法全解析
1. 为什么直到今天还在用Pillow1.1 轻量级方案中的最优解我最早接触Pillow是在一个给图片做批量预处理的小项目里。当时摆在面前的两个方向一个是OpenCV另一个是Pillow。OpenCV确实功能强可装包重、概念也多读取图片出来的默认颜色顺序还是BGR连老手都偶尔被绕进去。而Pillow的思路更贴近“人如何处理一张图”打开图片得到一个Image对象处理它保存它所有动作都围绕这张图本身展开。很多人对Pillow有误解觉得它只会做缩略图和格式转换。实际上它的图像处理能力相当完整ImageFilter做卷积滤波ImageDraw做矢量绘制ImageChops提供图像间的数学运算ImageEnhance负责亮度、对比度、饱和度调节。计算机图形学课程里经常遇到的灰度化、二值化、边缘提取、仿射变换、图像合成这些任务Pillow都能给出非常简洁的实现而且代码量通常比OpenCV少得多。轻量带来的实际红利更明显。项目里每多一个底层依赖出问题的地方就多一圈。Pillow装完就一个包pip install Pillow之后马上能用连外部库都不用编译。我在把脚本部署到服务器时requirements文件经常就一行Pillow省掉了大量环境兼容的麻烦。需要快速验证想法时这个优势会被放大得非常明显。1.2 它能覆盖哪些计算机图形学任务从我的使用经验看Pillow能干什么可以分成五个维度像素级操作读取和修改每个坐标的像素值做灰度化、二值化、颜色替换、直方图统计等基础操作。几何变换裁剪、缩放、旋转、翻转、仿射变换在数据增强和图像校正里高频出现。合成与绘制把多张图片叠加用ImageDraw绘制直线、多边形、椭圆和文字测试图形生成和标注工具都离不了它。滤波与增强高斯模糊、边缘检测、轮廓提取、亮度对比度饱和度调整本质是图像信号处理。格式解析与保存几十种图片格式的读写控制压缩质量、透明通道、ICC配置文件、EXIF信息还能直接操作动图帧。这五类任务几乎覆盖了常见图像批处理脚本、图形学小实验和网页端图片预处理的90%需求。无论你是要做数据集生成还是写一个带水印的批处理工具Pillow都是最快能跑通方案的库之一。文本后面会把这五大类逐层拆开把每个操作背后的原理和容易踩的坑都讲清楚。2. 核心模块拆解与初步上手2.1 Image是一切操作的中心用Pillow处理图像第一件事就是理解Image对象。它代表内存里的一张位图。读入用Image.open(path)保存用image.save(path)中间的过程就是对内存中的这张图做变换。刚上手时先看四个基础属性就够了mode颜色模式。L是8位灰度RGB、RGBA、CMYK分别对应不同色彩体系处理透明图像一定要先确认这一点。size宽度和高度的元组比如(1920, 1080)。format来源文件格式例如JPEG、PNG。如果是新建的空白图通常为None。info一个dict可能包含DPI、EXIF和更多元数据。创建空白图像同样常用。Image.new(RGB, (400, 300), (255, 255, 255))就是新建一张白底的RGB图。换成Image.new(RGBA, (400, 300), (0, 0, 0, 0))就得到一张透明画布后续可以把文字或形状画上去。新手最容易踩的一个坑Image.open默认是懒加载。对JPEG这种格式它不会立刻把所有像素读进内存只有当你访问像素或者调用load()/save()时数据才真正读取。所以如果先关掉文件再操作图像就会报“操作已关闭文件”的错误。稳妥写法是from PIL import Image with Image.open(source.jpg) as im: im.load() # 显式载入数据 # 后续处理或者直接im.copy()让图像从文件句柄里完全脱离。这个细节在批量处理成百上千张图的时候特别关键处理不干净轻则报AttributeError重则处理到一半程序崩溃。2.2 几个绕不开的辅助模块Image类之外的模块每一块对应一类功能ImageDraw画点、线、矩形、圆弧、多边形、文字是绘制和标注任务的主力。ImageFilter内置一系列滤波算法比如BLUR、GaussianBlur、FIND_EDGES、SHARPEN。ImageEnhance调节亮度、对比度、颜色、锐度参数范围通常是0到2。ImageChops图像与图像之间的加减乘除和逻辑运算适合做叠加、差值、遮罩。ImageOps一批快捷操作包括自动裁剪、适配尺寸、直方图均衡化。ImageFont加载TTF字体给绘制文字提供不同字号字体的支持。如果用绘画来类比Image是画布ImageDraw是画笔ImageFilter是滤镜ImageChops是图层混合工具。这样拆开来看遇到新需求时定位模块就特别快。例如要做一行带阴影的文字思路就是ImageDraw负责写字ImageFilter.GaussianBlur生成阴影ImageChops再加一层遮罩。也建议养成按需导入的习惯。有些人喜欢from PIL import *把一堆名字全导入命名空间。其中有些像Image、ImageDraw这种通用名字在大型项目里很容易和其他库的同名模块撞车排查起来相当浪费时间。3. 像素访问与批处理实操3.1 三种读取像素的方式对比图像处理的底层动作就是逐像素读写。Pillow提供了三种层级完全不同的接口用错了性能差距能到几十倍。第一种是load()返回的PixelAccess对象。它支持直接用坐标索引from PIL import Image im Image.open(demo.jpg).convert(RGB) pixels im.load() print(pixels[10, 20]) # 读出 (r, g, b) pixels[10, 20] (255, 0, 0) # 把这个点改成红色它适合局部像素访问比如区域修复、单点采样。但要注意Python的循环在整张大图上做全像素遍历时非常慢1920x1080就是两百万次循环每圈还要拆包再判断一次跑一次大概要几秒钟。所以你写的时候可以顺手但别把它当成大规模处理的方案。第二种是point()方法它把同样的操作下沉到C层面循环# 做阈值化的灰度图 im_gray im.convert(L) im_bin im_gray.point(lambda p: 255 if p 127 else 0)point()接受一个映射函数对每个像素执行颜色映射速度比普通的Python for循环快很多。它适合分段线性变换、查找表方式调整曲线、阈值分割这类“每个像素独立变换”的算法。第三种是借助numpy做向量化处理。这是我在批处理时最常用的import numpy as np arr np.array(im) arr[:, :, 0] np.clip(arr[:, :, 0] 30, 0, 255) # 红色通道整体提亮 im_new Image.fromarray(arr)把图像转成numpy数组后内存布局就是连续的像素矩阵加减乘除全部向量化性能远好于Python循环。很多做OpenCV的同事也会用这一套来跟Pillow协作因为numpy数组天然能被其它图像库的函数接收。3.2 模式转换与批量调色模式转换是Pillow最常用的操作之一。convert(L)把图转成灰度convert(RGBA)补充透明通道convert(P)转到调色板模式。理解convert不只是看颜色变化它其实改写了像素数据的存储方式和解释方式。比如一张JPEG图没有透明通道你用RGBA模式另存为PNG时透明通道就会以默认值填入图片看起来跟原图一样但内部已经多了一个通道。批量调色是模式转换里一个很实用的示例。我做过一个给多张图片统一加暖色调的小工具代码核心不过几行def warm_tone(path, output): with Image.open(path) as im: r, g, b im.split() # 分离三个通道 r r.point(lambda p: min(p * 1.1, 255)) b b.point(lambda p: int(p * 0.9)) out Image.merge(RGB, (r, g, b)) out.save(output)split()和merge()配对使用可以单独调整某个通道的强度这就是所有调色软件背后的基本逻辑。如果你处理的是RGBA图记得split会分出四个通道merge时也要传四个否则会报“通道数量不匹配”的错误。还有一个常用技巧convert支持带调色板的模式。保存PNG/WebP这类支持透明和调色板的格式时用convert(P, paletteImage.ADAPTIVE)可以把颜色数量压缩到256色以内文件体积能急剧缩小。但要注意的是如果后续还要做卷积或颜色运算调色板模式会限制通道访问要先转回RGB处理完再转出去。4. 裁剪、拼接与几何变换4.1 裁剪和应用边界裁剪是所有几何操作里最基础的一环。Pillow的crop方法接收的是(left, top, right, bottom)四元组表示裁剪框的左上角和右下角坐标。这里许多人头一次会写反right和bottom是开区间也就是说坐标为(100, 100, 200, 200)时实际裁剪范围是[100,200)这个区间不包含第200行和第200列。with Image.open(cat.jpg) as im: roi im.crop((100, 50, 700, 500)) # 裁出一个区域 roi.save(roi.jpg)裁剪出来的新图像和原图没有共享像素内存可以安全地对roi继续做操作。这点要注意因为你裁完再改roi原图不会跟着变。裁剪之后往往要粘贴回另一张图。paste方法可以使用目标坐标base Image.new(RGB, (800, 600), white) logo Image.open(logo.png) base.paste(logo, (50, 50)) # 左上角对齐如果logo带有透明通道直接paste会把透明区域当成纯黑色贴上去造成一块黑底。正确做法是给paste传一个mask参数base.paste(logo, (50, 50), logo) # 第三个参数仍是logo本身当作透明通道掩码第三个参数可以用RGBA图的alpha通道作为掩码也可以用灰阶图作为半透明蒙版。这个用法在合成场景里极其常见我几乎每个合成脚本都会用到。4.2 旋转、缩放与重采样旋转用rotate方法不过它有两个维度要考虑一是是否expand二是fillcolor。默认rotate会保持原尺寸旋转后四个角会被裁剪掉要保留完整内容就得expandTrue。旋转后露出的背景色默认是黑色对白色背景的图记得传fillcolor(255, 255, 255)。im_rotated im.rotate(45, expandTrue, fillcolor(255, 255, 255))缩放用resize它最重要的参数是resample。Pillow提供了NEAREST、BILINEAR、BICUBIC、LANCZOS四种重采样算法解释起来其实不复杂NEAREST最近邻速度快但锯齿严重适合像素风。BILINEAR双线性插值效果还行速度适中。BICUBIC双三次插值放大的平滑度不错。LANCZOS拉格朗日重采样质量通常最高但计算量最大。我个人的默认选择是LANCZOS。把一张大图缩小到缩略图或者把一张小图放大做检查LANCZOS都能给出较好的细节表现。不过如果你对速度敏感比如在视频流里做实时处理那建议降到BILINEAR肉眼差别在普通场景下并不大。仿射变换用transform或者ImageOps.scale来实现。比如做数据增强时随机翻转、旋转、错切的组合大量来自这里。实现一个随机镜像翻转代码只有一行im.transpose(Image.FLIP_LEFT_RIGHT)竖直翻转则换成FLIP_TOP_BOTTOM。这类操作不会改变像素内容处理速度也很快。5. 用ImageDraw画图不只是标注5.1 基本形状与坐标体系很多图形学验证都需要手动生成图ImageDraw就是为这件事设计的。先获取一个Draw对象然后调用各种绘制方法from PIL import Image, ImageDraw im Image.new(RGB, (400, 300), white) d ImageDraw.Draw(im) d.line((10, 10, 390, 290), fillred, width3) d.rectangle((50, 50, 150, 150), fillblue, outlineblack) d.ellipse((200, 80, 320, 220), fillgreen) d.polygon([(100, 240), (200, 180), (300, 240)], fillyellow)这里沿用了Pillow的坐标系约定左上角为原点x向右增大y向下增大。大部分人在第一次画椭圆时没意识到ellipse接收的其实是一个外接矩形范围bbox你传的坐标决定了椭圆形在整个画布内的位置和尺寸。有时候想画一个圆但宽度和高度设成了等长出来的却是正圆如果宽高不等出来的自然就是椭圆。矩形和椭圆的fill是填充色outline是边框色都支持颜色名称和十六进制字符串比如fill#FF8800。还有width参数控制线条粗细默认是1。线条连接处有个容易被忽略的点line只画直线想要一条平滑的折线只能用多个线段拼起来或者用polygon画多边形轮廓。Pillow的line不支持线帽样式所以线上端会出现平头。想要圆头端点目前没有原生接口只能靠多画几个圆点来模拟。这个局限在生成精密图形时要想办法规避。5.2 文字绘制与合成ImageDraw的text方法可以画文字但如果直接使用默认字体你会发现字号小得可怜因为这用的是Pillow内置的一个很小的位图字体。想在营销海报或验证码生成里用漂亮的字体必须加载系统字体文件from PIL import ImageFont font ImageFont.truetype(NotoSansCJK.ttf, 36) d.text((20, 20), 你好世界, fontfont, fill(0, 0, 0))加载字体文件时有两种方式指定一个绝对/相对路径或者用ImageFont.truetype直接传入字体名字。Windows系统一般自带msyh.ttcLinux上要单独装字体包。每次绘制文字都重新加载字体文件会拖慢性能所以长循环里应该把字体对象提到循环外面。文字绘制的一个进阶需求是计算文字实际占用的宽度和高度。Pillow提供了textbbox和textlength这两个方法在排版对齐时非常有用box d.textbbox((0, 0), 示例文字, fontfont) w box[2] - box[0] h box[3] - box[1]我在做自动给视频封面图加标题的程序时就是用textbbox来动态计算文字区域的尺寸然后把它居中排列。如果不做这个计算文字位置靠猜就会出现明显的偏移。6. 滤镜与图像增强6.1 内置滤镜与适用场景Pillow的ImageFilter模块是我觉得“最容易上手但最难深入”的部分因为每个滤镜背后都是一套卷积操作。内置滤镜包括ImageFilter.BLUR简单模糊。ImageFilter.GaussianBlur(radius)高斯模糊radius控制半径平滑效果更可控。ImageFilter.CONTOUR轮廓提取适合生成线稿或寻找边缘。ImageFilter.FIND_EDGES边缘检测直接把图像变成黑白边缘图。ImageFilter.SHARPEN锐化增强细节对比度。ImageFilter.EMBOSS浮雕效果图像会带上立体纹理。用法统一是img.filter(滤镜对象)。举个例子from PIL import Image, ImageFilter im Image.open(photo.jpg) gauss im.filter(ImageFilter.GaussianBlur(radius2)) edge im.filter(ImageFilter.FIND_EDGES)我发现很多人做边缘检测都喜欢直接FIND_EDGES但效果往往偏噪。建议流程是先转灰度图再做一次轻微高斯模糊去噪最后做边缘检测。这套组合的稳定度比直接调用单滤镜高很多。另一种更可控的方式是通过ImageFilter.Kernel自定义卷积核。自定义卷积核是这样用sharpen_kernel ImageFilter.Kernel(size(3, 3), kernel[0, -1, 0, -1, 5, -1, 0, -1, 0], scale1) im_edge im.filter(sharpen_kernel)卷积核里面的数组就是3x3矩阵的系数scale参数负责归一化可以理解为把计算结果除以scale。自己做锐化、浮雕、边缘检测都直接写kernel就行这样比固定滤镜更灵活也能理解算法内部发生了什么。6.2 增强与直方图均衡化除了滤波Pillow的ImageEnhance提供了亮度、对比度、颜色饱和度、锐度四个维度的调节。每个增强器都作为一个对象包装原图像之后用enhance(factor)返回处理结果from PIL import ImageEnhance enhancer ImageEnhance.Contrast(im) im_high enhancer.enhance(1.5) # 提高对比度到1.5倍 im_low enhancer.enhance(0.8) # 降低对比度factor为1时表示不变化所以这个API非常适合做参数化增强很多自动化测试里会根据需求随机在0.7到1.4之间调整。如果要做直方图均衡化ImageOps.equalize是现成的办法from PIL import ImageOps im_eq ImageOps.equalize(im.convert(L))均衡化能有效增强低对比度图像的可辨识度在扫描件去雾、旧影像修复的预处理阶段都很有效。处理彩色图时你可以先把RGB转成HSV或单独处理亮度通道再合并回来效果会更自然。这里有一个容易踩的坑GIF、PNG调色板模式P模式做不了滤波和增强。直接filter很多人会拿到一堆奇怪颜色甚至直接报错。正确流程是先convert(RGB)或convert(RGBA)处理完再按需要转回去。同样的规则也适用于ImageEnhance和ImageOps里的多数操作。7. 格式转换与保存细节7.1 常见格式的读写要点Pillow最让人省心的就是各种图片格式的读写。Image.open会自动根据文件头判断格式不需要你手动指定。保存时则根据扩展名自动选择编码器。使用时注意几个隐藏细节JPEG不支持透明通道如果直接把RGBA图save成JPG透明部分会被填充成透明近黑色结果看起来发黑。正确做法是先转成RGB再保存必要时把alpha通道拼到纯白背景上。PNG支持索引色、灰度、RGB、RGBA等多种子格式保存时默认会做无损压缩。如果不希望压缩save时可以加optimizeFalse。WebP综合体积和质量都很好Pillow能读写。保存WebP时可以通过quality参数控制质量默认是80。GIF动图的读取需要使用Image.open之后通过seek跳帧再逐帧保存保存动图时需要传入save_allTrue和duration参数。7.2 保存质量与元数据保存JPEG时quality参数控制的部分是压缩质量范围1到95。im.save(out.jpg, quality85, optimizeTrue)设置quality85和quality95在普通屏幕上根本分辨不出来但文件体积可以差好几倍。如果你是要放到网页或做素材85是一个很稳妥的起点。想要更进一步可以配合subsampling参数让色彩采样率降低也能缩小体积。PNG保存时如果原图原是RGB或RGBA一般不用关心压缩级别。但有些网页生成场景要求文件尽量小这时可以先把图片量化到256色以内再保存im_opt im.convert(P, paletteImage.ADAPTIVE, colors256) im_opt.save(opt.png)经过这步带透明通道的图标类图片体积经常能缩小一半以上。代价是颜色精度下降所以不适合照片类素材。元数据这块EXIF信息并不会自动保留。从图片A读取后转存到图片B默认会丢失EXIF。如果你在做一个图片压缩工具希望保留原拍摄信息需要在保存前把EXIF读取出来再传入exif im.info.get(exif) im.save(out.jpg, exifexif)同样DPI信息也可以保留dpi im.info.get(dpi) im.save(out.jpg, dpidpi)但这些信息存在封装格式里保存成不支持EXIF的格式时会自动丢弃。8. 常见问题与性能优化8.1 我遇到过的典型问题速查表我把这些年实际操作里碰到的高频问题整理成了表格按常见度排序问题现象最直接的原因处理办法打开就报OSError: cannot identify image file文件路径写错或格式损坏确认路径检查文件是否完整保存成JPG后透明区域变黑JPEG没有alpha通道先转RGB或合成到白底处理P模式图时颜色妖异P模式是调色板索引处理前convert(RGB)再继续大量循环时内存暴涨所有Image对象都没关闭用with或显式close及时释放paste透明LOGO后出现黑块paste没有传maskpaste(logo, pos, logo)加载字体时提示找不到文件字体路径或字体文件名有误用绝对路径确认一次ROI裁剪结果白边或黑边resize时边界外默认填充黑色传resample参数必要时先转RGBA滤波结果有明显环状振铃卷积半径过大减小radius或用多重小半径卷积代替这里还有两个隐蔽问题值得单独拎出来。一是模式继承问题。你从一张16位灰度PNG读取图模式可能是I;16此时直接调用convert(L)没问题但如果你直接对它做point或者filter因为模式的位深不是8位很多操作会失败或者输出黑图。处理重要数据集之前先print(im.mode)确认模式再动手。二是Pillow的懒加载和线程问题。Image.open之后不load就直接丢给别的线程处理有概率会在处理到一半时触发底层文件读取。如果是多线程批量任务建议在打开瞬间就统一load或copy避免竞态。8.2 几种可能改变性能的优化思路做批处理时绝不能一个循环里反复打开和保存文件那是磁盘IO的最大杀手。正确的姿势是把路径遍历完用列表收集文件路径然后统一进入处理流程一次性读取、批量修改、再统一写回。文件句柄用完要关闭或者用with语句。如果已经用Pillow写完了脚本还是慢建议按下面顺序排查检查是否有低效的嵌套Python循环能转成point或numpy就不用循环。检查是否频繁调用pasteresize组合paste大图时内存重排很耗时。像素操作的图不要用RGB模式如果目标只关注亮度尽早convert(L)三通道的数组处理总量是三倍。使用save()时对PNG传optimizeTrue会做更多压缩计算速度会变慢对性能优先的场合去掉它。在多核心机器上可以用多进程对一批文件并行处理。因为Pillow内部多数操作是单线程的多进程在文件数量大时收益明显。这里不用线程GIL会限制并行度。我自己写了一个批量压缩脚本之后直接将原来拖了十几秒的流程优化到了两秒以内。核心只有两条把像素处理的循环全部向量化并且把文件IO集中起来。这个方法在面对几百张图片时效果尤其显著也让我在后续介入更多图像处理需求时仍然愿意先把Pillow作为第一选择。

相关新闻

从文本引擎内存飙升到享元模式:C++状态拆分与缓存实战

从文本引擎内存飙升到享元模式:C++状态拆分与缓存实战

1. 从一次内存飙升说起:享元模式想解决的问题 事情发生在给一个文本渲染模块做优化的时候。当时模块里有一块非常朴素的功能:把一份上千页的文稿按页渲染成位图。功能跑起来没有任何问题,但一打开任务管理器我就愣住了,进程占用将…

2026/10/15 12:01:06 阅读更多 →
OpenShell实测:终端AI助手接入大模型,从命令生成到安全执行

OpenShell实测:终端AI助手接入大模型,从命令生成到安全执行

这个标题我看着亲切。命令行干了十来年,每次换新机器、新项目,总要重新记一堆参数和管道写法。OpenShell这个名字我第一眼就猜到了路数——把大模型的能力塞进终端,让 Shell 变成能听懂人话的助手,而不是冷冰冰的字符界面。我花了…

2026/10/15 12:00:05 阅读更多 →
C#与SQL Server学生信息管理系统开发全流程实战

C#与SQL Server学生信息管理系统开发全流程实战

1. 项目概述与实验要求拆解1.1 这个实验到底要做什么第一次拿到"C# SQL数据库实验大作业(学生信息管理)"这个题目时,很多人的第一反应是"又是学生管理系统,太老套了"。但说实话,这个题目之所以能成…

2026/10/15 12:00:05 阅读更多 →

最新新闻

Vue+ThinkPHP-Laravel构建二手车交易平台实战

Vue+ThinkPHP-Laravel构建二手车交易平台实战

1. 项目背景与核心价值 二手汽车交易市场近年来呈现爆发式增长态势,但传统线下交易模式存在信息不对称、交易流程繁琐、信任成本高等痛点。基于VueThinkPHP-Laravel的混合架构方案,恰好能解决行业数字化转型中的三个关键问题: 前端体验优化 …

2026/10/15 12:38:06 阅读更多 →
双端队列deque全解:从底层原理到单调队列与竞赛应用

双端队列deque全解:从底层原理到单调队列与竞赛应用

做算法题的人大概都经历过这样的场景:一道滑动窗口最大值的题,第一反应是priority_queue,塞进去跑一遍O(n log n)也AC了,但看着题解区那个O(n)的写法总觉得自己绕了远路。再过一阵子遇到DP优化,状态转移里带着一个&quo…

2026/10/15 12:38:06 阅读更多 →
【OpenClaw 本地实战 Ep.1】抛弃 Ollama?转向 LM Studio!Windows 下用 NVIDIA 显卡搭建 OpenClaw 本地极速推理服务

【OpenClaw 本地实战 Ep.1】抛弃 Ollama?转向 LM Studio!Windows 下用 NVIDIA 显卡搭建 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/15 12:38:06 阅读更多 →
八数码问题C语言BFS实现:从伪广搜到工业级最短路径求解

八数码问题C语言BFS实现:从伪广搜到工业级最短路径求解

简介:本资源是一份面向计算机专业本科生与算法初学者的八数码问题求解实践材料,聚焦宽度优先搜索(BFS)思想在经典状态空间搜索问题中的C语言实现。资源以详实的DOC文档形式呈现,完整包含算法原理剖析、结构体设计逻辑、…

2026/10/15 12:38:06 阅读更多 →
OV7670+SDRAM+VGA:FPGA实时图像链路设计与避坑指南

OV7670+SDRAM+VGA:FPGA实时图像链路设计与避坑指南

简介:这是一套面向FPGA与数字图像处理学习者的完整工程实践资料,围绕OV7670 CMOS摄像头、SDRAM缓存与VGA显示构建实时视频采集与显示链路,并集成中值滤波算法改善画质。项目覆盖IIC寄存器配置、SDRAM控制器读写、VGA时序驱动以及灰度图像去噪…

2026/10/15 12:38:06 阅读更多 →
从8k到1M上下文的通用化:利用Qwen-Agent的创新实践

从8k到1M上下文的通用化:利用Qwen-Agent的创新实践

/* 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 12:37:05 阅读更多 →

日新闻

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/15 9:49:14 阅读更多 →