Chemmy's Blog

chengming0916@outlook.com

本文介绍了Linux系统中常用的五种串口终端工具:cu、screen、minicom、putty和tip。这些工具适用于不同的场景和需求,能够帮助用户快速建立并配置串口连接。

1. cu 指令

cu(Call Unix)是一个简单的串行通信程序,用于建立串口连接。

基本用法

1
$ cu -l /dev/device -s baud-rate-speed

示例

1
$ cu -l /dev/ttyS0 -s 19200

退出方式

输入 ~.(波浪号后跟点号)即可退出连接。

特点

  • 简单易用,适合快速测试
  • 命令行界面,无需复杂配置
  • 支持基本的串口参数设置

2. screen 指令

screen是一个终端多路复用器,也可以用于串口通信,功能强大且灵活。

基本用法

1
$ screen /dev/device baud-rate

示例

1
2
$ screen /dev/ttyS0 19200
$ screen /dev/ttyUSB0 19200,cs8

常用参数

  • /dev/ttyS0 - 串口设备文件
  • 19200 - 波特率
  • cs8 - 8位数据位(可选)

退出方式

  • Ctrl+A,然后按 K,再按 Y 确认退出
  • 或按 Ctrl+A,然后按 D 分离会话(后台运行)

特点

  • 支持会话管理,可后台运行
  • 可同时管理多个终端会话
  • 支持窗口分割和滚动历史

3. minicom 指令

minicom是一个功能完整的串口通信程序,具有菜单驱动的配置界面。

基本用法

1
$ minicom

配置方法

首次运行需要配置:

1
$ minicom -s

主要功能

  1. 串口参数配置 - 波特率、数据位、停止位、奇偶校验
  2. 文件传输 - 支持多种协议(Xmodem、Ymodem、Zmodem)
  3. 脚本功能 - 可编写自动化脚本
  4. 日志记录 - 支持会话日志保存

常用快捷键

  • Ctrl+A + Z - 显示帮助菜单
  • Ctrl+A + O - 配置菜单
  • Ctrl+A + X - 退出minicom

特点

  • 功能全面,适合专业调试
  • 支持多种文件传输协议
  • 可保存配置,方便重复使用

4. putty 指令

putty是一个跨平台的SSH、Telnet和串口客户端,具有图形界面。

安装方法

1
$ sudo apt-get install putty

图形界面使用

  1. 启动putty:$ putty
  2. 选择”Serial”连接类型
  3. 配置串口参数:
    • Serial line: /dev/ttyS0(串口设备)
    • Speed: 19200(波特率)
  4. 点击”Open”建立连接

命令行使用

1
$ putty -serial /dev/ttyS0 -sercfg 19200

特点

  • 图形界面,操作直观
  • 支持多种连接协议
  • 可保存会话配置
  • 跨平台支持(Windows/Linux)

5. tip 指令

tip是一个简单的串口通信程序,语法简洁。

基本用法

1
$ tip -19200 device

示例

1
2
$ tip -19200 s0
$ tip -19200 ttys0

参数说明

  • -19200 - 波特率(前面带减号)
  • s0 - 串口设备简写(对应/dev/ttyS0
  • ttys0 - 完整设备名

退出方式

输入 ~. 退出连接。

特点

  • 语法简单,易于记忆
  • 适合快速测试和简单通信
  • 轻量级,资源占用少

工具对比

工具 界面类型 主要特点 适用场景
cu 命令行 简单快速,适合测试 快速连接测试
screen 命令行 会话管理,多任务 长时间连接,多任务处理
minicom 菜单驱动 功能全面,支持文件传输 专业调试,文件传输
putty 图形界面 操作直观,跨平台 图形界面操作,多协议支持
tip 命令行 语法简洁,轻量级 简单通信,快速测试

使用建议

1. 快速测试

  • 使用 cutip 进行快速连接测试
  • 命令简单,无需复杂配置

2. 日常调试

  • 使用 screen 进行日常串口调试
  • 支持会话管理,可随时断开和重连

3. 专业开发

  • 使用 minicom 进行专业级串口调试
  • 支持文件传输、脚本自动化等高级功能

4. 图形界面需求

  • 使用 putty 获得图形界面体验
  • 适合不熟悉命令行的用户

常见问题

1. 权限问题

1
$ sudo chmod 666 /dev/ttyS0

或将自己加入dialout组:

1
$ sudo usermod -a -G dialout $USER

2. 设备识别

查看可用串口设备:

1
2
3
$ ls /dev/ttyS*
$ ls /dev/ttyUSB*
$ dmesg | grep tty

3. 参数配置

串口通信需要正确配置以下参数:

  • 波特率(Baud Rate):115200、19200、9600等
  • 数据位(Data Bits):5、6、7、8
  • 停止位(Stop Bits):1、1.5、2
  • 奇偶校验(Parity):None、Even、Odd
  • 流控制(Flow Control):None、Hardware、Software

总结

Linux系统提供了多种串口终端工具,各有特点和适用场景。用户可以根据具体需求选择合适的工具:

  • 简单测试:选择 cutip
  • 日常使用:选择 screen(轻量且功能强大)
  • 专业调试:选择 minicom(功能全面)
  • 图形界面:选择 putty(操作直观)

掌握这些工具的使用方法,能够大大提高在Linux环境下进行串口通信和调试的效率。建议根据实际工作流程和个人偏好,选择1-2个主要工具进行深入学习和使用。

STM32上可用的SM2、SM3、SM4国密算法

本文详细介绍了在STM32平台上实现国密算法SM2、SM3、SM4的方法,包括代码示例和关键步骤解析,适用于嵌入式安全应用。

概述

国密算法是中国自主研发的商用密码算法,包括SM2(椭圆曲线公钥密码算法)、SM3(密码杂凑算法)和SM4(分组密码算法)。在嵌入式设备上实现这些算法需要考虑资源限制和性能要求。

SM2算法实现

SM2算法基于椭圆曲线密码学,涉及复杂的数理计算,需要数学运算库支持。在STM32上实现主要有两种方法:移植OpenSSL或MIRACL库,或使用硬件加密芯片。

本文采用移植MIRACL库的方式实现,编译所需文件为lib库,在工程中引用。

核心代码结构

主要文件包括:

  • sm2.c - SM2算法主实现文件
  • sm2.h - SM2算法头文件
  • miracl.h - MIRACL库头文件
  • mirdef.h - MIRACL编译器/硬件定义

关键功能函数

  1. 密钥生成 - sm2_keygen()

    • 生成SM2公私钥对
    • 公钥包含X、Y坐标,私钥为32字节
  2. 加密函数 - sm2_encrypt()

    • 使用公钥加密数据
    • 输出密文长度为明文长度 + 96字节
  3. 解密函数 - sm2_decrypt()

    • 使用私钥解密数据
    • 输出明文长度为密文长度 - 96字节
  4. 密钥派生函数 - kdf()

    • 用于密钥派生计算

编译配置

mirdef.h文件需要针对STM32平台进行配置:

1
2
3
4
5
6
7
8
9
10
11
#define MIRACL 32
#define MR_LITTLE_ENDIAN
#define mr_utype int
#define MR_IBITS 32
#define mr_dltype __int64
#define mr_unsign32 unsigned int
#define mr_unsign64 unsigned __int64
#define MAXBASE ((mr_small)1<<(MIRACL-1))
#define MR_STATIC 20
#define MR_GENERIC_MT
#define MR_NOASM

预编译库

提供直接编译好的lib库,下载地址:https://download.csdn.net/download/weixin_44522056/12483974

SM3算法实现

SM3是密码杂凑算法,输出为256位哈希值。

核心代码结构

  • sm3.c - SM3算法实现
  • sm3.h - SM3算法头文件

算法特点

  1. 消息填充 - 支持任意长度消息
  2. 压缩函数 - 64轮迭代处理
  3. 常量定义 - 使用固定初始值和常量

主要函数

  • SM3Calc() - 主计算函数
  • SM3Init() - 初始化上下文
  • SM3ProcessMessageBlock() - 处理消息块

SM4算法实现

SM4是分组密码算法,分组长度128位,密钥长度128位。

核心代码结构

  • sm4.c - SM4算法实现
  • sm4.h - SM4算法头文件

工作模式

  1. ECB模式 - 电子密码本模式
  2. CBC模式 - 密码分组链接模式
  3. PKCS7填充 - 支持数据填充

关键函数

  1. 基础加解密

    • sm4_crypt_ecb_old() - ECB模式基础加解密
    • sm4_crypt_cbc_old() - CBC模式基础加解密
  2. 带填充的加解密

    • sm4_crypt_ecb() - ECB模式 + PKCS7填充
    • sm4_crypt_cbc() - CBC模式 + PKCS7填充

算法参数

  • S盒:8位输入到8位输出的非线性变换
  • 轮密钥:32个32位轮密钥
  • 固定参数:FK和CK常量

使用注意事项

  1. 内存管理 - 嵌入式环境需注意内存分配和释放
  2. 随机数生成 - SM2需要可靠的随机数源
  3. 性能优化 - 根据具体STM32型号调整算法实现
  4. 安全性 - 确保密钥的安全存储和管理

测试验证

提供测试函数验证算法正确性:

  • SM2加解密测试
  • SM3哈希计算测试
  • SM4加解密测试

总结

本文提供了在STM32平台上实现国密算法的完整方案,包括SM2、SM3、SM4的C语言实现代码。这些实现经过优化,适合嵌入式环境使用,可直接集成到STM32项目中。

代码中可能存在未测试到的边界情况,欢迎在实际使用中发现并反馈问题,共同完善这些实现。

在Windows系统中,有时我们需要手动添加路由规则来实现特定的网络访问需求,比如访问特定网段或实现网络分流。Windows系统自带的route命令提供了强大的路由管理功能,可以添加、删除、修改和查看路由表。本文将详细介绍如何使用route命令添加自定义永久路由。

一、查看当前路由表

在添加路由之前,首先需要查看当前系统的路由配置。打开命令提示符(cmd),输入以下命令:

1
route print

执行该命令后,系统会显示当前的路由表信息,包括:

  1. 接口列表:显示所有网络接口的详细信息

    • 接口号(Interface Number)
    • MAC地址(Physical Address)
    • 网卡名称(Description)
  2. IPv4路由表:显示IPv4路由规则

  3. IPv6路由表:显示IPv6路由规则(如果启用)

重要信息:在接口列表中,第一列的”接口号”(Interface Number)是后续添加路由时需要使用的关键参数。

二、添加永久路由命令详解

2.1 基本命令格式

1
route add 目标网段 mask 子网掩码 网关地址 if 接口号 -p

2.2 参数说明

参数 说明 示例
目标网段 要访问的目标网络地址 192.168.5.0
mask 关键字,表示后面是子网掩码 mask
子网掩码 目标网段的子网掩码 255.255.255.0
网关地址 下一跳网关地址 192.168.2.254
if 关键字,表示后面是接口号 if
接口号 网络接口的编号 24
-p 永久路由参数(重启后仍然有效) -p

2.3 实际应用示例

假设我们需要添加以下路由规则:

  • 目标网段:192.168.5.0/24
  • 子网掩码:255.255.255.0
  • 网关地址:192.168.2.254
  • 接口号:24(通过route print查得)

完整的添加命令为:

1
route add 192.168.5.0 mask 255.255.255.0 192.168.2.254 if 24 -p

2.4 注意事项

  1. 权限要求:需要以管理员身份运行命令提示符
  2. 接口选择:必须选择正确的接口号,否则路由可能无法正常工作
  3. 永久参数-p参数必须添加,否则路由在系统重启后会失效
  4. 冲突检查:添加前检查是否已存在相同目标的路由规则

三、验证路由添加结果

添加路由后,再次执行route print命令查看路由表:

1
route print

在IPv4路由表中,应该能看到新添加的路由条目,格式类似:

1
2
网络目标        网络掩码          网关               接口    跃点数
192.168.5.0 255.255.255.0 192.168.2.254 192.168.2.100 25

四、route命令完整语法参考

4.1 命令格式

1
2
ROUTE [-f] [-p] [-4|-6] command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]

4.2 常用参数说明

参数 说明
-f 清除所有网关项的路由表
-p 与ADD命令结合使用时,将路由设置为永久路由
-4 强制使用IPv4
-6 强制使用IPv6

4.3 命令操作类型

命令 功能
PRINT 打印路由表
ADD 添加路由
DELETE 删除路由
CHANGE 修改现有路由

4.4 其他参数

参数 说明
destination 目标主机或网络
MASK netmask 子网掩码
gateway 网关地址
METRIC metric 跃点数(路由成本)
IF interface 接口号

五、常用操作示例

5.1 查看路由表

1
2
3
4
route print
route print -4 # 只显示IPv4路由
route print -6 # 只显示IPv6路由
route print 192.168.* # 只显示匹配192.168.*的路由

5.2 添加路由(带跃点数)

1
route add 157.0.0.0 mask 255.0.0.0 157.55.80.1 METRIC 3 IF 2

5.3 修改现有路由

1
route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2

5.4 删除路由

1
2
route DELETE 157.0.0.0
route DELETE 192.168.5.0

六、常见问题与解决方案

6.1 路由添加失败的可能原因

  1. 权限不足:未以管理员身份运行cmd
  2. 接口号错误:使用了错误的接口号
  3. 网关不可达:指定的网关地址无法访问
  4. 路由冲突:已存在相同目标的路由规则

6.2 错误信息示例

1
2
路由添加失败: 指定的掩码参数无效。
(Destination & Mask) != Destination。

解决方法:检查目标地址和子网掩码是否匹配

6.3 永久路由的存储位置

Windows永久路由存储在注册表中:

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes

七、最佳实践建议

  1. 备份现有路由:在修改路由前,先导出当前路由配置

    1
    route print > route_backup.txt
  2. 测试临时路由:先添加不带-p参数的临时路由进行测试

    1
    route add 192.168.5.0 mask 255.255.255.0 192.168.2.254 if 24
  3. 记录变更:记录所有路由变更的时间、内容和原因

  4. 定期检查:定期检查路由表,清理无效的路由规则

  5. 使用脚本管理:对于复杂的路由配置,可以编写批处理脚本

八、总结

Windows系统的route命令是一个强大的网络管理工具,通过它可以灵活地配置系统的路由规则。掌握route命令的使用方法,可以帮助我们解决各种网络访问问题,特别是在多网卡、复杂网络环境下的路由配置。

关键要点总结:

  • 使用route print查看当前路由表和接口信息
  • 添加路由时务必使用-p参数确保永久生效
  • 正确选择接口号是路由正常工作的关键
  • 先测试临时路由,确认无误后再添加永久路由
  • 定期维护路由表,保持网络配置的整洁和高效

通过本文的介绍,相信您已经掌握了在Windows系统中使用route命令添加自定义永久路由的方法。在实际应用中,请根据具体的网络环境和需求,灵活运用这些技巧。

一、概述

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)选择合适的数据集。
0%