zhousf-lib


Namezhousf-lib JSON
Version 1.6.7.6 PyPI version JSON
download
home_pagehttps://github.com/MrZhousf/ZhousfLib
Summarya python library of zhousf
upload_time2024-11-18 06:09:34
maintainerNone
docs_urlNone
authorzhousf
requires_python>=3.6.13
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 0.41183s