generated from kookmin-sw/cap-template
-
Notifications
You must be signed in to change notification settings - Fork 2
220318
WonjuLee edited this page Mar 20, 2022
·
8 revisions
작성자 : 강지수 참여자 : 박준용, 이세희, 이원주 일시 : 2022.03.18
파트 | 진행 상황 | 추후 일정 |
---|---|---|
백엔드 | - 현재 대부분 구현되어 있는 상태. - 로그인/회원가입 부분 구현 중(이세희) |
- 디테일 한 테스트 코드 / DB 설정 만져보기 등의 공부와 함께 진행 예정. - AWS에서 테스트 서버 구동시킬 예정. |
프론트 | - 강지수, 이세희, 이원주 프론트(React+Typescript) 스터디 진행 중 | - 중간 발표 때, 결과물이 바로 나올 필요는 없어보이기 때문에 좀 더 공부하며, 시간을 두고 개발 시작 예정. |
인공지능 | - 크롤링을 통해, 100장/50종류 로 진행. - 라벨링 과정이 중도 끊기면 라벨링 해둔 과정이 초기화 되기 때문에, 대체 프로그램 시도 중. - 현재 정확도가 평균적으로 60~70%. 정확도 올릴 수 있는 방안 모색 중. - 현재 학습한 파일(정답지)을 json으로 변환한 상태. |
- 학습된 모델을 1) python 코드를 직접 돌리는가 2) js로 변환하여 돌리는가. -> 2의 경우, js 공부가 추가적으로 필요할 것으로 예상. |
-
인공지능 모델 학습 설명
- 정답지 (model)을 json 형태로 구축함
- 정답지를 해석할 수 있는 녀석(tensorflow.js | 파이썬 코드(opencv + tensorflow + numpy)이 필요함
- 녀석을 구동할 수 있는 서버를 만들어야 함 ※ 입력: 재료 이미지 ※ 출력: 재료 이름 텍스트
No. | 서버 개발 방식 | 공부 담당자 |
---|---|---|
1 | BE server에 migrate | - |
2 | 별도의 Server를 구축 | - |
3 | Node.js 서버 (Express) + tensorflow.js (녀석) | 박준용 |
4 | Python Server (Django, Flask) + 파이썬 코드 (녀석) | - |
5 | Node.js 서버 (Express) + 파이썬 코드 (녀석) | 강지수 |
- 기본 환경설정
$ pip install opencv-python
$ pip install tensorflow
$ pip install numpy
- python 모델 학습 코드
# python 3.7
import cv2
import numpy as np
import tensorflow as tf
min_confidence = 0.5
width = 800
height = 0
show_ratio = 1.0
file_name = "keras/sweet.jpg" #이미지 경로
classes_name ="keras/classes.txt" # classes 이름이 담긴 파일
weight_name = "keras/capstone_custom.h5" # .h5파일
classes = []
# colors = [(0, 255, 0), (0, 0, 255),(255,0,0)] 클래스 갯수만큼
read_image = cv2.imread(file_name)
CW = 32
CH = 32
CD = 3
model = tf.keras.models.load_model(weight_name)
with open(classes_name, 'r') as txt:
for line in txt:
name = line.replace("\n","")
classes.append(name)
print(classes)
def detectAndDisplay():
global read_image
global classes
test_images = []
h,w = read_image.shape[:2]
height = int( h * width/w )
img = cv2.resize(read_image, (width, height))
box = cv2.selectROI("Select a ROI and then press SPACE or ENTER button!", img, fromCenter=False, showCrosshair=True)
startX = int(box[0])
startY = int(box[1])
endX = int(box[0] + box[2])
endY = int(box[1] + box[3])
image = cv2.resize(img[startY:endY, startX:endX]
,(CW,CH), interpolation= cv2.INTER_AREA)
test_images.append(image)
test_images = np.array(test_images)
test_images = test_images.astype("float32") / 255.0
result = model.predict(test_images)
result_number = np.argmax(result[0])
# print(result, result_number)
print("%s : %.2f %2s" % (classes[result_number], result[0][result_number] * 100, "%"))
text = "{} : {}%".format(classes[result_number], round(result[0][result_number]*100,2))
y = startY - 10 if startY - 10 > 10 else startY + 10
cv2.rectangle(img, (startX, startY), (endX, endY),
(255,0,0), 2)
cv2.putText(img, text, (startX, y)
,cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255,0,0) ,2)
### 밑 주석 코드는 필요없음
# for i in range(len(classes)):
# print("%10s %15.7f %2s" % (classes[i], result[0][i]*100, '%'))
# text = "{}: {}".format(classes[i], result[0][i])
# cv2.putText(img, text, (10, height - ((i * 20) + 20)),
# cv2.FONT_HERSHEY_SIMPLEX, 0.6, colors[i], 2)
img[0:CH, 0:CW] = image
cv2.imshow("test", img)
cv2.waitKey(0)
detectAndDisplay()
- 파일 설명 (백업)
-
classes.txt
: 분류 가능한 재료 목록 -
capstone_custom.h5
: python tensorflow 버전에서 돌릴 때, 모델의 정답지가 담겨있는 파일. -
model.json
: js에서 돌릴 때 필요한 정답지.
-
- 사진을 촬영해서 이미지로 재료를 인식하는 서비스
- 아이템은 좋다. 누구나 많이 쓸 수 있는 앱인데 어떤 차별점을 줄 것인가가 관건.
- 다수가 이 서비스를 꼭 써야하는 이유가 있어야 함.
- 우리는 유사한 앱이 가지지 못함 차별점 구현한 노력을 작성하여 각자 역할 어필 필요
차별점
- 이원주 : 사진 인식만으로도 이미 차별성이 있다고 생각
- 이세희 : 이미지 인식으로 레시피 추천. 우리 팀
- 박준용 : 나만의 냉장고 기능을 추가한다면 차별성이 있다고 생각
- 강지수 : 사용자 데이터 기반 추천 레시피 기능이 있다. 다른 사이트들은 일방적으로 레시피 관련 정보를 전달함에 목적을 두는데, 우리 서비스는 사용자와 상호 작용 가능
- 재료 사진 인식으로 레시피 추천하는 기능만으로는 조금 약하다.
- '나만의 냉장고' 기능은 서비스 기획 시, 나왔던 의견으로 현재 서비스 구현에서는 빠진 부분.
-
마트 영수증 텍스트 인식 추가
- 영수증에 있는 재료들을 이용한 요리 레시피에는 어떤 것들이 있는가 알려주기
- 영수증은 이미 구매 항목이니, 해당 항목에 대한 레시피 추천이 의미가 있을까라는 의문 -> 영수증의 재료 목록을 사용자 개인의 데이터로 축적했을 때, 선호 재료는 알 수 있지 않을까? -> 선호 재료가 들어간 음식 레시피 추천. -> 맨 처음에 이야기 나왔던, 사용자 데이터 기반 레시피 추천을 다른 사용자 데이터 없이 가능하지 않을까 -> (채택)재료 검색할 때 나온 재료들을 사용자의 정보에 테이블 만들어서 검색된 재료 누적
-
나만의 냉장고!
- 음식을 찍어 '나만의 냉장고'라는 가상 냉장고에 해당 재료에 대한 유통기한과 함께 저장해두면 식재료 관리가 용이해질 것. -> 냉장고에 넣을 땐 사진으로 넣으면 좋은데, 냉장고에 들어간 재료를 사용 시, 사용자들이 이 재료가 소진될 때마다 그때그때 제거할까? -> 레시피 시작을 누를 시, 해당 레시피에 대한 식재료가 냉장고에서 사라지게 한다면? -> 음식량 및 개인 취향에 따라 재료 사용이 다르다. 또한, 해당 서비스의 레시피에 있는 요리를 하지 않은 상황에서는 사용자가 수동으로 재료를 제거해주어야한다.
-
레시피 시작!
-
레시피 시작!
버튼을 누르면, 레시피 단계 별로 예상 소요 시간이 지나면 다음 단계로 넘어가게 해준다. -> 문제점 : 단계별 예상 소요 시간 데이터가 필요- 현재 갖고 있는 공공데이터의 시간 데이터는 우리가 넣어야함.
- 색이 변할 때까지/음식의 양에 따라/조리 방식에 따라 등 시간을 설정하는 기준이 애매함.
- github.io 소개 페이지 정리
- 발표 구성 요소 생각하기 (서비스 개요, 진행 상황, 현재 상황에서 문제점, 남은 부분(?) 중 어디까지 중간 발표 때 진행할지)
- 발표 자료(ppt 등) 만들기
- 발표 관련해서 역할 분담 (발표는 몇 명이서 하는지 등)
- 소개 영상/레포트 택 1 해서 만들기.
-> 결론: 다음주부터 생각해보기(03.25)
- 검색에 포함된 재료를 '내가 좋아하는 재료'로 관리 -> '사용자 데이터 기반 레시피 추천'에 사용
- 가상 냉장고 기능
-
TO DO LIST
- node.js 에서 python 코드 머신 러닝 연동 알아보기
- python 학습된 모델 js로 변환해주는 사이트도 있었던 것 같음(찾아보기)
- React + Typescript 공부 좀 더 해보면서, 간단한 프로젝트 해보기 -> react 스터디 프로젝트 간단히 함께 해보기 일정 잡기
-
기존 파트 분배에서 FE 파트로 변경 및 추가가 되어 공부해야할 양이 조금 많은 것 같다. FE에 대한 이해가 좀 더 있었으면 좋았을 것 같다는 아쉬움이 든다.
-
차별성을 생각하는 것이 어려운 것 같다. 차별성이 있으면서, 최대한 현재 기획을 무너뜨리지 않고 어우러질 수 있는 추가 기능 생각해보기.
2022-1 Capstone Design 10 강지수/박준용/이원주/이세희