REST API. 사진 속 얼굴과 번호판 흐리기

Watermarkly Blur API는 이미지에서 얼굴과 차량 번호판을 자동으로 감지하고 흐리게 처리합니다. 이 API는 전적으로 AWS 인프라에서 실행되며, 개인정보 보호를 최우선으로 합니다. 귀하의 파일은 AI 모델 학습에 절대 사용되지 않습니다.
AWS Lambda를 사용하여 수천 개의 요청을 병렬로 처리함으로써, 전 세계 여러 지역에서 안정적인 성능과 가용성을 보장합니다.

무료로 사용해 보기

이 API는 AWS 마켓플레이스를 통해 판매됩니다. 비용: 요청당 $0.01. 7일간 무료 체험 옵션도 제공됩니다.


주요 기능

이미지에서 차량 번호판과 얼굴을 자동으로 감지하고 흐리게 처리

번호판을 프로젝트 또는 회사 로고로 대체 가능

처리된 이미지를 크기 조정, 자르기 또는 포맷 변환 가능

초당 최대 500개의 요청 지원

병렬 이미지 처리로 빠른 성능 제공

최대 지원 이미지 크기: 6000 × 6000 픽셀

API 요청 시 API 키를 통한 인증 필요

더 빠른 처리 속도, 더 큰 이미지 지원, 더 높은 요청률이 필요하신 경우 api-support@watermarkly.com으로 문의해 주세요.


출력 예시

여성의 얼굴과 차량 번호판이 흐리게 처리되어 있습니다.

API for blurring faces and license plates on images

차량 번호판은 회사 로고로 대체되었으며, 여성의 얼굴은 흐리게 처리되어 있습니다.

API for blurring faces and license plates on images

API 구매하기

이 API는 AWS 마켓플레이스를 통해 판매됩니다. 비용: 요청당 $0.01. 7일간 무료 체험 옵션도 제공됩니다.


처리 상세 정보

  • 처리된 이미지는 서버에 저장되지 않습니다.
  • JPEG, PNG, WEBP, AVIF, HEIC/HEIF 형식의 이미지를 지원합니다.
  • AVIF 및 HEIF 이미지는 별도 지정이 없는 한 JPEG로 변환됩니다.
  • 최대 입력 이미지 크기:
    • GET 요청: 20MB 또는 6000x6000 픽셀
    • POST 요청: 6MB 또는 6000x6000 픽셀
  • API 요청 제한:
    • 500개의 병렬 요청
    • 초당 500개의 요청
    • 하루 최대 100,000개의 요청

API 엔드포인트

지역

현재, API는 두 개의 지역에서 제공됩니다:

편리한 엔드포인트를 자유롭게 사용하실 수 있습니다. 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 형식의 이미지를 지원합니다.
  • AVIFHEIF 이미지는 다른 형식이 지정되지 않는 한 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);
  }
})();