본문 바로가기
대학원 시험 공부

운동자세 인식 프로젝트 사전 준비 및 공부

by code2772 2023. 4. 9.

[ 목차 ]

    728x90
    반응형

    CNN은 이미지 인식 작업에 널리 사용되며 자세 인식을 비롯한 다양한 응용 분야에서 우수한 성능을 보여 왔다. 
    ✔ 전처리 방식

    import cv2
    import os
    
    # 운동 자세 이미지가 있는 디렉토리 경로 지정
    image_dir = "/path/to/exercise/posture/images"
    
    # 디렉토리 내의 모든 이미지 파일에 대해 반복
    for filename in os.listdir(image_dir):
        if filename.endswith(".jpg") or filename.endswith(".png"):  # 필요에 따라 파일 확장자 조정
            image_path = os.path.join(image_dir, filename)
            image = cv2.imread(image_path)  # 이미지 로드
            image = cv2.resize(image, (224, 224))  # 이미지 크기 조정 (예: 224x224)
            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # 이미지를 RGB 형식으로 변환
    
            # 필요에 따라 추가적인 전처리 단계 적용 (예: 정규화, 데이터 증강 등)
    
            # 동일한 파일 이름으로 전처리된 이미지를 새 디렉토리에 저장
            save_dir = "/path/to/preprocessed/images"
            save_path = os.path.join(save_dir, filename)
            cv2.imwrite(save_path, image)
    
    print("전처리가 완료되었습니다.")

    1. 이미지 처리 작업을 위해 OpenCV 라이브러리(cv2)를 가져옵니다.
    2. 파일 및 디렉터리 작업을 위해 os 라이브러리를 가져옵니다.
    3. 운동 자세 이미지가 있는 디렉토리 경로는 "image_dir" 변수를 사용하여 지정합니다.
    4. 코드는 os.listdir() 함수를 사용하여 "image_dir" 디렉토리의 모든 파일을 반복합니다.
    5. 각 파일에 대해 코드는 ".endswith()" 메서드를 사용하여 파일에 ".jpg" 또는 ".png" 확장자가 있는지 확인합니다.
    6. 파일에 유효한 이미지 파일 확장자가 있는 경우 코드는 cv2.imread() 함수를 사용하여 이미지를 로드합니다.
    7. 그런 다음 cv2.resize() 함수를 사용하여 이미지 크기를 (224, 224)로 조정합니다.
    8. 이미지는 cv2.cvtColor() 함수를 사용하여 RGB 형식으로 변환됩니다.
    9. 필요에 따라 추가 전처리 단계를 추가할 수 있습니다(예: 정규화, 데이터 확대 등).
    10. 전처리된 이미지는 cv2.imwrite() 함수를 사용하여 "save_dir" 변수로 지정된 새 디렉토리에 저장됩니다.
    11. "print" 문은 전처리가 완료되었음을 나타냅니다.
     
    ✔ 탐색적 데이터 분석

    import cv2
    import os
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    from skimage import exposure
    from skimage.segmentation import clear_border
    
    # 운동 자세 이미지가 있는 디렉토리 경로 지정
    image_dir = "/path/to/exercise/posture/images"
    
    # 디렉토리 내의 모든 이미지 파일에 대해 반복
    for filename in os.listdir(image_dir):
        if filename.endswith(".jpg") or filename.endswith(".png"): # 필요에 따라 파일 확장자 조정
            image_path = os.path.join(image_dir, filename)
            image = cv2.imread(image_path) # 이미지 로드
    
            # 이미지 크기 조정 (예: 224x224)
            image = cv2.resize(image, (224, 224))
    
            # 이미지를 RGB 형식으로 변환
            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    
            # 노이즈 제거 적용 (예: 노이즈 필터)
            image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)
    
            # 이미지를 수평으로 뒤집음 (예: 데이터 증강)
            flip = np.random.randint(0, 2)
            if flip == 1:
                image = cv2.flip(image, 1)
    
            # 배경 제거 적용 (예: 이미지 분할)
            gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
            blurred = cv2.GaussianBlur(gray, (5, 5), 0)
            _, thresh = cv2.threshold(blurred, 100, 255, cv2.THRESH_BINARY_INV)
            contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
            for contour in contours:
                if cv2.contourArea(contour) > 1000: # 필요에 따라 임계값 조정
                    cv2.drawContours(image, [contour], 0, (0, 0, 0), -1)
    
            # 필요에 따라 추가적인 전처리 단계 적용 (예: 데이터 정규화, 명암 조정 등)
    
            # 전처리된 이미지를 동일한 파일 이름으로 새 디렉토리에 저장
            save_dir = "/path/to/preprocessed/images"
            save_path = os.path.join(save_dir, filename)
            cv2.imwrite(save_path, image)
    
    print("Preprocessing complete.")

    1. cv2(OpenCV), os, numpy, matplotlib.pyplot, seaborn 및 skimage를 포함하여 필요한 라이브러리를 가져옵니다.
    2. 운동 자세 이미지가 있는 디렉토리 경로는 image_dir 변수를 이용하여 지정합니다.
    3. 코드는 for 루프와 os.listdir() 함수를 사용하여 image_dir 디렉토리의 모든 파일을 반복합니다.
    4. 디렉토리의 각 파일에 대해 코드는 filename.endswith() 함수를 사용하여 ".jpg" 또는 ".png" 확장자로 끝나는지 확인합니다.
    5. 파일에 유효한 이미지 파일 확장자가 있으면 코드는 OpenCV의 cv2.imread() 함수를 사용하여 이미지를 로드하고 image 변수에 저장합니다.
    6. 그런 다음 이미지는 cv2.resize() 함수를 사용하여 224x224 픽셀의 고정 크기로 크기가 조정됩니다.
    7. 이미지는 cv2.cvtColor() 함수를 사용하여 RGB 형식으로 변환됩니다.
    8. OpenCV의 'cv2.fastNlMeansDenoisingColored()' 함수를 사용하여 이미지에 노이즈 제거를 적용합니다. 이 함수는 이미지에서 노이즈를 제거하기 위해 비국소 수단 노이즈 제거 필터를 적용합니다.
    9. 데이터 증대는 numpy의 np.random.randint() 함수와 OpenCV의 cv2.flip() 함수를 사용하여 50% 확률로 이미지를 가로로 뒤집는 방식으로 수행됩니다.
    10. 이미지에서 배경을 제거하기 위해 이미지 분할이 적용됩니다. 먼저 cv2.cvtColor() 함수를 사용하여 이미지를 회색조로 변환합니다. 그런 다음 cv2.GaussianBlur() 함수를 사용하여 가우시안 블러를 적용합니다. 다음으로 cv2.threshold() 함수를 사용하여 임계값을 적용하여 이진 역 이미지를 얻습니다. 마지막으로 cv2.findContours() 함수를 사용하여 윤곽선을 찾고 cv2.drawContours() 함수를 사용하여 1000픽셀보다 큰 영역의 윤곽선을 이미지에 검은색으로 그립니다.
    11. 필요에 따라 데이터 정규화, 대비 조정 등과 같은 추가 전처리 단계를 적용할 수 있습니다.
    12. 전처리된 이미지는 cv2.imwrite() 함수를 사용하여 동일한 파일 이름으로 새 디렉토리에 저장됩니다.
    13. 코드는 "전처리 완료"를 인쇄합니다. 전처리가 완료되었음을 나타냅니다.

    반응형