사진에서 얼굴과 번호판을 흐리게 처리하는 REST API
Watermarkly Blur API는 이미지에서 자동차 번호판과 얼굴을 자동으로 감지하고 흐리게 처리합니다.
이 서비스는 AWS 인프라에서 완전히 호스팅되며, 고객 파일을 AI 모델 학습에 사용하지 않아 개인 정보 보호를 보장합니다.
AWS Lambda를 사용하여 수천 개의 동시 요청을 안정적으로 처리하고 전 세계 여러 지역에서 서비스를 제공합니다.
기능
- 이미지에서 자동차 번호판과 얼굴을 자동으로 감지하고 흐리게 처리합니다.
- 자동차 번호판을 프로젝트 로고로 교체할 수 있습니다.
- 처리된 이미지를 크기 조정, 자르기 또는 변환할 수 있습니다.
- 초당 최대 500개 요청을 지원합니다.
- 병렬 처리를 통해 빠른 성능을 제공합니다.
- 최대 지원 이미지 크기: 6000x6000 픽셀.
더 빠른 처리 속도, 더 큰 이미지 지원 또는 높은 요청 속도가 필요하면 api-support@watermarkly.com으로 문의하십시오.
API를 사용하면 자동차 번호판을 회사 로고로 교체할 수 있습니다.
API 엔드포인트
지역
현재, API는 두 개의 지역에서 제공됩니다:
- 유럽: https://blur-api-eu1.watermarkly.com/ (eu-north-1)
- 미국: https://blur-api-us1.watermarkly.com/ (us-east-2)
편리한 엔드포인트를 자유롭게 사용하실 수 있습니다. AWS 지역이 다운될 경우, 두 번째 엔드포인트를 백업으로 사용할 수 있습니다. 다른 지역에서 API가 필요하면 알려주세요.
요청 방법
이미지를 처리하려면 GET 또는 POST 요청을 사용할 수 있습니다.
이미지가 공개적으로 접근 가능하다면 GET 요청을 권장합니다. GET 요청이 POST 요청보다 약간 더 빠릅니다.
GET 요청을 사용하여 이미지 블러 처리 (권장)
GET https://blur-api-eu1.watermarkly.com/blur/?url={image_url}
or
GET https://blur-api-us1.watermarkly.com/blur/?url={image_url}
서비스가 image_url
에서 이미지를 다운로드하고 처리합니다.
요청
- 메서드: GET
- URL 쿼리 매개변수:
url
(필수): 처리할 이미지의 전체 URL.blur_intensity
(선택 사항): 0.0에서 20.0 사이의 부동 소수점 값으로 흐림 강도를 조절합니다. 기본값: 1.0. 0.0은 흐림 효과를 비활성화합니다.file_size
(선택 사항): 원하는 출력 파일 크기를 바이트 단위로 지정합니다. 서비스는 이 크기를 초과하지 않는 이미지를 반환하려고 시도합니다.width
(선택 사항): 원하는 출력 이미지의 너비를 지정합니다.height
(선택 사항): 원하는 출력 이미지의 높이를 지정합니다.format
(선택 사항): 원하는 출력 이미지 형식을 지정합니다. 가능한 값: JPEG, PNG, WEBP.logo_url
(선택 사항): 번호판에 배치할 로고 파일의 URL입니다. HTTP URL 또는 데이터 URL일 수 있습니다. 요청 매개변수로 전달하기 전에 URL이 올바르게 인코딩되었는지 확인하십시오.logo_size
(선택 사항): 0.1에서 1.0 사이의 숫자로 로고 크기를 지정합니다.plate_screws
(선택 사항): 번호판에 나사를 추가합니다. logo_url 매개변수와 함께 사용해야 합니다.
응답
성공적인 응답: (HTTP Status: 200) 서비스는 JPEG, PNG, WEBP 형식 중 하나로 처리된 이미지를 반환합니다.
오류 응답: (HTTP Status: 500, 403)
{
"message": "Error message"
}
POST 요청을 사용하여 이미지 블러 처리
POST https://blur-api-eu1.watermarkly.com/blur/
or
POST https://blur-api-us1.watermarkly.com/blur/
이미지를 처리할 수 있도록 제출합니다.
요청
- 메서드:
POST
- Content-Type:
application/octet-stream
- 헤더:
x-api-key
: API 키
- 쿼리 매개변수:
blur_intensity
(선택 사항): 0.0 ~ 20.0 사이의 실수 값으로 흐림 강도를 조절합니다. 기본값: 1.0. 0.0을 입력하면 흐림 효과가 비활성화됩니다.file_size
(선택 사항): 출력 파일 크기를 바이트 단위로 지정합니다. 서비스는 이 크기를 초과하지 않는 이미지를 반환하려고 시도합니다.width
(선택 사항): 출력 이미지의 원하는 너비를 지정합니다.height
(선택 사항): 출력 이미지의 원하는 높이를 지정합니다.format
(선택 사항): 원하는 출력 이미지 형식을 지정합니다. 가능한 값: JPEG, PNG, WEBP.logo_url
(선택 사항): 자동차 번호판에 배치할 로고 파일의 URL입니다. HTTP URL 또는 데이터 URL을 사용할 수 있습니다. URL을 요청 매개변수로 전달하기 전에 올바르게 인코딩되었는지 확인하세요.logo_size
(선택 사항): 0.1 ~ 1.0 사이의 숫자로 로고 크기를 지정합니다.plate_screws
(선택 사항): 번호판에 나사를 추가합니다. logo_url 매개변수와 함께 사용해야 합니다.
응답
성공적인 응답: (HTTP Status: 200) 서비스는 JPEG, PNG, WEBP 형식 중 하나로 처리된 이미지를 반환합니다.
오류 응답: (HTTP Status: 500, 403)
{
"message": "Error message"
}
처리 세부 정보
- 처리된 이미지는 서버에 저장되지 않습니다.
- 이 서비스는 JPEG, PNG, WEBP, AVIF, HEIC/HEIF 형식의 이미지를 지원합니다.
- AVIF 및 HEIF 이미지는 다른 형식이 지정되지 않는 한 JPEG로 변환됩니다.
- 최대 입력 이미지 크기:
- GET 요청: 20MB 또는 6000x6000 픽셀.
- POST 요청: 6MB 또는 6000x6000 픽셀.
- API 요청 제한:
- 동시 요청 500개
- 초당 500개 요청
- 하루 100,000개 요청
- 더 높은 제한이 필요하면 api-support@watermarkly.com으로 문의하세요.
보안 및 개인정보 보호
- API 요청은 API 키를 통한 인증이 필요합니다.
- 고객 파일은 AI 모델 학습에 사용되지 않습니다.
- 모든 처리는 AWS 인프라에서 이루어집니다. 원하는 지역에 API를 무료로 배포할 수 있습니다.
사용 예시
Python
import requests
import urllib.parse
API_KEY = 'your_api_key'
API_URL = 'https://blur-api-eu1.watermarkly.com/blur/'
input_path = '' # Local image path
output_path = '' # Local output path
# Blur image using POST request
with open(input_path, 'rb') as image_file:
response = requests.post(API_URL, headers={'x-api-key': API_KEY}, data=image_file)
if response.status_code == 429:
# API rate limit exceeded, wait a little
time.sleep(0.1)
response = requests.post(API_URL, headers={'x-api-key': API_KEY}, data=image_file)
# Save the processed image locally
with open(output_path, 'wb') as f:
f.write(response.content)
# Blur image using GET request
encoded_url = urllib.parse.quote("https://nikitin.io/eqe.jpg", safe='')
response = requests.get(API_URL + "?url=" + encoded_url, headers={'x-api-key': API_KEY})
# Save the response locally
with open(output_path, 'wb') as f:
f.write(response.content)
NodeJS
import { promises as fs } from "node:fs";
const API_KEY = 'your_api_key';
const API_URL = 'https://blur-api-eu1.watermarkly.com/blur/';
// Helper function to pause execution for the given number of milliseconds
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
(async () => {
// Blur image using POST request
try {
const inputPath = 'input_path_here'; // Replace with your actual input path
const outputPath = 'output_path_here'; // Replace with your actual output path
// Read image file as binary data asynchronously
const imageData = await fs.readFile(inputPath);
let response = await fetch(API_URL, {
method: 'POST',
headers: {
'x-api-key': API_KEY,
'Content-Type': 'application/octet-stream'
},
body: imageData
});
if (response.status === 429) {
// API rate limit exceeded, wait a little
await sleep(100); // sleep for 0.1 seconds
response = await fetch(API_URL, {
method: 'POST',
headers: {
'x-api-key': API_KEY,
'Content-Type': 'application/octet-stream'
},
body: imageData
});
}
// Save the processed image locally asynchronously
const arrayBuffer = await response.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
await fs.writeFile(outputPath, buffer);
} catch (error) {
console.error('Error during POST request:', error);
}
// Blur image using GET request
try {
const outputPath = 'output_path_here'; // Replace with your actual output path
const encodedUrl = encodeURIComponent("https://nikitin.io/eqe.jpg"); // Encode URL
const response = await fetch(`${API_URL}?url=${encodedUrl}`, {
method: 'GET',
headers: {
'x-api-key': API_KEY
}
});
// Save the response locally asynchronously
const arrayBuffer = await response.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
await fs.writeFile(outputPath, buffer);
} catch (error) {
console.error('Error during GET request:', error);
}
})();