"졸업하면 그만이야 - WSIE (What Should I Eat)"의 두 판 사이의 차이

MIE capstone
이동: 둘러보기, 검색
196번째 줄: 196번째 줄:
 
[[파일:인식률.PNG|800픽셀|섬네일|가운데|인식률 비교]]  
 
[[파일:인식률.PNG|800픽셀|섬네일|가운데|인식률 비교]]  
  
::: Naver Clova OCR만을 진행할 시 글자 하나하나에 대해서는 인식률이 뛰어나지만 단어 단위로 볼 시 잘못된 경우가 많다. 또한 일부 글자를 잘못 인식하거나 누락하는 경우가 꽤 있다. 20개의 상품이미지 5번 반복 촬영하여 총 100개의 이미지 중 87.5%의 단어 만을 정확하게 인식하였다. 위에서 예외처리를 하고 재 촬영 시 93.4%의 단어를 정확하게 인식하였다. OCR 데이터를 사용하기 위해서는 단어가 정확해야 한다. 따라서 예외처리가 필요하며 매우 중요하다는 것을 볼 수 있다. 틀린 6.6%의 단어 같은 경우 Naver Clova OCR에서 인식을 전혀 하지 못하는 부분이 발생했다. 인식된 글자가 없으므로 예외처리를 통해 해결하지 못하고 이미지의 빛 번짐이나 해상도를 높여주는 과정을 거쳐야 한다. 하지만 라즈베리파이로 이를 해결하기에는 알고리즘이 무겁고 또한 딥러닝 등을 사용해야 하기에 구현 또한 쉽지 않다. 사진 촬영 시 빛 번짐이나, 흐릿한 부분 없이 정확하게 찍도록 유도하여 문제를 해결하고자 했다.
+
::: Naver Clova OCR만을 진행할 시 글자 하나하나에 대해서는 인식률이 뛰어나지만 단어 단위로 볼 시 잘못된 경우가 많다. 또한 일부 글자를 잘못 인식하거나 누락하는 경우가 꽤 있다. 20개의 상품이미지 5번 반복 촬영하여 총 100개의 이미지 중 92.2%의 단어 만을 정확하게 인식하였다. 위에서 예외처리를 하고 재 촬영 시 98.6%의 단어를 정확하게 인식하였다. OCR 데이터를 사용하기 위해서는 단어가 정확해야 한다. 따라서 예외처리가 필요하며 매우 중요하다는 것을 볼 수 있다. 틀린 1.4%의 단어의 경우 Naver Clova OCR에서 인식을 전혀 하지 못함으로 발생했다. 인식된 글자가 없으므로 예외처리를 통해 해결하지 못한다. 이미지의 빛 번짐이나 해상도를 높여주는 과정을 거쳐야 한다. 하지만 라즈베리파이로 이를 해결하기에는 알고리즘이 무겁고 또한 딥러닝 등을 사용해야 하기에 구현 또한 쉽지 않다. 사진 촬영 시 빛 번짐이나, 흐릿한 부분 없이 정확하게 찍도록 유도하여 문제를 해결하고자 했다.
 
   
 
   
  

2022년 6월 14일 (화) 21:37 판

프로젝트 소개

프로젝트 명

사용자 맞춤형 식단관리 시스템 WSIE, What Should I Eat

(customized diet management system)


프로젝트 기간

2022.3~2022.6

팀 소개

서울시립대학교 기계정보공학과 (20174300**) (강*성) (팀장)

서울시립대학교 기계정보공학과 (20184300**) (김*형)

서울시립대학교 기계정보공학과 (20174300**) (한*빈)

서울시립대학교 기계정보공학과 (20174300**) (박*기)

서울시립대학교 기계정보공학과 (20174300**) (이*희)

오픈 소스 코드

깃허브 주소(클릭)

프로젝트 개요

1. 프로젝트 요약

본 프로젝트에서 섭취할 수 있는 음식에 제한이 있는 환자, 종교인, 더 나아가 건강에 관심이 있는 일반 시민들의 편의와 보편적인 사회의 건강 증진을 위하여 식품의 영양 성분을 확인 및 관리하고 식단을 제안하는 시스템을 제작한다. 식품에 쓰여 있는 영양성분표를 확인하여 피해야 하는 음식에 대해 알림을 주고, 구매한 물품들의 영양정보를 바탕으로 균형 잡힌 식단을 알려준다. 질병이 있거나 종교적인 신념, 또는 채식주의를 실행하는 사람들이 직접 성분표를 확인하지 않아도 되고, 건강에 관심있는 사람들은 별도로 영양 정보를 계산할 필요 없이 식단을 관리해주는 효과를 얻을 수 있다. 해당 시스템을 쇼핑 카트와 어플리케이션 내에서 구현한다.


2. 프로젝트의 배경 및 기대효과

평균수명의 증가로 인하여 건강에 관심을 가지는 이들이 많아졌으며, 이로 인해 식단관리의 중요성이 커지고 있다.
건강관리 인식 조사 결과 차트
또한 1인가구의 증가로 인하여 각종 반찬과 음식을 완제품 또는 밀키트의 형태로 출시하는 경우가 많아졌는데, 특정 식품군의 섭취가 제한되는 경우 이를 식별하기 쉽지 않다. 이러한 배경에 의해 제품의 영양성분표와 재료명을 읽어 식단을 관리하는 시스템을 설계하는 프로젝트를 진행하기로 하였다. 먼저 이 시스템의 우선목표는 건강에 관심을 가지고 식단을 조절하고 싶은 개인이나, 신념/종교/질병상의 이유로 특정 식품군의 섭취가 제한되는 사람들을 위한 관리 시스템이다. 위와 같은 이유로 음식을 조절해야 하는 사람들의 경우, 쉽게 성분을 확인하여 식품을 구매할 수 있는 효과를 얻을 수 있다. 또한, 마트와 협업하여 해당 시스템 장비가 부착된 카트를 도입할 수 있다면, 마트의 매출 상승을 기대할 수 있고, 식단을 조절하는 사용자에게 편의를 제공할 수 있고 사회적인 건 강에도 기여할 수 있음은 물론이고 건강에 관한 관심이 나날이 늘어가는 지금, 이용자 수 확보에도 큰 어려움이 없을 것으로 예상하는 바이다.


3. 프로젝트 개발 목표

가. 카메라를 이용한 인식 및 처리

카메라를 통해 들어온 이미지 정보에 OCR(Optical character recognition) 기술을 통해 영양정보, 원재료명 등 원하는 부분의 글자를 인식하고 의미 있는 정보로 처리하도록 제작한다. 이를 통해 사용자가 상품 정보를 자세히 읽지 않아도 되도록 함으로써 사용자에게 편의성을 제공한다.

나. 식단 정보 처리

위 OCR 기술을 통해 인식한 영양성분 및 원재료명에 대한 정보와 사용자의 정보를 비교하여 식품의 섭취 가능 여부를 파악한다. 또한, 구매한 음식을 기반으로 성분을 분석하여 적절히 균형이 이루어져 있는지 알려주고, 구매한 상품들의 식품유형을 기반으로 제작 가능한 요리를 추천해 준다. 구매한 음식의 영양성분 데이터를 서버에 저장하여 어플리케이션에 출력한다. 따라서 주기적으로 영양성분량을 기록해야 하는 번거로움을 줄여준다. 또한 섭취하고자 하는 식단을 입력했을 때, 4대 성인병을 기준으로 일일 제한 섭취량을 초과하는 영양성분이 포함되어 있다면 섭취 가능한 양의 성분이 포함되어 있는 비슷한 대체음식을 추천해준다.

다. GUI

라즈베리파이와 연결된 터치 스크린을 통하여 사용자가 프로그램을 그래픽적으로 조작하고 즉각적인 피드백을 받을 수 있도록 한다. 이를 통해 사용자는 식품정보, 추천 식단 등에 대한 정보를 한 눈에 볼 수 있고, 시스템을 처음 이용하는 사용자라도 직관적인 조작이 가능하다.

동작 시나리오

1. 전체 동작 시나리오

전체 동작 시나리오(유스 케이스 다이어그램)
전체 동작 시나리오(플로우 차트)

2. 모듈별 동작 시나리오

가. GUI(그래픽 유저 인터페이스) 시나리오

라즈베리파이 GUI 시나리오

나. WSIE 어플리케이션 시나리오

어플리케이션 동작 시나리오

구현 내용

1. 역할 분담

역할분담표

2. 시스템 구성

가. 전체 시스템 개략도

전체 시스템 개략도
  • Application
사용자는 구글 아이디를 통해 해당 시스템에 가입하게 되고, 이후 건강정보(신장, 체중, 지병 혹은 알레르기 여부)를 입력하게 된다. 구글 계정 로그인 시 구글에서 제공하는 암호화된 유저의 고유 UID에 입력한 개인정보를 할당하여 Firebase 서버에서 데이터셋을 관리한다. UID 정보가 담긴 QR코드를 통해 라즈베리파이로 이루어진 서비스에 로그인할 수 있다. 장보기를 마친 후, 사용자는 구매한 상품의 전체 영양정보에 대해 건강위험도를 확인할 수 있고, 식단에 대한 조언을 받을 수 있다.


  • Cart GUI (쇼핑카트 그래픽 유저 인터페이스)
쇼핑카트 기구부 디스플레이에 적용할 그래픽 유저 인터페이스를 생성한다. 사용자는 [시작하기] 버튼을 누른 뒤 기구부 뒷면 카메라에 어플리케이션을 통해 생성된 QR코드를 비추어 사용자 계정으로 로그인을 하게 된다. 이후 상품 뒷면을 찍어 상품정보를 받아들이며 찍은 상품을 장바구니에 담아 관리할 수 있는 기능을 ui를 통해 제공한다. 장바구니 페이지에서 사용자는 어플리케이션을 통해 사용자의 정보나 장바구니에 담긴 상품을 통해 먹을 수 있는 메뉴를 추천받을 수 있으며 로그아웃 시 장바구니에 담긴 상품의 정보들이 사용자의 데이터베이스에 저장이 되며 다른 사용자가 로그인을 할 수 있도록 대기를 한다.


  • OCR (광학 문자 인식)
광학 문자 인식(Optical character recognition; OCR)은 사람이 쓰거나 기계로 인쇄한 문자의 영 상을 이미지 스캐너로 획득하여 기계가 읽을 수 있는 문자로 변환하는 기술이다. 이번 프로젝트에서는 문자 인식에 있어 높은 신뢰도를 가지는 Naver Clova OCR API을 사용한다. OCR 과정을 통해 생성된 json파일에 데이터 처리과정을 통해 글자들의 위치와 텍스트를 분석하여 해당 json파일을 영양성분 별 함량, 원재료명, 알레르기 정보 등의 의미 있는 데이터로 변환하여 기구부의 프로그램에 전달하게 된다.


  • Web Cloud Server Database (웹 클라우드 서버 데이터베이스)
서버 구현에 있어 Firebase를 사용한다. 암호화된 사용자 UID, 사용자 신장, 체중 및 지병,알레르기 유무 등의 건강정보를 저장하여 쇼핑카트 기구부의 라즈베리 파이와 사용자 어플리케이션에서 접근 가능하도록 한다.


  • 웹 크롤링
웹 크롤링을 이용하여 재료를 바탕으로 만들 수 있는 음식의 레시피에 관한 정보를 받는다. 정보를 추출해 올 대 상이 되는 사이트는 음식 레시피에 대한 정보를 제공하는 ‘만개의 레시피’ 사이트이고 그 주소는 ‘https://www.10000recipe.com[1]’이다. python 상에서 BeautifulSoup 라이브러리를 이용하여 html 페이지의 데이터를 파싱하고, 필요한 데이터만 추출하는 작업을 거쳐 음식의 레시피 정보를 json 파일로 저장한다. 이 파일들을 raspberryPi 에서 동작하는 프로그램에 추가하여 이후에 식단을 추천해 줄 때 사용한다.

   

나. 기능별 시스템 구현

(이걸 각 해당 부분 알고리즘 및 설명 바꿉시다)

  • 글자 인식 알고리즘 (OCR)
1) OCR 비교 분석
광학 문자 인식(Optical character recognition; OCR)은 사람이 쓰거나 기계로 인쇄한 문자의 영상을 이미지 스캐너로 획득하여 기계가 읽을 수 있는 문자로 변환하는 것이다. 오픈소스로 EasyOCR, Tesseract 등이 있고, 유로서비로는 Naver Clova OCR, Google Cloud VISION 등이 있다. 오픈 소스 중에서 가장 성능이 뛰어난 EasyOCR, 가격이 더 저렴하고 한글 인식에서 유리한 NAVER Clova OCR의 인식률을 비교한다.
Naver, Goole 가격 비교
Easy OCR, NAVER Clova OCR의 글자 인식률을 단어 기준으로 측정하였다.


영양성분표
영양성분표2
OCR 비교표


오픈소스 EasyOCR은 선명한 사진에서는 인식을 잘 수행하지만 빛 번짐이나 글자가 일그러질 경우 제대로 인식을 하지 못하는 큰 단점이 있다. 이를 해결하기 위해 딥러닝을 통한 미세조정 학습을 진행하였으나 오히려 과적합으로 인해 인식률이 더 감소하였다. 그에 반해 Naver Clova OCR은 일정한 인식률을 보여준다. 이번 프로젝트에서 글자 인식 부분이 매우 중요하기에 Naver Clova OCR을 이용하기로 결정했다.


상품사진
상품의 뒷면에는 수많은 정보들이 있다. 이 중 일부분의 정보만이 필요하다. 글자 인식 처리량을 줄이기 위해 ROI를 설정하였다.


2) ROI
상품의 뒷면에는 수많은 정보들이 있다. 이 중 일부분의 정보만이 필요하다. 글자 인식 처리량을 줄이기 위해 ROI를 설정하였다. Naver Clova OCR을 실행하면 인식된 단어들이 json 파일에 저장된다. 이때 단어는 ‘inferText’ 키에 저장되고 단어를 사각형 위치로 잡아 모서리에 해당하는 x, y 좌표가 저장된다. ‘원재료명’, ‘영양정보’, ‘나트륨’, ‘g’, ‘kcal’ 등 필요 글자들을 인식 후 해당 문자의 x, y 좌표를 self.x_min, self.x_max, self.y_min, self.y_max에 계속해서 갱신을 통해 전체 ROI의 크기를 설정해 주었다.
ROI 설정


3) 예외처리
제품마다 상품의 영양성분표 표기 방식이 다를 수 있다.


가로표기
영양성분과 그 함량이 가로로 배열되어 있는 경우


세로표기
영양성분과 그 함량이 세로로 배열되어 있는 경우


위 사례와 같이 영양성분 표기방식이 다른 경우가 있을 수 있으므로 OCR 데이터 처리에 앞서 세로표기와 가로표기를 구분한 뒤 데이터 처리를 실행한다.
성분표에 표기된 함량과 전체 함량이 다를 수 있다.
ROI 설정
위 2, 3번째 영양성분표와 같이 총 내용량에 대한 단위 내용량 당 영양정보가 표기되어 있는 경우 상품 구매 시 입력받은 영양성분 함량 데이터와 실제 구매한 상품 영양성분 함량에 차이가 생길 수 있다. 따라서 이 경우 전체 영양성분 함량을 총 내용량 당으로 환산하여 데이터를 처리한다.


상품 촬영 과정에서 상품이 기울어질 수 있다.
기울어짐 보정
영양성분의 함량 인식에 있어 좌표를 기반으로 하기 때문에 좌표가 틀어졌을 시 영양성분 분석이 불가능할 수 있다. 따라서 영양성분표 인식 전 상품이 기울어진 각도를 확인해 기울어진 각도가 임계값 이상일 시 Opencv API를 통한 이미지 레벨링 과정을 거쳐 알고리즘의 정확도를 높인다.


상품 촬영 과정에서 글자를 잘못 인식할 수 있다.


영양성분의 몇몇 글자를 비슷한 다른 글자로 인식하는 경우 예외처리과정을 통해 문맥에 맞는 적절한 글자로 바꿔준다.
글자변환
글자 단위로는 잘 인식했으나 띄어쓰기가 잘 인식이 안되어 단어로 보았을 때 잘못된 경우나 글자 순서대로 저장이 되지 않는 경우가 종종 있다. 또는 0을 인식하지 못하는 경향이 있다. 이를 해결하기 위해 먼저 ‘inferText’의 위치 정보를 파악하여 json 파일에 저장된 순서가 아닌 위치정보를 토대로 순서대로 단어들을 저장했다. 조금씩 잘못 인식한 단어들을 계속해서 테스트하며 조금씩 수정을 해주었다. OCR이 ‘0g’에서 ‘0’을 인식하지 못하는 경향이 있다. 따라서 ‘g’이 있지만 숫자가 없는 경우 ‘0g’으로 수정을 해주었다.


4) 최종 인식률
초기 글자 인식 알고리즘과 예외처리를 진행한 알고리즘의 인식률을 비교해보고자 한다. 20개의 상품이미지를 5번 반복 촬영하여 영양정보에 해당하는 글자의 인식률을 단어 단위로 측정한다.
상품사진 20개
파일:인식률.PNG
인식률 비교
Naver Clova OCR만을 진행할 시 글자 하나하나에 대해서는 인식률이 뛰어나지만 단어 단위로 볼 시 잘못된 경우가 많다. 또한 일부 글자를 잘못 인식하거나 누락하는 경우가 꽤 있다. 20개의 상품이미지 5번 반복 촬영하여 총 100개의 이미지 중 92.2%의 단어 만을 정확하게 인식하였다. 위에서 예외처리를 하고 재 촬영 시 98.6%의 단어를 정확하게 인식하였다. OCR 데이터를 사용하기 위해서는 단어가 정확해야 한다. 따라서 예외처리가 필요하며 매우 중요하다는 것을 볼 수 있다. 틀린 1.4%의 단어의 경우 Naver Clova OCR에서 인식을 전혀 하지 못함으로 발생했다. 인식된 글자가 없으므로 예외처리를 통해 해결하지 못한다. 이미지의 빛 번짐이나 해상도를 높여주는 과정을 거쳐야 한다. 하지만 라즈베리파이로 이를 해결하기에는 알고리즘이 무겁고 또한 딥러닝 등을 사용해야 하기에 구현 또한 쉽지 않다. 사진 촬영 시 빛 번짐이나, 흐릿한 부분 없이 정확하게 찍도록 유도하여 문제를 해결하고자 했다.


5) 데이터 저장
OCR 인식 한 글자들을 예외처리 과정 후 단계별로 txt 파일에 저장하였다. ROI 내 인식한 글자 중 영양성분 이름과 뒤에 나오는 성분량을 단어의 위치 정보 x, y를 토대로 붙여주어 first_process.txt 파일에 저장한다.
예) ‘나트륨’의 4곳 모서리의 x, y 평균값인 center_x, center_y 중앙점과 다른 단어들의 x, y 좌표를 비교하여 center_x 보다 x 좌표가 오른쪽에 위치하고 center_y가 위 아래 모서리의 y 좌표내에 들어올 경우 단어들을 좌표 순서대로 저장한다. ‘100 mg’ 이 하나의 단어로 인식될 경우 ‘나트륨’ 뒤에 붙여줘 ‘나트륨100 mg’으로 저장한다. ‘나트륨’ ‘100 mg’ -> ‘나트륨 100 mg’
‘100’, ‘mg’ 이 따로 인식될 경우 ‘mg’ 까지 반복적으로 붙여준다. ‘나트륨’, ‘100’, ‘mg’ -> ‘나트륨 100’, ‘mg’, -> ‘나트륨 100 mg’
전체 함량을 구하기 위한 ‘총 내용량’, 영양성분 이름들 ‘나트륨’, ‘탄수화물’, 영양성분량 ‘숫자 g’, ‘숫자 mg’ 등의 필요 정보만을 뽑아 infertext.txt 파일에 1회 영양성분량과 총 영양성분량에 대해 저장하였다.
GUI에 표시해주기 위해 nutritional_info.txt 파일에 각각의 상품의 영양성분량을 저장하고 누적한다.
예) 1. 나트륨 100mg 탄수화물 100g 단백질 100g.... 2. 나트륨 30mg 탄수화물 30g 단백질 30g...
nutritional_info.txt 파일에 저장된 여러 상품의 영양성분량을 계산한 누적 성분량과 7일 기준 권장섭취량에 대한 퍼센트(%)를 add_nutrional_info.txt 파일에 저장한다.


  • 메뉴 추천 알고리즘 - 1


식품의약품안전처에서 제공하는 약 만여가지의 식품 데이터와 웹에서 크롤링해온 요리 데이터에 대하여 k_mean_cluster 법으로 (n=)5개의 클러스터로 군집화하였고, n은 elbow method를 사용하여 기울기가 flat해지는 2~5 중 메뉴 추천의 유사성을 위하여 n = 5를 사용하였다
군집화하기 전

군집화한 후

Elbow Method

이후 각각의 식품별로 데이터를 정규화한 뒤 벡터화하여 식품 사이의 거리를 반환하는 함수를 정의하였다. 사용자가 섭취하고 싶은 메뉴를 입력하면 사용자의 건강 정보와 입력된 메뉴의 영양성분을 비교하여 섭취가능여부를 판단한다. 섭취가능여부는 어플리케이션에서 입력한 활동량, 키, 몸무게, 나이의 정보로 에너지 대사량이 계산되고 당뇨병, 고지혈증, 비만 환자는 각각 탄수화물, 포화지방산, 열량의 에너지의 식으로 하루 섭취 제한량이 정해지게 된다. (단, 고혈압 환자의 나트륨 섭취 제한량은 3700mg으로 고정되었다.) 입력식품이 하루 섭취 제한량을 넘긴다면 섭취 제한량을 넘지 않을 때까지 같은 군집 내의 음식들을 대조하며 추천하며, 데이터셋에 무엇이 있는지 사용자가 알지 못하므로 자동완성 기능으로 입력에 편의성을 추가하였다.



  • 메뉴 추천 알고리즘 - 2
웹 크롤링 기술을 이용하여 요리 레시피의 재료 등과 같은 정보를 json파일에 저장한다. 사용자가 마트에서 물건을 구매하는 경우, 그 재료를 인식한 후, 해당 재료가 가장 많이 포함된 요리를 추천한다. 예를 들어, 사용자가 ‘두부’, ‘김치’, ‘삼겹살’ 을 구매한 경우 그 정보를 바탕으로 ‘두부김치’ 나 ‘삼겹살 김치조림’ 보다, ‘삼겹살과 곁들여 먹는 두부 김치’ 라는 레시피 우선도가 더 높으므로 해당 레시피가 추천되는 형식으로 작동한다. 포함된 재료의 개수가 같은 메뉴가 여러 개이면 그 중에서 무작위로 추천한다.
페타치즈를 인식한 화면
메뉴추천을 누르면, 치즈가 포함된 레시피가 추천됨
(위의 그림에서, 자연치즈를 인식한 후 메뉴추천을 누를 경우 치즈가 포함된 레시피가 추천됨)


  • 데이터베이스
데이터베이스는 구글과 연동하기 쉽고 텍스트 정보만 불러오는 등 데이터 다운로드 용량이 매우 낮아 무료로 사용할 수 있는 Firebase를 사용하였다. 또한, 사용자의 건강정보 및 장바구니의 영양성분 양을 실시간으로 확인할 수 있어야 하므로 realtime database안에 사용자 집합 'List of Users'아래에 UID별로 데이터셋을 구축하였다. 각 UID 안에는 사용자의 키, 몸무게 등과 같은 신체정보와 탄수화물, 트랜스지방 등과 같은 장본 영양성분 목록이 담겨있다.
사용자 정보

신체정보 목록(gender:성별, height:키, weight:몸무게, age:나이, PA:활동량)
질환정보 목록(allergy:알러지, diabetes:당뇨병, hypertension:고혈압, hyperlipidemia:고지혈증, obesity:비만)
영양성분 목록(cholesterol:콜레스테롤, danbaek:단백질, dangryu:당류, kcal:열량, natryum:나트륨, powhazibang:포화지방, tansu:탄수화물, zibang:지방, transzibang:트랜스지방)
위의 신체정보 목록 및 질환정보 목록은 어플리케이션의 개인정보 입력 페이지의 저장 버튼 클릭이벤트로 데이터베이스에 생성 및 갱신이 되며, 메뉴 추천 및 알러지 파악 여부 등에 사용된다. 또한 파이 시스템에서 로그아웃 버튼 클릭이벤프로 장바구니에 담긴 상품들의 영양정보가 데이터베이스에 저장이 된다.


  • 어플리케이션 기능


어플리케이션의 기능은 크게 개인정보 입력을 위한 로그인, 파이시스템 로그인을 위한 QR코드 생성, 정보 확인 및 위험도 분석으로 나눌 수 있다. 앞의 두 가지 기능은 위에서 설명했으므로 생략한다. 사용자는 장본 상품들의 목록으로부터 영양성분 데이터를 확인할 수 있는데 이것으로 건강한 식단을 섭취하고 있는 지 알기 힘들 것이라 판단하여 한 눈에 알 수 있도록 차트 기능과 식단방향에 대한 조언을 추가하였다.
어플리케이션 화면



위험도는 기준이 으하하하하하 으하하하하 으하하하 으하하 으하 하


  • 유저 그래픽 인터페이스 (GUI) 구현
유저 그래픽 인터페이스를 통해 사용자가 쉽고 직관적이게 시스템에 대한 정보를 받을 수 있고, 입력할 수 있도록 한다. 각 시나리오에 적절한 GUI를 구현한다
로그인을 위한 GUI, 로그인용 QR코드를 인식하면 다음화면으로 넘어간다
상품을 인식하기 위한 GUI. 상품을 카메라에 올려놓고 촬영버튼을 누르면 그 정보가 시스템 상에 저장된다
상품을 촬영한 경우 그 영양정보에 대한 정보를 제공한다
촬영한 상품에 사용자의 알러지 정보가 포함될 경우, 그에 대한 알림을 사용자에게 준다
상품의 영양정보 뿐 만 아니라 성분표에 대한 인식도 가능하다
여태까지 장바구니에 넣은 상품의 영양정보를 열람할 수 있다
구매한 상품정보를 바탕으로 적절한 레시피를 추천해준다

3. 하드웨어 설계 및 구현

가. 회로 구성

회로 구성
터치 디스플레이의 경우 조작성을 위해 Sunfounder 사의 10.1인치 라즈베리 파이용 디스플레이를 사용하였으며, 배터리의 경우 디스플레이는 Coms사의 12V 6cell 배터리팩, Raspberry Pi는 보조배터리로 작동하도록 설계하였다. 카메라의 경우 라즈베리파이 카메라모듈 V2, 8M를 사용하였다.

나. 기구부 지지대 및 디스플레이 프레임 구성

  • 기구부 지지대
Blender 프로그램을 통해 설계한 후 3D 프린터를 이용해 출력하였다.


지지대 모델링
지지대 출력물

실제 카트 규격을 고려하여 설계하였으며, 디스플레이의 무게를 고려하여 기구부가 앞쪽 혹은 뒤쪽으로 넘어지지 않도록 설계하였다. 지지대 갈고리 부분을 손잡이 부분에 건 뒤 U자 고리 부분에 철창을 끼워 고정 핀으로 고정한다


  • 디스플레이 프레임
프레임 앞면
프레임 뒷면
프레임 출력물

실제 디스플레이 규격을 고려하여 설계하였으며, 카메라가 배치될 수 있도록 프레임 뒷판에 렌즈용 구멍을 뚫었고, 사용 시 라즈베리 파이의 열 발생이 확인되어 라즈베리 파이 위치에 환풍기용 환풍구를 뚫어 주었다. 또한, 기구부 지지대와 단단히 결합할 수 있도록 튀어나온 부분을 설계하였고, 뒷판에 슬라이드 가이드를 만들어 기구부 분해 없이도 배터리 교체가 가능하도록 설계하였다.

프로젝트 결과

1.최종 결과물

전체 시스템
전체 시스템

프로젝트 협업 과정

1. 모듈별 소스 분산 버전 관리(GIT)

파일:졸업하면그만이야 깃허브 메인화면.png
깃허브 master 브랜치 메인화면

2. 정보 및 아이디어 공유(GIT Discussions)

파일:졸업하면그만이야 깃허브 디스커션.png
깃허브 디스커션을 활용한 아이디어 공유

초기 아이디어 구상 및 개발에 도움이 되는 데이터 및 정보를(img, text, video, url..) 디스커션을 이용하여 공유하였으며, 특정 주제의 discussion을 열고, 참여자들이 reply를 달면 등록된 이메일로 해당 내용이 전송이 되어, 효율적인 자료공유와 피드백이 가능하였다.


3. 계획 설정 및 공유(GIT Project)

파일:졸업하면그만이야 깃허브 프로젝트.png
깃허브 프로젝를 활용한 일정 공유


프로젝트 평가

평가항목

평가항목 표
  • 단어 기준 성분표 인식 정확도 평가
성분표 촬영 후 글자 인식 정확도를 20회 반복 측정하여 정확도의 평균을 구한다.
  • 성분표 촬영 피드백 응답시간 평가
성분표 촬영 후 피드백 제공까지 소요되는 시간을 20회 반복 측정하여 응답시간의 평균을 구한다.
  • 동기화 신뢰성 평가
사용자 로그인을 시도하여 사용자 정보의 동기화 성공률을 20회 반복 측정하여 그 성공률을 구한다.
  • 사용자 만족도 평가
설문조사를 통해 해당 시스템의 만족도를 평가한다. 설문조사는 일반 시민 20명을 대상으로 하였다.
  • 적절한 피드백 제공 여부 평가
알레르기, 지병 여부 등 유저의 설정에 따른 피드백 제공의 적절성을 측정한다.


평가결과

  • 단어 기준 성분표 인식 정확도 평가
[자세한 측정 방법]
20개의 상품 이미지를 5번 반복 촬영하여 총 100개의 이미지에 대한 OCR을 진행한다. 단어 기준으로 인식률을 측정하여 %로 표시한다.
[점수 평균 혹은 분포]
인식률 비교
[개선 필요한 점]
OCR에서 글자 자체를 인식하지 못하는 경우 예외처리를 통해 해결하지 못한다. 따라서 이미지의 빛 번짐이나 해상도를 높여주는 과정을 거쳐야 한다. 이번 프로젝트에서는 하드웨어의 성능에 제약과 개발 시간 등의 문제로 인해 구현을 하지 못하였다. 후에 추가 개발을 하게 될 경우 이 점을 개선하고자 한다.


  • 성분표 촬영 피드백 응답시간 평가
[자세한 측정 방법]
[점수 평균 혹은 분포]
[개선 필요한 점]
[최종 버전에 추가된 점]
  • 동기화 신뢰성 평가
[자세한 측정 방법]
[점수 평균 혹은 분포]
[개선 필요한 점]
[최종 버전에 추가된 점]
  • 사용자 만족도 평가
[자세한 측정 방법]
[점수 평균 혹은 분포]
[개선 필요한 점]
[최종 버전에 추가된 점]
  • 적절한 피드백 제공 여부 평가
[자세한 측정 방법]
[점수 평균 혹은 분포]
[개선 필요한 점]
[최종 버전에 추가된 점]

느낀점

김*형 -

부록