728x90
반응형
Teachable Machine + Streamlit을 활용한 실전 프로젝트 개선 및 확장
🎯 프로젝트 발전 과정과 추가 기능
이 프로젝트는 이미지 분석을 통한 파충류 종 판별 및 특수동물 병원 검색, 유튜브 영상 추천 기능을 제공합니다.
하지만 1편에서 다룬 기본 기능을 실제 프로젝트에서 적용하다 보니 한계점과 개선해야 할 사항이 발견되었습니다.
따라서 2편에서는 다음과 같은 기능을 추가 및 개선하였습니다.
🛠 1. 실시간 바코드 스캔 기능 추가
🏷 배경 및 필요성
- 애완동물 사료, 사육 용품 등을 구매할 때 바코드를 스캔하여 제품 정보를 빠르게 확인할 수 있도록 기능을 추가.
- 제품의 유통기한, 성분 정보, 저장 방법(냉장/냉동 여부) 등을 한눈에 파악 가능.
- 공공 데이터 API를 활용하여 실시간으로 제품 데이터를 불러오는 방식.
📌 바코드 검색 기능 코드 예제
import streamlit as st
from barcode_scanner import scan_barcode
from api_connector import get_product_info, is_refrigerated_or_frozen
def show_barcode_scanner():
st.title("🏷️ 바코드 제품 검색")
barcode = scan_barcode()
if barcode:
st.success(f"✅ 바코드 인식: {barcode}")
product_info = get_product_info(barcode)
if product_info:
st.write("📦 제품 정보:")
st.json(product_info)
if is_refrigerated_or_frozen(product_info):
st.warning("🚨 냉장/냉동 보관이 필요한 제품입니다.")
else:
st.success("✅ 상온 보관 가능 제품입니다.")
else:
st.error("❌ 해당 바코드에 대한 제품 정보를 찾을 수 없습니다.")
if __name__ == "__main__":
show_barcode_scanner()
✔ 개선 사항
- 기존 AI 기반 이미지 분석 기능과 함께 바코드 검색 기능을 추가하여 사용자 편의성 향상
- 파충류 관련 사료 및 영양제 정보 제공
- 냉장/냉동 제품인지 여부를 자동 판단하여 경고 메시지 출력
📊 2. 사용자 데이터 기반 AI 모델 개선
📌 기존 모델의 한계
- 초기 학습 데이터 부족 → 일부 종의 분류 정확도가 낮았음.
- 사용자 입력 데이터 반영 불가 → 사용자 피드백을 학습에 활용할 방법 필요.
- 특정 종 간 오인식 발생 → 유사한 패턴을 가진 종들이 혼동됨.
🔍 해결 방법
- 사용자가 직접 학습 데이터를 추가할 수 있는 기능 구현
- 기존 AI 모델을 Fine-Tuning하여 점진적으로 개선
- 사용자 피드백을 수집하여 잘못된 예측을 보완
📌 사용자 피드백 기능 코드 예제
import streamlit as st
import pandas as pd
feedback_data = []
def collect_feedback(species, correct_species):
feedback_data.append({"AI 예측": species, "사용자 수정": correct_species})
st.success("✅ 피드백이 저장되었습니다. 향후 모델 개선에 반영됩니다.")
def show_feedback():
st.title("📋 사용자 피드백 수집")
if "analysis_complete" in st.session_state and st.session_state.analysis_complete:
species = st.session_state.species
correct_species = st.text_input(f"AI 예측 결과: {species} → 수정할 종 입력:")
if st.button("📥 피드백 제출"):
collect_feedback(species, correct_species)
if feedback_data:
st.write("📊 현재까지 수집된 피드백 데이터:")
st.dataframe(pd.DataFrame(feedback_data))
if __name__ == "__main__":
show_feedback()
✔ 개선 사항
- 사용자가 AI 모델의 예측을 검토하고 직접 수정할 수 있도록 UI 추가
- 수집된 피드백을 기반으로 추가 학습을 수행하여 모델 개선 가능
- Fine-Tuning을 활용하여 점진적으로 정확도를 향상시킴
🎥 3. 유튜브 검색 기능 강화
📌 기존 한계
- 사용자가 검색 키워드를 직접 입력해야 했음
- AI가 추천해주는 콘텐츠의 정확성이 부족했음
- 유튜브 API 사용 시 검색 범위를 더 세밀하게 설정할 필요가 있었음
🔍 개선 방법
- AI가 자동으로 종과 관련된 키워드를 생성하여 유튜브 검색 수행
- 유튜브 영상의 조회수, 좋아요 수, 최신 업로드 순으로 필터링하여 유용한 영상만 추천
- 사용자가 영상을 직접 평가하여 좋아요/싫어요 버튼 추가
📌 유튜브 검색 개선 코드 예제
import streamlit as st
from youtube_page import search_youtube_video
def show_youtube_page():
st.title("🎥 파충류 관련 유튜브 영상 추천")
if "analysis_complete" in st.session_state and st.session_state.analysis_complete:
species = st.session_state.species
st.info(f"현재 검색 중인 종: {species} 관련 유튜브 영상")
videos = search_youtube_video(f"{species} 키우기", sort_by="viewCount")
if videos:
for video in videos:
st.write(f"🎬 [{video['snippet']['title']}]")
st.write(f"🔗 [유튜브에서 보기](<https://www.youtube.com/watch?v={video['id']['videoId']}>)")
# 좋아요 버튼 추가
if st.button(f"👍 좋아요 {video['id']['videoId']}"):
st.success("✔ 좋아요가 반영되었습니다.")
st.write("---")
else:
st.error("❌ 관련 유튜브 영상을 찾을 수 없습니다.")
if __name__ == "__main__":
show_youtube_page()
✔ 개선 사항
- AI가 자동으로 최적의 키워드를 생성하여 검색.
- 유튜브 영상의 인기도(조회수, 좋아요 수)를 기준으로 정렬하여 신뢰할 수 있는 콘텐츠 추천.
- 사용자가 직접 좋아요/싫어요 버튼을 클릭하여 피드백 제공.
🚀 최종 결론
- *"[Streamlit] [AI] : Teachable Machine을 활용한 파충류 분류 AI (2)"**는 기존 프로젝트의 한계를 극복하고 실전 적용 가능성을 높이기 위한 개선 작업을 다루었습니다.
🏆 주요 개선 내용
✅ 실시간 바코드 스캔 기능 추가 (공공 데이터 API 활용)
✅ 사용자 피드백 수집 기능 추가 (AI 모델의 지속적인 개선 가능)
✅ 유튜브 검색 기능 강화 (AI 자동 추천 및 사용자 피드백 반영)
✅ Fine-Tuning을 통해 AI 모델 성능 향상
📌 향후 계획
- 커뮤니티 기능 추가 (사용자 경험 공유 및 데이터셋 보완)
- 음성 인식 기능 추가 (음성으로 병원 검색 및 영상 추천)
- 환경 보호 캠페인과 협업 (멸종위기종 감지 기능 개발)
728x90
반응형
'Project' 카테고리의 다른 글
[CRM] [Project] 클러스터링으로 고객 생애 가치(LTV) 분석하기 (0) | 2025.03.20 |
---|---|
156. [Streamlit] [AI] :Teachable Machine을 활용한 파충류 분류 AI(1) (0) | 2025.02.20 |