Skip to content

🍷 Winder μ„œλΉ„μŠ€μ˜ λ¨Έμ‹ λŸ¬λ‹ μ„œλΉ„μŠ€ νŒŒνŠΈμ— λŒ€ν•œ κ³΅κ°„μž…λ‹ˆλ‹€.

Notifications You must be signed in to change notification settings

lap-winder/ml-service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🍷 Winder ML Service

WinderλŠ” 'Wine Finder' λΌλŠ” λ‹¨μ–΄μ˜ 의미둜 μœ μ €κ°€ μ›ν•˜λŠ”, μœ μ €κ°€ μ•Œκ³  싢은 와인을 μ°Ύμ•„μ£Όκ³  와인 정보λ₯Ό μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.

Β  Β  Β  Β  Β  Β 

πŸ› Architecture

iOS μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ΅¬ν˜„ ꡬ쑰λ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

(1) Image Classification Model

와인 이미지 데이터 베이슀의 λ¨Έμ‹ λŸ¬λ‹ μ•„ν‚€ν…μ²˜ μž…λ‹ˆλ‹€.

  • μˆ˜μ§‘ν•œ 와인 정보 λ°μ΄ν„°λ² μ΄μŠ€μ™€ 이미지 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 기반으둜 이미지 λΆ„λ₯˜λ₯Ό ν•˜λŠ” λͺ¨λΈμž…λ‹ˆλ‹€.
  • 260 X 960 μ‚¬μ΄μ¦ˆ 의 이미지 데이터λ₯Ό Albumentation 라이브러리λ₯Ό ν™œμš©ν•΄μ„œ Data Augmentation 을 ν•©λ‹ˆλ‹€.
  • Data Augmentation 은 ν™”μ§ˆ, 밝기, νšŒμ „, 원근거리λ₯Ό κΈ°μ€€μœΌλ‘œ, 데이터λ₯Ό 인식할 수 μžˆλŠ” μ΅œλŒ€-μ΅œμ†Œ μ‚¬μ΄μ˜ 값을 ν…ŒμŠ€νŠΈ ν•˜μ—¬ μ§€μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • μ΅œλŒ€-μ΅œμ†Œ μ‚¬μ΄μ˜ κ°’ μ‚¬μ΄μ—μ„œ λžœλ€ν•˜κ²Œ 데이터가 μƒμ„±λ˜λ©°, 각각의 λ°μ΄ν„°λŠ” 100+a μž₯으둜 데이터 λͺ¨λΈμ΄ λ°œμ „ν•  수둝 μΆ©λΆ„νžˆ 늘릴 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ¨Έμ‹ λŸ¬λ‹ μ•„ν‚€ν…μ²˜λŠ” MobileNetV2 λͺ¨λΈμ„ μ„ μ •ν•˜μ˜€κ³ , Training 결과에 따라 μ˜€λ²„ν”ΌνŒ…μ„ 쀄이기 μœ„ν•΄ Layer λ₯Ό 일뢀 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μžμ˜ 카메라 촬영 데이터에 λŒ€ν•œ μ „μ²˜λ¦¬ λͺ¨λΈμž…λ‹ˆλ‹€.

  • μ‚¬μš©μžμ˜ 카메라 캑쳐 인풋 λ°μ΄ν„°λŠ” 개발자의 μž…μž₯μ—μ„œ κ°€μž₯ ν•Έλ“€λ§ν•˜κΈ° μ–΄λ €μš΄ 뢀뢄이라고 μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό λ² νƒ€λ²„μ „μ—μ„œλŠ” κ°€μ΄λ“œλΌμΈ μ œμ‹œ 및 컴퓨터 λΉ„μ „ 처리λ₯Ό 톡해 데이터 μ „μ²˜λ¦¬λ₯Ό ν•˜λŠ” κ²ƒμœΌλ‘œ μ„ μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • iOS μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μžκ°€ μ΄¬μ˜ν•  λ•Œ, 카메라 μ˜€λ²„λ ˆμ΄λ₯Ό 톡해 μ„  사이 쀑앙에 μ„Έλ‘œλ‘œ 두도둝 μœ λ„ν•©λ‹ˆλ‹€. ν•΄λ‹Ή μ•„ν‚€ν…μ²˜μ˜ 첫 번째 사진은 κ°€μ΄λ“œλΌμΈμ— λ”°λ₯Έ 촬영 κ²°κ³Όλ¬Όμž…λ‹ˆλ‹€.
  • ν•΄λ‹Ή μ‚¬μ§„μ˜ 쀑앙을 κΈ°μ€€μœΌλ‘œ μ–‘ μ˜† 사진을 자λ₯΄κ³ , κ·Έλ ˆμ΄μŠ€μΌ€μΌ/λΉ„νŠΈμ™€μ΄μ¦ˆ λ“±μ˜ 컴퓨터 λΉ„μ „ 연산을 거쳐 μ»¨νˆ¬μ–΄λ§ μž‘μ—…μ„ ν•©λ‹ˆλ‹€.
  • μ»¨νˆ¬μ–΄λ§ μž‘μ—…μ„ 톡해 μƒμ„±λœ μ’Œν‘œλ₯Ό κΈ°μ€€μœΌλ‘œ 사진을 λ§ˆμŠ€ν‚Ή ν•˜κ³  와인 이미지λ₯Ό ν›ˆλ ¨λœ λͺ¨λΈλ‘œ μ˜ˆμΈ‘μ—°μ‚°μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.
  • μ—°μ‚°λœ κ²°κ³ΌλŠ” 와인 λ°μ΄ν„°λ² μ΄μŠ€μ˜ ID κ°’κ³Ό λ§€ν•‘λ˜μ–΄ 결과물을 RestAPI 둜 μ „μ†‘ν•©λ‹ˆλ‹€.

(2) OCR Model

적용된 OCR λͺ¨λΈμ˜ 전체 ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€.

  • μ‚¬μš©μžκ°€ κ°€μ΄λ“œ 라인에 λ§žμΆ”μ–΄μ„œ κ°€μš΄λ°μ— 와인을 μ΄¬μ˜ν•˜λ©΄ 쀑간 지점을 μžλ¦…λ‹ˆλ‹€.
  • μΆ”μΆœν•œ 화인 이미지λ₯Ό κ·Έλ ˆμ΄μŠ€μΌ€μΌ ν˜Ήμ€ λΉ„νŠΈμ™€μ΄μ¦ˆ 연산을 κ±°μ³μ„œ Keras OCR ν˜Ήμ€ Tesseract OCR λͺ¨λΈμ„ 톡해 μΈμ‹λœ ν…μŠ€νŠΈλ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.

  • ν•΄λ‹Ή ν…μŠ€νŠΈλŠ” μ—˜λΌμŠ€ν‹±μ„œμΉ˜ 검색엔진을 ν†΅ν•˜μ—¬ 데이터 λ² μ΄μŠ€μ™€ λ§€μΉ­ν•©λ‹ˆλ‹€.
  • ν•΄λ‹Ή 결과에 따라 와인 데이터 베이슀λ₯Ό Rest API 둜 μ„œλΉ„μŠ€μ— μ „λ‹¬ν•©λ‹ˆλ‹€.

πŸ›  Issue Handling

와인 라벨 인식에 λŒ€ν•œ λ¨Έμ‹ λŸ¬λ‹ μ„œλΉ„μŠ€λ₯Ό λ§Œλ“€λ©΄μ„œ λ°œμƒν•œ μ΄μŠˆμ— λŒ€ν•œ 처리 λ‚΄μš©μ„ λ‹΄μ•˜μŠ΅λ‹ˆλ‹€.

(1) 데이터 수

와인 라벨 λ°μ΄ν„°λŠ” 각 ν΄λž˜μŠ€λ³„λ‘œ ν•œ κ°œμ”© μžˆλŠ” μ΄μŠˆκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이미지λ₯Ό 각 클래슀 λ³„λ‘œ μ˜λ―ΈμžˆλŠ” λΆ„λ₯˜λ₯Ό ν•˜κΈ° μœ„ν•΄μ„œλŠ” Parametric ν•œ 데이터듀이 각각 μžˆμ–΄μ•Ό ν•œλ‹€κ³  νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Data Augmentation 방식을 μ„ μ •ν•˜μ˜€κ³  Albumentation 라이브러리λ₯Ό ν™œμš©ν•˜μ—¬ ν™”μ§ˆ, 밝기, νšŒμ „, 원근거리λ₯Ό κΈ°μ€€μœΌλ‘œ, 데이터λ₯Ό 인식할 수 μžˆλŠ” μ΅œλŒ€-μ΅œμ†Œ μ‚¬μ΄μ˜ 값을 ν…ŒμŠ€νŠΈ ν•˜μ—¬ 데이터에 λ§žλŠ” 값을 μ§€μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

(2) 클래슀 증가

개발 λ‹¨κ³„μ—μ„œ, 와인 λ°μ΄ν„°λ² μ΄μŠ€λŠ” 계속 μ¦κ°€ν•˜κΈ° λ•Œλ¬Έμ— 기쑴에 ν•™μŠ΅λœ λͺ¨λΈμ„ μ˜¨μ „νžˆ μ‚¬μš©ν•˜κΈ° μ–΄λ €μš΄ μ΄μŠˆκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Incremental Learning 을 λ„μž…ν•˜λ € μ‹œλ„ ν–ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬λŠ” OCR λͺ¨λΈλ‘œ μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λ₯Ό λ³€κ²½ν•˜μ˜€κΈ° λ•Œλ¬Έμ— λ°œμ „ μ μš©ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

(3) μœ μ € 인풋 데이터

개발자의 μž…μž₯μ—μ„œ κ°€μž₯ ν•Έλ“€λ§ν•˜κΈ° μ–΄λ €μš΄ 뢀뢄은 μ—­μ‹œ μ‚¬μš©μžκ°€ μ΄¬μ˜ν•œ 데이터라고 μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. 사진을 μ–΄λ– ν•œ μœ„μΉ˜ 및 κ°λ„λ‘œλ„ 찍을 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

초기 μ•„ν‚€ν…μ²˜ 섀계 쀑, μ „μ²˜λ¦¬ 단계에 Mask-RCNN 을 λ„μž…ν•˜μ—¬ 와인 이미지λ₯Ό 인식 ν•˜κ³  λ§ˆμŠ€ν‚Ήν•˜μ—¬ 와인 데이터 베이슀 λ§Œμ„ 가지고 λͺ¨λΈμ— 예츑 μ—°μ‚° ν•˜λŠ” 것을 κ΅¬μƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ „μ²˜λ¦¬ λ‹¨κ³„μ—μ„œ λ§Žμ€ μ‹œκ°„μ„ μ‚¬μš©ν•˜κ²Œ λœλ‹€λ©΄ κ·Έ λ‚˜λ¦„λŒ€λ‘œ 쒋지 μ•Šμ€ μ„œλΉ„μŠ€λΌκ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

이에 따라, μ‚¬μš©μžμ—κ²Œ 촬영 λ‹¨κ³„μ—μ„œ λΆ€ν„° κ°€μ΄λ“œλΌμΈμ„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 카메라 μ˜€λ²„λ ˆμ΄λ‘œ μ œμ‹œν•˜κ³ , 촬영된 데이터λ₯Ό 크둭 및 컴퓨터 λΉ„μ „ 연산을 톡해 μ’Œν‘œλ₯Ό νšλ“ν•˜μ—¬ μ „μ²˜λ¦¬ ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

(4) OCR λͺ¨λΈ 채택

μˆ˜μ§‘ν•œ 와인 데이터 λ² μ΄μŠ€κ°€ μ¦κ°€ν• μˆ˜λ‘ λ”₯λŸ¬λ‹ λͺ¨λΈμ΄ 점점 λ§Žμ€ λ¦¬μ†ŒμŠ€λ₯Ό μ“°κ²Œ λ˜λŠ” μ΄μŠˆκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 뿐만 μ•„λ‹ˆλΌ Data Augmentation κ΄€λ ¨ 연산도 그에 λ§žμΆ”μ–΄ μ¦κ°€ν•˜κΈ° λ•Œλ¬Έμ— κ²°κ΅­ 이미지 인식 λͺ¨λΈμ˜ 전체 ν”„λ‘œμ„ΈμŠ€κ°€ κ°€μ Έκ°€λŠ” μ—°μ‚°λŸ‰μ΄ 맀우 λ§Žμ€ λ¬Έμ œκ°€ 생기고 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

와인 데이터 λ² μ΄μŠ€κ°€ 증가함에 따라 λ”₯λŸ¬λ‹ 연산도 맀번 μ‹œλ„ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— μ ν•©ν•˜μ§€ μ•Šμ€ λͺ¨λΈμ΄λΌκ³  νŒλ‹¨ν•˜κ²Œλ˜μ—ˆκ³ , OCR λͺ¨λΈλ‘œ λ³€κ²½ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

(5) 느린 μ—°μ‚° κ²°κ³Ό 좜λ ₯ μ‹œκ°„

OCR λͺ¨λΈμ€ Keras-OCR , pytesseract λͺ¨λΈμ„ μ±„νƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. κ²°κ³Ό ν…ŒμŠ€νŠΈ κ³Όμ •μ—μ„œ pytesseract λŠ” λ§Žμ€ 컴퓨터 λΉ„μ „ μ „μ²˜λ¦¬ 과정을 κ±°μΉ˜λ”λΌλ„ λ‹€μ–‘ν•œ μœ μ € 인풋데이터(ν™”μ§ˆ, 원근거리 λ“±)λ₯Ό 컀버할 수 μžˆμ„ μ •λ„μ˜ μΆ©λΆ„ν•œ 정확도λ₯Ό 가지지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ”₯λŸ¬λ‹ μ—°μ‚° 기반의 λͺ¨λΈ ꡬ좕 ν˜Ήμ€ 라이브러리 채택을 κ΅¬μƒν•˜κ²Œ λ˜μ—ˆκ³ , κ·Έ κ²°κ³Ό Keras-OCR 을 λ„μž…ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λ”₯λŸ¬λ‹ μ—°μ‚° 기반의 λͺ¨λΈμ€ 처음 λͺ¨λΈμ„ λ©”λͺ¨λ¦¬ μ μœ ν•˜λŠ” μˆœκ°„κΉŒμ§€ λ§Žμ€ μ‹œκ°„μ΄ κ±Έλ Έκ³ , μΈ‘μ • κ²°κ³Ό μ•½ 17~18 초 정도 μ†Œμš”κ°€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ ν˜„μž¬ λͺ¨λΈμ„ Preload ν•˜κΈ° μœ„ν•œ μ‹€ν—˜μ„ 진행 쀑에 μžˆμŠ΅λ‹ˆλ‹€.


🍷🍷🍷

About

🍷 Winder μ„œλΉ„μŠ€μ˜ λ¨Έμ‹ λŸ¬λ‹ μ„œλΉ„μŠ€ νŒŒνŠΈμ— λŒ€ν•œ κ³΅κ°„μž…λ‹ˆλ‹€.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages