# ZhousfLib
python常用工具库:coco数据集、labelme数据集、segmentation数据集、classification数据集制作和转换脚本;文件操作、表格操作、数据结构、web服务封装等工具集
### 模型推理框架
#### infer_framework/fast_infer/fast_infer:快速推理器
* [fastdeploy]:支持fastdeploy推理框架
* [tensorrt]:支持tensorrt模型自动转换和推理
* [onnx]:支持onnx模型自动转换和推理
* [torch]:支持torch模型自动转换和推理
```python
import fastdeploy
from pathlib import Path
from zhousflib.infer_framework.fast_infer import FastInfer
def demo_classification():
# 图像分类
model_dir = Path(r"D:\workspace\ZhousfLib\model\PPLCNet_x1_0_infer-v9")
fast = FastInfer(model_dir=model_dir, device_id=0)
runtime_option = fastdeploy.RuntimeOption()
# 采用onnx推理引擎
runtime_option.use_ort_backend()
"""
推理后端采用fastdeploy
模型组件采用PaddleClasModel
"""
fast.use_fastdeploy_backend(plugin="fd.vision.classification.PaddleClasModel", runtime_option=runtime_option)
result = fast.infer(input_data=model_dir.joinpath("test.png"))
print(result)
def demo_detection():
# 目标检测
model_dir = Path(r"D:\workspace\ZhousfLib\model\global_ppyoloe_plus_crn_l_80e_coco-v10")
fast = FastInfer(model_dir=model_dir, device_id=0)
runtime_option = fastdeploy.RuntimeOption()
# 采用tensorrt推理引擎
runtime_option.use_trt_backend()
# 保存trt文件
runtime_option.trt_option.serialize_file = str(model_dir.joinpath("model.trt"))
"""
推理后端采用fastdeploy
模型组件采用PPYOLOE
"""
fast.use_fastdeploy_backend(plugin="fd.vision.detection.PPYOLOE", runtime_option=runtime_option)
result = fast.infer(input_data=model_dir.joinpath("test.jpg"))
print(result)
def demo_segmentation():
# 图像分割
model_dir = Path(r"D:\workspace\ZhousfLib\model\local_pp_liteseg_512x512_1k-v5")
fast = FastInfer(model_dir=model_dir, device_id=-1)
"""
推理后端采用fastdeploy
模型组件采用PaddleSegModel
"""
fast.use_fastdeploy_backend(plugin="fd.vision.segmentation.PaddleSegModel")
image_file = model_dir.joinpath("test.jpg")
vis_image_file = image_file.with_name("{0}_vis{1}".format(image_file.stem, image_file.suffix))
# 保存并显示可视化文件vis_image_file
result = fast.infer(input_data=image_file,
vis_image_file=vis_image_file,
vis_show=True)
print(result.contain_score_map)
def demo_bert():
import torch
from zhousflib.infer_framework.ann.torch import torch_to_onnx
fast_infer = FastInfer(model_dir=Path(r"F:\torch\test"), device_id=0)
"""
推理后端采用tensorrt
推理平台采用torch
"""
fast_infer.use_tensorrt_backend(from_platform="torch",
module=torch.nn.Module(),
example_inputs=(torch_to_onnx.example_inputs_demo(device_id=0),),
dynamic_axes={'input_ids': {0: 'batch_size'},
'token_type_ids': {0: 'batch_size'},
'attention_mask': {0: 'batch_size'},
'output': {0: 'batch_size'}},
shape={"input_ids": [(10, 128), (10, 128), (10, 128)],
"token_type_ids": [(10, 128), (10, 128), (10, 128)],
"attention_mask": [(10, 128), (10, 128), (10, 128)]})
return fast_infer.infer(torch_to_onnx.example_inputs_demo()).tolist()
```
---
#### infer_framework/triton/client_http:triton
```python
def demo():
import numpy as np
from zhousflib.infer_framework.ann import to_numpy
from zhousflib.infer_framework.ann.torch.torch_to_onnx import example_inputs_demo
from zhousflib.infer_framework.triton.client_http import ClientHttp
args = example_inputs_demo(input_size=1)
data_arr = np.asarray([to_numpy(args[0].int()), to_numpy(args[1].int()), to_numpy(args[2].int())], dtype=np.int64)
client = ClientHttp(url="127.0.0.1:5005", concurrency=100)
"""
同步请求demo
"""
client.infer_sync_demo(data=data_arr, infer_count=500)
"""
异步请求demo
"""
# client.infer_async_demo(data=data_arr, infer_count=10)
```
---
#### infer_framework/ann:模型转换、加载、预测
* ann/onnx/onnx_to_trt:onnx转tensorRT
```python
def demo_onnx_to_trt():
from pathlib import Path
from zhousflib.infer_framework.ann.onnx.onnx_to_trt import convert_trt
convert_trt(onnx_file_path=Path(r"F:\torch\onnx\model.onnx"),
save_trt_path=Path(r"F:\torch\onnx\model_32.trt"),
use_fp16=True,
shape={"input_ids": [(10, 128), (10, 128), (50, 128)],
"token_type_ids": [(10, 128), (10, 128), (50, 128)],
"attention_mask": [(10, 128), (10, 128), (50, 128)]})
```
* ann/torch/torch_to_onnx:torch转onnx/加载onnx
```python
def convert_bert_demo():
"""
转换示例:以bert转onnx为例
:return:
"""
import torch
from pathlib import Path
from zhousflib.infer_framework.ann.torch.torch_to_onnx import convert_onnx, example_inputs_demo
convert_onnx(module=torch.nn.Module(),
model_dir=Path(r"F:\torch\train_model"),
export_dir=Path(r"F:\torch\onnx2"),
device="cpu", example_inputs=(example_inputs_demo(device_id=-1), ),
verbose=True,
export_params=True,
opset_version=10,
input_names=['input_ids', 'token_type_ids', 'attention_mask'],
output_names=['output'],
dynamic_axes={'input_ids': {0: 'batch_size'},
'token_type_ids': {0: 'batch_size'},
'attention_mask': {0: 'batch_size'},
'output': {0: 'batch_size'}})
```
* ann/torch/torch_to_script:torch转script/加载script
```python
def convert_bert_demo():
"""
转换示例:以bert转torchScript为例
:return:
"""
import torch
from pathlib import Path
from zhousflib.infer_framework.ann.torch.torch_to_script import convert_script_model, example_inputs_demo
convert_script_model(module=torch.nn.Module(),
model_dir=Path(r"F:\torch\train_model"),
export_dir=Path(r"F:\torch\script"),
device="cpu", example_inputs=(example_inputs_demo(), ))
```
* ann/transformers:加载tokenizer
* ann/tensorrt/tensorrt_infer:tensorRT推理
```python
def demo_trt_infer():
import numpy as np
from pathlib import Path
from zhousflib.infer_framework.ann import to_numpy
from zhousflib.infer_framework.ann.torch.torch_to_onnx import example_inputs_demo
from zhousflib.infer_framework.ann.tensorrt.tensorrt_infer import RTInfer
args = example_inputs_demo(input_size=1)
batch = np.asarray([to_numpy(args[0].int()), to_numpy(args[1].int()), to_numpy(args[2].int())])
rt_engine = RTInfer(trt_file_path=Path(r"F:\torch\onnx\model_32.trt"), device_id=0, use_stack=True)
data = rt_engine.infer(input_arr=batch)
print(data)
```
### 算法数据集制作
* [X] datasets/classification:数据集制作
* [X] datasets/coco:数据集制作、格式转换、可视化、统计、数据更新/合并/提取
* [X] datasets/labelme:数据集制作、格式转换、可视化、统计、数据更新/合并/提取
* [X] datasets/segmentation:数据集制作
### ML
* [X] ml/feature_vector:特征向量表示器
* [X] ml/model_cluster:kmeans聚类
* [X] ml/model_lr:线性回归
* [X] ml/model_gbdt:GBDT
### 数据库
* [X] db/lmdb:内存映射数据库
* [X] db/tinydb:轻量数据库,线程不安全
### 装饰器
* [X] decorator:异常捕获,AOP
### 文件操作
* [X] download:文件批量异步下载
* [X] delete_file:文件删除
### 字体
* [X] font:宋体、特殊符号字体
### 并发压测工具
* [X] locust:demo
### 表格文件工具
* [X] pandas:excel/csv操作、大文件读取
### pdf文件工具
* [X] pdf:pdf导出图片、pdf文本和表格提取
### so加密工具
* [X] so:python工程加密成so,防逆向
### web相关
* [X] web:flask日志工具、响应体、配置
### 通用工具包
* [X] util
* [util/cv_util]:opencv读写中文路径图片,图像相关处理
* [util/char_util]:字符相关处理,全角、半角
* [util/encrypt_util]:AES加密
* [util/iou_util]:IoU计算
* [util/json_util]:json读写
* [util/poly_util]:按照宽高对图片进行网格划分/切图
* [util/re_util]:re提取数字、字母、中文
* [util/singleton]:单例
* [util/string_util]:非空、包含、补齐
* [util/time_util]:日期、毫秒级时间戳、微秒级时间戳、日期比较
Raw data
{
"_id": null,
"home_page": "https://github.com/MrZhousf/ZhousfLib",
"name": "zhousf-lib",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6.13",
"maintainer_email": null,
"keywords": null,
"author": "zhousf",
"author_email": "442553199@qq.com",
"download_url": "https://files.pythonhosted.org/packages/e0/3e/889f68f273e860d2a5a666e50a4cde35e7684df889a9bc4de43cb3370ddb/zhousf-lib-1.6.7.6.tar.gz",
"platform": null,
"description": "# ZhousfLib\r\n\r\npython\u5e38\u7528\u5de5\u5177\u5e93\uff1acoco\u6570\u636e\u96c6\u3001labelme\u6570\u636e\u96c6\u3001segmentation\u6570\u636e\u96c6\u3001classification\u6570\u636e\u96c6\u5236\u4f5c\u548c\u8f6c\u6362\u811a\u672c\uff1b\u6587\u4ef6\u64cd\u4f5c\u3001\u8868\u683c\u64cd\u4f5c\u3001\u6570\u636e\u7ed3\u6784\u3001web\u670d\u52a1\u5c01\u88c5\u7b49\u5de5\u5177\u96c6\r\n\r\n### \u6a21\u578b\u63a8\u7406\u6846\u67b6\r\n#### infer_framework/fast_infer/fast_infer\uff1a\u5feb\u901f\u63a8\u7406\u5668\r\n\r\n* [fastdeploy]\uff1a\u652f\u6301fastdeploy\u63a8\u7406\u6846\u67b6\r\n* [tensorrt]\uff1a\u652f\u6301tensorrt\u6a21\u578b\u81ea\u52a8\u8f6c\u6362\u548c\u63a8\u7406\r\n* [onnx]\uff1a\u652f\u6301onnx\u6a21\u578b\u81ea\u52a8\u8f6c\u6362\u548c\u63a8\u7406\r\n* [torch]\uff1a\u652f\u6301torch\u6a21\u578b\u81ea\u52a8\u8f6c\u6362\u548c\u63a8\u7406\r\n\r\n```python\r\nimport fastdeploy\r\nfrom pathlib import Path\r\nfrom zhousflib.infer_framework.fast_infer import FastInfer\r\n\r\ndef demo_classification():\r\n # \u56fe\u50cf\u5206\u7c7b\r\n model_dir = Path(r\"D:\\workspace\\ZhousfLib\\model\\PPLCNet_x1_0_infer-v9\")\r\n fast = FastInfer(model_dir=model_dir, device_id=0)\r\n runtime_option = fastdeploy.RuntimeOption()\r\n # \u91c7\u7528onnx\u63a8\u7406\u5f15\u64ce\r\n runtime_option.use_ort_backend()\r\n \"\"\"\r\n \u63a8\u7406\u540e\u7aef\u91c7\u7528fastdeploy\r\n \u6a21\u578b\u7ec4\u4ef6\u91c7\u7528PaddleClasModel\r\n \"\"\"\r\n fast.use_fastdeploy_backend(plugin=\"fd.vision.classification.PaddleClasModel\", runtime_option=runtime_option)\r\n result = fast.infer(input_data=model_dir.joinpath(\"test.png\"))\r\n print(result)\r\n\r\ndef demo_detection():\r\n # \u76ee\u6807\u68c0\u6d4b\r\n model_dir = Path(r\"D:\\workspace\\ZhousfLib\\model\\global_ppyoloe_plus_crn_l_80e_coco-v10\")\r\n fast = FastInfer(model_dir=model_dir, device_id=0)\r\n runtime_option = fastdeploy.RuntimeOption()\r\n # \u91c7\u7528tensorrt\u63a8\u7406\u5f15\u64ce\r\n runtime_option.use_trt_backend()\r\n # \u4fdd\u5b58trt\u6587\u4ef6\r\n runtime_option.trt_option.serialize_file = str(model_dir.joinpath(\"model.trt\"))\r\n \"\"\"\r\n \u63a8\u7406\u540e\u7aef\u91c7\u7528fastdeploy\r\n \u6a21\u578b\u7ec4\u4ef6\u91c7\u7528PPYOLOE\r\n \"\"\"\r\n fast.use_fastdeploy_backend(plugin=\"fd.vision.detection.PPYOLOE\", runtime_option=runtime_option)\r\n result = fast.infer(input_data=model_dir.joinpath(\"test.jpg\"))\r\n print(result)\r\n\r\ndef demo_segmentation():\r\n # \u56fe\u50cf\u5206\u5272\r\n model_dir = Path(r\"D:\\workspace\\ZhousfLib\\model\\local_pp_liteseg_512x512_1k-v5\")\r\n fast = FastInfer(model_dir=model_dir, device_id=-1)\r\n \"\"\"\r\n \u63a8\u7406\u540e\u7aef\u91c7\u7528fastdeploy\r\n \u6a21\u578b\u7ec4\u4ef6\u91c7\u7528PaddleSegModel\r\n \"\"\"\r\n fast.use_fastdeploy_backend(plugin=\"fd.vision.segmentation.PaddleSegModel\")\r\n image_file = model_dir.joinpath(\"test.jpg\")\r\n vis_image_file = image_file.with_name(\"{0}_vis{1}\".format(image_file.stem, image_file.suffix))\r\n # \u4fdd\u5b58\u5e76\u663e\u793a\u53ef\u89c6\u5316\u6587\u4ef6vis_image_file\r\n result = fast.infer(input_data=image_file,\r\n vis_image_file=vis_image_file,\r\n vis_show=True)\r\n print(result.contain_score_map)\r\n\r\ndef demo_bert():\r\n import torch\r\n from zhousflib.infer_framework.ann.torch import torch_to_onnx\r\n fast_infer = FastInfer(model_dir=Path(r\"F:\\torch\\test\"), device_id=0)\r\n \"\"\"\r\n \u63a8\u7406\u540e\u7aef\u91c7\u7528tensorrt\r\n \u63a8\u7406\u5e73\u53f0\u91c7\u7528torch\r\n \"\"\"\r\n fast_infer.use_tensorrt_backend(from_platform=\"torch\",\r\n module=torch.nn.Module(),\r\n example_inputs=(torch_to_onnx.example_inputs_demo(device_id=0),),\r\n dynamic_axes={'input_ids': {0: 'batch_size'},\r\n 'token_type_ids': {0: 'batch_size'},\r\n 'attention_mask': {0: 'batch_size'},\r\n 'output': {0: 'batch_size'}},\r\n shape={\"input_ids\": [(10, 128), (10, 128), (10, 128)],\r\n \"token_type_ids\": [(10, 128), (10, 128), (10, 128)],\r\n \"attention_mask\": [(10, 128), (10, 128), (10, 128)]})\r\n return fast_infer.infer(torch_to_onnx.example_inputs_demo()).tolist()\r\n```\r\n---\r\n#### infer_framework/triton/client_http\uff1atriton\r\n```python\r\ndef demo():\r\n import numpy as np\r\n from zhousflib.infer_framework.ann import to_numpy\r\n from zhousflib.infer_framework.ann.torch.torch_to_onnx import example_inputs_demo\r\n from zhousflib.infer_framework.triton.client_http import ClientHttp\r\n args = example_inputs_demo(input_size=1)\r\n data_arr = np.asarray([to_numpy(args[0].int()), to_numpy(args[1].int()), to_numpy(args[2].int())], dtype=np.int64)\r\n client = ClientHttp(url=\"127.0.0.1:5005\", concurrency=100)\r\n \"\"\"\r\n \u540c\u6b65\u8bf7\u6c42demo\r\n \"\"\"\r\n client.infer_sync_demo(data=data_arr, infer_count=500)\r\n \"\"\"\r\n \u5f02\u6b65\u8bf7\u6c42demo\r\n \"\"\"\r\n # client.infer_async_demo(data=data_arr, infer_count=10)\r\n```\r\n---\r\n#### infer_framework/ann\uff1a\u6a21\u578b\u8f6c\u6362\u3001\u52a0\u8f7d\u3001\u9884\u6d4b\r\n* ann/onnx/onnx_to_trt\uff1aonnx\u8f6ctensorRT\r\n```python\r\ndef demo_onnx_to_trt():\r\n from pathlib import Path\r\n from zhousflib.infer_framework.ann.onnx.onnx_to_trt import convert_trt\r\n convert_trt(onnx_file_path=Path(r\"F:\\torch\\onnx\\model.onnx\"),\r\n save_trt_path=Path(r\"F:\\torch\\onnx\\model_32.trt\"),\r\n use_fp16=True,\r\n shape={\"input_ids\": [(10, 128), (10, 128), (50, 128)],\r\n \"token_type_ids\": [(10, 128), (10, 128), (50, 128)],\r\n \"attention_mask\": [(10, 128), (10, 128), (50, 128)]})\r\n```\r\n* ann/torch/torch_to_onnx\uff1atorch\u8f6connx/\u52a0\u8f7donnx\r\n```python\r\ndef convert_bert_demo():\r\n \"\"\"\r\n \u8f6c\u6362\u793a\u4f8b\uff1a\u4ee5bert\u8f6connx\u4e3a\u4f8b\r\n :return:\r\n \"\"\"\r\n import torch\r\n from pathlib import Path\r\n from zhousflib.infer_framework.ann.torch.torch_to_onnx import convert_onnx, example_inputs_demo\r\n convert_onnx(module=torch.nn.Module(),\r\n model_dir=Path(r\"F:\\torch\\train_model\"),\r\n export_dir=Path(r\"F:\\torch\\onnx2\"),\r\n device=\"cpu\", example_inputs=(example_inputs_demo(device_id=-1), ),\r\n verbose=True,\r\n export_params=True,\r\n opset_version=10,\r\n input_names=['input_ids', 'token_type_ids', 'attention_mask'],\r\n output_names=['output'],\r\n dynamic_axes={'input_ids': {0: 'batch_size'},\r\n 'token_type_ids': {0: 'batch_size'},\r\n 'attention_mask': {0: 'batch_size'},\r\n 'output': {0: 'batch_size'}})\r\n```\r\n* ann/torch/torch_to_script\uff1atorch\u8f6cscript/\u52a0\u8f7dscript\r\n```python\r\ndef convert_bert_demo():\r\n \"\"\"\r\n \u8f6c\u6362\u793a\u4f8b\uff1a\u4ee5bert\u8f6ctorchScript\u4e3a\u4f8b\r\n :return:\r\n \"\"\"\r\n import torch\r\n from pathlib import Path\r\n from zhousflib.infer_framework.ann.torch.torch_to_script import convert_script_model, example_inputs_demo\r\n convert_script_model(module=torch.nn.Module(),\r\n model_dir=Path(r\"F:\\torch\\train_model\"),\r\n export_dir=Path(r\"F:\\torch\\script\"),\r\n device=\"cpu\", example_inputs=(example_inputs_demo(), ))\r\n```\r\n\r\n* ann/transformers\uff1a\u52a0\u8f7dtokenizer\r\n* ann/tensorrt/tensorrt_infer\uff1atensorRT\u63a8\u7406\r\n```python\r\ndef demo_trt_infer():\r\n import numpy as np\r\n from pathlib import Path\r\n from zhousflib.infer_framework.ann import to_numpy\r\n from zhousflib.infer_framework.ann.torch.torch_to_onnx import example_inputs_demo\r\n from zhousflib.infer_framework.ann.tensorrt.tensorrt_infer import RTInfer\r\n args = example_inputs_demo(input_size=1)\r\n batch = np.asarray([to_numpy(args[0].int()), to_numpy(args[1].int()), to_numpy(args[2].int())])\r\n rt_engine = RTInfer(trt_file_path=Path(r\"F:\\torch\\onnx\\model_32.trt\"), device_id=0, use_stack=True)\r\n data = rt_engine.infer(input_arr=batch)\r\n print(data)\r\n```\r\n\r\n\r\n### \u7b97\u6cd5\u6570\u636e\u96c6\u5236\u4f5c\r\n\r\n* [X] datasets/classification\uff1a\u6570\u636e\u96c6\u5236\u4f5c\r\n* [X] datasets/coco\uff1a\u6570\u636e\u96c6\u5236\u4f5c\u3001\u683c\u5f0f\u8f6c\u6362\u3001\u53ef\u89c6\u5316\u3001\u7edf\u8ba1\u3001\u6570\u636e\u66f4\u65b0/\u5408\u5e76/\u63d0\u53d6\r\n* [X] datasets/labelme\uff1a\u6570\u636e\u96c6\u5236\u4f5c\u3001\u683c\u5f0f\u8f6c\u6362\u3001\u53ef\u89c6\u5316\u3001\u7edf\u8ba1\u3001\u6570\u636e\u66f4\u65b0/\u5408\u5e76/\u63d0\u53d6\r\n* [X] datasets/segmentation\uff1a\u6570\u636e\u96c6\u5236\u4f5c\r\n\r\n\r\n### ML\r\n\r\n* [X] ml/feature_vector\uff1a\u7279\u5f81\u5411\u91cf\u8868\u793a\u5668\r\n* [X] ml/model_cluster\uff1akmeans\u805a\u7c7b\r\n* [X] ml/model_lr\uff1a\u7ebf\u6027\u56de\u5f52\r\n* [X] ml/model_gbdt\uff1aGBDT\r\n\r\n### \u6570\u636e\u5e93\r\n\r\n* [X] db/lmdb\uff1a\u5185\u5b58\u6620\u5c04\u6570\u636e\u5e93\r\n* [X] db/tinydb\uff1a\u8f7b\u91cf\u6570\u636e\u5e93\uff0c\u7ebf\u7a0b\u4e0d\u5b89\u5168\r\n\r\n### \u88c5\u9970\u5668\r\n\r\n* [X] decorator\uff1a\u5f02\u5e38\u6355\u83b7\uff0cAOP\r\n\r\n### \u6587\u4ef6\u64cd\u4f5c\r\n\r\n* [X] download\uff1a\u6587\u4ef6\u6279\u91cf\u5f02\u6b65\u4e0b\u8f7d\r\n* [X] delete_file\uff1a\u6587\u4ef6\u5220\u9664\r\n\r\n### \u5b57\u4f53\r\n\r\n* [X] font\uff1a\u5b8b\u4f53\u3001\u7279\u6b8a\u7b26\u53f7\u5b57\u4f53\r\n\r\n### \u5e76\u53d1\u538b\u6d4b\u5de5\u5177\r\n\r\n* [X] locust\uff1ademo\r\n\r\n### \u8868\u683c\u6587\u4ef6\u5de5\u5177\r\n\r\n* [X] pandas\uff1aexcel/csv\u64cd\u4f5c\u3001\u5927\u6587\u4ef6\u8bfb\u53d6\r\n\r\n### pdf\u6587\u4ef6\u5de5\u5177\r\n\r\n* [X] pdf\uff1apdf\u5bfc\u51fa\u56fe\u7247\u3001pdf\u6587\u672c\u548c\u8868\u683c\u63d0\u53d6\r\n\r\n### so\u52a0\u5bc6\u5de5\u5177\r\n\r\n* [X] so\uff1apython\u5de5\u7a0b\u52a0\u5bc6\u6210so\uff0c\u9632\u9006\u5411\r\n\r\n### web\u76f8\u5173\r\n\r\n* [X] web\uff1aflask\u65e5\u5fd7\u5de5\u5177\u3001\u54cd\u5e94\u4f53\u3001\u914d\u7f6e\r\n\r\n### \u901a\u7528\u5de5\u5177\u5305\r\n\r\n* [X] util\r\n\r\n* [util/cv_util]\uff1aopencv\u8bfb\u5199\u4e2d\u6587\u8def\u5f84\u56fe\u7247\uff0c\u56fe\u50cf\u76f8\u5173\u5904\u7406\r\n* [util/char_util]\uff1a\u5b57\u7b26\u76f8\u5173\u5904\u7406\uff0c\u5168\u89d2\u3001\u534a\u89d2\r\n* [util/encrypt_util]\uff1aAES\u52a0\u5bc6\r\n* [util/iou_util]\uff1aIoU\u8ba1\u7b97\r\n* [util/json_util]\uff1ajson\u8bfb\u5199\r\n* [util/poly_util]\uff1a\u6309\u7167\u5bbd\u9ad8\u5bf9\u56fe\u7247\u8fdb\u884c\u7f51\u683c\u5212\u5206/\u5207\u56fe\r\n* [util/re_util]\uff1are\u63d0\u53d6\u6570\u5b57\u3001\u5b57\u6bcd\u3001\u4e2d\u6587\r\n* [util/singleton]\uff1a\u5355\u4f8b\r\n* [util/string_util]\uff1a\u975e\u7a7a\u3001\u5305\u542b\u3001\u8865\u9f50\r\n* [util/time_util]\uff1a\u65e5\u671f\u3001\u6beb\u79d2\u7ea7\u65f6\u95f4\u6233\u3001\u5fae\u79d2\u7ea7\u65f6\u95f4\u6233\u3001\u65e5\u671f\u6bd4\u8f83\r\n\r\n\r\n\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "a python library of zhousf",
"version": "1.6.7.6",
"project_urls": {
"Homepage": "https://github.com/MrZhousf/ZhousfLib"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "46d0aff31040a193c5c032c6c4c2d275dc861623abbca77e22b9c89c59243fbb",
"md5": "55e6b9036195acd52717961685991687",
"sha256": "f5a5d1699cdd560f953d7bb42e71bee818d958364493210fc45f5ae5ec136f27"
},
"downloads": -1,
"filename": "zhousf_lib-1.6.7.6-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "55e6b9036195acd52717961685991687",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=3.6.13",
"size": 9161692,
"upload_time": "2024-11-18T06:09:31",
"upload_time_iso_8601": "2024-11-18T06:09:31.358244Z",
"url": "https://files.pythonhosted.org/packages/46/d0/aff31040a193c5c032c6c4c2d275dc861623abbca77e22b9c89c59243fbb/zhousf_lib-1.6.7.6-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e03e889f68f273e860d2a5a666e50a4cde35e7684df889a9bc4de43cb3370ddb",
"md5": "5f28780342b817303fe345a13ab53bc6",
"sha256": "1ecce8693a95ec23426a43f9ec64bff7a64f6c0ea8079682fcf10a546a4d51ac"
},
"downloads": -1,
"filename": "zhousf-lib-1.6.7.6.tar.gz",
"has_sig": false,
"md5_digest": "5f28780342b817303fe345a13ab53bc6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6.13",
"size": 9090957,
"upload_time": "2024-11-18T06:09:34",
"upload_time_iso_8601": "2024-11-18T06:09:34.244548Z",
"url": "https://files.pythonhosted.org/packages/e0/3e/889f68f273e860d2a5a666e50a4cde35e7684df889a9bc4de43cb3370ddb/zhousf-lib-1.6.7.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-18 06:09:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "MrZhousf",
"github_project": "ZhousfLib",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "zhousf-lib"
}