फेस स्टिकर्स API

Pixian.AI एक बढ़िया फेस स्टिकर्स API देता है। API चेहरों के मज़ेदार और प्रसन्न कटआउट बनाता है, जो पालतू जानवरों और लोगों दोनों के लिए इस्तेमाल हो सकते हैं।

API कुंजी प्राप्त करें

जल्दी शुरूवात

एक बिटमैप इमेज पोस्ट करें और एक फेस स्टिकर परिणाम प्राप्त करें:

$ 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

कीमत

API के साथ एकीकृत करना और उसका टैस्ट करना मुफ़्त है, और इसके लिए कोई ख़रीदारी करना ज़रूरी नहीं है।

बनाने के लिए बस test=true का इस्तेमाल करें। आप फ्रंट पेज़ पर इंटरैक्टिव वेब ऐप का इस्तेमाल करके परिणाम की गुणवत्ता का मूल्यांकन कर सकते हैं।

उत्पादन परिणामों के लिए एक क्रेडिट पैक खरीदने की आवश्यकता होती है। कृपया कीमत पेज पर जाएँ।

प्रमाणीकरण और सुरक्षा

API मानक HTTP मूलभूत पहुँच प्रमाणीकरण का इस्तेमाल करता है। API के लिए सभी अनुरोध HTTPS पर किए जाने चाहिए और इसमें उपयोगकर्ता के रूप में API Id और पासवर्ड के रूप में API सीक्रेट के साथ आपके API क्रेडेंशियल शामिल होने चाहिए।

अनुरोधों को सफलतापूर्वक करने के लिए आपकी http क्लायंट लाइब्रेरी को सर्वर नाम सूचना (SNI) का समर्थन करना होगा। यदि आप अजीब हैंडशेक एरर्स का सामना कर रहे हैं, तो इसकी सबसे अधिक संभावना है।

रेट सीमित करना

API का इस्तेमाल उदार छूट सहित और बिना किसी ऊपरी सीमा के साथ दर द्वारा सीमित है।

सामान्य अंत्य-उपयोगकर्ता-संचालित प्रचालन के दौरान आपके द्वारा दर सीमा का सामना करने की आशंका कम है क्योंकि तब इस्तेमाल कम होने लगता है और इस तरह प्रवाहित होता है कि इसे सेवा द्वारा गरिमामय तरीके से संभाल लिया जाता है।

फिर भी, बैच आधारित कामों के लिए हम अधिकतम 5 थ्रेड्स के साथ शुरुआत करने की सलाह देते हैं, फिर प्रत्येक 5 मिनट में 1 नया थ्रेड तब तक जोड़ते रहें, जब तक कि आप समरूपता के वांछित स्तर तक नहीं पहुंच जाते। यदि आपको 100 से अधिक समवर्ती थ्रेड्स की आवश्यकता हो, तो शुरू करने से पहले कृपया संपर्क करें।

यदि आप अत्यधिक अनुरोध प्रस्तुत करते हैं तो आपको 429 Too Many Requests प्रत्युत्तर मिलने शुरू हो जाएंगे। जब भी ऐसा हो तो आपको रैखिक बैक ऑफ लागू करना चाहिए: पहली बार ऐसा प्रत्युत्तर मिलने पर, अगला अनुरोध प्रस्तुत करने तक 5 सेकंड इंतज़ार करें। लगातार दूसरे 429 प्रत्युत्तर पर, अगला अनुरोध प्रस्तुत करने तक 2*5 = 10 सेकंड इंतज़ार करें। तीसरे में 3*5 = 15 सेकंड इंतज़ार करें, इत्यादि।

सफल अनुरोध के बाद आप बैक ऑफ काउंटर रीसेट कर सकते हैं, और आपको बैक-ऑफ को प्रति-थ्रेड के आधार पर लागू करना चाहिए (अर्थात थ्रेड्स को एक दूसरे से स्वतंत्र रूप से काम करना चाहिए)।

समय समाप्ति

जबकि API अनुरोध आम तौर पर सेकंड के भीतर पूरे हो जाते हैं, क्षणिक लोड स्पाइक्स के दौरान लंबे समय तक प्रोसेसिंग का समय का अनुभव करना संभव है।

यह सुनिश्चित करने के लिए कि आपकी क्लाइंट लाइब्रेरी API अनुरोधों को समय से पहले समाप्त नहीं करती है, इसे कम से कम 180 seconds के निष्क्रिय टाइमआउट के साथ कॉन्फ़िगर किया जाना चाहिए।

एरर JSON ऑबजेक्ट

हम API अनुरोध की सफलता या विफलता को इंगित करने के लिए पारंपरिक HTTP स्थितियों का इस्तेमाल करते हैं, और वापस दिए जाने वाले एरर JSON ऑबजेक्ट में महत्वपूर्ण एरर जानकारी शामिल करते हैं।

किसी भी समस्याग्रस्त अनुरोध में हम सदैव एरर JSON ऑबजेक्ट को वापस देने का प्रयास करते हैं। फिर भी, सैद्धांतिक रूप से यह सदैव संभव है कि ऐसी आंतरिक सर्वर विफलताएं हुई हों जो गैर-JSON एरर प्रत्युत्तर का कारण बनती हैं।

विशेषताएं

statusडिबगिंग में सहायता के लिए यहाँ प्रत्युत्तर की HTTP स्थिति दोहराई गई।
codePixian.AI आंतरिक त्रुटि कोड।
messageडिबगिंग में सहायक होने के प्रयोजन से मानव-पठनीय एरर संदेश।

यदि आपके अनुरोध के लिए HTTP स्थिति 200 है, तो एरर रहित JSON ऑबजेक्ट वापस किया जाएगा, और आप आराम से यह मान सकते हैं कि अनुरोध व्यापक रूप से सफल हुआ।

कुछ HTTP क्लायंट लाइब्रेरियों ने 400-599 रेंज में HTTP स्थिति के लिए अपवाद सृजित किया। आपको उन अपवादों को समझने और उन पर उचित रूप से कार्रवाई करने की आवश्यकता होगी।

HTTP Statusअर्थ
200-299

सफलता

400-499

अनुरोध में दी गई जानकारी में समस्या है (जैसे एक मापदंड गायब था)। यह जानने के लिए कि इसे कैसे ठीक किया जाए, कृपया एरर संदेश की समेक्षा करें।

500-599

एक Pixian.AI आंतरिक त्रुटि हुई है। एक क्षण रुकें, फिर प्रयास करें, और यदि समस्या बनी रहती है, तो कृपया हमें ईमेल करें।

उदाहरण एरर प्रत्युत्तर

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

फेस स्टिकर्स POST
https://api.pixian.ai/api/v2/face-sticker

किसी इमेज से फेस स्टिकर्स को पाने के लिए, आप एक स्टैंडर्ड HTTP POST फाइल अपलोड करते हैं। ध्यान रखें कि बाइनरी फाइलों को अपलोड करते समय सामग्री-प्रकार को multipart/form-data में होना चाहिएmultipart/form-data

पैरामीटर्स

इनपुट इमेज निम्न प्रकार की होनी ज़रूरी है:


बाइनरी

एक बाइनरी फाइल।


स्ट्रिंग

एक base64-एनकोडिड स्ट्रिंग स्ट्रिंग आकार में अधिक से अधिक 1megabyte हो सकता है।


स्ट्रिंग

लाने और संसाधित करने के लिए एक URL।

.bmp, .gif, .jpeg, .png, or .tiff फाइल होना ज़रूरी है।

अधिकतम इनपुट इमेज का आकार (= चौड़ाई × लंबाई) है 3,20,00,000pixels, जो घटकर max_pixels हो जाती है।


Boolean, डिफ़ॉल्ट: false

यह इंगित करने के लिए कि यह एक परीक्षण इमेज है, true में पास करें।

प्रोडक्शन इमेजिस के लिए false में छोड़ना या गुजरना।

परीक्षण इमेजेस मुफ्त प्रोसेस की जा सकती हैं, परंतु परिणाम में वॉटरमार्क एम्बेडेड होगा।


पूर्णांक, 100 से 25000000, डिफ़ॉल्ट: 25000000

अधिकतम इनपुट इमेज का आकार (= चौड़ाई × लंबाई)। इससे बड़ी इमेज के प्रसंस्करण से पहले उन्हे इस आकार में छोटा कर दिया जाएगा।


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

परिणाम पर एप्लाई किया जाने वाला बैकग्राउंड कलर। पारदर्शी बैकग्राउंड को छोड़ना न भूलें।

'#' उपसर्ग शामिल करना याद रखें।


Boolean, डिफ़ॉल्ट: true

चाहे परिणाम को फोरग्राउंड ऑबजैक्ट पर क्रॉप करना हो।

result.margin और result.target_size के साथ हर बार एक अच्छे आकार और केंद्रित परिणाम प्राप्त करने के लिए बहुत उपयोगी है।


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

परिणाम में जोड़ने के लिए मार्जिन करें।

इसे इस बात की परवाह किए बिना जोड़ा जाता है कि परिणाम फोरग्राउंड में क्रॉप किया गया है या नहीं।

यदि result.target_size निर्दिष्ट है, तो मार्जिन इनसेट है, मतलब कि यह प्रभावी लक्ष्य आकार का विस्तार नहीं करता।

% और px समर्थित इकाइयाँ हैं। यह CSS अर्थ विज्ञान को फॉलो करता है, इसलिए आप इनमें से किसी का भी इस्तेमाल कर सकते हैं:

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


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

पिक्सेल में एक विशिष्ट परिणाम आकार लागू करें। परिणाम को निर्दिष्ट आकार में फिट करने के लिए स्केल किया जाएगा। यदि अतिरिक्त जगह मौजूद है तो वर्टिकल ट्रीटमेंट को नियंत्रित करने के साथ result.vertical_alignment इसे हमेशा क्षैतिज रूप से केंद्रित किया जाता है।


एनुम, डिफ़ॉल्ट: middle

निर्दिष्ट करता है कि result.target_size का इस्तेमाल किए जाने पर अतिरिक्त वर्टिकल स्थान को कैसे आवंटित किया जाए।


एनुम, डिफ़ॉल्ट: auto

आउटपुट का फॉर्मेट। auto की व्याख्या png पारदर्शी परिणामों और jpeg अपारदर्शी परिणामों के लिए की जाती है, अर्थात जब background.color निर्दिष्ट किया गया हो।

delta_png एक एडवांस्ड, तेज़ और अत्यधिक कॉम्पैक्ट फॉर्मेट है जो ख़ास रूप से मोबाइल ऐप्स जैसी कम-विलंबता, बैंडविड्थ-बाधित स्थितियों के लिए उपयोगी होता है। यह बैकग्राउंड को अपूर्ण रूप से काला 0x00000000 और फोरग्राउंड को अपूर्ण रूप से सफेद 0x00FFFFFFके रूप में एन्कोड करता है। अपूर्ण रूप से पारदर्शी पिक्सेल के अपने असली रंग वैल्यूज़ होते हैं। इनपुट इमेज के साथ आप इसका इस्तेमाल पूर्ण परिणाम को फिर से बनाने के लिए कर सकते हैं। Learn more about the Delta PNG format

background.color, result.crop_to_foreground, result.margin, result.target_size, और result.vertical_alignment का इस्तेमाल करते समय delta_png को नजरअंदाज कर दिया जाता है। परिणाम का आकार इनपुट इमेज के समान होना ज़रूरी है, अन्यथा आपका डिकोडिंग फेल हो जाएगा, इसलिए max_pixels इनपुट सिकुड़ने का कारण नहीं होना चाहिए।


पूर्णांक, 1 से 100, डिफ़ॉल्ट: 75

JPEG परिणामों को एन्कोड करते समय इस्तेमाल की जाने वाली गुणवत्ता।

परिणाम हेडर

X-Credits-Charged वास्तविक क्रेडिट्स चार्ज किये गये थे।
X-Credits-Calculated अगर यह एक उत्पादन अनुरोध होता तो गणना किये गये क्रेडिट्स का शुल्क लिया जाता। केवल परीक्षण अनुरोधों के लिए वापस लौटाया गया है।
X-Input-Orientation EXIF ओरिएंटेशन टैग जिससे हमने पढ़ा और इनपुट इमेज पर लागू किया। यह 1 से 8 तक का पूर्णांक मान है, जिसमें दोनों सम्मिलित है। यदि आपकी इमेज लोडिंग लाइब्रेरी EXIF ओरिएंटेशन का समर्थन नहीं करती है तो यह इस्तेमाल करने योग्य है। Read more about EXIF orientation here
X-Input-Size किसी भी आकार संबंधी बाधाएँ लागू होने से पहले, पिक्सेल में इमेज के [width] [height] को डालें।
X-Result-Size पिक्सेल में, परिणाम इमेज का [width] [height]
X-Input-Foreground [top] [left] [width] [height] इनपुट इमेज निर्देशांक में फोरग्राउंड का बाउंडिंग बॉक्स।
X-Result-Foreground [top] [left] [width] [height] परिणाम इमेज निर्देशांक में फोरग्राउंड का बाउंडिंग बॉक्स।

फेस स्टिकर्स API चेंजलॉग

तारीखबदलें
11 अप्रैल 2024 प्रारंभिक रिलीज़।
API कुंजी प्राप्त करें