2个不稳定版本
0.2.0 | 2022年12月16日 |
---|---|
0.1.0 | 2022年11月26日 |
#2149 in 解析器实现
69KB
1.5K SLoC
统一神经形态数据集仓库
入门
安装undr模块
pip3 install undr
生成默认配置文件
python3 -m undr init
生成的undr.toml文件使用TOML格式(https://github.com/toml-lang/toml)。它列出了将要下载或流式传输的数据集,因此需要根据您的需求进行调整。
行 directory = 'datasets'
指定了下载文件存储的目录(相对于配置文件)。所有由 undr
生成的文件(目录索引、下载的数据、临时文件等)都存储在这个目录中。
数据集以 [[datasets]]
条目形式列出,具有三个强制属性: name
、url
和 mode
。可选的 server_type
属性用于内部加速下载过程。要删除数据集,您可以从配置文件中删除它,或者使用 #
符号注释掉所有行。
mode
根据数据集更改下载策略,有三个可能的值
'remote'
仅下载数据集的文件索引。可以使用undr
Python包从服务器流式传输文件,以便像在您的硬盘上一样处理数据集文件。此选项特别适用于不适合您的磁盘但需要快速互联网连接的大型数据集,因为文件在每次处理时都会重新下载。'local'
在本地下载所有数据集文件,但不会解压缩它们(大多数数据集以 Brotli 归档存储)。当您读取文件时,undr
Python库会透明地在内存中解压缩文件,这使得此选项在磁盘使用和处理速度之间提供了一个很好的折中方案。'local-decompressed'
将所有数据集文件本地下载并解压。解压后的文件使用相对低效的纯二进制文件格式,因此此选项需要大量的磁盘空间(比Brotli存档多3到5倍)。另一方面,纯二进制格式便于与其他语言如Matlab或C++进行处理。
undr
还支持混合配置,其中只下载或解压数据集的一部分。您也可以在没有服务器的情况下使用本地目录。有关详细信息,请参阅[尚未记录]。
下载数据集
python3 -m undr install
此命令下载数据集文件索引。如果 mode
是 'compressed'
或 'decompress'
,它还会下载数据集文件(可能还会解压它们)。
此命令可随时通过 CTRL + C 中断。重新运行它将从上次中断处继续下载。
生成BibTex文件
python3 -m undr bibtex --output datasets.bib
UNDR项目不声称拥有数据集的著作权。请使用此文件引用原始文章。
Python模块
pip3 install undr
Python API
API名称 | 复杂度 | 可配置性 | 并行处理 | 进度显示 |
---|---|---|---|---|
循环 | 简单 | 高 | 无 | 无 |
映射 | 简单 | 低 | 是 | 是 |
任务 | 复杂 | 高 | 是 | 是 |
所有三种方法都支持进度持久化。进度持久化略微增加了代码的复杂性,但使得在网络或电源故障后能够恢复处理。
数据集格式规范
-index.json
理由
- 在前面添加一个特殊字符以确保索引文件在ASCII中首先排序
- 使用未保留的URL字符以避免转义问题
- 未保留的URL字符(
-
/.
/_
/~
,参见https://www.rfc-editor.org/rfc/rfc3986#section-2).
在UNIX系统上会导致隐藏文件_
在ASCII中位于字母数字字符之后~
在许多shell中是用户主目录的快捷方式
许多命令行程序将 -index.json
视为一个标志,因此像 cat -index.json
这样的命令会返回错误。将 ./
预先添加到文件名可以避免这个问题:cat ./-index.json
。
数据集镜像
示例配置
Apache
<VirtualHost *:80>
Alias / /path/to/local/directory/
<Directory "/path/to/local/directory/">
Require all granted
Options +Indexes
</Directory>
</VirtualHost>
要使用另一个端口,请记得同时编辑 /etc/apache2/ports.conf。
Nginx
server {
listen 80;
location / {
alias /path/to/local/directory/;
autoindex on;
sendfile on;
tcp_nopush on;
sendfile_max_chunk 1m;
}
}
上传数据集
-
python3-m undr check-一致性/路径/到/数据集
-
注意事项:UNDR服务器可以为每个资源提供多个压缩文件(不同格式)。Python UNDR库总是选择最佳的压缩(最小编码大小)。
check-conformity
只检查最佳压缩,不会报告其他压缩的错误。 -
针对macOS用户 (.DS_Store)
添加到 ~/.zshrc
# rmdsstore removes .DS_Store files recursively
rmdsstore() {
if [ $# -eq 0 ]; then
printf 'usage: rmdsstore directory\n' >&2
return
fi
find "$1" -name ".DS_Store" -delete -print
}
在运行 python3 -m undr check-conformity /path/to/dataset
之前,请先运行 rmdsstore /path/to/dataset
。
贡献
cd python
black . # format the source code (see https://github.com/psf/black)
pyright . #check types (see https://github.com/microsoft/pyright)
python3 -m pip install -e . # local installation
发布模块
-
在setup.py中增加版本号。
-
安装twine。
pip3 install twine
- 将源代码上传到PyPI。
rm -rf dist
python3 setup.py sdist
python3 -m twine upload dist/*
构建应用
- 将UNDR库复制到应用程序构建树中。
python3 app/interface-prebuild.py
- 使用Cubuzoa打包Python应用程序。
cd /path/to/cubuzoa
python3 cubuzoa.py build /path-to-undr/app/python --os linux --version '==3.8'
python3 cubuzoa.py build /path-to-undr/app/python --os 'macos|windows' --version '==3.9'
或仅为您自己的平台构建
cd app/interface
mkdir local-build
cd local-build
pyinstaller --distpath ../build --add-data ../undr/-index_schema.json:undr --add-data ../undr/undr_default.toml:undr --add-data ../undr/undr_schema.json:undr -n interface-cp39-macosx -y ../interface.py
- 删除UNDR库副本
rm -rf app/python/undr
- 构建Electron应用程序
cd app
npm run release # or npm run watch for continuous development
使用现有CLI下载
wget --no-parent --recursive --level=inf https://127.0.0.1:5432/dvs09/ find . -iname '*.br' | while read filename; do brotli -d -j "$filename"; done;
依赖关系
~15–28MB
~584K SLoC