Wimmy - Where is my memory?
업데이트:
프로젝트 개요
기존의 사진 관리 프로그램은 보통 폴더별로만 관리할 수 있다. 본 프로그램은 폴더, 특징, 날짜, 위치 별 관리가 가능하다.
본 프로그램의 핵심인 태그는 이미지를 분석하여 자동으로 추출하거나, 사용자가 직접 추가, 수정, 삭제가 가능하다.
이를 활용하여 캘린더에서 월별로 특징들을 확인하거나, 지도를 직접 돌아보며 특징을 확인할 수 있도록 분류된 사진에 중첩하여 태그에 대한 연관성을 극대화 하였다.
이를 통해 사용자의 사진들에 대한 접근성을 극대화 하는 것이 우리의 최종 목표이다.
- 서비스: 이미지 태그 및 특징/위치/날짜 분류를 통한 안드로이드 사진 관리 애플리케이션
- 개발 환경: Android Studio 3.5/3.6
- 개발 언어: Kotlin, XML
- 기타 환경: Git
- 외부 자원: Firebase ML Kit - Translate API, Image labeling API, Google Map API
- 제약 사항: 안드로이드 OS 4.0 이상, 기기 접근 권한
Diagram
프로젝트 모델링
안드로이드 내부 DB를 통해 로컬 저장소에 있는 이미지들과 핵심 메타데이터들을 관리한다.
추가적으로 관리할 DB는 다음과 같다.
안드로이드 RoomDB, LiveData, ViewModel 을 이용하여 MVVM모델
을 구축.
Observer
패턴을 통해 이미지의 변경이 있을 시 자동으로 업데이트를 하도록 한다.
- ExtraPhotoData
- 사진 id
- 위치
- 즐겨찾기 여부
- TagData
- 사진 id
- 태그
- thumnailData
- 사진 id
- 데이터
- LatLngData
- 위경도 번호
- 사진 아이디
- 위경도
주요 일정
완료
- ~ 2020. 02. 07: 시나리오, 기능 도출, 프로토타입 UI 개발
- 2020. 02. 08 ~ 2020. 02. 14: XML UI 구조 개발, DB 모델링
- 2020. 02. 14 ~ 03. 21: 주요 개발 (Android Studio)
- 사진을 폴더, 태그, 위치, 날짜별로 보여주기
- 안드로이드 내부 DB에서 사진 목록 가져오기
- 날짜별로 보여주기 위한 캘린더 만들기
- Room을 사용해 추가 정보 저장(좌표 -> 위치 정보, 즐겨찾기, 태그 정보)
- Firebase ML Kit - 이미지 분석 API를 활용하여 이미지 특징정보 추출
- 사진 출력을 위한 UI 생성
- 구글 맵 API와 클러스터링 라이브러리를 활용하여 위치 좌표 생성 및 출력
- 프로그램 시작 시 추가 삭제된 사진 처리
- ThreadPoolExcutor를 사용한 추가 쓰레드 관리
- 사용자가 직접 태그를 입력하거나 수정, 삭제 가능
- 사진 공유기능
- 백그라운드에서 특징정보 자동 분석 및 삽입
- 2020. 03. 22 ~ 04. 05: 추가 기능 도출 및 버그 픽스
- 기타 버그 수정
- 이미지 리스트 그리드 값 조절 기능
- 유사 이미지 검출 및 컨트롤 기능
- 애니메이션 지원
- 실시간 로컬 이미지 변경 감지 -> 자동 추가, 삭제
- 2020. 04. 06 ~ 05. 01: 추가기능 도출 및 버그 픽스
- 쓰레드 관련 버그 대거 수정
- 포토리스트뷰 삭제 기능 추가
- 유사 이미지 및 로직 변경
- 앱 내 광고 삽입
- 베타 버전 출시
- 2020. 05. 02: 정식 버전 출시
예정
- 유지 보수
Application
Folder List
- 유형 별로 분류한 폴더를 출력한다. 사용자는 클릭이벤트를 통해 해당 폴더 내부로 들어갈 수 있다.
로컬 폴더 별 분류
- 로컬 저장소에 있는 사진들을 폴더 별로 분류하여 이미지를 출력한다.
- 가장 기본적인 폴더 별 분류를 이용하여 사용자는 본인의 사진에 대해 조작을 함에 있어서 손쉽게 다가갈 수 있다.
태그 별 분류
- 이미지를 태그별로 분류한다.
- 앱이 실행된 후 백그라운드로 실행되면서 딥러닝을 통한 이미지에 대한 분석을 하고 특징을 자동으로 도출하여 DB에 입력된다.
- 특징은 Firebase ML kit image labeling API를 통해 추출해낸다.
- 추가적으로 추출된 특징이 영어이기 때문에 Firebase ML kit translate API를 통해 서비스 지역 언어로 번역하여 삽입된다.
날짜 별 분류
- 달력을 년/월 단위로 볼수있게 출력한다.
- 달력의 각각의 일자를 클릭하면 해당 날짜의 이미지를 볼 수 있다.
- 달력에는 해당 날짜에서 가장 많은 비중을 차지하는 태그들을 표기한다. 이를 통해 사용자는 해당 날짜에 어떠한 사진을 찍었는지, 사진은 어떤 특징을 지녔는지 직접 확인하지 않고도 한 눈에 알 수 있다.
위치 별 분류
- 이미지를 위치별로 분류한다.
- 위치는 앱이 실행된 후 백그라운드로 실행되면서 자동으로 로컬 저장소의 사진들의 위치를 추출한다. 그 후, 변환작업을 거쳐 추가 데이터베이스에 삽입되며 사용자의 화면에 출력된다.
- 위치는 시/군/구로 구분되며 시/군/구로 분류가 불가능할 경우, 국가로 구분한다.
Photo List
- 분류를 통한 UI에서 사용자 클릭 이벤트를 통해 이미지 리스트로 이동한다.
- 본격적으로 분류된 이미지를 출력한다.
이미지 그리드 리스트
- 분류된 이미지들을 출력한다.
- 출력 과정은 비동기 프로그래밍으로 진행되기 때문에 성능에는 문제가 없다.
이미지 맵 리스트
- 구글 맵을 이용하여 이미지의 대한 위치를 마커로 표시한다.
- 마커를 누르게되면 이미지의 태그정보를 말풍선으로 출력하고 하단에 카드뷰 형식으로 이미지에 대한 정보를 출력한다.
- 클러스터링 라이브러리를 통해 마커가 근접하게 여러 개 존재할 경우, 이를 모아준다.
- 하단의 이미지를 클릭하게되면 이미지 출력 뷰로 이동하게 된다.
이미지 출력 뷰
- 이미지 리스트에서 사용자가 특정 이미지를 클릭을 할 경우, 해당 이미지에 해당하는 이미지를 출력한다.
- 이미지를 확대하거나 축소할 수도 있다.
- 좌/우로 스와이프시 이전 또는 이후의 이미지를 출력하는 뷰 페이저 방식으로 구현되었다.
- 이미지를 터치하게되면 상단 이미지 정보와 하단 옵션이 감춰지게되고, 다시 터치하면 나타나게 된다.
- 상단의 별 이미지 클릭을 통해 즐겨찾기 이미지를 지정할 수 있다.
기타 기능
이미지 맵 리스트
- 메인 화면에서 우측 상단 옵션을 통해 즐겨찾기 뷰로 이동할 수 있다.
- 즐겨찾기가 되어있는 이미지를 출력해준다.
이미지 뷰 삭제
- 뷰페이저의 하단 옵션에서 삭제를 클릭하면 이미지를 삭제할 수 있다.
- 삭제는 로컬 저장소의 해당 이미지, 해당 이미지의 ID가 포함된 DB의 모든 데이터가 지워지게 된다.
리스트 이미지 삭제
- 포토 리스트에서 임의로 체크박스를 두어 사진들을 선택하여 삭제할 수 있다.
- 상단의 휴지통 모양을 누르면 삭제를 제어하는 버튼들이 생긴다. 이를 통해 지우고자 하는 이미지들을 체크하여 삭제할 수 있다.
태그 입력, 수정, 삭제
- 사용자는 태그를 최대 5개까지 관리 가능하다.
- 태그 입력 버튼을 누르면 자동으로 이미지의 태그들로 다이얼로그를 채운다.
- 거기서 태그를 추가하거나 지우는 행위를 통해 태그를 직접 조작할 수 있다.
SNS 공유
- 다음 공유 버튼을 통하여 SNS로 해당 이미지를 공유할 수 있다.
이미지 검색
- 사용자는 원하는 이미지를 직접 검색할 수 있다.
- 유형은 이름, 위치, 태그, 날짜로 이루어지며 검색을 하면 키워드가 포함된 모든 이미지를 고유한 이름으로 출력한다.
- 검색화면은 메인화면 상단의 돋보기 모양 버튼을 통해 이동할 수 있다.
카메라
- 사용자는 메인화면 상단 툴바에 카메라 버튼을 통해 카메라 캡처를 할 수 있다.
- 캡처한 이미지는
Pictures/Wimmy
폴더에 저장된다.
로딩 화면
- 본 서비스를 이용하기 위해서는 일부 권한에 허가를 해야하고 특정 API 모델을 사용자의 기기에 설치해야 한다. 이 과정을 로딩 화면에서 제어한다.
유사 이미지 검색
- 사용자가 연속사진을 촬영하거나 여러 사진을 한꺼번에 수용하는 경우, 마음에 드는 몇 개의 사진을 제외하고는 나머지 사진들을 일일이 지워야 하는 경우가 있다.
- 사용자는 특정 이미지에 대해 유사 이미지를 검색하고 이를 추가 삭제할 수 있다.
- 유사 이미지는 날짜와 위치의 연관성으로 구분한다.
댓글남기기