# Document AI Tools
>***更新时间：2023-05-17***

在当前目录下，需要安装依赖包 运行命令 *pip install -r requirements.txt*
## 1. 通用
### 1.1 图片角度矫正
#### img_correct.py
- 运行指令 *python img_correct.py --img_dir ./imgs --save_dir ./corrected_imgs*
- 参数img_dir和img_path不能同时使用

| **参数名**    | **数据类型** | **默认值**          | **说明**     |
|------------|:--------:|------------------|------------|
| --img_dir  |   str    | ' '              | 待矫正图片文件夹路径 |
| --img_path |   str    | ' '              | 待矫正图片的路径   |
| --save_dir |   str    | ./corrected_imgs | 矫正后图片保存路径  |
对应项目--correct_imgs_rotation

### 1.2 pdf文件转图片
#### img_to_pdf.py
- 将多张图片组合成一个pdf文件
- 运行指令  *python img_to_pdf.py --img_dir ./images --save_dir ./pdf_file*

| **参数名**    | **数据类型** | **默认值**    | **说明**         |
|------------|:--------:|------------|----------------|
| --img_dir  |   str    | ./images   | 需要转pdf的图片文件夹路径 |
| --save_dir |   str    | ./pdf_file | 生成pdf文件的保存路径   |
#### pdf_to_image.py
- 运行指令 *python pdf_to_image.py --pdf_dir ./pdf_file --save_dir ./pdf_images*
- 参数pdf_dir和pdf_path不能同时使用

| **参数名**    | **数据类型** | **默认值**      | **说明**          |
|------------|:--------:|--------------|-----------------|
| --pdf_dir  |   str    | ' '          | 需要转图片的pdf文件夹路径  |
| --pdf_path |   str    | ' '          | 需要转图片的单个pdf文件路径 |
| --save_dir |   str    | ./pdf_images | 生成图片的保存路径       |
对应项目--pdf_rename_to_images

### 1.3 图片重命名
#### images_rename.py
- 运行指令 *python images_rename.py --img_dir ./images --save_dir ./images_result*

| **参数名**    | **数据类型** | **默认值**         | **说明**        |
|------------|:--------:|-----------------|---------------|
| --img_dir  |   str    | ./images        | 待重命名图片文件夹所在路径 |
| --save_dir |   str    | ./images_result | 重命名后图片的保存路径   |
*命名规范：kdan_year-month-day_index[0:8]_uuid[0:4].jpg*
对应项目--Images_rename

### 1.4 根据label截图保存
#### cut_roi_save.py
- 数据准备：labelme标注的原始数据集（图片和json文件在同目录下）；
- 运行指令 *python cut_roi_save.py --input_dirs ./fold1 ./fold2 --label Table --save_dir ./images --size 300*

| **参数名**      | **数据类型**  | **默认值**         | **说明**                            |
|--------------|:---------:|-----------------|-----------------------------------|
| --input_dirs | [str,str] | ./fold1 ./fold2 | 待处理的多个文件夹（图片以及json）路径，每条路径之间用空格隔开 |
| --label      |    str    | Table           | 截取图片的标签名[Table,Figure]            |
| --save_dir   |    str    | ./images        | 截取图片的保存路径                         |
| --size       |    int    | 0               | 等比缩放短边需达到的尺寸(如不设置此参数，则按原尺寸保存)     |
对应项目--screenshot_save_by_label

### 1.5 半自动标注
#### infer_demo.py
- 运行指令 *python infer_demo.py --model_path ./onnx_ile/picodet_l_416_lp_0826.onnx --class_file ./lp_label.txt --conf_Threshold 0.5 --img_dir ./images --result_dir ./result*

| **参数名**          | **数据类型** | **默认值**                                | **说明**                   |
|------------------|:--------:|----------------------------------------|--------------------------|
| --model_path     |   str    | ./onnx_file/picodet_l_416_lp_0826.onnx | 本次使用onnx文件的路径            |
| --class_file     |   str    | ./lp_label.txt                         | label文件（所有label以及对应id）路径 |
| --conf_Threshold |  float   | 0.5                                    | 类别置信分数，大于此分数的预测目标才会被保留   |
| --img_dir        |   str    | ./imgs                                 | 需进行的标注的图片文件夹路径           |
| --result_dir     |   str    | ./result                               | 可视化的图片结果过图片保存路径          |
对应项目--semi_auto_labeling

#### auto_label.py
- 使用自己的SDK进行半自动标注
- 运行指令 *python auto_label.py --mode ~.model --model_licence ~.txt --score 0.5 --image_dir ./images --view_result_dir ./result*

| **参数名**          | **数据类型** | **默认值**                                | **说明**                   |
|------------------|:--------:|----------------------------------------|--------------------------|
| --mode           |   str    | ~.model                                | SDK模型的路径            |
| --model_licence  |   str    | ~.txt                                  | SDK模型的licence |
| --score          |  float   | 0.5                                    | 类别置信分数，大于此分数的预测目标才会被保留   |
| --image_dir      |   str    | ./images                               | 需进行的标注的图片文件夹路径           |
| --view_result_dir     |   str    | ./result                               | 可视化的图片结果过图片保存路径          |
对应项目--SDK_Auto_Label

#### auto_add_label.py
- 使用自己的SDK在已有的标注下进行半自动添加标注，要根据添加的标签对应改动代码
- 运行指令 *python auto_label.py --mode ~.model --model_licence ~.txt --score 0.5 --image_dir ./images --view_result_dir ./result*

| **参数名**          | **数据类型** | **默认值**                                | **说明**                   |
|------------------|:--------:|----------------------------------------|--------------------------|
| --mode           |   str    | ~.model                                | SDK模型的路径            |
| --model_licence  |   str    | ~.txt                                  | SDK模型的licence |
| --score          |  float   | 0.5                                    | 类别置信分数，大于此分数的预测目标才会被保留   |
| --image_dir      |   str    | ./images                               | 需进行添加标注的图片文件夹路径           |
| --view_result_dir     |   str    | ./result                               | 可视化的图片结果过图片保存路径          |
对应项目--SDK_Auto_Label



## 2. 检测
### 2.1 单个labelme格式数据集划分、转coco格式
#### labelme_to_coco.py 
- 将单个文件夹（labelme标注格式）划分、转换为coco格式数据集
- 运行指令 *python labelme_to_coco.py --labelme_dir ./images --save_coco_dir ./coco_dataset*

| **参数名**         | **数据类型** | **默认值**        | **说明**                     |
|-----------------|:--------:|----------------|----------------------------|
| --labelme_dir   |   str    | ./images       | labelme标注格式数据集路径           |
| --save_coco_dir |   str    | ./coco_dataset | 划分训练集、验证集并转换coco格式数据集保存的路径 |
对应项目--divide_and_convert_to_coco_single_fold

### 2.2 多个labelme格式数据集合并、划分、转coco格式
#### merge_and_divide.py
- 合并多个labelme标注格式的文件夹，并划分、转换为coco格式数据集
- 运行指令 *python merge_and_divide.py --anno_dirs ./fold1 ./fold2 --train_ratio 0.8*

| **参数名**       | **数据类型** | **默认值**         | **说明**      |
|---------------|:--------:|-----------------|-------------|
| --anno_dirs   |  [str]   | ./fold1 ./fold2 | 多个文件夹，空格隔开  |
| --train_ratio |  float   | 0.8             | coco格式训练集比例 |
对应项目--merge_and_divide_to_coco_multi_folds

### 2.3 将Labelme导出的json文件转换成Label_Studio导出的json文件
#### Labelme2Lable_Studio.py
- 将多个labelme标注的json文件转换成可以导入到Label_Studio的json文件
- 运行指令 *python Labelme2Lable_Studio.py --labelme_dirs ./fold1 ./fold2 --project_id project_id

| **参数名**       | **数据类型** | **默认值**         | **说明**      |
|---------------|:--------:|-----------------|-------------|
| --anno_dirs   |  [str]   | ./fold1 ./fold2 | 多个存储Labelme导出的json文件夹，空格隔开  |
| --train_ratio |  int   | project_id             | 对应到Label_Studio的项目编号 |
对应项目--Labelme_LabelStudio

### 2.4 将Label_Studio导出的json文件转换成Labelme导出的json文件
#### Label_Studio2Labelme.py
- 将Label_Studio导出的单个json文件转换成Labelme标注格式的json文件
- 运行指令 *python Label_Studio2Labelme.py --Label_Studio_json_dirs ./fold1 ./fold2 --Labelme_json_dir ./fold3

| **参数名**       | **数据类型** | **默认值**         | **说明**      |
|---------------|:--------:|-----------------|-------------|
| --anno_dirs   |  [str]   | ./fold1 ./fold2 | 多个存储Label_Studio导出的json文件夹，空格隔开  |
| --train_ratio |  str   | ./fold3             | 存放Labelme标注格式的json文件夹 |
对应项目--Labelme_LabelStudio


## 3. 分类
### 3.1 字体图片生成
#### generate_imgs_by_fonts.py
- 根据语料库内容生成对应字体的图片，白底黑字
- 运行指令 *python create_imgs_by_fonts.py --font_dir ./eng_fonts --text_path ./text/eng_text.txt --save_dir ./output*

| **参数名**     | **数据类型** | **默认值**                    | **说明**   |
|-------------|:--------:|----------------------------|----------|
| --font_dir  |   str    | ./eng_fonts                | 字体文件目录   |
| --text_path |   str    | ./text/eng_text.txt        | 语料库文件路径  |
| --save_dir  |   str    | ./font_img_dataset/windows | 生成图片保存路径 |
对应项目--fonts_images_generate

### 3.2 语料库生成
#### generate.py
- 根据文字字典生成字体分类所需的语料库
- 运行指令 *python generate.py --start 2 --end 30 --step 2 --dict_path ./chn_dict.txt --save_path ./text/text.txt*

| **参数名**     | **数据类型** | **默认值**         | **说明**      |
|-------------|:--------:|-----------------|-------------|
| --start     |   int    | 0               | 生成单句语料的最小长度 |
| --end       |   int    | 30              | 生成单句语料的最大长度 |
| --step      |   int    | 2               | 单句语料长度的步长   |
| --word_num  |   int    | 10              | 单句出现的次数     |
| --dict_path |   str    | ./chn_dict.txt  | 文字字典路径      |
| --save_path |   str    | ./text/text.txt | 生成的语料库文件路径  |
对应项目--dictionary_generate

### 3.3 带角度图像生成
#### make_rotated.py
- 根据指定的图片，从0度开始以15度为角度增量，生成带旋转角度的图片，缺失部分用白色背景填充
- 然后将生成的图片划分为4类，img_0, img_90, img_180, img_270
- 运行指令  *python make_rotated.py --img_dir ./images --save_dir ./images_rotated*

| **参数名**    | **数据类型** | **默认值**           | **说明**       |
|------------|:--------:|-------------------|--------------|
| --img_dir  |   str    | ./images          | 图片文件夹路径      |
| --save_dir |   str    | ./imgages_rotated | 生成的旋转的图片保存路径 |

对应项目--text_image_orientation_dataset_generate

### 3.4 分类数据集划分
#### divide_train_eval.py
- 运行指令 *python divide_train_eval.py --img_dir ./windows --train_ratio 0.8*

| **参数名**       | **数据类型** | **默认值**                    | **说明**      |
|---------------|:--------:|----------------------------|-------------|
| --img_dir     |   str    | ./font_img_dataset/windows | 待划分的图片文件夹路径 |
| --train_ratio |  float   | 0.8                        | 训练集所占比例     |
对应项目--classification_dataset_divide

## 4. OCR相关（对应文件tw_idcard_generator）
- 项目结构说明

| **文件名**                            | **说明**                        |
|------------------------------------|:------------------------------|
| bgs                                | 存放背景图                         |
| fonts                              | 存放字体文件                        | 
| materials                          | 存放各个工具中使用的字典、语料文件             | 
| cut_save.py                        | 截取文件夹下所有图片的特定区域并保存            |
| dict_generate.py                   | 生成文字识别需要的字典文件                 |
| divide_rec_train_val.py            | 将文字识别数据集划分成为训练集和验证集           |
| get_addr.py                        | 爬虫获取身份证背面的住址                  |
| idcard_det_rec_generate_back.py    | 生成台湾身份证背面图片                   |
| idcard_det_rec_generate_forward.py | 生成台湾身份证正面图片，并同时制作正面识别数据集      |
| info_generate.py                   | 信息生成，包括台湾身份证正面的姓名、生日、发证时间，id等 |


### 4.1 文字检测数据集生成（台湾身份证）

#### idcard_det_rec_generate_forward.py

| **参数名**       | **数据类型** | **默认值**                    | **说明**      |
|---------------|:--------:|----------------------------|-------------|
| --img_dir     |   str    | ./font_img_dataset/windows | 待划分的图片文件夹路径 |
| --train_ratio |  float   | 0.8                        | 训练集所占比例     |



**以上所述的路径，相对路径、绝对路径均可**

<u>*KDAN MOBILE SOFTWARE LTD. all rights reserved*</u>