Pixian Usuń interfejs API tła obrazu

Pixian.AI offers a full-fledged image background removal API. Interfejs API usuwa tła obrazów w pełni automatycznie i z najlepszą w swojej klasie wiernością.

Uzyskaj klucz interfejsu API

Szybki start

OPUBLIKUJ obraz bitmapowy i uzyskaj wynik usunięty z tła:

$ curl https://api.pixian.ai/api/v2/remove-background \
 -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/remove-background")
   .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/remove-background", 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/remove-background',
  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/remove-background');

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/remove-background',
    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/remove-background", {
  "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/remove-background \
 -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/remove-background")
   .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/remove-background", 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/remove-background',
  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/remove-background');

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/remove-background',
    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/remove-background", {
  "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

Migracja z innego dostawcy? Check out our migration guide

Cennik

Integracja z API i testowanie go jest bezpłatna, bez konieczności zakupu.

Just use test=true for development. Jakość wyników można ocenić za pomocą interaktywnej aplikacji internetowej na pierwszej stronie.

Wyniki produkcji wymagają zakupu pakietu kredytowego. Zapoznaj się z cennikiem.

Uwierzytelnianie i bezpieczeństwo

Interfejs API używa standardowego podstawowego uwierzytelniania dostępu HTTP. Wszystkie żądania do interfejsu API muszą być kierowane przez HTTPS i muszą zawierać twoje poświadczenia API, z identyfikatorem API jako użytkownikiem i kluczem tajnym API jako hasłem.

Aby z powodzeniem wykonywać żądania, twoja biblioteka klienta HTTP musi obsługiwać oznaczanie nazwy serwera (SNI). Jeśli otrzymujesz dziwne błędy uzgadniania, to prawdopodobnie z tego powodu.

Limit szybkości

Używanie interfejsu API podlega ograniczeniu przepustowości z wysokimi przydziałami i bez stałej górnej granicy.

Prawdopodobieństwo napotkania na ograniczenie szybkości w zwykłym trybie działania sterowanym przez użytkownika końcowego jest małe, jako że usługa płynnie obsługuje tego rodzaju tryb użycia.

W przypadku zadań wsadowych zalecamy jednak, żeby zacząć od nie więcej niż 5 wątków, dodając 1 nowy wątek co 5 minut aż do osiągnięcia oczekiwanego poziomu równoległości. W razie potrzeby więcej niż 100 współbieżnych wątków, prosimy o kontakt przed rozpoczęciem procesu.

Przesłanie zbyt wielu żądań spowoduje otrzymanie odpowiedzi 429 Too Many Requests. W takim wypadku należy zastosować wycofanie liniowe: po otrzymaniu pierwszej takiej odpowiedzi odczekaj 5 sekund przed przesłaniem kolejnego żądania. Po drugiej kolejnej odpowiedzi 429 odczekaj 2*5=10 sekund przed przesłaniem kolejnych żądań. Po trzeciej odpowiedzi odczekaj 3*5=15 sekund, itd.

Po pomyślnie wykonanym żądaniu możesz zresetować licznik wycofania i stosować wycofanie dla poszczególnych wątków (tzn. wątki powinny działać niezależnie od siebie).

Limity czasu

Podczas gdy żądania API są zwykle wypełniane w ciągu kilku sekund, podczas przejściowych skoków obciążenia możliwe jest dłuższe czasy przetwarzania.

To ensure your client library doesn't prematurely terminate API requests it should be configured with an idle timeout of at least 180 seconds.

Obiekt JSON błędu

Aby określić czy dane żądanie API zakończyło się pomyślnie czy niepomyślnie używamy konwencjonalnych statusów HTTP, uwzględniając istotne informacje o błędzie w zwróconym obiekcie JSON błędu.

Staramy się zawsze zwrócić obiekt JSON błędu dla każdego problematycznego żądania. Zawsze istnieje jednak teoretyczna możliwość wewnętrznych awarii serwera skutkujących odpowiedzią na błąd inną niż JSON.

Atrybuty

statusStatus HTTP odpowiedzi, powtórzony tutaj żeby pomóc z debugowaniem.
codePixian.AI internal error code.
messageCzytelny dla użytkownika komunikat o błędzie, który ma pomóc w debugowaniu.

Jeżeli status HTTP dla żądania wynosi 200, obiekt JSON błędu nie zostanie zwrócony i można bezpiecznie założyć, że żądanie zasadniczo się powiodło.

Niektóre biblioteki klienta HTTP zgłaszają wyjątki dla statusów HTTP w zakresie 400-599. Wyjątki te trzeba przechwycić i odpowiednio obsłużyć.

HTTP StatusZnaczenie
200-299

Powodzenie

400-499

Wystąpił problem z informacją przekazaną w żądaniu (np. brakowało parametru). Przejrzyj komunikat o błędzie aby ustalić jak go rozwiązać.

500-599

There's been a Pixian.AI internal error. Zaczekaj chwilę i spróbuj ponownie, a jeśli problem nie zniknie, skontaktuj się z nami e-mailem.

Przykładowa odpowiedź na błąd

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

Format Delta PNG Niższe opóźnienie i przepustowość

Pixian.AI is proud to be the first background removal service to offer the Delta PNG output format. Delta PNG są szybsze w kodowaniu i znacznie mniejsze niż zwykłe PNG. To sprawia, że są one bardzo odpowiednie dla aplikacji wrażliwych na opóźnienia i przepustowość, takich jak aplikacje mobilne.

Dowiedz się więcej Strzałka w prawo

Usuń tło POST
https://api.pixian.ai/api/v2/remove-background

Aby usunąć tło z obrazu, wykonaj standardowe przesłanie pliku HTTP POST. Pamiętaj, że przy przekazywaniu plików binarnych wymagany typ zawartości to multipart/form-data.

Parametry

Obraz wejściowy musi zostać podany jako jeden z poniższych:


Binarny

Plik binarny.


Ciąg

Ciąg zaszyfrowany algorytmem base64. Rozmiar ciągu nie może przekraczać 1 megabajta.


Ciąg

Adres URL do pobierania i przetwarzania.

Musi być plikiem .bmp, .gif, .jpeg, .png, lub .tiff.

Maksymalny rozmiar przekazywanego obrazu (= szerokość × wysokość) wynosi 32 000 000 pikseli, i zostanie zmniejszony do max_pixels.


Wartość logiczna, domyślnie: false

Przekaż true aby wskazać, że jest to obraz testowy.

W przypadku obrazów produkcyjnych pomiń albo przekaż false.

Obrazy testowe można przetwarzać bezpłatnie, ale rezultat będzie opatrzony znakiem wodnym.


Liczba całkowita, 100 do 25000000, domyślnie: 25000000

Maksymalny rozmiar obrazu wejściowego (= szerokość × wysokość). Większe obrazy zostaną przed przetworzeniem zmniejszone do tego rozmiaru.


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

Kolor tła do zastosowania do wyniku. Pomiń, aby pozostawić przezroczyste tło.

Pamiętaj, aby dołączyć prefiks „#”.


Wartość logiczna, domyślnie: false

Czy należy przyciąć wynik do obiektu pierwszego planu.

Very useful together with result.margin and result.target_size to get a nicely sized and centered result every time.


Format: '(x.y%|px){1,4}', np. 10px 20% 5px 15%, domyślnie: 0px

Margines do dodania do wyniku.

Jest dodawany niezależnie od tego, czy wynik zostanie przycięty na pierwszy plan, czy nie.

If result.target_size is specified, then the margin is inset, i.e. it doesn't expand the effective target size.

The supported units are % and px. Jest zgodny z semantyką CSS, więc możesz użyć dowolnego z:

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


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

Wymuszaj określony rozmiar wyniku w pikselach. Wynik zostanie skalowany tak, aby pasował do określonego rozmiaru. If there's excess space then it's always horizontally centered, with result.vertical_alignment controlling the vertical treatment.


Enum, domyślnie: middle

Specifies how to allocate excess vertical space when result.target_size is used.


Enum, domyślnie: auto

Format wyjściowy. auto is interpreted as png for transparent results, and jpeg for opaque results, i.e. when a background.color has been specified.

delta_png is an advanced, fast, and highly compact format especially useful for low-latency, bandwidth-constrained situations like mobile apps. It encodes the background as transparent black 0x00000000 and the foreground as transparent white 0x00FFFFFF. Częściowo przezroczyste piksele mają swoje rzeczywiste wartości kolorów. Wraz z obrazem wejściowym możesz użyć tego, aby zrekonstruować pełny wynik. Learn more about the Delta PNG format

background.color, result.crop_to_foreground, result.margin, result.target_size, and result.vertical_alignment are ignored when using delta_png. The result must be the same size as the input image, otherwise your decoding will fail, so max_pixels must not have caused the input to be shrunk.


Liczba całkowita, 1 do 100, domyślnie: 75

Jakość używana podczas kodowania wyników JPEG.

Nagłówki wyników

X-Credits-Charged Rzeczywiste naliczone kredyty.
X-Credits-Calculated Obliczone kredyty, które zostałyby naliczone, gdyby było to żądanie produkcji. Zwracane tylko w przypadku próśb testowych.
X-Input-Orientation Znacznik orientacji EXIF, z którego odczytujemy i zastosowaliśmy do obrazu wejściowego. Jest to wartość całkowita od 1 do 8 włącznie. Jest to przydatne, jeśli biblioteka ładowania obrazów nie obsługuje orientacji EXIF. Read more about EXIF orientation here
X-Input-Size [width] [height] of the input image in pixels, before any size constraints were applied.
X-Result-Size [width] [height] of the result image, in pixels.
X-Input-Foreground [top] [left] [width] [height] bounding box of the foreground in the input image coordinates.
X-Result-Foreground [top] [left] [width] [height] bounding box of the foreground in the result image coordinates.

Dziennik zmian interfejsu API

DataZmień
4 mar 2024 Dodano sekcję dotyczącą limitu czasu.
16 sty 2024 Udokumentowano błąd obiektu JSON.
11 sty 2024 Now actually returning the X-Credits-Charged header and added the X-Credits-Calculated header for test requests.
13 cze 2023 Zaktualizowano interfejs API do wersji 2 i parametry z CamelCase do snake_case dla łatwiejszej czytelności. Poprzednia wersja interfejsu API jest przestarzała, ale nadal dostępna.
3 maj 2023 Znacznie rozszerzono parametry interfejsu API.
28 kwi 2023 Zaktualizowano punkt końcowy interfejsu API.
21 mar 2023 Początkowe wydanie.
Uzyskaj klucz interfejsu API