사용자 이미지 업로드(JavaScript) -> Google Cloud Vision API 로 이미지 분석
이 예제는 HTML과 JavaScript를 이용하여 사용자가 이미지를 업로드하고 Google Cloud Vision API로 이미지를 분석하는 간단한 웹 애플리케이션을 구현합니다.
1. 프로젝트 폴더 생성 및 파일 준비
먼저, 프로젝트를 생성하고 필요한 파일들을 준비합니다.
- 프로젝트 폴더 생성: 프로젝트를 위한 폴더를 생성하세요. 예를 들어,
image-analysis-app
이라는 이름으로 폴더를 만드세요. - 파일 생성: 다음의 두 파일을 생성합니다.
index.html
: HTML 파일로 사용자 인터페이스를 정의합니다.script.js
: JavaScript 파일로 이미지 업로드 및 API 호출 로직을 작성합니다.
2. HTML 파일 작성 (index.html)
아래와 같이 index.html
파일을 작성하세요. 이 파일은 이미지 업로드와 분석 버튼을 포함하고 있습니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Image Upload and Analysis</title>
</head>
<body>
<h1>Upload an Image for Analysis</h1>
<input type="file" id="imageInput" accept="image/*">
<button onclick="uploadAndAnalyzeImage()">Upload and Analyze</button>
<pre id="result"></pre>
<script src="script.js"></script>
</body>
</html>
- 설명: 이 HTML 파일은 이미지 파일을 선택할 수 있는 입력 요소와 버튼을 포함합니다. 버튼을 클릭하면
script.js
파일에 정의된uploadAndAnalyzeImage()
함수가 실행됩니다.
3. JavaScript 파일 작성 (script.js)
이제 script.js
파일을 작성합니다. 이 파일은 사용자가 이미지를 업로드하고 Google Cloud Vision API를 호출하여 결과를 화면에 표시하는 역할을 합니다.
async function uploadAndAnalyzeImage() {
const input = document.getElementById('imageInput');
if (input.files && input.files[0]) {
const file = input.files[0];
const reader = new FileReader();
reader.onloadend = async () => {
const base64Image = reader.result.split(',')[1];
const result = await analyzeImage(base64Image);
document.getElementById('result').innerText = JSON.stringify(result, null, 2);
};
reader.readAsDataURL(file);
} else {
alert('Please select an image file.');
}
}
async function analyzeImage(base64Image) {
const apiKey = 'YOUR_GOOGLE_CLOUD_VISION_API_KEY';
const url = `https://vision.googleapis.com/v1/images:annotate?key=${apiKey}`;
const requestBody = {
requests: [
{
image: {
content: base64Image
},
features: [
{
type: 'LABEL_DETECTION',
maxResults: 10
}
]
}
]
};
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(requestBody)
});
const result = await response.json();
return result;
}
- 설명:
uploadAndAnalyzeImage()
: 사용자가 이미지를 업로드하면 이를 base64로 인코딩하여 Google Cloud Vision API로 분석 요청을 보냅니다.analyzeImage(base64Image)
: Google Cloud Vision API에 이미지를 전송하고 분석 결과를 반환합니다. 이때 API 키(YOUR_GOOGLE_CLOUD_VISION_API_KEY
)를 사용합니다.
4. Google Cloud Vision API 설정
이제 Google Cloud Vision API를 사용할 수 있도록 설정합니다.
- Google Cloud Platform (GCP) 프로젝트 생성:
- Google Cloud Console에 접속하여 새 프로젝트를 생성하세요.
- Vision API 활성화:
- 생성한 프로젝트에서 "API 및 서비스" 메뉴로 이동하여 "라이브러리"를 선택한 후 "Vision API"를 검색하여 활성화합니다.
- API 키 생성:
- "API 및 서비스" > "인증 정보"로 이동하여 "인증 정보 만들기"를 클릭하고 "API 키"를 생성하세요.
- 생성된 API 키를 복사하여
script.js
파일의YOUR_GOOGLE_CLOUD_VISION_API_KEY
부분에 붙여넣습니다.
5. 실행 방법
- 로컬 서버 실행: HTML 파일은 브라우저에서 직접 열 수도 있지만, 로컬 서버에서 실행하는 것이 더 좋습니다. 이를 위해 간단한 HTTP 서버를 사용할 수 있습니다.
- Python을 사용하는 경우: Python이 설치되어 있다면 터미널에서 아래 명령어를 입력하여 로컬 서버를 실행할 수 있습니다.
# Python 3인 경우 python -m http.server
- VS Code와 같은 IDE를 사용하는 경우: Live Server 플러그인을 설치하여 실행할 수도 있습니다.
- Python을 사용하는 경우: Python이 설치되어 있다면 터미널에서 아래 명령어를 입력하여 로컬 서버를 실행할 수 있습니다.
- 브라우저에서 접속: 로컬 서버가 실행되면 브라우저에서
http://localhost:8000
(또는 Python 버전에 따라 다를 수 있음)으로 접속하여 파일을 테스트합니다. - 이미지 업로드 및 분석: 페이지에서 이미지를 업로드하고 "Upload and Analyze" 버튼을 클릭하여 Google Cloud Vision API를 통해 이미지가 분석되는 것을 확인하세요.
6. 주의 사항
- API 사용량 제한: Google Cloud Vision API는 무료로 일정량 사용이 가능하지만, 사용량이 많아지면 요금이 부과될 수 있으니 주의하세요.
- 보안: 실제 배포 시에는 API 키를 노출하지 않도록 백엔드 서버에서 API 호출을 처리하거나 환경 변수를 사용하는 것이 좋습니다.
이렇게 하면 이미지를 업로드하고 Google Cloud Vision API로 분석하는 간단한 웹 애플리케이션을 완성할 수 있습니다.
이 코드를 실행하면 Google Cloud Vision API의 **LABEL_DETECTION** 기능을 사용하여 이미지의 내용을 분석하고 그 결과를 반환합니다. `result` 변수에는 이미지의 분석 결과가 JSON 형태로 저장되며, `document.getElementById('result').innerText`를 통해 화면에 출력됩니다.
📌 예상되는 결과 (`result` 값)
`result`는 이미지에서 감지된 객체 또는 특징에 대한 레이블 정보가 포함된 JSON 객체입니다. 예를 들어, 강아지 사진을 업로드하면 다음과 같은 분석 결과가 나올 수 있습니다:
{
"responses": [
{
"labelAnnotations": [
{
"description": "dog",
"score": 0.98
},
{
"description": "pet",
"score": 0.95
},
{
"description": "animal",
"score": 0.93
}
]
}
]
}
### 주요 항목 설명
- **responses**: 분석 결과에 대한 응답 배열입니다.
- **labelAnnotations**: 이미지에서 감지된 레이블 목록입니다. 각 항목은 이미지에서 인식된 객체 또는 특징을 나타냅니다.
- **description**: 인식된 객체의 이름입니다 (예: "dog", "animal").
- **score**: 해당 객체가 해당 이미지에 존재할 가능성을 나타내는 신뢰도 점수입니다. 값은 0에서 1 사이의 실수로, 값이 클수록 신뢰도가 높습니다.
예를 들어 사용자가 고양이 사진을 업로드했다면 `labelAnnotations` 배열에는 `cat`, `pet`, `animal` 등과 같은 레이블이 포함될 수 있습니다. 이러한 분석 결과는 JSON 형식으로 `result` 영역에 출력됩니다.
이 결과는 Google Cloud Vision API가 이미지의 내용을 분석하여 반환하는 것으로, 사용자가 이미지에 어떤 객체가 있는지 쉽게 확인할 수 있게 도와줍니다.