API Nhận Dạng Khuôn Mặt

Pixian.AI đưa ra API nhận dạng khuôn mặt duy nhất. API tạo ra các phần cắt khuôn mặt vui và cho lễ hội, có ích cho cả thú cưng và mọi người.

Nhận Khóa API

Bắt Đầu Nhanh

ĐĂNG một ảnh bitmap và nhận lại kết quả nhận dạng khuôn mặt:

$ curl https://api.pixian.ai/api/v2/face-sticker \
 -u xyz123:[secret] \
 -F image=@example.jpeg \
 -o pixian_result.png
// Requires: org.apache.httpcomponents.client5:httpclient5-fluent

Request request = Request.post("https://api.pixian.ai/api/v2/face-sticker")
   .addHeader("Authorization", "Basic cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd")
   .body(
      MultipartEntityBuilder.create()
         .addBinaryBody("image", new File("example.jpeg")) // TODO: Replace with your image
         // TODO: Add more upload parameters here
         .build()
      );
ClassicHttpResponse response = (ClassicHttpResponse) request.execute().returnResponse();

if (response.getCode() == 200) {
   // Write result to disk, TODO: or wherever you'd like
   try (FileOutputStream out = new FileOutputStream("pixian_result.png")) {
      response.getEntity().writeTo(out);
   }
} else {
   System.out.println("Request Failed: Status: " + response.getCode() + ", Reason: " + response.getReasonPhrase());
}
using (var client = new HttpClient())
using (var form = new MultipartFormDataContent())
{
   client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "INSERT_API_KEY_HERE");
   form.Add(new ByteArrayContent(File.ReadAllBytes("example.jpeg")), "image", "example.jpeg"); // TODO: Replace with your image
   // TODO: Add more upload parameters here

   var response = client.PostAsync("https://api.pixian.ai/api/v2/face-sticker", form).Result;

   if (response.IsSuccessStatusCode)
   {
      // Write result to disk, TODO: or wherever you'd like
      FileStream outStream = new FileStream("pixian_result.png", FileMode.Create, FileAccess.Write, FileShare.None);
      response.Content.CopyToAsync(outStream).ContinueWith((copyTask) => { outStream.Close(); });
   }
   else
   {
       Console.WriteLine("Request Failed: Status: " + response.StatusCode + ", Reason: " + response.ReasonPhrase);
   }
}
// Requires "request" to be installed (see https://www.npmjs.com/package/request)
var request = require('request');
var fs = require('fs');

request.post({
  url: 'https://api.pixian.ai/api/v2/face-sticker',
  formData: {
    image: fs.createReadStream('example.jpeg'), // TODO: Replace with your image
    // TODO: Add more upload options here
  },
  auth: {user: 'xyz123', pass: '[secret]'},
  followAllRedirects: true,
  encoding: null
}, function(error, response, body) {
  if (error) {
    console.error('Request failed:', error);
  } else if (!response || response.statusCode != 200) {
    console.error('Error:', response && response.statusCode, body.toString('utf8'));
  } else {
    // Save result
    fs.writeFileSync("pixian_result.png", body);
  }
});
$ch = curl_init('https://api.pixian.ai/api/v2/face-sticker');

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,
    array('Authorization: Basic cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd'));
curl_setopt($ch, CURLOPT_POSTFIELDS,
    array(
      'image' => curl_file_create('example.jpeg'),
      // TODO: Add more upload options here
    ));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$data = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200) {
  // Save result
  file_put_contents("pixian_result.png", $data);
} else {
  echo "Error: " . $data;
}
curl_close($ch);
# Requires "requests" to be installed (see https://pypi.org/project/requests/)
import requests

response = requests.post(
    'https://api.pixian.ai/api/v2/face-sticker',
    files={'image': open('example.jpeg', 'rb')},
    data={
        # TODO: Add more upload options here
    },
    auth=('xyz123', '[secret]')
)
if response.status_code == requests.codes.ok:
    # Save result
    with open('pixian_result.png', 'wb') as out:
        out.write(response.content)
else:
    print("Error:", response.status_code, response.text)
# Requires: gem install httpclient
require 'httpclient'

client = HTTPClient.new default_header: {
  "Authorization" => "Basic cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd"
}

response = client.post("https://api.pixian.ai/api/v2/face-sticker", {
  "image" => File.open("example.jpeg", "rb"), # TODO: Replace with your image
  # TODO: Add more upload parameters here
})

if response.status == 200 then
  # Write result to disk, TODO: or wherever you'd like
  File.open("pixian_result.png", 'w') { |file| file.write(response.body) }
else
  puts "Error: Code: " + response.status.to_s + ", Reason: " + response.reason
end
$ curl https://api.pixian.ai/api/v2/face-sticker \
 -u xyz123:[secret] \
 -F 'image.url=https://example.com/example.jpeg' \
 -o pixian_result.png
// Requires: org.apache.httpcomponents.client5:httpclient5-fluent

Request request = Request.post("https://api.pixian.ai/api/v2/face-sticker")
   .addHeader("Authorization", "Basic cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd")
   .body(
      MultipartEntityBuilder.create()
         .addTextBody("image.url", "https://example.com/example.jpeg") // TODO: Replace with your image URL
         // TODO: Add more upload parameters here
         .build()
      );
ClassicHttpResponse response = (ClassicHttpResponse) request.execute().returnResponse();

if (response.getCode() == 200) {
   // Write result to disk, TODO: or wherever you'd like
   try (FileOutputStream out = new FileOutputStream("pixian_result.png")) {
      response.getEntity().writeTo(out);
   }
} else {
   System.out.println("Request Failed: Status: " + response.getCode() + ", Reason: " + response.getReasonPhrase());
}
using (var client = new HttpClient())
using (var form = new MultipartFormDataContent())
{
   client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "INSERT_API_KEY_HERE");
   form.Add(new StringContent("https://example.com/example.jpeg"), "image.url"); // TODO: Replace with your image URL
   // TODO: Add more upload parameters here

   var response = client.PostAsync("https://api.pixian.ai/api/v2/face-sticker", form).Result;

   if (response.IsSuccessStatusCode)
   {
      // Write result to disk, TODO: or wherever you'd like
      FileStream outStream = new FileStream("pixian_result.png", FileMode.Create, FileAccess.Write, FileShare.None);
      response.Content.CopyToAsync(outStream).ContinueWith((copyTask) => { outStream.Close(); });
   }
   else
   {
       Console.WriteLine("Request Failed: Status: " + response.StatusCode + ", Reason: " + response.ReasonPhrase);
   }
}
// Requires "request" to be installed (see https://www.npmjs.com/package/request)
var request = require('request');
var fs = require('fs');

request.post({
  url: 'https://api.pixian.ai/api/v2/face-sticker',
  formData: {
    'image.url': 'https://example.com/example.jpeg', // TODO: Replace with your image
    // TODO: Add more upload options here
  },
  auth: {user: 'xyz123', pass: '[secret]'},
  followAllRedirects: true,
  encoding: null
}, function(error, response, body) {
  if (error) {
    console.error('Request failed:', error);
  } else if (!response || response.statusCode != 200) {
    console.error('Error:', response && response.statusCode, body.toString('utf8'));
  } else {
    // Save result
    fs.writeFileSync("pixian_result.png", body);
  }
});
$ch = curl_init('https://api.pixian.ai/api/v2/face-sticker');

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,
    array('Authorization: Basic cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd'));
curl_setopt($ch, CURLOPT_POSTFIELDS,
    array(
      'image.url' => 'https://example.com/example.jpeg',
      // TODO: Add more upload options here
    ));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$data = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200) {
  // Save result
  file_put_contents("pixian_result.png", $data);
} else {
  echo "Error: " . $data;
}
curl_close($ch);
# Requires "requests" to be installed (see https://pypi.org/project/requests/)
import requests

response = requests.post(
    'https://api.pixian.ai/api/v2/face-sticker',
    data={
        'image.url': 'https://example.com/example.jpeg',
        # TODO: Add more upload options here
    },
    auth=('xyz123', '[secret]')
)
if response.status_code == requests.codes.ok:
    # Save result
    with open('pixian_result.png', 'wb') as out:
        out.write(response.content)
else:
    print("Error:", response.status_code, response.text)
# Requires: gem install httpclient
require 'httpclient'

client = HTTPClient.new default_header: {
  "Authorization" => "Basic cHh4YmJ6Yjk2bjJ3OGFtOltzZWNyZXRd"
}

response = client.post("https://api.pixian.ai/api/v2/face-sticker", {
  "image.url" => "https://example.com/example.jpeg", # TODO: Replace with your image URL
  # TODO: Add more upload parameters here
})

if response.status == 200 then
  # Write result to disk, TODO: or wherever you'd like
  File.open("pixian_result.png", 'w') { |file| file.write(response.body) }
else
  puts "Error: Code: " + response.status.to_s + ", Reason: " + response.reason
end

Giá

Tích hợp và kiểm tra API miễn phí, không cần mua.

Chỉ dùng test=true để phát triển. Bạn có thể đánh giá chất lượng kết quả bằng cách dùng Ứng Dụng Trang Web Tương Tác Qua Lại ở trang bìa.

Kết quả sản xuất cần mua gói trả trước. Vui lòng xem trang giá .

Xác Thực & Bảo Mật

API sử dụng xác thực truy cập cơ bản HTTP tiêu chuẩn. Tất cả các yêu cầu đối với API phải được thực hiện qua HTTPS và bao gồm API của bạn. Các chứng nhận, có Id API là người dùng và Bí mật API là mật khẩu.

Thư viện khách hàng http của bạn phải hỗ trợ Chỉ Định Tên Máy Chủ (SNI) để thực hiện thành công các yêu cầu. Nếu bạn nhận được các lỗi giao tiếp lạ, việc thiếu hỗ trợ SNI có thể chính là lý do.

Giới Hạn Tốc Độ

Việc sử dụng API bị giới hạn tốc độ với các hạn mức cho phép mang tính hào phóng và không có giới hạn trần vượt.

Trong quá trình hoạt động thông thường do người dùng cuối điều khiển, bạn sẽ ít gặp phải bất kỳ giới hạn tốc độ nào vì việc sử dụng có xu hướng tăng giảm theo cách mà dịch vụ xử lý một cách ổn thoả.

Dù vậy, đối với các công việc hàng loạt chúng tôi khuyến khích bắt đầu nhiều nhất là 5 chuỗi, tăng thêm 1 chuỗi mới mỗi 5 phút cho đến khi bạn đạt đến mức độ song song mong muốn. Nếu bạn cần hơn 100 chuỗi cùng lúc, vui lòng liên hệ trước khi bắt đầu.

Nếu bạn gửi quá nhiều yêu cầu thì bạn sẽ bắt đầu nhận các phản hồi 429 Too Many Requests. Khi điều này xảy ra, bạn nên áp dụng linear back off//: trước phản hồi đầu tiên đó, đợi 5 giây cho đến khi gửi yêu cầu tiếp theo. Đối với 429 phản hồi liên tục thứ hai/, hãy đợi 2*5= 10 giây cho đến khi gửi yêu cầu tiếp theo. Đối với thứ bạ, đợi 3*5=15 giây, v.v.

Bạn có thể đặt lại bộ đếm back off sau khi yêu cầu thành công và bạn nên sử dụng back off trên cơ sở mỗi chuỗi (chẳng hạn các chuỗi nên hoạt động độc lập với nhau).

Thời gian chờ

Trong khi các yêu cầu của API thông thường được nhanh chóng làm xong, có thể trong suốt thời gian đột ngột tăng hoặc giảm tải tạm thời của người dùng đê trải nghiệm thời gian xử lý lâu hơn.

Nhằm để đảm bảo thư viện khách hàng của bạn không chấm dứt các yêu cầu API trước thời hạn, nên cấu hình có thời gian chờ không hoạt động ít nhất 180giây

Đối Tượng JSON lỗi

Chúng tôi sử dụng nguyên trạng HTTP quy ước để cho thấy sự thành công hay thất bại của một yêu cầu API và bao gồm những thông tin lỗi quan trọng trong Đối tượng Lỗi JSON (Error JSON Object) được trả về.

Chúng tôi luôn cố gắng trả về Đối tượng Lỗi JSON (Error JSON Object) với bất kỳ yêu nào có vấn đề. Tuy nhiên, có những thất bại của máy chủ nội bộ luôn luôn có thể về mặt lý thuyết mà việc đó dẫn đến phản hồi không không phải do lỗi JSON.

Các Thuộc Tính

statusTrạng thái phản hồi của HTTP được lập lại ở đây để giúp cho việc gỡ lỗi.
codePixian.AI mã lỗi nội bộ.
messageTin nhắn lỗi người có thể đọc được, dự định có ích trong việc gỡ lỗi.

Nếu trạng thái HTTP đối với yêu cầu của bạn là 200 thì sẽ không có Đối Tượng Lỗi JSON (Error JSON Object) nào được trả về và bạn có thể giả định một cách an toàn nói chung là yêu cầu đã thành công/.

Một số Thư Viện Khách Hàng HTTP đưa ra các lỗi/ về nguyên trạng HTTP/ trong phạm vi 400-599. Bạn sẽ cần nắm lấy các lỗi này và xử lý chúng phù hợp.

HTTP StatusÝ nghĩa
200-299

Thành Công

400-499

Có vấn đề với thông tin được cung cấp trong yêu cầu (chẳng hạn đã mất một tham số). Vui lòng xem xét tin nhắn lỗi để tìm ra cách sửa nó.

500-599

Đã có Pixian.AI mã lỗi nội bộ. Đợi 1 chút rồi thử lại và nếu sự cố cứ tiếp tục tồn tại, vui lòng email cho chúng tôi.

Example Error Response

{
  "error" : {
    "status" : 400,
    "code" : 1006,
    "message" : "Failed to read the supplied image. "
  }
}

Nhãn Dán Khuôn Mặt POST
https://api.pixian.ai/api/v2/face-sticker

Để nhận được nhận dạng khuôn mặt từ một ảnh, bạn tải lên tệp HTTP POST tiêu chuẩn. Hãy ghi nhớ rằng Loại-Nội Dung phải là multipart/form-data khi tải các tệp nhị phân lên.

Các tham số

Phải cung cấp hình ảnh đầu vào là hình ảnh của:


Nhị phân

Tệp nhị phân.


Chuỗi

Chuỗi được mã hóa base64. Dãy thông tin này có dung lượng nhiều nhất là 1 megabyte.


Chuỗi

URL tìm nạp và xử lý.

Phải là tệp .bmp, .gif, .jpeg, .png, hoặc .tiff.

Kích thước tải lên của ảnh tối đa (= chiều dài ×chiều cao) là 32.000.000pixels, mà bị co rút tới max_pixels.


Boolean, mặc định: false

Gửi true để cho thấy đây là hình ảnh kiểm thử.

Loại bỏ hoặc gửi false cho các sản xuất.

Hình ảnh kiểm thử được tự do xử lý nhưng kết quả sẽ có hình nền mờ được nhúng.


Số nguyên, 100 đến 25000000, mặc định: 25000000

Kích thước ảnh đầu vào tối da (=chiều dài × chiều cao). Các ảnh lớn hơn ảnh này sẽ bị co lại tới kích thước này trước khi xử lý.


Format: '#RRGGBB', e.g. #0055FF

Màu phông nền để sử dụng cho kết quả. Bỏ sử dụng phông nền trong suốt.

Chắc chắn đưa tiếp đầu ngữ '#' vào.


Boolean, mặc định: true

Cho dù có cắt kết quả đối với đồ vật phông nền.

Rất có ích cùng với result.marginresult.target_size để nhận được kết quả ở trung tâm và kích thước đẹp mọi lúc.


Format: '(x.y%|px){1,4}', e.g. 10px 20% 5px 15%, default: 1px

Rìa để thêm vào kết quả.

Được thêm vào bất chấp kết quả có bị cắt tới phông nền hay không.

Nếu result.target_size được xác định rõ, vậy thì rìa được ghép vào, nghĩa là không mở rộng kích thước mục tiêu hiệu quả.

Các đơn vĩ hỗ trợ là %px. Nếu theo nghĩa CSS, vậy bạn có thể sử dụng bất kỳ:

  • [all]
  • [top/bottom] [left/right]
  • [top] [left/right] [bottom]
  • [top] [right] [bottom] [left]


Format: 'w h', e.g. 1920 1080

Tuân theo kích thước kết quả cụ thể bằng pixel. Kết quả sẽ được theo tỷ lệ cho vừa vặn trong phạm vi kích thước quy định. Nếu có chỗ trống vượt quá mức, vậy thì nó luôn được đặt trọng tâm theo chiều ngang, với result.vertical_alignment kiểm soát xử lý theo chiều dọc.


Số đếm, mặc định: middle

Quy định cách phân bổ không gian theo chiều dọc vượt quá mức khi result.target_size được sử dụng.


Số đếm, mặc định: auto

Định dạng đầu ra auto được giải thích là png cho kết quả trong suốt, và jpeg cho kêt quả đục, có nghĩa là khi một background.color đã được quy định.

delta_png là định dạng nén tiên tiến, nhanh chóng và ở mức độ cao đặc biệt có ích cho các tình huống băng thông hạn chế, độ trễ thấp như các ứng dụng điện thoại. Nó được mã hóa là 0x00000000 màu đen trong suốt và cận cảnh là màu trắng trong suốt 0x00FFFFFF. Các pixel trong suốt một phần có các giá trị màu sắc thực của chúng. Cùng với ảnh đầu vào, bạn có thể dùng cái này để khôi phục toàn bộ kết quả. Learn more about the Delta PNG format

background.colorresult.crop_to_foregroundresult.marginresult.target_sizeresult.vertical_alignment được bỏ đi khi dùng delta_png. Kết quả phải cùng kích thước hình ảnh đầu vào, nếu không sẽ không giải mã được, thế nên max_pixels chắc hẵn đã làm cho ảnh đầu vào bị co lại.


Số nguyên, 1 đến 100, mặc định: 75

Chất lượng để sử dụng khi mã hóa kết quả JPEG.

Kết Quả Đầu Trang/

X-Credits-Charged Điểm thực tế đã tính phí.
X-Credits-Calculated Nếu như đây là yêu cầu về sản xuất thỉ điểm được tính đã được tính phí. Chỉ trả lại cho các yêu cầu kiểm tra.
X-Input-Orientation Tag định hướng EXIF mà chúng ta đọc và sử dụng cho ảnh đầu vào. Đó là giá trị số nguyên từ 1 đến 8, bao gồm 2 số đó. Việc này có ích nếu thư viện tải ảnh của bạn không hỗ trợ định hướng EXIF. Read more about EXIF orientation here
X-Input-Size [width] [height] của ảnh đầu vào bằng pixel, trước khi áp dụng bất kỳ kích thước hạn chế nào.
X-Result-Size [width] [height] ảnh kết quả bằng pixel.
X-Input-Foreground Hộp khung viền [top] [left] [width] [height] cận cảnh trong ảnh đầu vào phối hợp.
X-Result-Foreground Hộp khung viền [top] [left] [width] [height] cận cảnh trong ảnh kết quả kết hợp.

Bản Ghi các Thay Đổi API Nhận Dạng Khuôn Mặt

NgàyThay đổi
11 thg 4, 2024 Phát hành lần đầu.
Nhận Khóa API