방명록
- Image Captcha 라이브러리 (Library)2024년 02월 20일 07시 01분 10초에 업로드 된 글입니다.작성자: 재형이반응형
0. Image Captcha 라이브러리 설치하기
- 특정 자릿수의 정수를 이미지 형태로 반환하는 이미지 캡차(image captcha) 라이브러리
!pip install captcha
1. 랜덤 캡차 이미지 생성하기
- (이미지, 정답 레이블)을 생성한 뒤에, 메타 데이터를 저장하여 관리할 수 있다
- 메타 데이터는 테이블(table) 형태의 데이터에 해당하므로, 판다스(Pandas)의 데이터프레임(dataframe) 형태로 저장할 수 있다
from captcha.image import ImageCaptcha def generate_random_images(directory, n_digits, cnt): # 메타 데이터 (경로, 정답) metadata = [] # 디렉토리(directory)가 존재하지 않을 때 if not os.path.exists(directory): os.makedirs(directory) # 이미지 캡차(image captcha) 객체 생성 image = ImageCaptcha() # 개수(cnt)만큼 이미지 캡차 생성 for i in range(cnt): # 특정한 자릿수(n_digits)의 랜덤 정수 생성 number = random.randint(0, (10 ** n_digits) - 1) # 문자열 형태로 변환 string = str(number).zfill(n_digits) # 이미지 캡차 생성 cur = 0 path = os.path.join(directory, f"{string}_{cur}.png") while os.path.exists(path): cur += 1 path = os.path.join(directory, f"{string}_{cur}.png") image.write(string, path) metadata.append((f"{string}_{cur}.png", string)) if (i + 1) % 1000 == 0: print(f"[Log] {i + 1} images have been generated.") # 데이터를 엑셀 파일(.csv) 형태로 저장 df = pd.DataFrame(metadata, columns=["image_path", "target"]) df.to_csv(os.path.join(directory, "metadata.csv"))
- 실질적으로 학습용/테스트용 데이터 세트를 구축할 수 있다
- 만들어진 데이터 세트의 구성을 확인하면 다음과 같은 형태를 보인다
# 학습 데이터 세트 생성 directory = "./train" n_digits = 4 cnt = 10000 generate_random_images(directory, n_digits, cnt) # 테스트 데이터 세트 생성 directory = "./test" n_digits = 4 cnt = 1000 generate_random_images(directory, n_digits, cnt)
2. 만들어진 데이터 세트 불러오기
- 메타 데이터를 먼저 불러온 뒤에, 실제 이미지 데이터에 접근할 수 있다
train_directory = "./train" print(f"학습 데이터 개수: {len(os.listdir(train_directory))}") test_directory = "./test" print(f"테스트 데이터 개수: {len(os.listdir(test_directory))}")
def csv_reader(path): start_time = time.time() dtype_dict = { "image_path": str, "target" : str } data_list = [] # 정답 레이블은 문자열(string) 형태 df = pd.read_csv(path, dtype=dtype_dict) for index, row in df.iterrows(): image_path = row["image_path"] target = row["target"] data = (image_path, target) data_list.append(data) print(f"Data inserted ({time.time() - start_time:.4f} seconds.)") return data_list data_list = csv_reader("./train/metadata.csv") print(f"전체 데이터 개수: {len(data_list)}") print(data_list[0])
image_path, target = data_list[0] image = Image(os.path.join("./train", image_path)) display(image)
반응형'인공지능 > 프레임워크 or 라이브러리' 카테고리의 다른 글
제조 데이터의 분류기 실습 (0) 2024.03.14 데이터 로더, 모델 실습, 로깅 (0) 2024.02.21 대량의 데이터 다루기, 누락된 데이터 처리, 클래스 활용 (0) 2024.02.20 의사 결정 트리, 랜덤 포레스트, SVM, 선형 회귀 (4) 2024.02.15 사이킷런 개요, 가상 데이터, 데이터 분할, ROC 커브 (2) 2024.02.14 다음글이 없습니다.이전글이 없습니다.댓글