如果你的gdal版本是3.2.2及以上,那么只能:
from osgeo import gdal
ds = gdal.Open(data)
rows = ds.RasterYSize
cols = ds.RasterXSize
bandnum = ds.RasterCount
transform = ds.GetGeoTransform()
ds是一个对象,rows是影像的行,也是Y轴长度。对应的,cols则是影像的列,X轴的长度。bandnum代表影像的波段数。
transform是一个list,存储着栅格数据集的地理坐标信息。
#transform[0] /* top left x 左上角x坐标(经度)*/
#transform[1] /* w--e pixel resolution 东西方向上的像素分辨率*/
#transform[2] /* rotation, 0 if image is "north up" 如果北边朝上,地图的旋转角度*/
#transform[3] /* top left y 左上角y坐标(纬度)*/
#transform[4] ...
在半年前,我曾想过出一些关于编程、图像处理的视频教程。
在往常附上代码的以文本的形式,那如果要制作视频,那应该怎么制作呢?
我有认真思考过这个问题。
视频的本质就是多帧的图片叠加起来。
大致就是周星驰电影《苏乞儿》里那本武功秘籍,把书快速翻动,里面的小人就打一套功夫。
所以用python制作 一个类似 代码演示的视频,这是一件不难的事情。
写完了之后,我和朋友聊起这件事。
整体流程逻辑(大框架)代码主要分 4 个阶段:
① 初始化环境与加载字体
清空输出目录
找字体 → 成功用之,不成功就换 → 最后用默认
根据 Pygments 配色方案(dracula)获取各种 token 的颜色
② 按字符绘制代码,模拟打字动画核心逻辑:
代码内容 CODE_TO_ANIMATE → 清洗成干净的字符串
for char in clean_code: 每多一个字符,就重新画一张“当前代码”的截图
每生成一帧,文本要
用 PIL 绘制
按 token 上色(和 Python 语法高亮一样)
计算光标位置(像打字机一样挪动)
遇到换行 \n,会停顿一些帧(让动画更自然)
每一帧保 ...
这个现象,正是Python包管理设计中一个巧妙之处。简单来说,这主要归功于一种叫做“控制台脚本入口点”的机制。
当你 pip install xxx 的时候,实际上装了两个东西:
Python 包(库) 你在代码里 import xxx 用的就是它。
可执行脚本(命令行工具) 这类脚本会被 pip 自动丢到你的系统 PATH 里,所以你在终端能直接敲命令运行。
为什么能直接运行?比如你安装:
pip install jupyter
pip install gdal
然后你就能直接跑:
jupyter notebook
gdalinfo xxx.tif
原因是:
这些包的 setup.py / pyproject.toml 里写了 console_scripts
[project.scripts]
jupyter notebook = "jupyter:main"
意思是:安装后自动生成一个叫 jupyter notebook 的命令,执行时调用 jupyter.main()。
pip 会把这些生成的脚本放到:
Windows: Scripts/
Linux / Mac: ~/.l ...
程序员的世界里有一种非常神奇的生物——进度条。
它像是一个努力奔跑的小人,不断告诉你:“我在工作,我没有卡死,你放心。” 然而现实是: 许多进度条,其实根本不知道自己跑到了哪里。
没错,它们是假的。
01. 我遇到过真正的“纯假进度条”有一次我用 Java 调用同事写的 DLL(C++ 写的底层处理模块)。 需求很简单:
“要一个进度条,看着舒服点。”
问题来了——我根本拿不到 C++ 里循环的实时进度。
DLL 是个黑盒子。你只知道它开始了,但不知道它在哪个阶段、完成了多少、是不是卡了、是不是要挂了。
理论上可以让同事加一个回调函数,从 C++ 里主动往 Java 里推进度,但:
同事嫌麻烦
DLL 老代码不敢改
发布周期赶
风险大
所以最终我就只能……假装一切尽在掌控。
于是,Java 里写了一个“陪伴型进度条”:
DLL 开始 → 进度条从 0% 平滑升到 95%
DLL 返回结果 → 进度条从 95% 快速跳到 100%
DLL 卡住 → 条条继续动,程序假装没事
DLL 崩掉 → 用户最后只看到“哎呀,失败了”
进度条根本不知道 DLL 在干嘛,它只是尽到了一 ...
最近写遥感的东西比较少,今天写一写如何将wgs84影像直接转换为cgcs2000影像,我们直接上代码就好了。
说白了这东西没什么技术含量,都是调用gdal写好的接口,以后我们再讨论一下wgs84的tif和cgcs2000的tif本质上有什么区别,这块我后面再好好研究一下。
至于wgs84影像直接转换为cgcs2000影像的代码,我直接放后面。此外,我还想再唠上一唠。
诸如遥感数据处理的东西,其实是没有技术含量的,本质上都是调用gdal的东西,你把gdal的各个接口弄明白了就掌握这个数据处理的技能,唯手熟尔。真正有难度的是算法、加速处理速度。我其实很久不做数据数据处理的东西了,因为我有足够的代码积累,我建立了一个代码库,需要哪个模块,我直接搜索。
当然,这些代码库,随着这两年的公众号的文章更新,早已被我耗尽。不然我去年不可能做到高强度的更新。
我自认为部分的技术文章还是写的有一点水平的,哈哈我这种黄婆卖瓜自卖自夸行为真不要脸。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2025/10/26 21:30
# @Fil ...
在AI项目中,训练好模型只是第一步,下一步是部署到其他的环境中! 但PyTorch模型(.pth)在手机/服务器上跑不动?别急!ONNX格式来救场。
为什么必须转ONNX?3大痛点
问题
后果
ONNX解决
框架依赖
PyTorch跑不动TensorFlow环境
跨框架通用,到处跑!
部署慢
手机/边缘设备卡顿
体积小50%,速度快2倍
不稳定
不同硬件报错
标准化,一次转换到处用
除这三点之外,个人认为,我需要pth模型文件转换为ONNX文件的最大需求是:隐藏神经网络模型的细节,不需要把python源代码交付出去,这样做相当于简单伪装,很多事情都是防君子不防小人。
超简单3步转换法Step 1:准备模型# 加载你的.pth模型
model = YourModel() # 替换成你的模型类
checkpoint = torch.load('your_model.pth')
model.load_state_dict(checkpoint) # 加载权重
model.eval() # 评估模式
Step 2:创建假输入# 根据你的输入尺寸创建(比如 ...
普通人买新电脑一定要有一个心理价格预算,选电脑配件就按照这个预算去买。
一台新的台式电脑,最贵的就是显卡。在预算有限的前提下,普通人选显卡买英伟达的5060就够了。
很多东西都是一分钱一分货,显卡更是如此,等级森严。你不能把5060和5090比,毕竟价格不一样。同样的,你不能用2000元的安卓机和6000元的苹果机比,要比也是用6000元的安卓机和6000元的苹果机进行性能对比。
十月初,我趁着放假回老家,自购了一些电脑配件,花几个小时自装电脑。这算是我的第二台 台式电脑。
我不是装机老杆子,我是装机小白,装配新台式机的一大需求是,帮助我处理一些视频任务,并且要求新电脑要稳定,一年不关机的那种。
我的预算是5000元到7000元,我不要颜值,只要求稳定。
实际上,我的总花费不止6284元,因为我加购了一块4T的机械硬盘。
那么,电脑八大件我是怎么选的?
首先是 硬盘,硬盘我是 1tb 固态 + 4tb的机械,这配置够用5年。
内存条是2x16G,暂时够用。内存条是很难坏的,可当传家宝。
散热器稍微选个好点的,200元差不多了。毕竟我要长时间不关机。
而cpu和板子,我选的ADM的9 ...
python
未读方法1:克隆环境并删除旧环境这是最常用且安全的方法,适用于所有Conda版本:
克隆旧环境到新名称:
conda create --name new_name --clone old_name
这会创建一个名为new_name的新环境,内容与old_name环境完全相同
验证新环境:
conda info --envs
删除旧环境:
conda remove --name old_name --all
确保先退出旧环境(conda deactivate)再执行删除操作
方法2:使用conda rename命令从Conda 4.14版本开始,可以使用更简洁的命令:
conda rename -n old_name new_name
这个命令实际上是方法1的简化版,内部仍然使用克隆和删除的组合方式
验证修改结果无论使用哪种方法,修改完成后都应验证:
conda info --envs
以上方法中,方法1(克隆+删除)是最推荐的,因为它安全可靠且适用于所有情况
深度学习图像处理一般分为三个步骤:标签制作、模型训练、推理预测。
现在我准备做是目标检测,使用的框架是yolov8。
使用yolov8并不是代表落后,而是yolov8足够实用,你们当然可以使用最新的yolov26,在这一点上是无所谓的。
由于目标检测的篇幅很长,我打算分块写。所以今天的主题是标签制作。
别急哈,我们一步步来。
那么我们得先知道什么是yolov8标签格式。这时候问下大模型,快速过一哈。
以下是 YOLOv8 标签格式的详细说明:
1. 标签文件格式
文件扩展名:.txt
命名规则:标签文件的名称需要与对应的图像文件名一致(扩展名除外)。例如,图像文件为 image1.jpg,则标签文件为 image1.txt。
文件内容:每行表示图像中的一个目标对象,格式如下:
text
<class_id> <x_center> <y_center> <width> <height>
:目标类别的索引(从 0 开始的整数,基于数据集中的类别顺序)。
:边界框中心点的 x 坐标(归一化,范围 [0, 1],相对于图像宽度) ...






