YeoJiSu / SkinAI-WebDiagnosis

ํ”ผ๋ถ€ ์งˆํ™˜ ๋ถ„๋ฅ˜ ๋ฐ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์„ ์œ„ํ•œ ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ๊ณผ ์›น ๊ธฐ๋ฐ˜ ์ง„๋‹จ ์„œ๋น„์Šค ๊ฐœ๋ฐœ
0 stars 0 forks source link

๐Ÿง‘๐Ÿปโ€โš•๏ธ SkinAI WebDiagnosis

A. ํ”„๋กœ์ ํŠธ ๋ช…

ํ”ผ๋ถ€ ์งˆํ™˜ ์ง„๋‹จ ์›น ์„œ๋น„์Šค, Dr.Skin

B. ํ”„๋กœ์ ํŠธ ๋ฉค๋ฒ„ ์ด๋ฆ„ ๋ฐ ๋ฉค๋ฒ„ ๋ณ„ ๋‹ด๋‹นํ•œ ํŒŒํŠธ ์†Œ๊ฐœ

201824441 ๊น€์Šนํ˜       201924587 ์กฐ์ฃผ์€   202055565 ์—ฌ์ง€์ˆ˜
โ€ข React ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ
โ€ข Proxy ์„œ๋ฒ„ ๊ตฌ์ถ•
โ€ข CORS ๊ตฌํ˜„
โ€ข Postgresql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์ถ•
โ€ข Fast API ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ
โ€ข Docker ๋ฐฐํฌ
โ€ข Figma ์ž‘์„ฑ
โ€ข ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์ „์ฒ˜๋ฆฌ, AI (๋ถ„๋ฅ˜, ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜) ๋ชจ๋ธ ๊ฐœ๋ฐœ
โ€ข AI ๋ชจ๋ธ ๋ฐฐํฌ์šฉ Flask Rest API ๊ฐœ๋ฐœ
โ€ข PythonAnywhere ๋ฐฐํฌ

C. ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๐Ÿ’ก ํ”ผ๋ถ€ ์งˆํ™˜ ๋ถ„๋ฅ˜ ๋ฐ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์„ ์œ„ํ•œ ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ๊ณผ ์›น ๊ธฐ๋ฐ˜ ์ง„๋‹จ ์„œ๋น„์Šค ๊ฐœ๋ฐœ

์ด ํ”„๋กœ์ ํŠธ๋Š” kaggle์˜ HAM10000 ๋ฐ์ดํ„ฐ์…‹์„ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ”ผ๋ถ€ ์งˆํ™˜์„ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ํ•˜๋Š” ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•˜๊ณ , ์ด๋ฅผ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์›น ๊ธฐ๋ฐ˜ ์ง„๋‹จ ์„œ๋น„์Šค๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ํ”ผ๋ถ€ ์‚ฌ์ง„์„ ์—…๋กœ๋“œํ•˜๋ฉด, AI ๋ชจ๋ธ์ด ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ”ผ๋ถ€ ์งˆํ™˜์„ ์˜ˆ์ธกํ•˜๊ณ , ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜๋œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋Š” Flask ๊ธฐ๋ฐ˜์˜ REST API๋ฅผ ํ†ตํ•ด AI ๋ชจ๋ธ๊ณผ ํ†ต์‹ ํ•˜๋ฉฐ, ์›น ํŽ˜์ด์ง€๋Š” FastAPI ๋ฐฑ์—”๋“œ์™€ PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๊ทธ๋ฆฌ๊ณ  React ํ”„๋ก ํŠธ์—”๋“œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. Flask ๊ธฐ๋ฐ˜ REST API์™€ AI ๋ชจ๋ธ์€ PythonAnywhere ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์— ๋ฐฐํฌํ•˜์—ฌ, ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. PostgreSQL์€ Docker Container์— ๋ฐฐํฌํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

D. ํ”„๋กœ์ ํŠธ ํ•„์š”์„ฑ ์†Œ๊ฐœ

ํ”ผ๋ถ€ ์งˆํ™˜์€ ์กฐ๊ธฐ ์ง„๋‹จ์ด ๋งค์šฐ ์ค‘์š”ํ•œ ์งˆ๋ณ‘ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ „๋ฌธ ํ”ผ๋ถ€๊ณผ ์˜์‚ฌ์˜ ์ ‘๊ทผ์ด ์–ด๋ ค์šด ์ง€์—ญ์—์„œ๋Š” ์กฐ๊ธฐ ์ง„๋‹จ์ด ํž˜๋“  ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์ผ๋ฐ˜์ธ๋“ค์ด ์ž์‹ ์˜ ํ”ผ๋ถ€ ์ƒํƒœ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„ํŽธํ•œ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์›น ๊ธฐ๋ฐ˜์˜ ํ”ผ๋ถ€ ์งˆํ™˜ ์ง„๋‹จ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

E.ย ๊ด€๋ จ ๊ธฐ์ˆ /๋…ผ๋ฌธ/ํŠนํ—ˆ ์กฐ์‚ฌ ๋‚ด์šฉ ์†Œ๊ฐœ

F. ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ๊ฒฐ๊ณผ๋ฌผ ์†Œ๊ฐœ (+ ๋‹ค์ด์–ด๊ทธ๋žจ)

๐ŸŒฑ ์„œ๋น„์Šค ๊ตฌ์กฐ๋„ (๋‹ค์ด์–ด๊ทธ๋žจ)

image

[ ํ”ผ๋ถ€ ์งˆํ™˜ ์ง„๋‹จ ๊ธฐ๋Šฅ ๋™์ž‘๋ฐฉ์‹ ]

  1. ์‚ฌ์šฉ์ž๊ฐ€ React web์—์„œ ํ”ผ๋ถ€ ์งˆํ™˜ ์‚ฌ์ง„์„ ์—…๋กœ๋“œ.
  2. React -> flask -> model๋กœ ํ•ด๋‹น img url์ด ์ „๋‹ฌ.
  3. model์€ ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ predictionํ•˜๊ณ , ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€์™€ ๋ ˆ์ด๋ธ”์„ flask์— ๋ฐ˜ํ™˜.
  4. flask๋Š” ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ์„œ๋ฒ„์— ์—…๋กœ๋“œํ•˜๊ณ , ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ new img url์„ ์ƒ์„ฑ.
  5. flask -> React ๋กœ new img url๊ณผ label์ด ์ „๋‹ฌ๋˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์คŒ.

[ ๊ธฐํƒ€ ์ปค๋ฎค๋‹ˆํ‹ฐ, ๋‚˜์˜ ์ •๋ณด ์กฐํšŒ ๋“ฑ์˜ ๊ธฐ๋Šฅ ๋™์ž‘ ๋ฐฉ์‹ ]

  1. ์‚ฌ์šฉ์ž๊ฐ€ React web์—์„œ ์ •๋ณด๋ฅผ ์š”์ฒญ.
  2. React -> Fast API -> postgres DB๋กœ ํ•ด๋‹น ๋‚ด์šฉ ์ „๋‹ฌ.
  3. DB๋Š” ์š”์ฒญ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๊ฐ’์„ FastAPI์— ๋ฐ˜ํ™˜.
  4. Fast API -> React Web๋กœ ๊ฒฐ๊ณผ ์ „๋‹ฌ๋˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์คŒ.

๐ŸŒฑ ์ธ๊ณต์ง€๋Šฅ ๊ฐœ๋ฐœ ๊ฒฐ๊ณผ๋ฌผ ์†Œ๊ฐœ

โ‘  ๋ฐ์ดํ„ฐ์…‹ ๋ถ„์„ ๋ฐ ์ „์ฒ˜๋ฆฌ

โœ”๏ธ ๋ฐ์ดํ„ฐ์…‹ ๋ถ„์„

โœ”๏ธ ๋ฐ์ดํ„ฐ์…‹ ์ „์ฒ˜๋ฆฌ(๊ณตํ†ต)

โ‘ก Classification ๋ชจ๋ธ

โœ”๏ธ ๋ฐ์ดํ„ฐ์…‹ ์ „์ฒ˜๋ฆฌ

โœ”๏ธ ๋ชจ๋ธ ๊ตฌ์„ฑ

โœ”๏ธ ๋ชจ๋ธ ํ•™์Šต ๊ฒฐ๊ณผ

โœ”๏ธ Test Data์˜ ์ •ํ™•๋„: 88%

โ‘ข Lesion Segmentation ๋ชจ๋ธ

โœ”๏ธ ๋ฐ์ดํ„ฐ์…‹ ์ „์ฒ˜๋ฆฌ

โœ”๏ธ ๋ชจ๋ธ ๊ตฌ์„ฑ

โœ”๏ธ ๋ชจ๋ธ ํ•™์Šต ๊ฒฐ๊ณผ

โœ”๏ธ Test Data์˜ IoU: 0.85, Dice: 0.91

โ‘ฃ ๋ชจ๋ธ ๋ฐฐํฌ ๋ฐ ์˜ˆ์ธก api ๊ฐœ๋ฐœ

โœ”๏ธ Flask ์‹คํ–‰

โœ”๏ธ ๋ชจ๋ธ ๋ฐฐํฌ ๋ฐ ์‹คํ–‰

โœ”๏ธ pythonanywhere์— Flask api ๋ฐฐํฌ

๐ŸŒฑ ์›นํŽ˜์ด์ง€ ๊ฐœ๋ฐœ ๊ฒฐ๊ณผ๋ฌผ ์†Œ๊ฐœ

๋ฉ”์ธ ํŽ˜์ด์ง€(/index)

์†Œ๊ฐœ ํŽ˜์ด์ง€(/about)

ํ”ผ๋ถ€ ์งˆํ™˜ ์ข…๋ฅ˜ ์†Œ๊ฐœ ํŽ˜์ด์ง€(disease)

์ปค๋ฎค๋‹ˆํ‹ฐ ํŽ˜์ด์ง€(/community)

G. ๊ฐœ๋ฐœ ๊ฒฐ๊ณผ๋ฌผ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์†Œ๊ฐœ (์„ค์น˜ ๋ฐฉ๋ฒ•, ๋™์ž‘ ๋ฐฉ๋ฒ• ๋“ฑ)

๐ŸŒฑ ์„ค์น˜ ๋ฐฉ๋ฒ•

Frontend (src/Frontend/)

  1. npm install
  2. npm start

Backend-Flask (src/AI/flask-api)

  1. flask run ๋˜๋Š” python app.py

Backend-FastAPI (src/Backend)

  1. python3 -m venv .venv
  2. source .venv/bin/activate
  3. cd api
  4. pip install -r requirements.txt
  5. gunicorn --bind 0.0.0.0:8000 -k uvicorn.workers.UvicornWorker --reload app:app

DB-postgreSQL (src/Backend/)

  1. docker compose up --buiild (--build ==> ์ตœ์ดˆ 1ํšŒ๋งŒ ์ˆ˜ํ–‰)

๐ŸŒฑ ๋™์ž‘ ๋ฐฉ๋ฒ•

๐Ÿ’ก ๋™์ž‘ ์˜์ƒ url: https://photos.app.goo.gl/FnREN8LpcbR5id368

โ‘  ๋ฉ”์ธํŽ˜์ด์ง€(/index) ์—์„œ '์‚ฌ์ง„ ๋ชจ๋“œ ํ…Œ์ŠคํŠธ' ๋ฒ„ํŠผ ํด๋ฆญ

โ‘ก Dialog์—์„œ '์‹œ์ž‘ํ•˜๊ธฐ' ๋ฒ„ํŠผ ํด๋ฆญ

โ‘ข ์นด๋ฉ”๋ผ OR ํŒŒ์ผ ์„ ํƒ์œผ๋กœ ์‚ฌ์ง„ ์—…๋กœ๋“œ

โ‘ฃ ํ”ผ๋ถ€ ์งˆํ™˜ ๋ถ„์„ ์‚ฌ์ง„ ๋ฐ ์„ค๋ช… ํ™•์ธ

KakaoTalk_Video_2024-06-09-12-37-37-ezgif com-speed

H. ๊ฐœ๋ฐœ ๊ฒฐ๊ณผ๋ฌผ์˜ ํ™œ์šฉ๋ฐฉ์•ˆ ์†Œ๊ฐœ

  1. ์˜๋ฃŒ ์„œ๋น„์Šค ์ ‘๊ทผ์ด ์–ด๋ ค์šด ์ง€์—ญ์ด๋‚˜ ๊ฐœ์ธ์—๊ฒŒ ์ž๊ฐ€์ง„๋‹จ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ „๋ฌธ๊ฐ€์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด๋ณด๋‹ค ๋”์šฑ ์‹ ์†ํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ง„๋‹จํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์‹œ์Šคํ…œ์ด ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์ƒ ๋ฐ ์—ฐ๊ตฌ์ž๋“ค์—๊ฒŒ ์ œ๊ณตํ•ด ์˜ํ•™ ๊ต์œก ๋ฐ ์˜ํ•™ ์—ฐ๊ตฌ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ์‹œ์Šคํ…œ์„ ์ƒ์—…์ ์œผ๋กœ ํ™œ์šฉํ•ด ๋งž์ถคํ˜• ํ”ผ๋ถ€ ๊ด€๋ฆฌ ์ œํ’ˆ์ด๋‚˜ ์น˜๋ฃŒ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.