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.
ĐĂ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
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á .
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.
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).
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
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 |
|
---|---|
status | Trạng thái phản hồi của HTTP được lập lại ở đây để giúp cho việc gỡ lỗi. |
code | Pixian.AI mã lỗi nội bộ. |
message | Tin 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. " } }
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.
Ngày | Thay đổi |
---|---|
11 thg 4, 2024 | Phát hành lần đầu. |