update example and build
This commit is contained in:
@@ -1,13 +1,54 @@
|
|||||||
# orisys API 文档
|
# orisys API 文档
|
||||||
|
|
||||||
本文件提供了 `orisys` 套件的中文文档
|
本文件提供了 `orisys` 套件的中文文档
|
||||||
## 使用方法
|
|
||||||
1. 根据平台和python 版本下载对应的`.whl`文件
|
## 准备 Python 开发环境
|
||||||
|
推荐下载 Anaconda,并使用Python 3.10
|
||||||
|
```
|
||||||
|
# 创建并激活虚拟环境
|
||||||
|
conda create -n orisys python=3.10
|
||||||
|
conda activate orisys
|
||||||
|
```
|
||||||
|
## 安装 CUDA Toolkit 和 cuDNN
|
||||||
|
在官方链接下载和安装:https://developer.nvidia.com/cuda/toolkit
|
||||||
|
或
|
||||||
|
在Anaconda环境中安装(例子使用cuda12.9):
|
||||||
|
https://anaconda.org/channels/nvidia/packages/cuda/overview
|
||||||
|
```
|
||||||
|
conda install nvidia/label/cuda-12.9.0::cuda-toolkit nvidia::cudnn
|
||||||
|
```
|
||||||
|
## SDK安装方法
|
||||||
|
1. 根据平台(win / linux)和python (如p38、p39、p310)版本下载对应的`.whl`文件
|
||||||
2. 运行pip命令安装:
|
2. 运行pip命令安装:
|
||||||
```bash
|
```bash
|
||||||
pip install orisys-{version}-{python-version}-none-{os}_amd64.whl
|
pip install orisys-{version}-{python-version}-{python-version}-{os}_amd64.whl
|
||||||
```
|
```
|
||||||
3. 并测试导入:
|
如
|
||||||
|
```bash
|
||||||
|
pip install orisys-0.2.0-cp310-cp310-win_amd64.whl
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **安装 CuPy(根据您的 CUDA 版本选择):**
|
||||||
|
|
||||||
|
**方法 1:使用 extras(推荐)**
|
||||||
|
```bash
|
||||||
|
# 对于 CUDA 12.x
|
||||||
|
pip install orisys[cuda12]
|
||||||
|
|
||||||
|
# 对于 CUDA 13.x
|
||||||
|
pip install orisys[cuda13]
|
||||||
|
```
|
||||||
|
|
||||||
|
**方法 2:手动安装**
|
||||||
|
```bash
|
||||||
|
# 对于 CUDA 12.x
|
||||||
|
pip install cupy-cuda12x>=12.3.0
|
||||||
|
|
||||||
|
# 对于 CUDA 13.x
|
||||||
|
pip install cupy-cuda13x>=13.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
4. 测试导入:
|
||||||
```python
|
```python
|
||||||
import orisys
|
import orisys
|
||||||
print(orisys.__version__)
|
print(orisys.__version__)
|
||||||
@@ -21,8 +62,8 @@ print(orisys.__version__)
|
|||||||
* **isstitch** (`bool`,可选): 是否启用图像拼接,默认为 `True`。
|
* **isstitch** (`bool`,可选): 是否启用图像拼接,默认为 `True`。
|
||||||
* **cuda** (`bool`,可选): 是否使用 GPU cuda 加速,默认为 `False`。
|
* **cuda** (`bool`,可选): 是否使用 GPU cuda 加速,默认为 `False`。
|
||||||
* **verbose** (`bool`,可选): 是否输出初始化及运行过程中的详细日志信息,默认为 `False`。
|
* **verbose** (`bool`,可选): 是否输出初始化及运行过程中的详细日志信息,默认为 `False`。
|
||||||
* **config_name** (`str`,可选): 内部算法或传感器配置名称,用于加载对应的参数配置,默认为 `prototype`。
|
* **config_name** (`str`,可选): 内部算法或传感器配置`json`文件路径,用于加载对应的参数配置,默认为 `prototype`。
|
||||||
|
* **cal_path** (`str`,可选): 复眼拼接校准文件路径,默认为 `./config/cal.npy`。有多个传感器同时运行时建议传感器类创建时建议填写,避免校准文件覆写。在首次运行时程序会在找不到文件时自动创建。
|
||||||
|
|
||||||
### 返回
|
### 返回
|
||||||
* `Sensor` 实例,用于后续图像采集、形变计算和数据读取操作。
|
* `Sensor` 实例,用于后续图像采集、形变计算和数据读取操作。
|
||||||
|
|||||||
+37
-1
@@ -86,6 +86,30 @@ def build():
|
|||||||
json_count += 1
|
json_count += 1
|
||||||
print(f"Copied {json_count} JSON config files")
|
print(f"Copied {json_count} JSON config files")
|
||||||
|
|
||||||
|
# Create and copy examples folder (as part of the package)
|
||||||
|
examples_dst = pkg_dir / "examples"
|
||||||
|
examples_dst.mkdir(exist_ok=True)
|
||||||
|
|
||||||
|
# Create __init__.py for examples package
|
||||||
|
examples_init = examples_dst / "__init__.py"
|
||||||
|
with open(examples_init, 'w') as f:
|
||||||
|
f.write("# Examples for orisys package\n")
|
||||||
|
|
||||||
|
example_files = [
|
||||||
|
Path("example1_basic_pipeline.py"),
|
||||||
|
Path("example2_two_sensor_pipeline.py"),
|
||||||
|
]
|
||||||
|
|
||||||
|
example_count = 0
|
||||||
|
for example_file in example_files:
|
||||||
|
if example_file.exists():
|
||||||
|
shutil.copy(example_file, examples_dst)
|
||||||
|
example_count += 1
|
||||||
|
print(f"Copied example: {example_file.name}")
|
||||||
|
else:
|
||||||
|
print(f"Warning: Example file not found: {example_file}")
|
||||||
|
print(f"Copied {example_count} example files to orisys/examples/")
|
||||||
|
|
||||||
# Create setup.py for packaging
|
# Create setup.py for packaging
|
||||||
setup_py_path = dist_dir / "setup.py"
|
setup_py_path = dist_dir / "setup.py"
|
||||||
setup_content = f"""
|
setup_content = f"""
|
||||||
@@ -100,12 +124,24 @@ setup(
|
|||||||
version="{version}",
|
version="{version}",
|
||||||
description="Orisys - Optical Tactile Sensor SDK (Nuitka Compiled)",
|
description="Orisys - Optical Tactile Sensor SDK (Nuitka Compiled)",
|
||||||
author="Orisys",
|
author="Orisys",
|
||||||
packages=['orisys'],
|
packages=['orisys', 'orisys.examples'],
|
||||||
package_dir={{'': 'wheel_root'}},
|
package_dir={{'': 'wheel_root'}},
|
||||||
package_data={{
|
package_data={{
|
||||||
'orisys': ['*.pyd', 'configs/*.json'],
|
'orisys': ['*.pyd', 'configs/*.json'],
|
||||||
|
'orisys.examples': ['*.py'],
|
||||||
}},
|
}},
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
|
install_requires=[
|
||||||
|
"numpy>=1.24.4",
|
||||||
|
"opencv-python>=4.10.0.84",
|
||||||
|
"opencv-contrib-python",
|
||||||
|
"scipy>=1.10.1",
|
||||||
|
],
|
||||||
|
extras_require={{
|
||||||
|
"cuda12": ["cupy-cuda12x>=12.3.0"],
|
||||||
|
"cuda13": ["cupy-cuda13x>=13.0.0"],
|
||||||
|
"cuda": ["cupy-cuda12x>=12.3.0"], # For backward compatibility, defaults to CUDA 12.x
|
||||||
|
}},
|
||||||
distclass=BinaryDistribution,
|
distclass=BinaryDistribution,
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -106,6 +106,17 @@ setup(
|
|||||||
'orisys': ['*.so', 'configs/*.json'],
|
'orisys': ['*.so', 'configs/*.json'],
|
||||||
}},
|
}},
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
|
install_requires=[
|
||||||
|
"numpy>=1.24.4",
|
||||||
|
"opencv-python>=4.10.0.84",
|
||||||
|
"opencv-contrib-python",
|
||||||
|
"scipy>=1.10.1",
|
||||||
|
],
|
||||||
|
extras_require={{
|
||||||
|
"cuda12": ["cupy-cuda12x>=12.3.0"],
|
||||||
|
"cuda13": ["cupy-cuda13x>=13.0.0"],
|
||||||
|
"cuda": ["cupy-cuda12x>=12.3.0"], # For backward compatibility, defaults to CUDA 12.x
|
||||||
|
}},
|
||||||
distclass=BinaryDistribution,
|
distclass=BinaryDistribution,
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -17,13 +17,12 @@ import numpy as np
|
|||||||
def main():
|
def main():
|
||||||
|
|
||||||
# 步骤1:创建传感器对象 (必要步骤),config_name为配置文件名(内置配置文件名)或路径(自定义配置文件路径)
|
# 步骤1:创建传感器对象 (必要步骤),config_name为配置文件名(内置配置文件名)或路径(自定义配置文件路径)
|
||||||
|
|
||||||
# 方式1: 从视频文件读取
|
# 方式1: 从视频文件读取
|
||||||
sensor = orisys.Sensor("s1.mp4", isstitch=True, cuda=True, verbose=True,config_name="prototype")
|
sensor = orisys.Sensor("s1.mp4", config_name="prototype", cal_path= "./config/cal.npy", isstitch=True, cuda=True, verbose=True)
|
||||||
|
|
||||||
|
|
||||||
# 方式2: 从摄像头读取(取消注释使用)
|
# 方式2: 从摄像头读取(取消注释使用)
|
||||||
# sensor = orisys.Sensor(0, cuda=True, verbose=True, config_name="prototype")
|
# sensor = orisys.Sensor(0, config_name="prototype", cal_path= "./config/cal.npy", isstitch=True, cuda=True, verbose=True)
|
||||||
|
|
||||||
print("\n按 'q' 退出程序,按 'r' 重置光流追踪器")
|
print("\n按 'q' 退出程序,按 'r' 重置光流追踪器")
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ from multiprocessing import Queue, Process
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
def sensor_worker(sensor_id, vid_src, config_name, result_queue, stop_event):
|
def sensor_worker(sensor_id, vid_src, config_name, cal_path, result_queue, stop_event):
|
||||||
"""
|
"""
|
||||||
传感器工作进程函数
|
传感器工作进程函数
|
||||||
|
|
||||||
@@ -46,7 +46,8 @@ def sensor_worker(sensor_id, vid_src, config_name, result_queue, stop_event):
|
|||||||
isstitch=True,
|
isstitch=True,
|
||||||
cuda=True,
|
cuda=True,
|
||||||
verbose=False, # 减少子进程输出
|
verbose=False, # 减少子进程输出
|
||||||
config_name=config_name
|
config_name=config_name,
|
||||||
|
cal_path=cal_path
|
||||||
)
|
)
|
||||||
|
|
||||||
print(f"传感器 {sensor_id} 已启动")
|
print(f"传感器 {sensor_id} 已启动")
|
||||||
@@ -116,12 +117,16 @@ def main():
|
|||||||
num_sensors = 2
|
num_sensors = 2
|
||||||
sensor_configs = [
|
sensor_configs = [
|
||||||
{
|
{
|
||||||
|
'sensor_id': 0,
|
||||||
'vid_src': './s1.mp4',
|
'vid_src': './s1.mp4',
|
||||||
'config_name': 'prototype'
|
'config_name': 'prototype',
|
||||||
|
'cal_path': './config/cal.npy'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
'sensor_id': 1,
|
||||||
'vid_src': './s1.mp4', # 可以改为不同的视频源或摄像头索引
|
'vid_src': './s1.mp4', # 可以改为不同的视频源或摄像头索引
|
||||||
'config_name': 'prototype'
|
'config_name': 'prototype',
|
||||||
|
'cal_path': './config/cal2.npy'
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -138,7 +143,7 @@ def main():
|
|||||||
for i, config in enumerate(sensor_configs):
|
for i, config in enumerate(sensor_configs):
|
||||||
p = Process(
|
p = Process(
|
||||||
target=sensor_worker,
|
target=sensor_worker,
|
||||||
args=(i, config['vid_src'], config['config_name'], result_queues[i], stop_events[i])
|
args=(i, config['vid_src'], config['config_name'], config['cal_path'], result_queues[i], stop_events[i])
|
||||||
)
|
)
|
||||||
p.start()
|
p.start()
|
||||||
processes.append(p)
|
processes.append(p)
|
||||||
|
|||||||
+5
-1
@@ -1,4 +1,8 @@
|
|||||||
cupy_cuda12x>=12.3.0
|
# CuPy - Install the appropriate version based on your CUDA version:
|
||||||
|
# For CUDA 12.x: pip install cupy-cuda12x>=12.3.0
|
||||||
|
# For CUDA 13.x: pip install cupy-cuda13x>=13.0.0
|
||||||
|
# Or use extras: pip install orisys[cuda12] or pip install orisys[cuda13]
|
||||||
|
|
||||||
numpy>=1.24.4
|
numpy>=1.24.4
|
||||||
opencv_python>=4.10.0.84
|
opencv_python>=4.10.0.84
|
||||||
opencv-contrib-python
|
opencv-contrib-python
|
||||||
|
|||||||
@@ -19,9 +19,16 @@ setup(
|
|||||||
},
|
},
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"numpy",
|
"numpy>=1.24.4",
|
||||||
"opencv-python",
|
"opencv-python>=4.10.0.84",
|
||||||
"scipy",
|
"opencv-contrib-python",
|
||||||
|
"scipy>=1.10.1",
|
||||||
],
|
],
|
||||||
|
extras_require={
|
||||||
|
"cuda12": ["cupy-cuda12x>=12.3.0"],
|
||||||
|
"cuda13": ["cupy-cuda13x>=13.0.0"],
|
||||||
|
# For backward compatibility, 'cuda' defaults to CUDA 12.x
|
||||||
|
"cuda": ["cupy-cuda12x>=12.3.0"],
|
||||||
|
},
|
||||||
python_requires=">=3.8",
|
python_requires=">=3.8",
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -446,7 +446,7 @@ class Stitcher:
|
|||||||
n_boxes = 0
|
n_boxes = 0
|
||||||
bk_thresh = 0 # initial black threshold
|
bk_thresh = 0 # initial black threshold
|
||||||
bk_thresh_step = 5
|
bk_thresh_step = 5
|
||||||
bk_thresh_max = 125
|
bk_thresh_max = 100
|
||||||
|
|
||||||
# Also include a low global V threshold to capture colored but dark tiles
|
# Also include a low global V threshold to capture colored but dark tiles
|
||||||
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
|
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
|
||||||
|
|||||||
Reference in New Issue
Block a user