Chemmy's Blog

chengming0916@outlook.com

一、概述

ZLMediaKit是一个基于C++11开发的高性能开源流媒体服务器,提供了强大的音视频处理能力。它支持多种流媒体协议,具有低延迟和高并发处理能力,适用于构建实时音视频传输和处理的应用,如直播、视频会议、视频监控等场景。

二、核心特性

2.1 技术特点

  1. 高性能架构

    • 基于C++11开发,避免使用裸指针,代码稳定可靠
    • 采用多路复用/多线程异步网络IO模式
    • 支持海量客户端连接,并发性能优越
  2. 协议支持

    • 支持RTSP、RTMP、HLS、HTTP-FLV、Websocket-FLV、GB28181、MP4
    • 支持协议间相互转换
    • 打通视频监控协议栈与直播协议栈
  3. 编码支持

    • 全面支持H265/H264/AAC/G711/OPUS
    • 支持动态转码
  4. 平台兼容

    • 支持Linux、macOS、iOS、Android、Windows全平台
    • 提供标准C API,可作为SDK供其他语言调用

2.2 性能优势

  • 低延迟:500毫秒内,最低可达100毫秒
  • 秒开体验:支持画面秒开
  • 高稳定性:代码经过长期大量稳定性、性能测试,已在线上商用验证

三、Linux环境安装

3.1 环境准备

1
2
3
4
5
6
# 安装编译工具
sudo apt-get install build-essential
sudo apt-get install cmake

# 安装依赖库(openssl必需)
sudo apt-get install libssl-dev -y

3.2 源码获取与编译

1
2
3
4
5
6
7
8
9
10
11
12
# 国内用户推荐从gitee下载
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit

# 初始化子模块(重要步骤)
git submodule update --init

# 构建项目
mkdir build
cd build
cmake ..
make -j4

3.3 运行服务

1
2
3
4
5
6
7
cd ZLMediaKit/release/linux/Debug

# 查看启动参数
./MediaServer -h

# 以守护进程模式启动
./MediaServer -d &

四、HTTP API使用

4.1 API概览

ZLMediaKit提供完善的RESTful API和WebHook,支持丰富的业务逻辑控制。

访问API列表

1
http://127.0.0.1/index/api/getApiList

常用API接口

  • /index/api/getServerConfig - 获取服务器配置
  • /index/api/getMediaList - 获取流列表

4.2 功能实现

通过HTTP API可以实现以下功能:

  1. 流媒体控制:启动和停止播放、推流
  2. 状态监控:获取连接数、运行状态、带宽使用情况
  3. 统计信息:获取码率、帧率、丢包率等统计数据
  4. 参数配置:设置网络端口、转码参数、录制参数
  5. 录制管理:控制录制和截图功能
  6. 日志查看:实时监控服务器运行状态

五、推流操作

5.1 FFmpeg推流示例

UDP推流

1
ffmpeg -re -i input.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

TCP推流

1
ffmpeg -re -i input.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream

循环推流

1
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

参数说明

  • -re:以流的方式读取
  • -stream_loop -1:无限循环读取视频源
  • -rtsp_transport tcp:使用TCP传输协议

5.2 实际应用示例

1
2
# TCP方式推流到远程服务器
ffmpeg -re -i input.mp4 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://114.115.170.245/live/test

六、点播功能实现

6.1 配置点播服务

ZLMediaKit的点播功能主要通过MP4文件实现:

  1. 文件放置:将MP4文件放置在www/record目录下
  2. 路径配置:可在config.ini中修改默认路径
  3. 访问方式:支持HTTP、RTSP、RTMP、HTTP-FLV、Websocket-FLV协议

6.2 点播访问示例

RTSP点播

1
rtsp://服务器IP:端口/record/文件名.mp4

HTTP点播

1
http://服务器IP:端口/文件相对路径

6.3 点播文件处理

1
2
# 拉取点播文件并保存到本地
ffmpeg -i rtsp://114.115.170.245/record/input.mp4 -c copy output.mp4

七、拉流与播放

7.1 使用FFplay播放

1
2
# 播放RTSP流
ffplay rtsp://127.0.0.1:8554/stream

7.2 使用VLC播放

安装VLC播放器后,通过”媒体”→”打开网络串流”输入流地址即可播放。

7.3 流录制保存

1
2
# 拉流保存为MP4文件(设置30秒超时)
ffmpeg -stimeout 30000000 -i rtsp://127.0.0.1:8554/stream -c copy output.mp4

注意-stimeout参数必须放在RTSP地址之前,单位为微秒。

八、音频设备操作

8.1 查看音频设备

1
2
3
4
5
6
7
8
# 查看音频设备列表
aplay -l

# 查看已检测的音频设备
cat /proc/asound/cards

# 查看音频输出设备
pactl list short sinks

设备标识说明

  • hw:0:第一个音频设备
  • hw:1:第二个音频设备
  • default:默认音频设备

8.2 音频录制与播放

录音操作

1
2
3
4
5
# 基本录音
ffmpeg -f alsa -i hw:0 out.wav

# 录音并转码为MP3
ffmpeg -f alsa -i default -c:a libmp3lame output.mp3

播放操作

1
2
3
4
5
# 使用aplay播放
aplay out.wav

# 使用FFmpeg播放
ffmpeg -i nf.mp3 -f alsa hw:0

8.3 设备配置脚本

麦克风输入配置mic_in_config.sh):

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
# 设置捕获音量
amixer cset name='Capture Volume' 63,63

# PCM设置
amixer sset 'PCM Playback' on
amixer sset 'Playback' 256

# 耳机设置
amixer sset 'Headphone Playback ZC' on
amixer sset Headphone 125,125

线路输入配置line_in_config.sh):

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
# 设置捕获音量
amixer cset name='Capture Volume' 63,63

# PCM设置
amixer sset 'PCM Playback' on
amixer sset 'Playback' 256

# 耳机设置
amixer sset 'Headphone Playback ZC' on
amixer sset Headphone 125,125

九、服务推拉流实例

9.1 音频推流

1
2
# 向服务器推送音频流
ffmpeg -re -i nf.mp3 -acodec aac -f rtsp -rtsp_transport tcp rtsp://114.115.170.245/live/test

9.2 音频拉流播放

1
2
# 从服务器拉取音频流并播放
ffmpeg -i rtsp://114.115.170.245/live/test -f alsa hw:0

十、系统管理

10.1 查看端口占用

1
2
3
4
5
# 查看指定端口占用情况
lsof -i:8000

# 使用netstat查看
netstat -tunlp | grep 8000

netstat参数说明

  • -t:显示TCP相关选项
  • -u:显示UDP相关选项
  • -n:显示数字地址
  • -l:仅显示监听状态
  • -p:显示进程名

10.2 进程管理

1
2
3
4
5
# 查找占用端口的进程
lsof -i:端口号

# 结束指定进程
kill -9 进程ID

十一、总结

ZLMediaKit作为一个功能强大的开源流媒体服务器,具有以下优势:

  1. 协议全面:支持主流流媒体协议及协议转换
  2. 性能优越:低延迟、高并发、跨平台
  3. 易于集成:提供完善的API和SDK接口
  4. 稳定可靠:经过大量线上环境验证

通过本文介绍的安装配置、推拉流操作、点播功能实现等内容,用户可以快速上手使用ZLMediaKit构建自己的流媒体服务系统。


注意事项

  1. 编译时务必执行git submodule update --init
  2. 生产环境建议配置防火墙和安全策略
  3. 定期更新版本以获取安全修复和性能优化

参考资源

一、计算机视觉:改变世界的技术

计算机视觉(Computer Vision,CV)是人工智能和机器学习领域中最激动人心的分支之一,它让机器能够“看懂”世界。如今,CV技术已深度融入我们的日常生活和前沿科研:

核心应用场景

  • 自动驾驶:感知环境、识别障碍物和交通标志
  • 医学影像分析:辅助疾病诊断和病理研究
  • 社交媒体:人脸识别、智能标注和内容审核
  • 工业制造:产品质量检测、缺陷识别
  • 安防监控:异常行为检测、人脸识别门禁
  • 增强现实:虚拟与现实的融合交互

二、计算机视觉任务与数据需求

要训练高质量的CV模型,充足且高质量的数据是必不可少的。不同的CV任务需要不同类型的数据标注:

CV任务 数据需求 应用示例
目标检测 边界框标注 自动驾驶中的车辆识别
图像分割 像素级标注 医学影像中的器官分割
图像分类 类别标签 商品图片分类
姿态估计 关键点标注 运动分析、动作识别
图像描述 文本描述 为视障人士生成图像描述

数据挑战:训练CV模型是数据密集型任务,通常需要成千上万甚至数百万个标注样本。没有足够的高质量数据,模型将无法产生可靠的结果。

三、十大优质计算机视觉数据集推荐

1. ObjectNet:无偏见数据的典范

特点:由MIT-IBM沃森AI实验室开发,专门解决数据集偏见问题

  • 创建方式:通过众包收集图像,而非从互联网抓取
  • 质量控制:严格审查背景、光照、旋转等因素的多样性
  • 规模:50,000张图像,涵盖313个对象类别
  • 优势:近乎完美的干净数据,同时包含不常见的视角和透视

2. 澳鹏(Appen)数据集:国际项目的首选

特点:提供超过250个可授权的预标注数据集

  • 覆盖范围:音频、语音、视频、图像、文本等多种类型
  • 语言支持:80多种语言与方言,870万个单词
  • 定制服务:如无合适数据集,可提供数据采集和标注服务
  • 全球网络:与超过100万名承包商合作,确保数据多样性

3. VisualData:目标识别的最佳选择

特点:专注于目标识别任务的图像数据

  • 数据来源:监控大学实验室、社交媒体等渠道的新发布数据集
  • 搜索功能:可按发布日期、主题或关键词筛选
  • 定位:为特定CV用例寻找合适的图像数据

4. Graviti:共享与发现平台

特点:开放的社区数据集共享平台

  • 规模:1000多个高质量开源数据集
  • 覆盖:50多种应用场景,10多种数据格式
  • 社区:企业、研究团队和个人开发者共同贡献和维护

5. ImageNet:规模与影响力的标杆

特点:最大、最知名的开源数据集之一

  • 规模:超过1400万张手动标注图像
  • 组织方式:按WordNet层次结构组织
  • 标注:对象级边界框标注
  • 影响:推动了深度学习在CV领域的突破

6. Roboflow:格式灵活的开发友好平台

特点:简化CV模型构建流程

  • 数据格式:支持VOC XML、COCO JSON、YOLOv3、TFRecords等多种格式
  • 领域覆盖:动物、棋类游戏、自动驾驶、医疗、热成像、无人机图像等
  • 特色:提供合成数据组成的预标注数据集

7. GitHub和Kaggle:最新与冷门数据的宝库

特点:社区驱动的数据共享平台

  • GitHub:开发者共享代码和数据的首选平台
  • Kaggle:数据科学家竞赛和数据集分享社区
  • 优势:能找到最新发布或特定领域的小众数据集
  • 网络价值:可与其他数据科学家建立联系,获取数据建议

8. Kinetics:人物交互视频数据集

特点:专注于人类动作的视频数据集

  • 规模:650,000个视频剪辑,涵盖700个人类动作类型
  • 内容:人与物、人与人的交互
  • 规格:每个剪辑约10秒,均有详细标注
  • 应用:动作识别、行为分析

9. IMDB-WIKI:人脸属性识别数据集

特点:最大的人脸属性公开数据集

  • 规模:523,051张名人图像
  • 来源:维基百科和IMDB
  • 标注:包含姓名、性别、年龄
  • 应用:年龄估计、性别识别、人脸验证

10. Berkeley DeepDrive:自动驾驶专用数据集

特点:加州大学伯克利分校为自动驾驶研究创建

  • 规模:超过10万个视频序列
  • 标注类型:目标边界框、驾驶区域、实例分割等
  • 目标:使自动驾驶CV模型的训练更易获取和公平

四、数据集质量评估指南

选择数据集时,必须进行严格的质量评估:

4.1 关键评估维度

  1. 来源可信度:数据是否来自可靠、权威的来源?
  2. 错误可修复性:能否发现并修正数据中的潜在错误?
  3. 完整性与代表性:数据是否全面覆盖了目标场景?
  4. 偏见检测:数据是否存在明显的选择偏见或分布偏见?

4.2 数据偏见识别与缓解

数据偏见是CV模型准确性的主要威胁之一。常见偏见类型包括:

  • 场景偏见:图像背景过于理想化,缺乏真实世界的复杂性
  • 视角偏见:所有图像都采用相似的拍摄角度
  • 地理偏见:数据主要来自特定地区,缺乏全球多样性
  • 季节性偏见:只包含特定季节的场景

缓解策略

  • 增加数据审查人员的多样性
  • 确保数据覆盖所有可能的真实场景
  • 使用合成数据补充现实数据的不足

4.3 数据量需求估算

虽然“数据越多越好”是普遍原则,但合理的数据量范围是:

  • 基础模型:数千到数万个样本
  • 复杂任务:数十万到数百万个样本
  • 关键考虑:任务复杂度越高,所需数据量越大

五、成品数据集的企业价值

预标注数据集为企业带来了显著优势:

5.1 成本与效率优势

  • 资源节约:企业可将资源集中于模型开发和优化,而非数据收集
  • 时间缩短:跳过耗时的数据采集和标注阶段
  • 质量保证:专业团队标注的数据通常质量更高、一致性更好

5.2 创新加速

  • 降低门槛:使更多企业能够尝试和应用CV技术
  • 快速迭代:基于高质量数据,模型训练和优化周期缩短
  • 知识共享:开源数据集促进了整个领域的技术进步

六、数据集获取与使用最佳实践

6.1 获取正确数据的步骤

  1. 明确需求:确定所需的数据类型、格式和规模
  2. 多渠道搜索:结合专业平台(如澳鹏、Graviti)和社区平台(如GitHub、Kaggle)
  3. 质量评估:按照第4部分的指南进行严格评估
  4. 法律合规:确保数据使用符合版权和隐私法规

6.2 数据集组合策略

对于复杂项目,单一数据集可能不足。建议:

  • 主数据集:选择与任务最匹配的高质量数据集
  • 补充数据集:使用其他数据集增加多样性和覆盖范围
  • 合成数据:在真实数据不足时,使用生成式AI创建合成数据

6.3 持续数据管理

  • 版本控制:跟踪数据集的变化和更新
  • 质量监控:定期评估数据质量,及时修复问题
  • 偏见监测:持续监控模型性能,检测可能的数据偏见

七、未来趋势与展望

7.1 数据集发展动向

  • 规模增长:数据集规模持续扩大,覆盖更多场景和类别
  • 质量提升:标注精度和一致性不断提高
  • 多样性增强:更加注重地理、文化、场景的多样性
  • 多模态融合:结合图像、视频、文本、音频的多模态数据集

7.2 技术驱动创新

  • 自动标注:AI辅助标注技术提高效率和一致性
  • 合成数据:生成式AI创建逼真的训练数据
  • 联邦学习:在保护隐私的前提下,利用分布式数据训练模型

八、总结与建议

8.1 数据集选择决策框架

考虑因素 关键问题 建议
任务匹配度 数据集是否覆盖目标场景? 选择专门针对特定任务的数据集
数据质量 标注是否准确、一致? 优先选择专业团队标注的数据集
规模需求 数据量是否足够? 根据任务复杂度确定最低数据量
偏见风险 数据是否存在明显偏见? 选择注重多样性的数据集
法律合规 使用是否合法? 确保有明确的使用许可

8.2 给企业的实用建议

  1. 从小开始:先使用小型高质量数据集验证概念
  2. 逐步扩展:随着项目进展,逐步增加数据量和多样性
  3. 内外结合:结合公开数据集和自有数据,获得最佳效果
  4. 持续学习:关注数据集领域的最新发展,及时采用新技术

8.3 给研究者的建议

  1. 贡献回馈:在使用公开数据集的同时,考虑贡献自己的数据或改进
  2. 严谨评估:在论文中详细说明数据集的选择依据和质量评估
  3. 偏见声明:明确说明数据集的局限性,包括可能的偏见

一、引言:Python 在人工智能领域的核心地位

Python 已成为人工智能和机器学习领域的首选编程语言,这得益于其简洁的语法、丰富的生态系统和强大的社区支持。Python 拥有众多专门为 AI 开发设计的库和框架,能够覆盖从数据处理、模型训练到部署应用的全流程。

本文耗时近3周,系统整理了47个最核心、最实用的 Python 人工智能库,涵盖以下七大领域:

  1. Python 核心科学计算库
  2. 机器学习框架
  3. 深度学习框架
  4. 分布式深度学习库
  5. 自然语言处理工具
  6. 计算机视觉库
  7. 生物与化学信息学工具

二、Python 核心科学计算库

1. NumPy

官网numpy.org.cn/
特点:Python 科学计算的基础库,提供高性能的多维数组对象和数学函数。

  • 核心功能:支持大量的维度数组与矩阵运算
  • 生态系统:通常与 SciPy、Matplotlib 一起使用,构成强大的科学计算环境
  • 应用场景:数据科学、机器学习的基础数值计算

2. SciPy

官网scipy.org/
特点:基于 NumPy 的高级科学计算库,提供更多数学算法和工具。

  • 模块涵盖:最优化、线性代数、积分、插值、信号处理、图像处理等
  • 定位:NumPy 的补充,专注于科学和工程计算
  • 协同工作:与 NumPy 协同解决复杂数学问题

3. Pandas

官网pandas.pydata.org/
特点:强大的数据分析和处理库,基于 NumPy 构建。

  • 数据操作:支持数据清洗、转换、合并、分组等操作
  • 文件支持:可读写 CSV、JSON、SQL、Excel 等多种格式
  • 应用领域:金融分析、统计学、学术研究等

4. statsmodels

官网statsmodels.org/
特点:专注于统计建模和假设检验的库。

  • 模型支持:线性模型、广义线性模型、时间序列分析、方差分析等
  • 统计测试:提供丰富的统计检验方法
  • 定位:传统频率学派统计方法的 Python 实现

三、机器学习框架

5. Scikit-learn

官网scikit-learn.org.cn/
特点:Python 机器学习的事实标准,API 设计统一且文档完善。

  • 算法覆盖:分类、回归、聚类、降维等完整机器学习算法
  • 易用性:一致的 API 设计,学习曲线平缓
  • 社区:拥有最活跃的机器学习社区

6. XGBoost

官网xgboost.ai/
特点:优化的分布式梯度提升框架,在竞赛和工业界广泛使用。

  • 性能:高效、灵活、可移植
  • 分布式:支持 Hadoop、Spark 等分布式环境
  • 应用:处理数十亿样本的大规模数据

7. LightGBM

官网lightgbm.readthedocs.io
特点:微软开发的梯度提升框架,专注于速度和效率。

  • 优势:更快的训练速度、更低的内存消耗
  • 设计:基于直方图的决策树算法
  • 适用:海量数据的高效处理

8. CatBoost

官网catboost.ai/
特点:Yandex 开发的梯度提升库,特别擅长处理类别特征。

  • 自动处理:无需对类别特征进行独热编码
  • 鲁棒性:对超参数设置不敏感
  • 应用:推荐系统、搜索排名等

9. ELI5

官网eli5.readthedocs.io
特点:机器学习模型解释和可视化工具。

  • 功能:解释黑盒模型的预测结果
  • 支持框架:Scikit-learn、XGBoost、LightGBM 等
  • 价值:增强模型的可解释性和可信度

10. Theano

官网pypi.org/project/Theano
特点:早期的数值计算库,启发了现代深度学习框架。

  • 功能:定义、优化、求值数学表达式
  • 影响:为 TensorFlow 等框架奠定基础
  • 现状:已停止主要开发,但仍有历史价值

11. PyBrain

GitHubgithub.com/pybrain/pybrain
特点:模块化的机器学习库,便于快速原型开发。

  • 设计:将算法封装为可复用的 Module
  • 灵活性:易于组合和扩展
  • 适用:研究和教学场景

12. Shogun

GitHubgithub.com/shogun-toolbox/shogun
特点:历史悠久的通用机器学习工具箱(1999年创建)。

  • 语言支持:通过 SWIG 支持 Java、Python、R、Julia 等10多种语言
  • 重点:统一的大规模机器学习
  • 算法:支持分类、回归、聚类等多种任务

四、深度学习框架

13. Chainer

官网chainer.org/
特点:灵活的深度学习框架,支持动态计算图。

  • 创新:最早提出“Define-by-Run”理念
  • 灵活性:便于调试和动态网络结构
  • 影响:启发了 PyTorch 的设计

14. PyLearn2

GitHubgithub.com/lisa-lab/pylearn2
特点:基于 Theano 的机器学习研究库。

  • 定位:学术研究和实验
  • 基础:大部分功能在 Theano 顶层实现
  • 现状:已较少维护

15. Hebel

官网oschina.net/p/hebel/
特点:通过 PyCUDA 使用 GPU 加速的深度学习库。

  • 加速:利用 CUDA 实现 GPU 加速
  • 模型:实现了几类重要的神经网络模型
  • 现状:项目活跃度较低

16. Neurolab

官网pythonhosted.org/neurolab/
特点:简单而强大的 Python 神经网络库。

  • 易用性:API 设计简单直观
  • 功能:包含多种神经网络类型和训练算法
  • 适用:教学和小型项目

17. TensorFlow

官网tensorflow.org/
特点:谷歌开发的工业级深度学习框架,生态系统完整。

  • 架构:基于数据流图的计算框架
  • 部署:支持服务器、移动端、浏览器等多种平台
  • 生态:拥有庞大的社区和丰富的工具链

18. PyTorch

官网pytorch.org/
特点:Meta(原 Facebook)开发的深度学习框架,以灵活性和易用性著称。

  • 动态图:支持动态计算图,便于调试
  • Pythonic:API 设计符合 Python 习惯
  • 研究友好:深受学术界和研究人员喜爱

19. Keras

官网keras.io/zh/
特点:高级神经网络 API,可运行在 TensorFlow、CNTK、Theano 之上。

  • 易用性:API 简洁直观,学习成本低
  • 模块化:完全模块化,易于扩展
  • 生产就绪:支持多 GPU,可轻松部署

20. Caffe2

官网caffe2.ai/
特点:轻量级、模块化、可扩展的深度学习框架。

  • 性能:速度极快,适合生产环境
  • 移动端:对移动设备优化良好
  • 现状:已并入 PyTorch

五、分布式深度学习库

21. dist-Keras

官网joerihermans.com/work/dist-keras/
特点:在 Apache Spark 和 Keras 之上构建的分布式深度学习框架。

  • 分布式:支持数据并行和模型并行
  • 优化:专注于分布式优化算法
  • 设计:易于实现新的分布式优化器

22. elephas

官网pypi.org/project/elephas/
特点:将 Keras 模型衔接到 Spark 集群的第三方库。

  • 集成:在 Spark 上分布式训练 Keras 模型
  • 易用:保持 Keras 的简洁 API
  • 场景:需要处理海量数据的深度学习任务

23. Spark-Deep-Learning

官网databricks.github.io/spark-deep-learning/
特点:Databricks 提供的 Spark 深度学习扩展。

  • API:提供高级 API,代码简洁
  • 扩展性:利用 Spark 的分布式能力
  • 功能:图像处理、迁移学习等

24. MXNet

官网mxnet.apache.org/
特点:亚马逊支持的分布式深度学习框架。

  • 混合编程:支持符号式和命令式编程
  • 效率:设计注重效率和灵活性
  • 多语言:支持 Python、R、Julia、Scala 等

25. Sklearn-theano

GitHubgithub.com/sklearn-theano/sklearn-theano
特点:将 Theano 网络作为 Scikit-learn 特征提取器。

  • 集成:在 Scikit-learn 流程中使用深度学习特征
  • 用途:特征提取而非端到端训练
  • 价值:结合传统机器学习和深度学习优势

六、自然语言处理工具

26. NLTK

官网nltk.org/
特点:自然语言处理的标准工具包,功能全面。

  • 功能:分词、词性标注、句法分析等
  • 资源:包含大量语料库和预训练模型
  • 教学:广泛用于教学和研究

27. SpaCy

官网spacy.io/
特点:工业级自然语言处理库,速度快、精度高。

  • 性能:用 Cython 实现,处理速度快
  • 预训练:提供多种语言的预训练模型
  • 生产就绪:适合实际应用部署

28. PKUSeg

官网pypi.org/project/pkuseg/
特点:北京大学开发的高准确度中文分词工具。

  • 准确率:在不同领域数据上表现优异
  • 多领域:支持新闻、医药、旅游等多个领域
  • 易用:API 简单直观

29. Gensim

官网radimrehurek.com/gensim/
特点:专业的主题建模和文档相似度计算库。

  • 算法:LDA、LSI、Word2Vec、Doc2Vec 等
  • 效率:处理大规模文本数据
  • 应用:文本挖掘、信息检索

30. Stanford CoreNLP

官网stanfordnlp.github.io/CoreNLP/
特点:斯坦福大学自然语言处理工具的 Python 接口。

  • 功能全面:分词、词性标注、命名实体识别、句法分析等
  • 精度高:基于斯坦福多年的研究成果
  • 多语言:支持多种语言处理

31. TextBlob

官网pypi.org/project/textblob/
特点:简单易用的文本处理库,适合入门。

  • 功能:情感分析、词性标注、文本翻译等
  • 易用:API 极其简单
  • 基础:基于 NLTK 和 Pattern

32. StanfordNLP

GitHubgithub.com/stanfordnlp/stanfordnlp
特点:斯坦福 NLP 组的官方 Python 库。

  • 最新研究:包含斯坦福最新的 NLP 研究成果
  • 预训练:提供多种语言的预训练模型
  • 功能:依存分析、命名实体识别等

七、计算机视觉库

33. OpenCV

官网opencv.org/
特点:计算机视觉和图像处理的事实标准。

  • 算法:实现大量经典计算机视觉算法
  • 跨平台:支持 Windows、Linux、Android、macOS
  • 语言:C++ 实现,提供 Python 接口

34. Scikit-Image

官网scikit-image.org/
特点:基于 NumPy 的图像处理算法集合。

  • 算法:图像滤波、分割、特征提取等
  • 设计:API 与 Scikit-learn 风格一致
  • 易用:适合 Python 生态系统新手

35. Pillow/PIL

官网pillow.readthedocs.io
特点:Python 图像处理的标准库。

  • 功能:图像打开、保存、转换、处理
  • 格式:支持大量图像文件格式
  • 继承:PIL 的现代分支,支持 Python 3

36. SimpleCV

官网simplecv.org/
特点:简化计算机视觉开发的框架。

  • 封装:将 OpenCV 等库封装为更简单的 API
  • 易用:隐藏图像处理的底层细节
  • 快速开发:适合原型开发和教学

37. Mahotas

官网pypi.org/project/mahotas/
特点:快速图像处理库,部分算法用 C++ 实现。

  • 性能:处理速度较快
  • 算法:包含大量图像处理算法
  • 专注:专注于算法实现而非易用性

38. ITK

官网itk.org/
特点:医学图像分割和配准的专业工具包。

  • 专业领域:专注于医学影像处理
  • 算法:分割、配准、可视化等
  • 应用:医疗影像分析和研究

39. Pgmagick

官网pythonhosted.org/pgmagick/
特点:GraphicsMagick 的 Python 包装器。

  • 格式:支持 88 种主要图像格式
  • 功能:图像读取、写入、转换
  • 基础:基于成熟的 GraphicsMagick 库

40. Pycairo

官网cairographics.org/pycairo/
特点:2D 图形渲染库。

  • 功能:矢量图形绘制
  • 质量:生成高质量图形
  • 应用:图表绘制、图形界面

41. Fastai

官网fast.ai/
特点:简化深度学习应用的高级库。

  • 易用:提供一致的 API 接口
  • 领域:计算机视觉、自然语言处理、表格数据等
  • 教学:配套优秀的深度学习课程

42. imutils

官网pypi.org/project/imutils/
特点:OpenCV 的便利函数集合。

  • 功能:图像平移、旋转、缩放、骨架化等
  • 目的:简化 OpenCV 的常见操作
  • 价值:减少重复代码编写

43. PyTorchCV

官网pytorch-cn.readthedocs.io
特点:基于 PyTorch 的计算机视觉模型库。

  • 模型:图像分类、目标检测、语义分割等
  • 实现:常见计算机视觉模型的 PyTorch 实现
  • 研究:适合研究和实验

八、生物与化学信息学工具

44. BioPython

官网biopython.org/
特点:计算生物学的标准 Python 工具包。

  • 功能:序列分析、结构生物学、种群遗传学等
  • 格式:支持 FASTA、GenBank 等生物信息学格式
  • 数据库:程序化访问 NCBI 等在线数据库

45. Dash Bio

官网dash.plot.ly/dash-bio
特点:用于生物信息学和药物开发的交互式可视化库。

  • 可视化:序列比对、蛋白质结构、基因组浏览器等
  • 交互:基于 Dash 构建,支持交互式 Web 应用
  • 应用:生物信息学研究和教育

46. RDKit

官网rdkit.org/
特点:化学信息学的开源工具包。

  • 功能:分子操作、描述符生成、相似性计算
  • 应用:药物发现、化学信息学
  • 可视化:2D 和 3D 分子展示

九、总结与选型建议

9.1 学习路径建议

  1. 初学者:从 NumPy、Pandas、Matplotlib 开始,掌握数据基础
  2. 机器学习入门:学习 Scikit-learn,理解机器学习基本概念
  3. 深度学习入门:选择 Keras 或 Fastai,快速上手深度学习
  4. 深入研究:根据需求选择 TensorFlow 或 PyTorch
  5. 专业领域:根据应用方向选择相应的专业库

9.2 框架选择指南

需求场景 推荐框架 关键理由
快速原型 Keras / Fastai API 简洁,学习成本低
生产部署 TensorFlow 生态系统完整,工具链成熟
学术研究 PyTorch 动态图,调试方便,社区活跃
传统机器学习 Scikit-learn 算法全面,文档优秀
自然语言处理 SpaCy 工业级,速度快,精度高
计算机视觉 OpenCV 功能全面,社区庞大
分布式训练 MXNet / Spark-Deep-Learning 分布式支持好

9.3 最佳实践

  1. 保持更新:AI 领域发展迅速,定期关注库的更新和新特性
  2. 社区参与:积极参与开源社区,贡献代码或文档
  3. 组合使用:根据项目需求,合理组合多个库的优势
  4. 性能优化:对于生产环境,关注内存使用和计算效率
  5. 可复现性:使用版本控制,确保实验的可复现性

Python 的人工智能生态系统仍在快速发展中,新的库和工具不断涌现。掌握这些核心库,不仅能够提升开发效率,还能更好地理解人工智能技术的底层原理。建议读者根据自身需求,选择最适合的工具组合,在实践中不断学习和成长。

一、问题描述

在Ubuntu系统中,当执行nvidia-smi命令时,可能会遇到以下错误:

1
2
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.
Make sure that the latest NVIDIA driver is installed and running.

常见触发场景

  1. 系统内核升级:Linux内核更新后,原有的NVIDIA驱动与新内核不兼容
  2. 系统重启后:驱动加载失败或内核模块未正确加载
  3. 驱动版本不匹配:显卡型号与驱动版本不兼容
  4. 系统软件更新:某些系统更新可能影响驱动正常运行

二、问题诊断步骤

2.1 检查驱动状态

1
2
3
4
5
6
7
8
# 检查nvidia-smi命令
nvidia-smi

# 检查CUDA编译器
nvcc -V

# 查看已安装的NVIDIA驱动版本
ls /usr/src | grep nvidia

2.2 常见诊断结果

  1. 驱动存在但无法通信nvcc -V显示驱动版本,但nvidia-smi失败
  2. 驱动完全丢失:两个命令都失败
  3. 内核模块未加载:驱动文件存在但内核模块未正确加载

三、解决方案

3.1 使用DKMS重新安装驱动(推荐)

适用情况:驱动文件存在,但内核升级导致驱动失效

步骤1:安装DKMS工具

1
2
sudo apt-get update
sudo apt-get install dkms

步骤2:查看驱动版本

1
2
3
# 查看已安装的NVIDIA驱动版本
ls /usr/src | grep nvidia
# 示例输出:nvidia-450.57

步骤3:重新安装驱动

1
2
# 使用DKMS重新安装驱动
sudo dkms install -m nvidia -v 450.57

参数说明

  • -m nvidia:指定模块名称为nvidia
  • -v 450.57:指定驱动版本号(替换为您的实际版本)

步骤4:验证修复

1
2
3
4
5
# 重新加载内核模块
sudo modprobe nvidia

# 检查驱动状态
nvidia-smi

3.2 手动加载内核模块

适用情况:驱动已安装但内核模块未加载

1
2
3
4
5
6
7
8
9
# 加载NVIDIA内核模块
sudo modprobe nvidia

# 检查模块是否加载
lsmod | grep nvidia

# 如果加载失败,尝试重建模块依赖
sudo depmod -a
sudo modprobe nvidia

3.3 检查内核版本兼容性

1
2
3
4
5
6
7
8
# 查看当前内核版本
uname -r

# 查看已安装的内核
dpkg --list | grep linux-image

# 查看NVIDIA驱动支持的内核版本
cat /usr/src/nvidia-*/dkms.conf | grep PACKAGE_VERSION

四、进阶解决方案

4.1 修复GRUB引导配置

适用情况:系统启动时选择了不兼容的内核

1
2
3
4
5
6
7
8
9
# 编辑GRUB配置
sudo nano /etc/default/grub

# 修改以下配置(示例)
GRUB_DEFAULT=0 # 选择默认启动的内核
GRUB_SAVEDEFAULT=false

# 更新GRUB配置
sudo update-grub

4.2 重新安装NVIDIA驱动

如果上述方法无效,可能需要重新安装驱动:

1
2
3
4
5
6
7
8
9
10
11
12
# 卸载现有驱动
sudo apt-get purge nvidia-*

# 清理残留文件
sudo apt-get autoremove

# 重新安装驱动(以450.57为例)
sudo apt-get install nvidia-driver-450

# 或使用官方.run文件安装
sudo chmod +x NVIDIA-Linux-x86_64-450.57.run
sudo ./NVIDIA-Linux-x86_64-450.57.run

4.3 使用NVIDIA官方仓库

1
2
3
4
5
6
# 添加NVIDIA官方仓库
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

# 安装最新驱动
sudo apt-get install nvidia-driver-525 # 替换为最新版本号

五、预防措施

5.1 锁定内核版本

1
2
3
4
5
6
# 查看当前内核版本
uname -r

# 锁定内核包(防止自动升级)
sudo apt-mark hold linux-image-$(uname -r)
sudo apt-mark hold linux-headers-$(uname -r)

5.2 定期检查驱动状态

创建监控脚本check_nvidia.sh

1
2
3
4
5
6
#!/bin/bash
if ! nvidia-smi &> /dev/null; then
echo "NVIDIA驱动异常,尝试修复..."
sudo dkms install -m nvidia -v $(ls /usr/src | grep nvidia | head -1 | cut -d- -f2)
sudo modprobe nvidia
fi

5.3 备份驱动配置

1
2
3
# 备份当前驱动配置
sudo cp /etc/modprobe.d/nvidia.conf /etc/modprobe.d/nvidia.conf.backup
sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup

六、常见问题排查

6.1 DKMS安装失败

错误信息DKMS: install completed with errors

解决方案

1
2
3
4
5
# 清理DKMS缓存
sudo dkms remove -m nvidia -v 450.57 --all
sudo dkms add -m nvidia -v 450.57
sudo dkms build -m nvidia -v 450.57
sudo dkms install -m nvidia -v 450.57

6.2 模块编译错误

错误信息Failed to build module

解决方案

1
2
3
4
5
# 安装编译依赖
sudo apt-get install build-essential linux-headers-$(uname -r)

# 重新编译模块
sudo dkms build -m nvidia -v 450.57

6.3 权限问题

1
2
3
4
5
# 检查NVIDIA设备权限
ls -la /dev/nvidia*

# 修复权限
sudo chmod 666 /dev/nvidia*

七、验证修复结果

7.1 基本验证

1
2
3
4
5
6
7
8
# 检查nvidia-smi
nvidia-smi

# 检查CUDA
nvcc -V

# 检查内核模块
lsmod | grep nvidia

7.2 性能测试

1
2
3
4
5
6
# 运行简单的CUDA测试
nvidia-smi --query-gpu=name,temperature.gpu,utilization.gpu --format=csv

# 测试GPU计算
sudo apt-get install nvidia-cuda-toolkit
/usr/lib/nvidia-cuda-toolkit/bin/nvidia-smi -q

八、总结

8.1 核心解决方案

  1. 首选方案:使用DKMS重新安装现有驱动版本
  2. 备选方案:手动加载内核模块或重新安装驱动
  3. 预防措施:锁定内核版本,定期检查驱动状态

8.2 关键命令回顾

1
2
3
4
5
6
7
8
9
# 诊断命令
nvidia-smi
nvcc -V
ls /usr/src | grep nvidia

# 修复命令
sudo apt-get install dkms
sudo dkms install -m nvidia -v [版本号]
sudo modprobe nvidia

8.3 注意事项

  1. 版本匹配:确保驱动版本与显卡型号和CUDA版本兼容
  2. 内核兼容:驱动需要与当前运行的内核版本兼容
  3. 系统更新:系统更新后可能需要重新配置驱动
  4. 备份重要数据:在进行驱动操作前备份重要数据

通过以上方法,大多数NVIDIA驱动通信问题都可以得到解决。如果问题仍然存在,建议查阅NVIDIA官方文档或社区论坛获取进一步帮助。


参考资源

一、先来看一篇转载文章《在 VS2015 中使用 Qt4

http://tangzx.qiniudn.com/post-0111-qt4-vs2015.html 最早的原文,看不到了

https://github.com/district10/qt4-vs2015x64 原作者的github,里面的东东都下载不了了

二、firecat本人的教程

0、Qt官方

Qt4.8.7官方源码下载

https://download.qt.io/new_archive/qt/4.8/4.8.7/

官网的exe只提供了MSVC2010,没有更高版本的。高版本需要自己下载源码编译。

源码里面的配置文件已经提供了MSVC 2015的编译选项,\qt-everywhere-opensource-src-4.8.7\mkspecs\win32-msvc2015

参照官方提供的编译文档一步一步执行即可;但是配置文件里没有提供MSVC 2017的编译选项。

官方编译的文档

https://doc.qt.io/archives/qt-4.8/installation.html

https://doc.qt.io/archives/qt-4.8/configure-options.html

https://doc.qt.io/archives/qt-4.8/install-win.html

https://doc.qt.io/archives/qt-4.8/install-mac.html

https://doc.qt.io/qt-5/build-sources.html

1、Qt 4.8.7+MSVC 2017

推荐使用第三方提供的源码,它已经是修改好的,里面含有MSVC 2017编译选项,可以编译。

https://github.com/scharsig/Qt Qt4.8.7+MSVC2017源码

https://forum.qt.io/topic/91623/building-qt-4-8-7-with-visual-studio-2017 Qt4.8.7+MSVC2017论坛

https://github.com/sandym/qt-patches 仅供参考,编译补丁

https://github.com/Homebrew/formula-patches/tree/master/qt 仅供参考,编译补丁

https://github.com/BartVandewoestyne/qt_4_8_7_with_vs2017_patch 仅供参考,编译补丁

完整的编译过程:

下载第三方源码https://github.com/scharsig/Qt/tree/master/qt-4.8.7-vs2017 然后解压

-–step1—

Windows桌面-开始-程序-Visual Studio 2017-Visual Studio Tools-VC-x86 Native Tools Command Prompt for VS 2017

-–step2—

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise>cd F:\Qt\setup-exe\4.8.7\Qt-master\qt-4.8.7-vs2017

-–step3—

F:\Qt\setup-exe\4.8.7\Qt-master\qt-4.8.7-vs2017>configure -help

-–step4—

F:\Qt\setup-exe\4.8.7\Qt-master\qt-4.8.7-vs2017>
configure -make nmake -debug-and-release -opensource -confirm-license -platform win32-msvc2017 -prefix F:\Qt\Qt4.8.7-msvc2017 -nomake examples -nomake tests

如果不想编译这么多功能模块,可以精简为:

configure -make nmake -debug-and-release -opensource -confirm-license -platform win32-msvc2017 -prefix F:\Qt\Qt4.8.7-msvc2017 \
  -no-qt3support -no-multimedia \
  -no-audio-backend -no-phonon -no-phonon-backend -no-libtiff \
  -no-libmng -no-dbus -no-nis -nomake examples -nomake tests

 -release              Compile and link Qt with debugging turned off. -debug                Compile and link Qt with debugging turned on. -nomake tests         Disable building of tests to speed up compilation -nomake examples      Disable building of examples to speed up compilation -confirm-license      Automatically acknowledge the LGPL 2.1 license.

-–step5—

F:\Qt\setup-exe\4.8.7\Qt-master\qt-4.8.7-vs2017>nmake

-–step6—

F:\Qt\setup-exe\4.8.7\Qt-master\qt-4.8.7-vs2017>nmake install

-–step7—

添加到Qt Creator

![[编译Qt 4.8.7源码/IMG-20250807081809727.png]]

-–step8—

新建项目测试,Qt Creator+Qt4.8.7+MSVC2017编译项目时,如果报错:

intermediate\moc\moc_rs_actionzoompan.cpp:-1: error: C1041: 无法打开程序数据库“F:\CADCAM\QCAD\src\build-LibreCAD-v1.0.4-qt4-Desktop_Qt_4_8_7_MSVC2017_32bit-Debug\librecad\vc140.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用 /FS

解决办法:

在Qt Creator的项目文件,即.pro文件中,可以通过QMAKE_CXXFLAGS来给MSVC编译器传递编译开关。

QMAKE_CXXFLAGS += /FS

win32-msvc*:QMAKE_CXXFLAGS += /wd"4819" QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -Zc:strictStrings 

MSVC 2017编译器常见错误的解决:

https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/c-cpp-build-errors?view=vs-2017

2、Mac OS+Qt 4.8.7

笔者的Mac OS版本是MacOS-10.15-Catalina,高版本的OS和Clang已经不再支持Qt官方发布的Qt4了。

解决办法可以参见我的另一篇博文:https://blog.csdn.net/libaineu2004/article/details/104740623

https://trac.macports.org/ticket/58651 mac下编译qt4遇到问题

https://github.com/macports/macports-ports/tree/master/aqua/qt4-mac mac编译补丁

一、核心概念

7z和WinRAR等压缩工具支持制作自解压文件,这类文件无需目标机器安装解压工具,通过运行压缩包自身即可解压其中的文件。本文将详细介绍如何利用7z的自解压功能制作应用程序安装包。

应用程序安装的复杂度差异很大:简单的安装只需将几个文件打包压缩,解压到目标机器即可;复杂的安装(如Visual Studio、Office)则需要对Windows系统进行大量修改,包括安装补丁、辅助工具、程序组件,并支持卸载和修复功能。

7z自解压功能能够轻松应对简单安装场景,结合MSI安装包也能处理复杂的安装需求。

二、UI界面制作自解压文件

通过7z图形界面可以轻松制作自解压文件,操作步骤如下:

  1. 打开7-Zip文件管理器
  2. 选择要压缩的文件或文件夹
  3. 点击”添加”按钮
  4. 在压缩设置对话框中,勾选”创建自释放程序”选项
  5. 点击”确定”生成自解压文件

选择”创建自释放程序”后,文件后缀名会自动变为.exe。运行生成的test.exe文件,系统会提示选择解压缩目录。

三、命令行制作自解压文件

通过命令行方式生成自解压文件:

1
7z.exe a test.exe -sfx testdir

四、简易安装包制作

简易安装包指在运行安装程序时,将安装包中的可执行文件解压到指定目录,然后运行已解压的应用程序。

4.1 准备材料

  1. 应用程序文件:创建简单的演示程序TestApp.exe及其配置文件TestApp.exe.config
  2. 7z自解压模块:下载7zs.sfx文件
    • 7-Zip 9.20版本:7zs.sfx文件位于7-Zip extra包中
    • 后续版本:7zs2.sfx文件位于LZMA包中

4.2 制作步骤

步骤1:打包应用程序文件

1
7z a demo.7z TestApp.exe TestApp.exe.config

步骤2:创建配置文件

创建config.txt文件,内容如下:

1
2
3
4
;!@Install@!UTF-8!
Title="Demo app"
ExecuteFile="TestApp.exe"
;!@InstallEnd@!

步骤3:生成自解压程序

1
copy /b 7zS.sfx + config.txt + demo.7z demoapp.exe

运行demoapp.exeTestApp.exe将直接启动。

4.3 优势

当程序包含多个文件时,使用这种方式用户无需执行复杂的安装过程,也看不到杂乱的文件,使用体验更佳。

五、复杂安装包制作(结合MSI)

7z自身无法完成复杂安装包制作,但可以结合MSI安装包实现。MSI是Windows平台默认的安装程序格式,能够处理各种复杂的安装需求。

5.1 为什么需要结合7z和MSI?

虽然直接运行MSI安装包可以完成安装任务,但存在以下问题:

  1. 运行体验不佳:MSI安装界面不够友好
  2. 日志保存不便:需要命令行运行msiexec.exe /i xxx.msi /log abc.log
  3. 管理员权限问题:无法直接以管理员身份启动MSI
  4. 用户友好性差:MSI对普通用户来说不够直观

7z自解压包装可以解决这些问题。

5.2 制作步骤

步骤1:准备材料

  1. 应用程序的MSI安装包(如myapp.msi
  2. 7zs.sfx文件

步骤2:打包MSI文件

1
7z a testmsi.7z myapp.msi

步骤3:创建配置文件

创建config.txt文件,内容如下:

1
2
3
4
5
;!@Install@!UTF-8!
Title="Demo msi"
BeginPrompt="Do you want to install the xxx?"
ExecuteFile="myapp.msi"
;!@InstallEnd@!

步骤4:生成自解压程序

1
copy /b 7zS.sfx + config.txt + testmsi.7z demoapp2.exe

5.3 运行效果

运行demoapp2.exe

  1. 首先显示确认对话框询问是否安装
  2. 点击”Yes”继续
  3. 进入MSI安装流程
    IMG-20260415170511551

5.4 高级配置:传递安装参数

通过配置文件可以方便地传递安装参数:

1
2
3
4
5
6
;!@Install@!UTF-8!
Title="Demo msi"
BeginPrompt="Do you want to install the xxx?"
ExecuteFile="msiexec.exe"
ExecuteParameters="/i myapp.msi /log c:\\abc.log"
;!@InstallEnd@!

这样配置后,安装日志将自动保存到C:\abc.log

5.5 优势总结

  1. 管理员权限:包装成EXE后可以方便地以管理员权限运行
  2. 参数传递:通过配置文件自动传递安装参数,无需用户手动输入
  3. 用户友好:EXE格式对普通用户更友好、更常见
  4. 日志管理:可以自动保存安装日志

六、自定义图标和界面

默认的7z自解压程序界面较为简单:
IMG-20260415170530530

可以使用ResourceHacker工具自定义图标,使安装包看起来更专业:

  1. 下载并安装ResourceHacker
  2. 打开生成的EXE文件
  3. 替换图标资源
  4. 保存修改

自定义图标后的界面:
IMG-20260415170543257

七、配置文件参数详解

7.1 基本参数

参数 说明 示例
Title 安装窗口标题 Title="我的应用程序"
BeginPrompt 开始安装前的提示信息 BeginPrompt="确定要安装吗?"
ExecuteFile 要执行的文件 ExecuteFile="setup.exe"
ExecuteParameters 执行参数 ExecuteParameters="/silent"

7.2 高级参数

参数 说明
InstallPath 默认安装路径
RunProgram 安装后运行的程序
Shortcut 创建快捷方式
Delete 安装后删除的文件

八、常见问题与解决方案

8.1 7zs.sfx文件找不到

问题:制作自解压包时提示找不到7zs.sfx文件

解决方案

  1. 从7-Zip官网下载LZMA SDK
  2. 解压后找到7zs2.sfx文件(新版本)
  3. 重命名为7zs.sfx使用

8.2 中文乱码问题

问题:配置文件中使用中文出现乱码

解决方案

  1. 确保配置文件使用UTF-8编码
  2. 在文件开头添加UTF-8声明:;!@Install@!UTF-8!
  3. 使用支持UTF-8的文本编辑器(如Notepad++)

8.3 权限不足问题

问题:安装需要管理员权限的程序失败

解决方案

  1. 右键以管理员身份运行
  2. 或创建manifest文件要求提升权限

九、最佳实践建议

9.1 文件组织

1
2
3
4
5
6
7
8
安装包根目录/
├── 7zs.sfx # 自解压模块
├── config.txt # 配置文件
├── app.7z # 压缩的程序文件
├── setup.exe # 最终生成的安装包
└── resources/ # 资源文件
├── icon.ico # 程序图标
└── banner.bmp # 安装界面图片

9.2 版本管理

  1. 为每个版本创建独立的目录
  2. 在配置文件中包含版本信息
  3. 使用时间戳或版本号命名安装包

9.3 测试流程

  1. 在虚拟机中测试安装
  2. 测试不同Windows版本兼容性
  3. 验证卸载功能
  4. 检查文件权限设置

十、总结

使用7z创建安装包具有以下优势:

  1. 灵活性强:既能实现简单小巧的安装场景,又能解决复杂安装过程中的问题
  2. 体积小巧:生成的安装包体积较小
  3. 配置灵活:通过配置文件可以控制安装过程的各个方面
  4. 兼容性好:支持各种Windows版本
  5. 成本低廉:完全免费,无需购买昂贵的安装包制作工具

无论是简单的文件分发还是复杂的应用程序安装,7z自解压功能都能提供有效的解决方案。通过合理的配置和优化,可以制作出专业、易用的安装程序。


相关工具下载

参考文档

本文整理了14个常用于计算机视觉任务(特别是目标检测)的无人机航拍与遥感图像数据集,涵盖城市监控、交通分析、地物识别等多个应用场景。

1. VisDrone

  • 发布机构:天津大学AISKYEYE团队
  • 简介:大规模无人机视角数据集,由400个视频片段(265,228帧)和10,209张静态图像组成。采集于中国14个不同城市,涵盖城乡多种环境。
  • 关键信息
    • 图像/视频:265,228帧 + 10,209张图
    • 标注数量:超过260万个边界框
    • 目标类别:行人、汽车、自行车、三轮车等11类(含others
    • 属性:提供场景可见性、遮挡等属性标注
    • 分辨率:多种,由不同无人机平台采集
  • 用途:目标检测、跟踪
  • 链接VISDRONE官网

2. DOTA

  • 发布机构:武汉大学
  • 简介:用于航拍图像目标检测的大型数据集,图像来源于Google Earth、JL-1卫星、GF-2卫星等。
  • 关键信息
    • 图像数量:2,806张
    • 标注数量:188,282个实例
    • 目标类别:15类(飞机、轮船、储罐、运动场、车辆、桥梁等)
    • 标注格式定向边界框(任意四边形)
    • 图像尺寸:800×800 ~ 4000×4000像素
  • 用途:遥感图像目标检测
  • 链接相关介绍

3. UCAS-AOD

  • 发布机构:中国科学院大学
  • 简介:专注于航拍图像中的两类目标检测。
  • 关键信息
    • 目标类别:2类(汽车、飞机)
    • 图像数量:约1,000张
    • 特点:包含背景负样本
  • 用途:车辆与飞机检测
  • 链接数据集下载

4. UAVDT

  • 简介:用于无人机检测与跟踪的大规模基准数据集,关注车辆目标。
  • 关键信息
    • 数据量:约80,000帧(选自10小时原始视频)
    • 视频序列:100个
    • 分辨率:1080×540
    • 标注:边界框,含车辆类别和遮挡属性
    • 场景:广场、主干道、收费站、高速公路等
  • 用途:目标检测(DET)、单目标跟踪(SOT)、多目标跟踪(MOT)
  • 链接项目主页

5. UAV123

  • 简介:从低空无人机捕获的视频跟踪数据集,侧重于长期空中跟踪。
  • 关键信息
    • 视频序列:123个
    • 总帧数:超过110K帧
    • 子集
      1. 专业无人机拍摄的稳定视频(103个序列)
      2. 消费级无人机拍摄的不稳定视频(12个序列)
      3. 游戏引擎渲染的合成视频(8个序列)
    • 标注:完全手工标注
  • 用途:单目标跟踪、长期跟踪
  • 链接相关博客

6. CARPK

  • 简介:汽车停车场数据集,专注于车辆计数与定位。
  • 关键信息
    • 数据来源:无人机在约40米高度拍摄的4个停车场
    • 标注数量:近90,000辆汽车
    • 标注格式:边界框(左上角、右下角点)
  • 用途:车辆计数、目标检测
  • 链接Papers With Code

7. AU-AIR

  • 简介:首个用于目标检测的多模态无人机数据集,集成了来自不同机载传感器的数据。
  • 关键信息
    • 数据量:2小时原始视频,32,823个已标注帧
    • 标注数量:132,034个对象实例
    • 目标类别:8类(与交通监控相关)
  • 用途:多模态目标检测
  • 链接相关介绍

8. ERA

  • 简介:大型航拍视频数据集,用于事件识别。
  • 关键信息
    • 视频数量:2,864个
    • 视频规格:5秒,640×640大小
    • 类别:25个不同的事件类别
  • 用途:视频分析、事件识别

9. VEDAI

  • 发布机构:卡昂大学(2015年)
  • 简介:车辆检测遥感数据集。
  • 关键信息
    • 图像数量:1,210张
    • 图像尺寸:512×512 / 1024×1024(4波段:RGB+NIR)
    • 分辨率:0.125米
    • 标注数量:3,640个目标
    • 目标类别:9类(飞机、船、各种车辆等)
    • 标注格式定向边界框(OBB)
  • 用途:遥感车辆检测
  • 链接官网

10. ITCVD

  • 发布机构:特文特大学(2018年)
  • 简介:专注于车辆检测的航拍影像数据集。
  • 关键信息
    • 图像数量:135张
    • 图像尺寸:5616×3744
    • 分辨率:0.1米
    • 标注数量:23,543个目标
    • 目标类别:1类(车辆)
    • 标注格式:水平边界框(HBB)
  • 用途:车辆检测
  • 链接研究信息页

11. DLR3k Vehicle

  • 简介:使用DLR 3K摄像机系统在德国慕尼黑地区拍摄的车辆检测数据集。
  • 关键信息
    • 图像数量:20张
    • 图像尺寸:5616×3744
    • 分辨率:13厘米
    • 标注数量:14,235辆车
    • 标注格式定向边界框(给出中心点、宽、长及与x轴夹角)
  • 用途:高分辨率车辆检测

12. OIRDS

  • 发布机构:雷神公司等(2009年)
  • 简介:用于遥感目标检测的研究数据集。
  • 关键信息
    • 图像数量:900张
    • 图像尺寸:256×256 ~ 640×640
    • 分辨率:约0.15米
    • 标注数量:1,800个目标
    • 目标类别:5类(各种车辆)
    • 标注格式定向边界框(OBB)
  • 用途:遥感目标检测
  • 链接SourceForge

13. NWPU-RESISC45

  • 发布机构:西北工业大学
  • 简介:遥感图像场景分类基准数据集。
  • 关键信息
    • 图像数量:31,500张
    • 图像尺寸:256×256
    • 场景类别:45类(机场、海滩、森林、农田、城市区域等)
    • 每类数量:700张
  • 用途场景分类(非目标检测)
  • 链接超神经

14. DIOR

  • 发布机构:西北工业大学
  • 简介:大规模光学遥感图像目标检测数据集。
  • 关键信息
    • 图像数量:23,463张
    • 图像尺寸:800×800
    • 分辨率:0.5米 ~ 30米
    • 标注数量:190,288个实例
    • 目标类别:20类(涵盖车辆、建筑、设施等)
    • 特点:包含不同季节、天气条件,具有位置多样性
  • 用途:遥感图像目标检测
  • 链接相关博客

总结与选择建议

数据集 主要特点 适用任务 标注格式
VisDrone 规模最大、场景丰富、属性全 检测、跟踪 HBB
DOTA 类别多、采用定向框、遥感来源 遥感检测 OBB
UAVDT 纯车辆、侧重跟踪 检测、跟踪 HBB
VEDAI 多波段、车辆类别细 车辆检测 OBB
DIOR 类别均衡、场景多样 遥感检测 HBB
NWPU 场景分类数据集 图像分类 图像级标签

提示

  • HBB: Horizontal Bounding Box (水平边界框)
  • OBB: Oriented Bounding Box (定向边界框),更适合遥感中旋转的物体。
  • 根据任务(检测/跟踪/分类)、目标类别(通用/车辆/特定)和标注需求(HBB/OBB)选择合适的数据集。

方法1: 为当前用户设置环境变量

为当前用户设置 HTTP_PROXY 和 HTTPS_PROXY 环境变量,Podman 将自动读取这些环境变量并使用代理。

1
2
3
4
5
6
7
8
9
10
11
# Bash
export HTTP_PROXY="http://代理地址:端口"
export HTTPS_PROXY="https://代理地址:端口"

# 对于 bash, 也可以在 ~/.bashrc 中添加上述命令使其永久有效

# Fish
set -x HTTP_PROXY "http://代理地址:端口"
set -x HTTPS_PROXY "https://代理地址:端口"

# 对于 fish,也可以在 ~/.config/fish/config.fish 中添加以上命令

如果代理需要身份验证,可以在 URL 中添加用户名和密码。格式如下:

1
http://用户名:密码@代理地址:端口

方法2:为 Podman 服务设置配置文件

通过编辑 /etc/containers/registries.conf 配置文件为 Podman 服务设置代理。在该文件中添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[registries.search]
registries = ['docker.io', 'quay.io']

[registries.insecure]
registries = []

[registries.block]
registries = []

[registries.unqualified-search-registries]

[registry.mirrors]

[registry.configs]

[registry.configs.REGISTRY_NAME.HOSTNAME/HOSTPATH]
unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "docker.io"]
blocked=false

[registry.configs.REGISTRY_NAME.HOSTNAME]
http-proxy="http://代理地址:端口"
https-proxy="https://代理地址:端口"

替换 REGISTRY_NAME.HOSTNAME 为您要配置的注册表,如 docker.io。如果代理需要身份验证,则使用类似 http://user:password@proxy.example.com:8080 的格式。

方法3: 为单个 Podman 命令设置代理

为单个 Podman 命令临时设置代理,方法是在命令前添加 –build-arg 参数。例如:

1
podman --build-arg HTTP_PROXY="http://代理地址:端口" --build-arg HTTPS_PROXY="https://代理地址:端口" pull nginx

方法四: 配置 http-proxy.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ systemctl status podman
● podman.service - Podman API Service
Loaded: loaded (/usr/lib/systemd/system/podman.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/podman.service.d
└─http-proxy.conf
Active: inactive (dead) since Mon 2023-11-20 18:45:12 CST; 3 months 22 days ago
Docs: man:podman-system-service(1)
Process: 50669 ExecStart=/usr/bin/podman $LOGGING system service (code=exited, status=0/SUCCESS)
Main PID: 50669 (code=exited, status=0/SUCCESS)

Nov 20 18:45:07 downlaod systemd[1]: Starting Podman API Service...
Nov 20 18:45:07 downlaod systemd[1]: Started Podman API Service.
Nov 20 18:45:07 downlaod podman[50669]: time="2023-11-20T18:45:07+08:00" level=info msg="/usr/bin/podman filtering at log level>
Nov 20 18:45:07 downlaod podman[50669]: time="2023-11-20T18:45:07+08:00" level=info msg="Not using native diff for overlay, thi>
Nov 20 18:45:07 downlaod podman[50669]: time="2023-11-20T18:45:07+08:00" level=info msg="Setting parallel job count to 13"
Nov 20 18:45:07 downlaod podman[50669]: time="2023-11-20T18:45:07+08:00" level=info msg="Using systemd socket activation to det>
Nov 20 18:45:07 downlaod podman[50669]: time="2023-11-20T18:45:07+08:00" level=info msg="API service listening on \"/run/podman>
Nov 20 18:45:12 downlaod systemd[1]: podman.service: Succeeded.

$ cat /etc/systemd/system/podman.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.21.101:7890"
Environment="HTTPS_PROXY=http://192.168.21.101:7890"
Environment="NO_PROXY=localhost,127.0.0.1,.coding.net,.tencentyun.com,.myqcloud.com,harbor.bsgchina.com"

  1. 安装依赖环境

    1
    2
    3
    4
    5
    6
    7
    8
    # 启用虚拟化平台
    dism /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

    # 启用linux子系统
    dism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all

    wsl --install
    wsl --update
  2. 安装Podman

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 安装DockerCLI,用于兼容Docker命令
    winget install --id Docker.DockerCLI

    # 安装Podman
    winget install --id RedHat.Podman

    # 安装Podman Desktop (可选)
    winget install --id RedHat.Podman-Desktop

    # 初始化Podman
    podman machine init

    # 配置端口转发
    wsl sudo sysctl net.ipv4.ip_forward=1
  3. 配置wsl虚拟机

    1
    2
    3
    4
    5
    6
    7
    # 修改默认软件源
    sudo sed -e 's|^metalink=|#metalink=|g' \
    -e 's|^#baseurl=http://download.example/pub/fedora/linux|baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora|g' \
    -i.bak \
    /etc/yum.repos.d/fedora.repo \
    /etc/yum.repos.d/fedora-updates.repo
    sudo dnf makecache
  4. 测试

    1
    docker run --rm -d -p 80:80 --name httpd docker.io/library/httpd:latest
  5. 配置镜像加速
    podman的配置文件在容器内 /etc/containers/registries.conf,配置格式如下

    1
    2
    3
    4
    5
    unqualified-search-regustrues = ["docker.io"]

    [[registry]] # 注意此处配置不需要加'https'
    prefix = "docker.io" # 访问地址
    location = "docker.m.daocloud.io" # 加速地址
  6. 配置私有镜像库

1
2
3
[[registry]]
location = "harbor.example.io"
insecure = true

如果访问地址为https需要配置信任证书

1
2
sudo mkdir /etc/containers/certs.d
sudo cp <path to cert> /etc/containers/certs.d/ca.crt
  1. 配置文件翻译
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    # 有关此配置文件的更多信息,请参阅 containers-registries.conf(5)。
    #
    # 注意:使用未完全限定镜像名称的风险
    # 我们建议始终使用包括注册表服务器(完整 DNS 名称)、命名空间、镜像名称和标签在内的完全限定镜像名称
    # (例如,registry.redhat.io/ubi8/ubi:latest)。通过摘要(例如,
    # quay.io/repository/name@digest)拉取镜像可以进一步消除标签的不确定性。
    # 使用短名称时,始终存在镜像被伪造的风险。例如,用户想从某个注册表中拉取名为
    # `foobar` 的镜像,并期望该镜像来自 myregistry.com。如果
    # myregistry.com 不是搜索列表中的第一个,攻击者可能会在列表中靠前的位置
    # 放置另一个名为 `foobar` 的镜像。用户可能会意外拉取并运行攻击者的镜像和代码,而不是
    # 预期的内容。我们建议只添加完全可信的注册表(即,不允许未知或匿名用户
    # 创建任意名称的账户的注册表)。这将防止镜像被伪造、抢占或以其他方式变得不安全。
    # 如果有必要使用这些注册表,它应该添加到列表的末尾。
    #
    # # 一个主机[:端口]格式的注册表数组,当拉取未完全限定镜像时,按顺序尝试这些注册表。
    unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "docker.io"]
    #
    # [[registry]]
    # # "prefix" 字段用于选择相关的 [[registry]] TOML 表;
    # # 使用输入镜像名称时,只有与该名称最长匹配的 TOML 表会被使用
    # # (考虑到命名空间/库/标签/摘要分隔符)。
    # #
    # # 如果缺少 prefix 字段,则默认与 "location" 字段相同。
    prefix = "example.com/foo"
    #
    # # 如果为 true,则允许未加密的 HTTP 连接以及使用不受信任证书的 TLS 连接。
    insecure = false
    #
    # # 如果为 true,则禁止拉取匹配名称的镜像。
    blocked = false
    #
    # # "prefix" 所在命名空间的物理位置。
    # #
    # # 默认情况下,与 "prefix" 相同(在这种情况下,可以省略 "prefix",并且 [[registry]] TOML 表只指定 "location")。
    # #
    # # 例如:假设
    # # prefix = "example.com/foo"
    # # location = "internal-registry-for-example.net/bar"
    # # 那么对镜像 example.com/foo/myimage:latest 的请求实际上会与
    # # internal-registry-for-example.net/bar/myimage:latest 镜像匹配。
    location = "internal-registry-for-example.com/bar"
    #
    # # "prefix" 所在命名空间的(可能部分的)镜像。
    # #
    # # 将按指定顺序尝试这些镜像;第一个可以联系到并包含镜像的将被使用
    # # (如果所有镜像都没有该镜像,则最后尝试 "registry.location" 字段指定的主位置,或者使用未修改的用户指定引用)。
    # #
    # # "mirror" 数组中的每个 TOML 表可以包含以下字段,语义与直接在 [[registry]] TOML 表中指定的相同:
    # # - location
    # # - insecure
    [[registry.mirror]]
    location = "example-mirror-0.local/mirror-for-foo"
    [[registry.mirror]]
    location = "example-mirror-1.local/mirrors/foo"
    insecure = true
    # # 根据上述配置,拉取 example.com/foo/image:latest 时将按顺序尝试:
    # # 1. example-mirror-0.local/mirror-for-foo/image:latest
    # # 2. example-mirror-1.local/mirrors/foo/image:latest
    # # 3. internal-registry-for-example.net/bar/image:latest
    # # 并使用第一个存在的镜像。
    #
    # short-name-mode="enforcing"
    # 强制使用完全限定镜像名称

    [[registry]]
    location="localhost:5000"
    insecure=true
    # 允许使用不安全的连接拉取本地镜像。

1. Co., Ltd.

  • 全称:Company Limited
  • 含义:有限责任公司,常见于英国、中国及亚洲地区
  • 特点:”Co.“为Company缩写,”.“表示缩写符号,”,”用于分隔前后词

2. Inc.

  • 全称:Incorporated
  • 含义:股份有限公司,多用于美国、加拿大
  • 示例:Apple Inc.,强调股东责任限于股份投资

3. LLC

  • 全称:Limited Liability Company
  • 含义:有限责任公司(美国特有形式)
  • 特点:兼具合伙制灵活性与股份制有限责任,如Google LLC

4. GmbH

  • 全称:Gesellschaft mit beschränkter Haftung
  • 含义:有限责任公司,德国及德语区专用
  • 示例:Bosch GmbH1

5. AG

  • 全称:Aktiengesellschaft
  • 含义:股份有限公司,德国及瑞士常见
  • 示例:BMW AG

6. S.A.

- 全称:Société Anonyme(法)/Sociedad Anónima(西)
- 含义:股份有限公司,流行于法国、西班牙等拉丁语系国家
- 示例:L’Oréal S.A.1

7. Plc

  • 全称:Public Limited Company
  • 含义:公众有限公司(英国上市企业专用)
  • 示例:HSBC Holdings plc1

8. 株式会社(Kabushiki Kaisha)

  • 缩写:KK
  • 含义:日本股份有限公司
  • 示例:Toyota Motor Corporation KK

地域差异提示

  • 英国”Ltd.”与美国”LLC”虽均表有限责任,但法律结构不同
  • 荷兰用”BV”(私人有限公司),意大利用”S.p.A.”(股份公司)
0%