具身智能相关常用工具代码

1. 在两个 windows 主机之间传递数据

$ scp {source_path} {target_username}@{target_ip}:{target_path}
# 如果是传输整个文件夹 -r
$ scp -r {source_dir} {target_username}@{target_ip}:{target_path}

然后输入 target_user 的主机密码。

实例:

$ scp "C:/Users/gylbjtl0020/Downloads/remote_data.txt" gylzjtl10262@10.111.34.104:"C:/Users/gylzjtl10262/Download"
$ scp -r "C:/Users/gylbjtl0020/Downloads/" gylzjtl10262@10.111.34.104:"C:/Users/gylzjtl10262/Download"

计时版本:

start_time=$(date +%s)
scp "C:/Users/gylbjtl0020/Downloads/data1.pkl" gylzjtl10262@10.111.34.104:"C:/Users/gylzjtl10262/Downloads/" 
end_time=$(date +%s) 
elapsed=$((end_time - start_time))
echo $elapsed

另外一个版本的脚本代码:

scp username@服务器IP:/home/username/文件名.txt C:\Users\你的用户名\Downloads\

从上面的代码可以看出来,scp 本身就是双向的,它可以直接指定远程或者本地的地址,无非就是远程的机器前面有个 username@服务器IP:

2. python 计时器 – 统计代码运行的时长

import time
start_time = time.time()
# do something
end_time = time.time()
duration = end_time - start_time

print(f"Duration: {duration:.6f} s")

3. 使用 md5sum 获取文件的哈希值 – 确保改动后生成物一致

$ md5sum data.pkl

4. 打开 .pkl 文件的代码片段

import pickle

with open(file_path) as f:
	data = pickle.load(f)

5. 利用写入磁盘的方式,在线程(异常)关闭之前调试代码

import datatime 

now = datetime.datetime.now()

with open('time.log', 'w', encoding='utf-8') as f:
	f.write(str(now))

6. cv2 中的常用方法

6.1. 创建显示用的窗口 – 具名

cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
# 作用:例如创建一个名为"image_6000"的窗口
# WINDOW_NORMAL:窗口可以调整大小
# 如果不创建窗口,imshow可能会自动创建,但控制权差

6.2. 水平方向上拼接图像

result = cv2.hconcat([image1, image2])
# 作用:将image1和image2水平拼接到一起
# 例如:两个640×480的图像 → 一个1280×480的图像
# 例如:彩色图 | 深度图

6.3. 拟显示图像

cv2.imshow(window_name, image_data)
# 这里根据窗口的名称将数据渲染到指定的窗口上去
# 作用:在指定窗口显示图像
# 不会立即显示!需要配合waitKey()

6.4. 显示/更新图像

cv2.waitKey(1)
# 作用:
# 1. 等待1毫秒(非阻塞)
# 2. 刷新所有imshow的显示
# 3. 检查是否有按键按下(返回按键ASCII码)
# 参数0:一直等待直到按键
# 参数1:等待1毫秒后继续

7. 使用 glob 查找文件

glob 可以用通配符查找文件和文件夹,就像在命令行里用 * ? 一样。glob 可以用通配符查找文件和文件夹,就像在命令行里用 *? 一样。简单说:快速找到所有符合规则的文件

import glob

# 1. 找所有txt文件
txt_files = glob.glob("*.txt")
# 可能返回:['file1.txt', 'file2.txt', 'data.txt']

# 2. 找特定开头的文件
robot_files = glob.glob("robot_*.py")
# 可能返回:['robot_arm.py', 'robot_gripper.py', 'robot_vision.py']

# 3. 在子文件夹里找
all_py_files = glob.glob("**/*.py", recursive=True)
# 找所有文件夹里的.py文件

8. 连续打印多次以示强调

[print("in elite robot") for _ in range(4)]

9. 角度和弧度互转

import math

cur_angle = 180
rad = math.radians(cur_angle)
deg = math.degrees(rad)

10. 列表和 np.array 互转

position = []
robot_joints = np.array(position)
origin_lit = robot_joints.tolist()

11. 手输执行参数并检查

# test.py
import tyro
from dataclasses import dataclass

@dataclass
class Args:
    # hostname: str = "127.0.0.1" # 这样写给了一个缺省值
    hostname: str
    
if __name__ == "__main__":
    rst = (tyro.cli(Args))
    print(rst)
  • 命令行输入:python test.py 会报错
  • 命令行输入:python test.py --hostname "127.0.0.1" 会正常打印

12. Realsense 相机参数检测及解释

见:Realsense 相机测试及说明

13. 在 linux 中安装本地 deb 包

例如安装 cursor 可以这样做。

sudo apt install ./cursor_2.3.41_amd64.deb

14. git 取消对特定文件或者某个目录的追踪

# git 去掉跟踪
# 从 Git 索引中移除(但保留本地文件)
git rm --cached *.pyd

# 如果 pyd 文件在子目录中
git rm --cached **/*.

# 从 Git 中移除目录(保留本地文件)
git rm -r --cached directory_name/

15. pyqt5 打包准备

1. 创建 .gitignore

# .gitignore
__pycache__/
build/
**/*.pyd
dist/

2. 创建打包入口文件 build.py

# build.py
import PyInstaller.__main__
import os

args = [
    'main.py',
    '--name=EmbodyLabeling',
    '--onefile',
    '--windowed',
    # '--icon=icon.ico',
    # '--add-data=images;images',  # Windows 用分号
    # '--add-data=style.qss;.',    # macOS/Linux 用冒号
    '--hidden-import=PyQt5.QtCore',
    '--hidden-import=PyQt5.QtGui',
    '--hidden-import=PyQt5.QtWidgets',
    '--clean',
]

PyInstaller.__main__.run(args)

3. 安装必要的依赖文件

# 安装依赖
pip install pyinstaller # pyinstaller --onefile --windowed --icon=app.ico --name="MyApp" your_app.py

# Windows:
pip install pyqt5-tools
# Linux/Mac:
pip install pyqt5
# 这会安装:
# pyrcc5 - 资源编译器
# pyuic5 - UI 编译器
# pylupdate5 - 翻译工具
# pylrelease5 - 翻译发布工具

4. 设置图标

关于 window icon 的设置,首先找到合适的 ico 并命名为 app.ico,在根目录下创建 resources.qrc 内容为:

<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
    <file>app.ico</file>
</qresource>
</RCC>

然后执行 pyrcc5 resources.qrc -o resources_rc.py 会在根目录下生成 resources.qrc. 最后将 main.py 改成:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
视频标注软件主程序入口
"""
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QIcon
from ui.windows.main_window import MainWindow
import resources_rc  # 导入编译后的资源文件

def main():
    app = QApplication(sys.argv)
    
    # 使用 Qt 资源系统设置图标
    # 格式:':/前缀/文件名',这里前缀为空
    app.setWindowIcon(QIcon(':/app.ico'))
    window = MainWindow()
    window.setWindowIcon(QIcon(':/app.ico'))
    
    window.show()
    window.showMaximized()  # 自动最大化窗口
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

16. linux 下面如何解压 zip 文件

直接执行 unzip data_process.zip 就可以了

17. linux 下等效于访问浏览器就下载文件的操作

在windows浏览器上访问这个地址就开始下载对应的文件了;那么请问在linux下面完成相同的操作应该怎么做?

假设将地址 https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_570.86.10_linux.run 复制到浏览器的地址栏就开始下载某个文件,那么在 linux 环境下面与之等价的操作为:

# 基本下载
wget https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_570.86.10_linux.run

# 如果需要恢复中断的下载
wget -c https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_570.86.10_linux.run

# 显示进度条(如果需要)
wget --progress=bar:force https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_570.86.10_linux.run

# 指定输出文件名
wget -O cuda_installer.run https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_570.86.10_linux.run

18. ubuntu 下使用命令行安装 cursor

依次执行下载和安装命令即可:

# download
wget --progress=bar:force -O cursor.deb https://api2.cursor.sh/updates/download/golden/linux-x64-deb/cursor/2.4
# install
sudo dpkg -i cursor.deb

19. ubuntu 下安装 cursor 使用 deb 格式的文件

在 ubuntu 下使用 deb 格式的安装包是合适的,先在官网上下载 cursor_2.3.41_amd64.deb 然后使用如下命令进行安装:

sudo dpkg -i cursor_2.3.41_amd64.deb

20. 键盘实现右键和上级目录

  • 右键功能:shift + F10
  • 回到上级目录:alt + ←
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐