Pixian.AI एक बढ़िया फेस स्टिकर्स 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 के निष्क्रिय टाइमआउट के साथ कॉन्फ़िगर किया जाना चाहिए।
हम API अनुरोध की सफलता या विफलता को इंगित करने के लिए पारंपरिक HTTP स्थितियों का इस्तेमाल करते हैं, और वापस दिए जाने वाले एरर JSON ऑबजेक्ट में महत्वपूर्ण एरर जानकारी शामिल करते हैं।
किसी भी समस्याग्रस्त अनुरोध में हम सदैव एरर JSON ऑबजेक्ट को वापस देने का प्रयास करते हैं। फिर भी, सैद्धांतिक रूप से यह सदैव संभव है कि ऐसी आंतरिक सर्वर विफलताएं हुई हों जो गैर-JSON एरर प्रत्युत्तर का कारण बनती हैं।
विशेषताएं |
|
---|---|
status | डिबगिंग में सहायता के लिए यहाँ प्रत्युत्तर की HTTP स्थिति दोहराई गई। |
code | Pixian.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
तारीख | बदलें |
---|---|
11 अप्रैल 2024 | प्रारंभिक रिलीज़। |