Planeat์ ์์์ฆ ์ฌ์ง๋ง์ผ๋ก AI๊ฐ ๊ฐ์ธ ๋ง์ถคํ ์๋จ์ ๋ถ์ํ๊ณ ๊ฑด๊ฐํ ๋ผ์ดํ์คํ์ผ์ ์ ์ํ๋ ์ค๋งํธ ํฌ์ค์ผ์ด ์๋น์ค์ ๋๋ค.
๋ฐ์ ํ๋์ธ๋ค์ด ์ฝ๊ฒ ์์ ์ ์์ต๊ด์ ์ ๊ฒํ๊ณ ๊ฐ์ ํ ์ ์๋๋ก, ๋ณต์กํ ์์ ๊ณ์ฐ ์์ด๋ ์ ๋ฌธ์ ์ธ ๊ฑด๊ฐ ์กฐ์ธ์ ๋ฐ์ ์ ์์ต๋๋ค.
- ๐ธ ์์์ฆ OCR ๋ถ์: Google Cloud Vision API๋ก ์์์ฆ ํ ์คํธ ์๋ ์ธ์
- ๐ค AI ๋ง์ถค ๋ถ์: Gemini AI๊ฐ ๊ฐ์ธ ์ ๋ณด ๊ธฐ๋ฐ ์๋จ ํ๊ฐ ๋ฐ ์กฐ์ธ ์ ๊ณต
- ๐ ์์์ ์ ์ํ: ๋จ๋ฐฑ์ง, ํ์ํ๋ฌผ, ์ง๋ฐฉ, ๋นํ๋ฏผ ๋ฑ 4๊ฐ ์์ญ๋ณ ์ ์ ์ ๊ณต
- ๐ฝ๏ธ ๊ฐ์ธํ ์๋จ ์ ์: ์ฑ๋ณ, ์ฒด์ค, ๊ฑด๊ฐ ๋ชฉํ์ ๋ฐ๋ฅธ ๋ง์ถคํ ์๋จ ์ถ์ฒ
- ๐ ์์์ ์ถ์ฒ: ๋ถ์กฑํ ์์์ ๊ธฐ๋ฐ ์์์ ๋ฐ ์ํ ์ถ์ฒ
- ๐จ ์ง๊ด์ UI/UX: Streamlit ๊ธฐ๋ฐ ๋ฐ์ํ ์น ์ธํฐํ์ด์ค
- Google Cloud Vision API: ์์์ฆ ํ ์คํธ ์ถ์ถ (OCR)
- Google Gemini API: AI ๊ธฐ๋ฐ ์๋จ ๋ถ์ ๋ฐ ์ถ์ฒ
- Google AI Studio: AI ๋ชจ๋ธ ํ๋กฌํํธ ์ค๊ณ ๋ฐ ํ ์คํธ
- ๐ช ์ปค์คํ SVG ๋ก๊ณ ์ ๊ทธ๋ผ๋ฐ์ด์ ๋์์ธ
- ์ง๊ด์ ์ธ 4๋จ๊ณ ์ฌ์ฉ์ ์ ๋ณด ์ ๋ ฅ ํผ
- ๐ 4๊ฐ ์์ญ๋ณ ์์์ ์ ์ (100์ ๋ง์ )
- ๐ฝ๏ธ ์์นจ/์ ์ฌ/์ ๋ ๋ง์ถคํ ์๋จ ์ ์
- ๐ช ๊ฐ์ธ ๊ฑด๊ฐ ๋ชฉํ ๊ธฐ๋ฐ ๊ฐ์ ํฌ์ธํธ ์ ์
- ๐ ์ถ๊ฐ ๊ตฌ๋งค ์ถ์ฒ ์์ฌ๋ฃ ๋ฐ ์์์ ์ ๋ณด
Python 3.8+
Streamlit
Google Cloud Vision API ๊ณ์
Google Gemini API ํค- ๋ ํฌ์งํ ๋ฆฌ ํด๋ก
git clone https://github.com/your-username/planeat.git
cd planeat- ์์กด์ฑ ์ค์น
pip install streamlit google-cloud-vision google-generativeai- API ํค ์ค์
.streamlit/secrets.tomlํ์ผ์ ์์ฑํ๊ณ ๋ค์ ๋ด์ฉ์ ์ถ๊ฐ:
GEMINI_API_KEY = "your-gemini-api-key"
GOOGLE_CLOUD_VISION_API_KEY_JSON = '''
{
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "your-private-key-id",
"private_key": "your-private-key",
"client_email": "your-client-email",
"client_id": "your-client-id",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token"
}
'''- ์ ํ๋ฆฌ์ผ์ด์ ์คํ
streamlit run app.py- ์ฑ๋ณ, ์ ์ฅ(cm), ์ฒด์ค(kg) ์ ๋ ฅ
- ๊ฑด๊ฐ ๋ชฉํ ์ ํ (๋ค์ด์ดํธ/๊ทผ์ก์ฆ๊ฐ/๊ฑด๊ฐ์ ์ง/์ฒด์ค์ฆ๊ฐ)
- JPG, PNG ํ์์ ์์์ฆ ์ด๋ฏธ์ง ์ ๋ก๋
- AI๊ฐ ์๋์ผ๋ก ํ ์คํธ ์ธ์ ๋ฐ ์์ฌ๋ฃ ์ถ์ถ
- "๐ ์๋จ ๋ถ์ ์์" ๋ฒํผ ํด๋ฆญ
- ์ฝ 10-15์ด ํ ์์ธ ๋ถ์ ๊ฒฐ๊ณผ ํ์ธ
- 4๊ฐ ์น์ ๋ณ ์์ธ ๋ถ์ ๊ฒฐ๊ณผ ํ์ธ
- ๊ฐ์ ์ ๋ฐ ์ถ์ฒ์ฌํญ ์ ์ฉ
planeat/
โโโ app.py # ๋ฉ์ธ Streamlit ์ ํ๋ฆฌ์ผ์ด์
โโโ .streamlit/
โ โโโ secrets.toml # API ํค ์ค์ ํ์ผ
โโโ requirements.txt # Python ์์กด์ฑ
โโโ README.md # ํ๋ก์ ํธ ๋ฌธ์
def extract_text_from_image(image_bytes):
"""Google Cloud Vision API๋ฅผ ์ฌ์ฉํ ์์์ฆ ํ
์คํธ ์ถ์ถ"""
image = vision.Image(content=image_bytes)
response = vision_client.text_detection(image=image)
return response.text_annotations[0].description- ๊ตฌ์กฐํ๋ 4๋จ๊ณ ๋ถ์ ํ๋กฌํํธ ์ค๊ณ
- ๊ฐ์ธ ๋ง์ถคํ ๋ณ์ (์ฑ๋ณ, ์ฒด์ค, ๋ชฉํ) ๋ฐ์
- 100์ ๋ง์ ์ ์ ์์คํ ์ผ๋ก ์ง๊ด์ ํผ๋๋ฐฑ
- CSS ๊ทธ๋ผ๋ฐ์ด์ ๋ฐ ํธ๋ฒ ํจ๊ณผ
- ๋ชจ๋ฐ์ผ ์นํ์ ๋ฐ์ํ ๋ ์ด์์
- ์์๋ณ ๊ตฌ๋ถ๋ ๋ถ์ ์น์
| ์ญํ | ์ด๋ฆ | GitHub | ๋ด๋น ์ ๋ฌด |
|---|---|---|---|
| ๐จ Design & Backend Lead | ์ ํด์ฐฌ | @gocks77777 | ํ์ด์ง ๋์์ธ, ๋ก๊ณ ์ ์, ์ด๋ฏธ์ง ๋ฐ ๋ฐ์ดํฐ ์ ์ถ๋ ฅ ๊ธฐ๋ฅ ๊ตฌํ, ํ๋กฌํํธ ์์ง๋์ด๋ง |
| ๐ง Frontend & AI Lead | ์ด์น์ค | @conconcc | ํ๋ก ํธ์๋ ๊ตฌํ, ์ด๋ฏธ์ง ์ธ์ ๋ฐ ์ถ์ถ ๊ธฐ๋ฅ ๊ตฌํ, ํ๋กฌํํธ ์์ง๋์ด๋ง, Google AI Studio API ์ฐ๋, ๋ฐฐํฌ ๊ด๋ฆฌ |
- ํ๋ซํผ: Streamlit Cloud
- ๋๋ฉ์ธ: https://planeat-vsdh5tre5diksg39je685i.streamlit.app/
- ๋ชจ๋ํฐ๋ง: Streamlit ๋ด์ฅ ๋ถ์ ๋๊ตฌ
- ๐ ์ฃผ๊ฐ/์๊ฐ ์์ต๊ด ํธ๋ํน ๊ธฐ๋ฅ
- ๐ ์์ ์ฌ์ง ์ง์ ๋ถ์ ๊ธฐ๋ฅ
- ๐ฅ ๊ฐ์กฑ/์น๊ตฌ์ ์๋จ ๊ณต์ ๊ธฐ๋ฅ
- ๐ ๊ฐ์ธ ๊ฑด๊ฐ ๋ฐ์ดํฐ ์๊ฐํ ๋์๋ณด๋
- ๐ฑ ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ (React Native)
- ๐ ์์ฌ ์๊ฐ ์๋ฆผ ๊ธฐ๋ฅ
- ๐ช ๊ทผ์ฒ ๊ฑด๊ฐ์ํ์ ์ถ์ฒ
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
Q: "Vision API ํด๋ผ์ด์ธํธ๊ฐ ์ด๊ธฐํ๋์ง ์์์ต๋๋ค" ์ค๋ฅ
A: secrets.toml ํ์ผ์ GOOGLE_CLOUD_VISION_API_KEY_JSON ์ค์ ์ ํ์ธํ์ธ์.Q: "Gemini API ์ธ์ฆ ์ค๋ฅ" ๋ฐ์ ์
A: GEMINI_API_KEY๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธํ์ธ์.Q: ์์์ฆ ํ ์คํธ๊ฐ ์ธ์๋์ง ์์ ๋
A: ๋ช
ํํ๊ณ ์ ๋ช
ํ ์์์ฆ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํด์ฃผ์ธ์. (๊ถ์ฅ: 600x800px ์ด์)ํ๋ก์ ํธ ๋ฌธ์:
- ์ ํด์ฐฌ: gocks77777@github.com
- ์ด์น์ค: conconcc@github.com
ํ๋ก์ ํธ ๋งํฌ: https://github.com/your-username/planeat
โญ Planeat์ผ๋ก ๋ ๊ฑด๊ฐํ ์์ต๊ด์ ๋ง๋ค์ด๋ณด์ธ์! โญ