발표 시작
기획 의도
근거
구현 과정/계획
데이터셋 ⇒ 전북 장수 사과 당도 품질 데이터(50만 장의 사과 사진, 당도 측정 결과)
폰 실시간 영상 → Back 전달 과정(socket)
카메라 켜기(getUserMedia)
const video = document.querySelector("video");
navigator.mediaDevices.getUserMedia({ video: true }).then(stream => {
video.srcObject = stream;
video.play();
});
프레임 추출(1초에 1번씩): 이때 압축(canvas.toBlob()) [압축방식]
방식 | 설명 | 용량 | 속도 | 추천도 |
---|---|---|---|---|
canvas.toDataURL('image/jpeg', quality) | base64로 압축 | 약 15~50KB | 느림 | 가장 간단 |
canvas.toBlob() | 바이너리 Blob (ArrayBuffer) | 약 5~30KB | 빠름 | 더 효율적 |
WebRTC video track | raw frame stream | 크고 복잡 | 매우 빠름 | 구현 복잡 |
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
canvas.width = 224;
canvas.height = 224;
setInterval(() => {
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
const dataURL = canvas.toDataURL("image/jpeg", 0.5); // 압축! 0.0~1.0
sendImageToBackend(dataURL);
}, 1000); // 1초마다
WebSocket으로 보내기
const socket = new WebSocket("ws://localhost:8000/ws");
function sendImageToBackend(dataURL) {
const base64 = dataURL.split(',')[1]; // 헤더 제거
socket.send(base64);
}
socket.onmessage = (e) => {
const result = JSON.parse(e.data);
console.log("예측 결과:", result);
};
당도 (객체, 색상) 추론 → Brix(FE)
당도 측정 과정에서 신경 쓴 UI/UX
MVP
마트에 들어가서 과일을 살 때 휴대전화 카메라를 꺼내 당도를 측정하는 과정
→ 생성형 AI를 이용한 짧은 동영상 활용 가능
향후 발전 계획