semvec/pypi-packages huggingface dataset:
echoss-s3handler 0.1.2
echoss AI Bigdata Solution - S3 handler
Requires Python: >3.7
Keywords: echoss, echoss_s3handler, s3handler, s3_handler

## import 방법
 -  from echoss_s3handler import s3_handler

custom yolov7과 image_utils의 함수 사용시 S3에 있는 데이터를 사용하고자 하여 만든 Class

크게 두가지의 class가 존재함
1. client를 활용한 clas
2. resource를 활용한 class

# Client Class
내부 주요 함수
```
    # s3 config 파일 읽기
    with open("../s3 config file path/ai_solution_dataset_test.yaml") as f:
        data_dict = yaml.load(f, Loader=yaml.SafeLoader)
    # class 할당
    s3_client = S3ClientHandler(data_dict)
    
    
    s3_client.get_bucket_list()
     - 현재 config 파일에 해당하는 접속 계정에 있는 bucket들의 정보를 출력해준다.(버킷명, 버킷 생성날짜 등)
    
    s3_client.get_object_info()
     - parameter로 입력된 object의 마지막 수정일시(YYYY-MM-DD HH:MM:SS 꼴)와 s3link를 출력해준다.
    
    s3_client.get_object_list()
     - parameter로 입력된 prefix와 after_ts(기준이되는 시간 입렵 포맷:"2023-02-28 00:00:00")를 확인하여 object들의 path를 list로 반환한다.
```

# Resource Class
내부 주요 함수
```
    # s3 config 파일 읽기
    with open("../s3 config file path/ai_solution_dataset_test.yaml") as f:
        data_dict = yaml.load(f, Loader=yaml.SafeLoader)
    # class 할당
    s3_resource = S3ResourceHandler(data_dict)
    
    
    s3_resource.get_bucket_list()
     - 현재 config 파일에 해당하는 접속 계정에 있는 bucket들의 정보를 출력해준다.(버킷명, 버킷 생성날짜 등)
     - data_info를 True로 하게 되면 출력이 버킷명이 key값, 마지막 생성일자를 vlaue로 하는 Dict형태로 출력되며,
     false로 하면 버킷의 목록만 list형태로 출력.
    
    s3_resource.get_object_info()
     - parameter로 입력된 object의 마지막 수정일시(YYYY-MM-DD HH:MM:SS 꼴)와 s3link를 출력해준다.
    
    s3_resource.get_object_list()
     - parameter로 입력된 prefix와 after_ts(기준이되는 시간 입렵 포맷:"2023-02-28 00:00:00")를 확인하여 object들의 path를 list로 반환한다.
    
    s3_resource.download_object()
     - S3에 있는 object를 local에 다운로드하기 위한 함수
    
    s3_resource.upload_object()
     - locla에 있는 데이터를 S3에 업로드하기 위한 함수
    
    s3_resource.put_object()
     - 메모리상으로 저장되어있는 json혹은 txt 데이터를 S3 object로 업로드하는데 사용하는 함수
     - 이미지도 업로드할 수 있으나 이때에는 아래와 같이 이미지를 PIL, io라이브러리를 이용하여 가공한 뒤 업로드를 해야합니다.
        img0 = Image.fromarray(im0, mode='RGB')
        out_img = io.BytesIO()
        img0.save(out_img, format='png')
        out_img.seek(0)
    
    s3_resource.s3tos3_put_object()
     - 서로 다른 S3계정간의 데이터를 local에 따로 다운로드 한 뒤 업로드 하는 것이 아닌 메모리상으로 불러 업로드하는 함수
    
    s3_resource.read_file()
     - S3에 있는 파일을 메모리로 읽기 위한 함수
    
    s3_resource.read_image()
     - S3에 있는 이미지 파일을 메모리로 읽는 함수
     - 이후 사용되는 이미지 형식에 따라 옵션에 "cv2", "PIL"을 선택하여 사용 가능
    
```

```python

```
echoss-image-utils 0.1.2
echoss AI Bigdata Solution - image utils[image dataset split, labelme2yolo format]
Requires Python: >3.7
Keywords: echoss, echoss_image_utils, labelme2yolo, labelme, yolo

# **labelme2yolo**

## 소개

labelme를 이용하여 어노테이션 작업을 한 josn파일을 yolo학습이 가능하도록 txt파일로 변환해주는 기능

## 사용법
Commad line
```
    python labelme2yolo.py --json_dir=<s3데이터를 사용한다면 None, 아니면 json파일들이 있는 폴더 경로> --s3_data=<s3데이터를 사용하는지 아닌지에대한 bool값>\
    --s3_yaml=<s3접속 정보가 담긴 .yaml파일의 경로>  --json_db_table=<사용하려는 json 데이터 베이스의 테이블 명>
```
--s3_data에 입력되는 .yaml파일의 양식 및 필수 키 값
```
    # labelme2yolo config
    db_region: 'kr_local'
    image_data_path: images/bb_seg_data/
    json_data_path: json_labels/bb_seg_data/
    yolo_data_path: yolo_labels/bb_seg_data/
    detect_save_path: 'results/'

    # s3 config
    s3: True  # True or False

    bucket: 'bucket-name'
    endpoint_url: 'https://kr.object.ncloudstorage.com'
    region_name: 'kr-standard'
    access_key: 'access-key'
    access_token: 'secret-token-key'
```

## 사용 예시
.59 서버에서 작동 시
```
    cd jupyter_notebooks/image_utils
    
    python labelme2yolo.py --json_dir=None --s3_data=True --s3_yaml=../data/45_abalone_data/yolo_data/ai_solution_dataset_test.yaml --json_db_table='p1_json_info'

```


# **img_dataset_split**

## 소개
어노테이션 작업이 완료 된 json 혹은 txt 파일을 기준으로 Train, Validation, Test를 원하는 비율에 맞게 나누어서 목록을 생성해주는 기능

## 사용법
Commad line
```
    python img_dataset_split.py --yaml_file_path=<s3접속 정보가 담긴 .yaml파일의 경로> --ratio=<train,val,test 비율 기입 예) 8,1,1 > \
    --db_config_file_path=<db 접속정보가 담긴 config파일 경로> --save_path=<저장하고 싶은 경로 및 이름> --random_seed=55 \
    --json_db_table=<json data의 정보가 있는 테이블 명> --image_db_table=<image data의 정보가 있는 테이블 명> --use_s3=<s3데이터를 사용하는지 아닌지에대한 bool값>
```

--yaml_file_path 입력되는 .yaml파일의 양식 및 필수 키 값
```
    # labelme2yolo config
    db_region: 'kr_local'

    # s3 config
    s3: True  # True or False

    bucket: 'bucket-name'
    endpoint_url: 'https://kr.object.ncloudstorage.com'
    region_name: 'kr-standard'
    access_key: 'access-key'
    access_token: 'secret-token-key'
```
```

## 사용 예시
.59 서버에서 작동 시
```
    cd jupyter_notebooks/image_utils
    
    python img_dataset_split.py --yaml_file_path=../data/45_abalone_data/yolo_data/ai_solution_dataset_test.yaml --ratio=8,1,1 \
    --db_config_file_path=../echoss_query/config/config.yaml --save_path=split_dataset_list.json --random_seed=55 \
    --json_db_table=p1_json_info --image_db_table=p1_image_info --use_s3=True
```

내부 함수를 직접사용하고자 할 때
```
    sd = SplitDataset(<solution config yaml file path>, (8,1,1), <db config yaml file path>, <json data db table>, <image data db table>, True or False)
    
    sd.save_data_split_json(<save file path>, <random seed : int>)
```