Pixian.AI ofrece una API de pegatinas de cara singulares. La API crea divertidas caras recortadas tanto de mascotas como de gente.
Cargue una imagen de mapa de bits y el resultado será una pegatina de la cara:
$ 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
La integración y prueba de la API es gratis. No requiere una compra.
Simplemente use el código test=true
para el desarrollo. Puede evaluar la calidad del resultado usando la aplicación Web interactiva en la página inicial.
Los resultados de la producción requieren la compra de un paquete de créditos. Consulte la página de precios.
La API usa autenticación de acceso básico a HTTP estándar. Todas las peticiones a la API se harán en HTTPS e incluirán su información de acceso a la API, donde la Id de la API es el usuario y el código secreto de la API es la contraseña.
Su biblioteca cliente de http debe ser compatible con la Indicación de nombre del servidor (SNI) para poder hacer peticiones. Si tiene errores raros de protocolo de enlace, esta es la razón más probable.
El uso de la API tiene limitaciones de velocidad de respuesta con amplias asignaciones sin límite superior.
Durante la operación normal impulsada por el usuario es improbable que vea límites de la velocidad de respuesta ya que en ese caso el uso tiende a fluir de una manera que el servicio maneja muy bien.
Sin embargo, para los procesos en lotes recomendamos que comience con 5 hilos máximo y puede agregar 1 hilo nuevo cada 5 minutos hasta que llegue al nivel deseado de paralelismo. Si necesita más de 100 hilos actuales, comuníquese con nosotros antes de comenzar.
Si envía demasiadas peticiones comenzará a recibir la respuesta 429 Too Many Requests
. Si esto sucede, debe aplicar una espera lineal: cuando reciba la primera respuesta de ese tipo, espere 5 segundos antes de enviar la siguiente petición. Cuando reciba la segunda respuesta 429 consecutiva, espere 2*5=10 segundos antes de enviar la siguiente petición. Cuando reciba la tercera respuesta, espere 3*5=15, etc.
Puede restablecer el contador de espera después de una petición exitosa y deberá poder aplicar la espera por cada hilo (es decir, los hilos deben operar de manera independiente entre sí).
Si bien las peticiones de las API normalmente se completan en segundos, es posible que durante situaciones transitorias de cargas pico el tiempo de procesamiento sea más largo.
Para asegurarse de que la biblioteca de su cliente no suspenda prematuramente las peticiones de la API, se deberá configurar con un tiempo de espera de inactividad de por lo menos 180 segundos.
Usamos estratos convencionales de HTTP para indicar el éxito o el fracaso de una petición API e incluímos información importante del error en el objeto de error JSON devuelto.
Tratamos de siempre regresar un objeto de error JSON con las solicitudes problemáticas. Sin embargo, siempre es teóricamente posible tener fallas del servidor interno que conducen a una respuesta de error que no es tipo JSON.
Atributos |
|
---|---|
status | El estado HTTP de la respuesta, se repite aquí para ayudarle con la depuración. |
code | Código de error interno de Pixian.AI. |
message | Mensaje de error en lenguaje natural, previsto para ayudar con la depuración. |
Si el estadeo del HTTP de su petición es 200, no se devolverá un objeto JSON de error y podrá suponer en términos generales que la petición tuvo éxito.
Algunas bibliotecas de clientes HTTP producen exepciones para estratos HTTP en la gama de 400
-599
. Tendrá que darse cuenta de esas excepciones y resolverlas apropiadamente.
HTTP Status | Significado |
---|---|
200 -299
|
Éxito |
400 -499
|
Hay un problema con la información proporcionada en la solicitud (p. ej. un parámetro faltante). Revise el mensaje de error para determinar cómo arreglarlo. |
500 -599
|
Hubo un error interno de Pixian.AI. Espere un momento y vuelva a intentar, y si el problema persiste, envíenos un mensaje de correo electrónico. |
Ejemplo de una respuesta de error
{ "error" : { "status" : 400, "code" : 1006, "message" : "Failed to read the supplied image. " } }
POST
https://api.pixian.ai/api/v2/face-sticker
Para obtener la pegatina a partir de una image, cargue un archivo estándar por HTTP POST. Tenga en cuenta que el tipo de contenido tiene que ser multipart/form-data
cuando carga archivos binarios.
Fecha | Cambiar |
---|---|
11 abr 2024 | Publicación inicial. |