PerfectVector
Bởi Jay

Vector hóa ảnh hàng loạt qua API với hàng đợi nối lại

Vector hóa ảnh hàng loạt bằng API với hàng đợi lưu bền vững. Lưu ID chuyển đổi, xử lý tệp lỗi và tiếp tục mà không gửi lại phần đã xong.

9 phút đọc
Trên trang này

Để vector hóa ảnh hàng loạt qua API, đưa mỗi tệp nguồn vào hàng đợi và lưu tiến độ trước khi sang tệp tiếp theo. Với PerfectVector API v1, chương trình xử lý của bạn quản lý đợt chạy. API nhận một ảnh mỗi yêu cầu và mặc định cho mỗi tài khoản thực hiện một lượt chuyển đổi thực tế tại một thời điểm. Giới hạn PerfectVector API

Thử với hình ảnh của chính bạn
Mở công cụ đầy đủ
Dùng thử miễn phí. Thả ảnh vào để xem trước bản vector của bạn, không cần đăng ký.

Tạo một bản ghi hàng đợi cho mỗi ảnh

Bắt đầu với bản sao cố định của từng ảnh nguồn và một thư mục riêng cho đầu ra. Ví dụ giả định một chương trình xử lý, cơ sở dữ liệu SQLite cục bộ và thư mục chứa PNG, JPEG hoặc WebP một khung hình. Kiểm tra giới hạn tệp của API trước khi thêm tệp. Dùng đường dẫn đầu ra riêng để hai tệp nguồn cùng tên logo.png không ghi đè lên nhau.

Lưu cùng lúc các trường sau trước khi thử tải lên lần đầu.

TrườngDữ liệu cần lưu
NguồnĐường dẫn cố định hoặc phiên bản đối tượng và giá trị băm của dữ liệu gốc.
Khóa yêu cầuKhóa chống gửi trùng (idempotency key) dùng để nhận biết các lượt gửi lại cùng thao tác. Ghi thời điểm thử POST đầu tiên.
ID chuyển đổiID dạng vec_… của API. Lưu ngay khi nhận.
Đầu raĐích cục bộ riêng và trạng thái hàng đợi mới nhất đã xác nhận.
Chi tiết lỗiMã lỗi API, ID yêu cầu hoặc lỗi chuyển đổi nếu có.

Ghi và xác nhận bản ghi trong cơ sở dữ liệu trước khi gửi POST. Nếu API nhận tệp nhưng kết nối ngắt trước khi bạn nhận ID, bạn vẫn có khóa để dùng lại. PerfectVector nhận diện khóa đó trong vòng 24 giờ kể từ yêu cầu đầu tiên trong cùng tài khoản và chế độ. Khi gửi lại, giữ nguyên dữ liệu ảnh và tùy chọn. Chống gửi trùng trong PerfectVector

Minh họa quy trình
Một chồng ảnh raster có nhãn dẫn đến bản ghi chuyển đổi đã lưu rồi đến SVG. Mũi tên khởi động lại trỏ về bản ghi đã lưu.
Lưu ID chuyển đổi trước khi tải xuống. Sau khi bị gián đoạn, tiếp tục từ ID đó.

Gửi, kiểm tra trạng thái và lưu từng tác vụ

Gửi POST multipart đến /v1/vectorizations, đưa ảnh vào trường image và khóa của dòng vào phần đầu Idempotency-Key. Dùng Prefer: respond-async để yêu cầu gửi hoàn tất nhanh. Lưu ID từ phản hồi thành công trước khi kiểm tra trạng thái. Phản hồi 202 nghĩa là đang chờ xử lý. Phản hồi 201 có thể mô tả cả chuyển đổi thành công lẫn thất bại, nên hãy đọc trạng thái trong JSON. Chờ và xử lý bất đồng bộ trong PerfectVector

Bảng sau nêu thứ tự quyết định của chương trình xử lý. Trạng thái hàng đợi như saved là nhãn do bạn đặt. API trả trạng thái như processing và succeeded.

Bản ghi hàng đợi trên đĩaViệc cần làm tiếp
Mới và đã lưu khóaTải dữ liệu gốc lên và ghi ID chuyển đổi trả về.
Chưa rõ đã gửi thành công, chưa biết IDGửi lại đúng tệp với khóa đã lưu trong khoảng cho phép. Nếu đã quá hạn, đánh dấu dòng để kiểm tra trước khi bắt đầu một lần chuyển đổi mới có thể mất lượt.
Đã lưu ID chuyển đổiKiểm tra trạng thái ID hiện có. Chờ khoảng hai giây giữa các lần kiểm tra và tuân theo thời gian chờ của giới hạn tần suất.
Chuyển đổi thành công nhưng thiếu tệpTải kết quả, kiểm tra image/svg+xml, ghi vào tệp tạm rồi đổi tên thành đích chính thức. Sau đó đánh dấu đã lưu.
Đã lưuBỏ qua POST. Nếu tệp bị mất, thử lấy kết quả hiện có khi liên kết còn dùng được.
Bị từ chối hoặc thất bạiGhi lỗi HTTP hoặc lỗi chuyển đổi cuối cùng. Sửa đầu vào trước khi thử như một thao tác mới.

Nếu POST trả 429 hoặc 503, làm theo Retry-After và dùng lại đúng ảnh, tùy chọn, khóa trong vòng 24 giờ. Nếu mã là too_many_in_flight, chờ lần chuyển đổi thực tế đang chạy kết thúc. Khi đã có ID, kiểm tra ID trước khi gửi lại. Nếu đã xác nhận trạng thái cuối là failed với timeout hoặc provider_unavailable, hãy dùng khóa mới nếu muốn thử lại. Nếu nhà cung cấp tạm ngừng, chờ dịch vụ khôi phục. Máy khách hết thời gian chờ thì kết quả ban đầu chưa rõ, vì vậy hãy dùng ID hoặc gửi lại với khóa cũ trong khoảng cho phép. Lỗi PerfectVector API

Khi khởi động lại, chương trình có thể kiểm tra trạng thái hoặc tải kết quả lần nữa mà không bắt đầu lần chuyển đổi mới. Tải và lưu từng SVG thành công trước khi sang mục tiếp theo. Kết quả API hết hạn sau 24 giờ kể từ khi chuyển đổi hoàn tất. Kết quả và tải xuống PerfectVector

Dùng mã giả dưới đây để triển khai với cơ sở dữ liệu và máy khách HTTP của bạn. Phép thử bên dưới giả định chương trình ghi nhật ký mỗi yêu cầu và có điểm tạm dừng dành riêng cho thử nghiệm ngay sau khi xác nhận lưu ID chuyển đổi thứ hai.

for each queue row in a stable order:
    if the row is rejected or its saved SVG is still on disk:
        continue
    if the row has no conversion ID:
        verify source bytes match the stored digest
        if an earlier POST is uncertain and the replay window expired:
            flag the row for review and continue
        POST with the stored key and original bytes and options
        if the response is a permanent input rejection:
            commit the error and continue
        if the POST times out or the service requests a retry:
            keep the same key, record the retry time and stop this run
        commit the returned conversion ID
        pause here when testing recovery after a commit
    GET status by conversion ID, waiting between pending responses
    if conversion failed:
        commit its error and continue
    download the existing result and check the SVG media type
    write to a temporary file and rename it to the output path
    commit the saved state

Thử khởi động lại với ba tệp

Dùng hai logo PNG nhỏ và một PNG bị hỏng. Cố tình giữ tệp hỏng trong bộ thử để xem hàng đợi có đi tiếp sau khi một tệp bị từ chối không. Với khóa thử nghiệm, hai tệp hợp lệ phải trả SVG mẫu. Tệp tải lên bị hỏng phải trượt bước kiểm tra và không sinh tệp trong thư mục đầu ra. Chế độ thử nghiệm trả cùng một SVG mẫu cho cả hai tệp hợp lệ. Chế độ thử nghiệm PerfectVector

  1. Để tệp đầu tiên đạt saved. Tạm dừng chương trình sau khi ghi ID của tệp hợp lệ thứ hai, trước khi lưu kết quả.
  2. Khởi động lại. Xác nhận chương trình bỏ qua tệp đầu và tải tệp thứ hai bằng ID đã có.
  3. Xác nhận tệp hỏng xuất hiện trong báo cáo lỗi kèm mã và không có SVG được ghi cho tệp đó.
  4. Chạy lại lần nữa. Kiểm tra cả hai tệp đã lưu vẫn còn và không có lượt tải lên thành công nào bị gửi lại.

Chúng tôi thử khởi động lại với API bằng khóa thử nghiệm. Chương trình lưu hai SVG mẫu, ghi một đầu vào hỏng là bị từ chối và tiếp tục tệp thành công thứ hai bằng ID hiện có. Lượt chạy cuối không gửi yêu cầu nào. Chế độ thử nghiệm hoàn tất ngay, nên dùng phản hồi giả lập để kiểm tra nhánh chờ.

Câu hỏi thường gặp

Có thể gửi mọi tệp trong một lần gọi API không?

PerfectVector API v1 nhận một ảnh mỗi POST. Gửi một đợt dưới dạng nhiều yêu cầu riêng. Với chế độ thực, giữ đúng giới hạn tác vụ đồng thời của tài khoản và đợi lần chuyển đổi hiện tại xong trước khi gửi lần tiếp theo. Giới hạn PerfectVector API

Nếu SVG đã hết hạn thì sao?

Nếu đã tải về, dùng bản SVG lưu trước đó. Nếu chưa, kiểm tra trạng thái rồi quyết định có bắt đầu lần chuyển đổi mới không. Một lần chuyển đổi thực tế mới có thể mất thêm một lượt nếu thành công. Kết quả và tải xuống PerfectVector

Nguồn tham khảo

  1. PerfectVector — Giới hạn — Kiểm tra tệp và số tác vụ đồng thời mặc định trên tài khoản.
  2. PerfectVector — Chống gửi trùng — Phạm vi khóa, khoảng cho phép gửi lại và yêu cầu giữ nguyên đầu vào.
  3. PerfectVector — Chờ và xử lý bất đồng bộ — Gửi bất đồng bộ và kiểm tra trạng thái.
  4. PerfectVector — Kết quả — Tải xuống, lỗi và thời hạn kết quả.
  5. PerfectVector — Chế độ thử nghiệm — Kiểm tra tệp tải lên và những kết quả có thể xác minh bằng khóa thử nghiệm.
  6. PerfectVector — Lỗi — Khoảng chờ Retry-After, lỗi cuối cùng và khi nào cần khóa mới.

Lấy khóa thử nghiệm từ trang PerfectVector API rồi chạy thử với ba tệp của bạn. Kiểm tra mỗi dòng thành công có SVG trên đĩa và khi khởi động lại không dòng đã hoàn tất nào bị gửi lại.

Thêm từ blog

PerfectVector

Biến hình ảnh thành
đường vector gọn sạch, dễ chỉnh sửa

Vector hóa và kiểm tra bản xem trước miễn phí, không giới hạn theo ngày.