프로젝트 진행 과정 및 방법
순서: 데이터 수집 > 데이터 전처리 > 대표색 추출 > 시각화 > 대표색 = 정당색 판단
더 자세한 내용과 코드는 GitHub 페이지에서 확인하실 수 있습니다.
1. 데이터 수집

중앙선거관리위원회의 도서관 사이트에 아카이빙된 선거 자료 > 후보자선전물 자료 중 선거 벽보 pdf 파일을 활용했 습니다.
Google Colab 환경에서 Python의 requests, Beautiful Soup 패키지를 사용해 pdf 파일을 스크래핑했습니다.
원래 계획은 2024년 4월 치러진 22대 총선까지를 프로젝트에 포함시키는 것이었습니다. 선거 기간에는 선관위 홈페이지에 정책공약 마당에서 모든 후보의 공보물을 확인할 수 있었기에 공보물의 표지를 데이터로 활용할 계획이었습니다.
그러나 선거 다음날 바로 선관위 정책공약마당에서 낙선한 후보자들의 공보물이 내려갔기에 계획이 무산되었습니다. 선관위에 문의한 결과, 위 공보물들은 개인정보 보호를 위해 내려갔으며 선관위 도서관 홈페이지에 아카이빙되기까지는 2-3개월이 소요된다는 답변을 받았으나, 같은 해 10월까지 선관위 도서관 사이트에 22대 총선 후보자선전물이 게시되지 않았습니다. 어쩔 수 없이 프로젝트에는 선관위 도서관 사이트에서 접근 가능한 2022년 8회 지선까지의 데이터를 활용했습니다.
2. 데이터 전처리
우선 벽보 이미지에서 대표색을 추출하기 위해 pdf 파일을 jpg 파일로 변환하였습니다. 그리고 기존 이미지의 사이즈가 너무 커서 얼굴 인식 알고리즘의 정확도가 오히려 떨어지는 문제가 있었기에 width = 1000으로 통일하여 모든 데이터를 리사이즈했습니다.
후보자의 얼굴, 머리카락, 정장 등에 의해 살구색, 검정색이 선거 벽보의 대표색으로 추출되지 않도록 인물 영역을 인식하여 마스킹 했습니다. 인물 인식을 위해서는 Google이 제공하는 Semantic Segmentation(의미적 분할) 딥러닝 모델인 Deeplab을 사용하였습니다. Semantic Segmentation은 입력된 이미지에 각 픽셀에 특정한 클래스 라벨을 할당하는 것을 목적으로 하는 컴퓨터 비전의 한 분야로 자율주행, 영상 의학 등 다양한 분야에 널리 활용되고 있는 기술입니다.
일반적인 사진에서 인물을 추출하는 용도로 학습된 모델의 특성상 도형, 텍스트 등의 요소가 인물과 밀접한 곳에 배치되어 있는 벽보에서는 인물의 경계를 제대로 인식하지 못하는 문제가 있었습니다. 이 문제를 해결하기 위해 텍스트 영역을 인식하는 Convex Hull 알고리즘을 먼저 사용하여 텍스트 영역에 박스 처리를 해 Deeplab 모델에 인식되지 않도록 했습니다. 또한 대다수의 텍스트가 벽보 하단에 위치하고 있는 것을 고려하여 일부 하단 영역 역시 인식되지 않도록 처리했습니다.
완성된 알고리즘에 이미지를 넘긴 후, 인물 클래스가 붙은 영역을 초록색 (0, 255, 0)으로 마스킹 처리했습니다. 아래는 전처리 파이프라인을 적용한 결과입니다.

