REST API. Làm mờ khuôn mặt và biển số xe trong ảnh
Watermarkly Blur API tự động phát hiện và làm mờ khuôn mặt cũng như biển số xe trên hình ảnh. API chạy hoàn toàn trên hạ tầng AWS và ưu tiên quyền riêng tư — tệp của bạn không bao giờ được dùng để huấn luyện mô hình AI. Chúng tôi sử dụng AWS Lambda để xử lý hàng nghìn yêu cầu song song, đảm bảo hiệu năng ổn định và khả dụng tại nhiều khu vực trên toàn thế giới.
Chúng tôi phân phối API qua AWS Marketplace. Chi phí: $0.01 / yêu cầu. Có tùy chọn dùng thử miễn phí 7 ngày.
Tính năng chính
✓ Tự động phát hiện và làm mờ biển số xe và khuôn mặt trong ảnh
✓ Tùy chọn thay biển số bằng logo dự án hoặc công ty của bạn.
✓ Có thể đổi kích thước, cắt hoặc chuyển đổi định dạng ảnh đã xử lý.
✓ Hỗ trợ tới 500 yêu cầu mỗi giây.
✓ Xử lý ảnh song song để đạt tốc độ cao hơn.
✓ Kích thước ảnh tối đa được hỗ trợ: 6000 × 6000 pixel.
✓ Các yêu cầu tới API cần xác thực bằng khóa API.
Nếu bạn cần tốc độ xử lý nhanh hơn, hỗ trợ ảnh lớn hơn, hoặc hạn mức yêu cầu cao hơn, vui lòng liên hệ: api-support@watermarkly.com.
Ví dụ kết quả đầu ra
Khuôn mặt của người phụ nữ và biển số xe được làm mờ.

Biển số xe được thay bằng logo công ty, và khuôn mặt của người phụ nữ được làm mờ.

Chúng tôi bán API qua AWS Marketplace. Chi phí: $0.01 / yêu cầu. Có tùy chọn dùng thử miễn phí 7 ngày.
Chi tiết xử lý
- Ảnh đã xử lý không được lưu trên máy chủ của chúng tôi.
- Dịch vụ chấp nhận ảnh định dạng JPEG, PNG, WEBP, AVIF, HEIC/HEIF.
- Ảnh AVIF và HEIF sẽ được chuyển sang JPEG trừ khi bạn chỉ định định dạng khác.
- Kích thước tối đa của ảnh đầu vào:
- Yêu cầu GET: 20MB hoặc 6000x6000 pixel.
- Yêu cầu POST: 6MB hoặc 6000x6000 pixel.
- Giới hạn tốc độ API:
- 500 yêu cầu song song
- 500 yêu cầu mỗi giây
- 100,000 yêu cầu mỗi ngày
API Endpoints
Khu vực (Regions)
Hiện API được cung cấp tại hai khu vực:
- Châu Âu: https://blur-api-eu1.watermarkly.com/ (eu-north-1)
- Hoa Kỳ: https://blur-api-us1.watermarkly.com/ (us-east-2)
Bạn có thể dùng endpoint nào thuận tiện hơn. Có thể dùng endpoint thứ hai như phương án dự phòng nếu một vùng AWS gặp sự cố. Nếu bạn cần API ở khu vực khác, hãy cho chúng tôi biết.
Phương thức yêu cầu
Bạn có thể gửi ảnh để xử lý bằng yêu cầu GET hoặc POST.
Nếu ảnh của bạn truy cập công khai, chúng tôi khuyên dùng GET vì thường nhanh hơn POST một chút.
Làm mờ ảnh bằng yêu cầu GET (Khuyến nghị)
GET https://blur-api-eu1.watermarkly.com/blur/?url={image_url}
hoặc
GET https://blur-api-us1.watermarkly.com/blur/?url={image_url}
Dịch vụ sẽ tải ảnh từ image_url và xử lý.
Request
- Method: GET
- Headers:
x-api-key: Khóa API của bạn
- URL Query Parameters:
url(Bắt buộc): URL đầy đủ của ảnh cần xử lý.blur_intensity(Tùy chọn): Số thực trong khoảng 0.0–20.0 để điều chỉnh mức độ làm mờ. Mặc định: 1.0. Truyền 0.0 để tắt làm mờ.file_size(Tùy chọn): Dung lượng tệp đầu ra mong muốn (bytes). Dịch vụ sẽ cố gắng trả về ảnh không vượt quá dung lượng này.width(Tùy chọn): Chiều rộng ảnh đầu ra mong muốn.height(Tùy chọn): Chiều cao ảnh đầu ra mong muốn.format(Tùy chọn): Định dạng ảnh đầu ra mong muốn. Giá trị cho phép: JPEG, PNG, WEBP.logo_url(Tùy chọn): URL của tệp logo để đặt lên biển số. Có thể là URL HTTP hoặc data URL. Đảm bảo URL đã được escape đúng cách trước khi truyền.logo_size(Tùy chọn): Kích thước logo, giá trị từ 0.1 đến 1.0.plate_screws(Tùy chọn): Thêm ốc cho biển số. Chỉ hiệu lực khi dùng kèm tham số logo_url.
Response
Phản hồi thành công: (HTTP Status: 200) Dịch vụ trả về ảnh đã xử lý ở một trong các định dạng: JPEG, PNG, WEBP.
Phản hồi lỗi: (HTTP Status: 500, 403)
{
"message": "Error message"
}
Làm mờ ảnh bằng yêu cầu POST
POST https://blur-api-eu1.watermarkly.com/blur/
hoặc
POST https://blur-api-us1.watermarkly.com/blur/
Gửi ảnh để xử lý.
Request
- Method:
POST - Content-Type:
application/octet-stream - Headers:
x-api-key: Khóa API của bạn
- Query Parameters:
blur_intensity(Tùy chọn): Số thực trong khoảng 0.0–20.0 để điều chỉnh mức độ làm mờ. Mặc định: 1.0. Truyền 0.0 để tắt làm mờ.file_size(Tùy chọn): Dung lượng tệp đầu ra mong muốn (bytes). Dịch vụ sẽ cố gắng trả về ảnh không vượt quá dung lượng này.width(Tùy chọn): Chiều rộng ảnh đầu ra mong muốn.height(Tùy chọn): Chiều cao ảnh đầu ra mong muốn.format(Tùy chọn): Định dạng ảnh đầu ra mong muốn. Giá trị cho phép: JPEG, PNG, WEBP.logo_url(Tùy chọn): URL của tệp logo để đặt lên biển số. Có thể là URL HTTP hoặc data URL. Đảm bảo URL đã được escape đúng cách trước khi truyền.logo_size(Tùy chọn): Kích thước logo, giá trị từ 0.1 đến 1.0.plate_screws(Tùy chọn): Thêm ốc cho biển số. Chỉ hiệu lực khi dùng kèm tham số logo_url.
Response
Phản hồi thành công: (HTTP Status: 200) Dịch vụ trả về ảnh đã xử lý ở một trong các định dạng: JPEG, PNG, WEBP.
Phản hồi lỗi: (HTTP Status: 500, 403)
{
"message": "Error message"
}
Ví dụ sử dụng
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);
}
})();