image --- thị giác máy

Mô-đun image là trung tâm của ngăn xếp thị giác máy OpenMV. Nó cung cấp lớp Image -- bộ đệm điểm ảnh trong bộ nhớ mà mọi quy trình vẽ, lọc, biến đổi và trích xuất đặc trưng đều hoạt động trên đó -- cùng với các đối tượng kết quả hỗ trợ được trả về bởi các quy trình đó (Blob, Line, Circle, Rect, QRCode, AprilTag, DataMatrix, BarCode, ...) và các lớp trợ giúp dùng để cấu hình chúng (Threshold, Histogram, Statistics, HaarCascade, Similarity, Percentile, Displacement, ImageIO).

Lấy ảnh

Có bốn cách để đưa một Image vào RAM:

  • Chụp trực tiếp từ cảm biến camera. Gọi csi.CSI.snapshot() để chụp khung hình tiếp theo thẳng vào bộ đệm khung hình; Image được trả về sẽ tham chiếu đến bộ đệm đó.

  • Từ một tệp. Truyền đường dẫn vào hàm khởi tạo Image (image.Image("/sd/photo.jpg")); các định dạng trên đĩa được hỗ trợ gồm BMP, PPM/PGM, JPEG, PNG và định dạng ghi ImageIO của OpenMV.

  • Từ một ndarray. Truyền một ndarray kiểu float32 có hình dạng (h, w) hoặc (h, w, 3) vào hàm khởi tạo Image. Các điểm ảnh sẽ được chia tỷ lệ từ 0.0 -- 255.0 thành ảnh GRAYSCALE hoặc RGB565 tương ứng. Dùng cách này để đưa đầu ra tensor từ ml (hoặc bất kỳ pipeline ulab nào) trở lại thành ảnh có thể vẽ.

  • Bộ đệm rỗng. Khởi tạo một Image với kích thước và định dạng điểm ảnh cho trước (image.Image(320, 240, image.RGB565)) để vẽ từ đầu, hoặc dùng làm bề mặt tạm thời cho các phép tính số học trên ảnh.

Định dạng điểm ảnh

Mỗi Image có một trong các định dạng điểm ảnh sau; việc lựa chọn sẽ đánh đổi giữa bộ nhớ, chi phí xử lý và những thuật toán có thể chạy trên đó. Dùng BINARY, GRAYSCALE, RGB565, BAYER, YUV422, JPEG hoặc PNG làm đối số pixformat khi khởi tạo ảnh hoặc cấu hình cảm biến camera:

  • BINARY (1 bpp) -- một bit trên mỗi điểm ảnh. Định dạng nhỏ nhất; được sử dụng nội bộ bởi các quy trình ngưỡng hóa và hình thái học, ít khi được chụp trực tiếp từ cảm biến.

  • GRAYSCALE (8 bpp) -- một byte trên mỗi điểm ảnh (kênh Y của YUV422). Định dạng nhanh nhất cho hầu hết các thuật toán thị giác máy tính (AprilTag, phát hiện cạnh, optical flow).

  • RGB565 (16 bpp) -- hai byte trên mỗi điểm ảnh, 5-bit đỏ / 6-bit xanh lá / 5-bit xanh dương. Định dạng màu sắc mặc định.

  • BAYER (8 bpp) -- dữ liệu màu sắc Bayer thô trực tiếp từ cảm biến. Hữu ích cho giải mã Bayer tùy chỉnh hoặc để lưu trữ nhiều điểm ảnh hơn trong ít bộ nhớ hơn trước khi giải mã theo yêu cầu.

  • YUV422 (16 bpp) -- màu sắc chroma-subsampled 4:2:2, hai byte trên mỗi điểm ảnh. Hữu ích khi bạn muốn các thuật toán đặc thù chroma mà không phải trả chi phí RGB đầy đủ.

  • JPEG / PNG -- bộ đệm nén. Phù hợp nhất để lưu trữ và truyền qua mạng. Các thao tác ở cấp độ điểm ảnh yêu cầu dùng Image.to_grayscale() hoặc Image.to_rgb565() trước.

Làm việc với kết quả

Các phương thức phát hiện / trích xuất đặc trưng trên Image trả về các đối tượng mà bạn có thể duyệt và kết hợp -- một lệnh gọi Image.find_blobs() trả về danh sách Blob, một lệnh gọi Image.find_apriltags() trả về danh sách AprilTag, v.v. Mỗi lớp kết quả cung cấp các thuộc tính hình học của phát hiện (tâm điểm, hộp giới hạn, diện tích, giá trị mã, v.v.) để bạn có thể tác động trực tiếp lên chúng hoặc truyền chúng vào các phương thức vẽ (Image.draw_rectangle(), Image.draw_string(), ...).

Các hàm trợ giúp không gian màu

Mô-đun cũng cung cấp các hàm thuần túy nhỏ để chuyển đổi giá trị điểm ảnh riêng lẻ giữa các không gian màu binary / thang xám / RGB / LAB / YUV. Chúng hữu ích khi bạn cần chuyển đổi giá trị ngưỡng hoặc mục nhập bảng màu trong Python trước khi truyền vào các thao tác ảnh -- để chuyển đổi toàn bộ ảnh, hãy dùng các phương thức to_* của Image, vì chúng nhanh hơn nhiều so với việc gọi các hàm trợ giúp này trong vòng lặp.

Các lớp

Các hàm

Các hàm trợ giúp chuyển đổi không gian màu

Mỗi hàm X_to_Y dưới đây thực hiện một phép chuyển đổi giá trị điểm ảnh đơn lẻ. Tất cả đều nhận/trả về giá trị trong phạm vi chuẩn của OpenMV:

  • binary -- int 0 -- 1.

  • thang xám -- int 0 -- 255.

  • RGB -- tuple (r, g, b) gồm các số nguyên 8-bit (mỗi giá trị từ 0 -- 255).

  • LAB -- tuple (l, a, b) với L trong khoảng 0 -- 100 và A/B trong khoảng -128 -- 127.

  • YUV -- tuple (y, u, v) với Y trong khoảng 0 -- 255 và U/V trong khoảng -128 -- 127.

Để chuyển đổi toàn bộ ảnh, hãy dùng các phương thức to_* của Image, vì chúng nhanh hơn nhiều so với việc gọi các hàm trợ giúp này trong vòng lặp.

image.binary_to_grayscale(value: int) int

Chuyển đổi giá trị binary sang giá trị thang xám.

image.binary_to_rgb(value: int) Tuple[int, int, int]

Chuyển đổi giá trị binary sang tuple RGB.

image.binary_to_lab(value: int) Tuple[int, int, int]

Chuyển đổi giá trị binary sang tuple LAB.

image.binary_to_yuv(value: int) Tuple[int, int, int]

Chuyển đổi giá trị binary sang tuple YUV.

image.grayscale_to_binary(value: int) int

Chuyển đổi giá trị thang xám sang giá trị binary.

image.grayscale_to_rgb(value: int) Tuple[int, int, int]

Chuyển đổi giá trị thang xám sang tuple RGB.

image.grayscale_to_lab(value: int) Tuple[int, int, int]

Chuyển đổi giá trị thang xám sang tuple LAB.

image.grayscale_to_yuv(value: int) Tuple[int, int, int]

Chuyển đổi giá trị thang xám sang tuple YUV.

image.rgb_to_binary(value: Tuple[int, int, int]) int

Chuyển đổi tuple RGB sang giá trị binary.

image.rgb_to_grayscale(value: Tuple[int, int, int]) int

Chuyển đổi tuple RGB sang giá trị thang xám.

image.rgb_to_lab(value: Tuple[int, int, int]) Tuple[int, int, int]

Chuyển đổi tuple RGB sang tuple LAB.

image.rgb_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]

Chuyển đổi tuple RGB sang tuple YUV.

image.lab_to_binary(value: Tuple[int, int, int]) int

Chuyển đổi tuple LAB sang giá trị binary.

image.lab_to_grayscale(value: Tuple[int, int, int]) int

Chuyển đổi tuple LAB sang giá trị thang xám.

image.lab_to_rgb(value: Tuple[int, int, int]) Tuple[int, int, int]

Chuyển đổi tuple LAB sang tuple RGB.

image.lab_to_yuv(value: Tuple[int, int, int]) Tuple[int, int, int]

Chuyển đổi tuple LAB sang tuple YUV.

image.yuv_to_binary(value: Tuple[int, int, int]) int

Chuyển đổi tuple YUV sang giá trị binary.

image.yuv_to_grayscale(value: Tuple[int, int, int]) int

Chuyển đổi tuple YUV sang giá trị thang xám.

image.yuv_to_rgb(value: Tuple[int, int, int]) Tuple[int, int, int]

Chuyển đổi tuple YUV sang tuple RGB.

image.yuv_to_lab(value: Tuple[int, int, int]) Tuple[int, int, int]

Chuyển đổi tuple YUV sang tuple LAB.

Bộ mô tả đặc trưng

image.HaarCascade(path: str, stages: int = -1) Cascade

Tải một Haar Cascade và trả về một handle Cascade để dùng với Image.find_features().

path có thể là:

  • chuỗi ký tự "frontalface" hoặc "eye" để tải một trong hai cascade được tích hợp sẵn vào ROM firmware, hoặc

  • đường dẫn filesystem đến tệp nhị phân .cascade tùy chỉnh được tạo bởi các công cụ chuyển đổi cascade của OpenMV.

stages chọn số lượng giai đoạn cascade cần đánh giá khi phát hiện. -1 sử dụng tất cả các giai đoạn được lưu trong tệp. Giảm giá trị này sẽ tăng tốc độ phát hiện nhưng có thể tăng số lượng kết quả dương tính giả.

image.load_descriptor(path: str) kp_desc | lbp_desc

Tải một bộ mô tả từ tệp tại path và trả về nó. Thẻ kiểu nội bộ của tệp sẽ xác định lớp bộ mô tả nào được tái tạo:

image.save_descriptor(descriptor: kp_desc | lbp_desc, path: str) None

Tuần tự hóa descriptor (một bộ mô tả điểm đặc trưng ORB hoặc LBP) vào tệp tại path theo định dạng tệp bộ mô tả OpenMV. Tệp tương tự có thể được tải lại sau thông qua image.load_descriptor().

image.match_descriptor(descriptor0, descriptor1, threshold: int = 85, filter_outliers: bool = False) int | kptmatch

So khớp hai bộ mô tả cùng loại.

  • Với hai bộ mô tả LBP -- trả về khoảng cách Hamming nguyên giữa chúng (giá trị thấp hơn là kết quả khớp tốt hơn).

  • Với hai bộ mô tả điểm đặc trưng ORB -- trả về một kptmatch mô tả cụm điểm đặc trưng đã khớp, hoặc None nếu không có kết quả khớp nào vượt qua threshold.

threshold (0 -- 100) thiết lập mức độ chặt chẽ của việc khớp ORB khi chấp nhận một cặp điểm đặc trưng. Giá trị thấp hơn sẽ thắt chặt việc khớp bằng cách loại bỏ các kết quả khớp lân cận yếu.

filter_outliers kích hoạt loại bỏ ngoại lệ theo kiểu RANSAC trên tập hợp các điểm đặc trưng đã khớp. Dùng khi bạn mong đợi một phép biến đổi cứng nhắc duy nhất giữa hai góc nhìn; tắt đi khi các điểm đặc trưng đã khớp trải rộng trên nhiều đối tượng.

Các hàm trợ giúp hình học vùng màu (blob)

Các hàm trợ giúp này nhận một Blob (được trả về bởi Image.find_blobs()) và tính toán các thuộc tính hình học bổ sung theo yêu cầu. Chúng nằm ở phạm vi mô-đun -- không phải trên Blob -- do đó đường dẫn find_blobs() cơ bản không phải trả chi phí cho chúng trừ khi bạn yêu cầu.

image.get_solidity(blob: blob) float

Trả về độ đặc (blob.pixels / convex_hull_area) của blob. Kiểu float, 0 -- 1; 1.0 có nghĩa là blob lấp đầy hoàn toàn vỏ lồi của nó.

image.get_convexity(blob: blob) float

Trả về độ lồi (convex_hull_perimeter / blob.perimeter) của blob. Kiểu float, 0 -- 1; 1.0 là một blob lồi hoàn hảo.

image.get_major_axis_line(blob: blob) line

Trả về một Line dọc theo trục chính của blob (trục dài hơn trong hai trục chính của hình chữ nhật xoay diện tích nhỏ nhất).

image.get_minor_axis_line(blob: blob) line

Trả về một Line dọc theo trục phụ của blob (trục ngắn hơn trong hai trục chính của hình chữ nhật xoay diện tích nhỏ nhất).

image.get_enclosing_circle(blob: blob) circle

Trả về một Circle bao quanh blob.

image.get_enclosed_ellipse(blob: blob) Tuple[int, int, int, int, int]

Trả về một tuple 5 phần tử (cx, cy, a, b, rotation) mô tả hình elip nội tiếp trong hình chữ nhật xoay diện tích nhỏ nhất bao quanh blob:

  • cx / cy -- tâm hình elip tính bằng điểm ảnh (số nguyên).

  • a / b -- độ dài bán trục tính bằng điểm ảnh (số nguyên).

  • rotation -- góc xoay hình elip tính bằng độ (số nguyên).

Đây là một tuple thông thường, không phải attrtuple, vì vậy các trường chỉ có thể truy cập theo chỉ số.

Hằng số

Định dạng điểm ảnh

Truyền bất kỳ giá trị nào sau đây làm đối số pixformat cho hàm khởi tạo Image hoặc cho csi.CSI.pixformat().

image.BINARY: int

Bitmap 1-bit-trên-mỗi-điểm-ảnh. Định dạng nhỏ nhất -- được sử dụng nội bộ bởi ngưỡng hóa và hình thái học, hiếm khi được chụp trực tiếp từ cảm biến.

image.GRAYSCALE: int

Thang xám 8-bit-trên-mỗi-điểm-ảnh (một byte trên mỗi điểm ảnh). Định dạng nhanh nhất cho hầu hết các thuật toán thị giác máy tính (AprilTag, phát hiện cạnh, optical flow).

image.RGB565: int

Màu sắc 16-bit-trên-mỗi-điểm-ảnh được đóng gói thành 5 bit đỏ / 6 bit xanh lá / 5 bit xanh dương. Định dạng màu sắc mặc định.

image.BAYER: int

Dữ liệu Bayer thô 8-bit-trên-mỗi-điểm-ảnh trực tiếp từ cảm biến. Hầu hết các phương thức xử lý ảnh không khả dụng trên ảnh Bayer; dùng định dạng này khi bạn muốn giải mã Bayer theo yêu cầu hoặc lưu trữ nhiều điểm ảnh hơn trong ít bộ nhớ hơn.

image.YUV422: int

Màu sắc chroma-subsampled 4:2:2, hai byte trên mỗi điểm ảnh, được đóng gói dạng Y1, U, Y2, V cho mỗi cặp điểm ảnh. Chỉ một số phương thức xử lý ảnh hoạt động trực tiếp trên YUV422.

image.JPEG: int

Bộ đệm JPEG nén. Các thao tác ở cấp độ điểm ảnh yêu cầu dùng Image.to_grayscale() hoặc Image.to_rgb565() trước.

image.PNG: int

Bộ đệm PNG nén. Các thao tác ở cấp độ điểm ảnh yêu cầu dùng Image.to_grayscale() hoặc Image.to_rgb565() trước.

Bảng màu

Truyền bất kỳ giá trị nào sau đây cho Image.to_rainbow(), Image.to_ironbow(), Image.draw_image() (color_palette=) hoặc cho csi.CSI.color_palette() để tô màu một ảnh thang xám.

image.PALETTE_RAINBOW: int

Bánh xe màu cầu vồng mượt mà. Bảng màu OpenMV mặc định cho ảnh nhiệt.

image.PALETTE_IRONBOW: int

Bảng màu "ironbow" phi tuyến tính mô phỏng giao diện kính ngắm nhiệt FLIR Lepton.

image.PALETTE_DEPTH: int

Bảng màu cho ảnh độ sâu. Chỉ khả dụng trên các bản build có hỗ trợ cảm biến độ sâu (pipeline ToF -- ví dụ: OpenMV Cam AE3 hoặc bất kỳ cam nào có ToF Pmod được gắn vào).

image.PALETTE_EVT_DARK: int

Bảng màu để hiển thị khung hình từ event-camera GENX320 trên nền tối. Truyền vào csi.CSI.color_palette để driver GENX320 phát ra các khung hình RGB565 có tô màu ở chế độ biểu đồ tần suất, hoặc truyền vào color_palette= của Image.draw_image() khi tô màu cho ảnh thang xám từ event.

Chỉ khả dụng trên các bản build có hỗ trợ GENX320 (OpenMV Cam AE3 và GENX320 Pmod).

image.PALETTE_EVT_LIGHT: int

Bảng màu để hiển thị khung hình từ event-camera GENX320 trên nền sáng. Cách điều phối và tính khả dụng giống như PALETTE_EVT_DARK.

Chế độ chia tỷ lệ

Truyền bất kỳ giá trị nào sau đây làm đối số hint cho Image.draw_image(), Image.scale(), hoặc các phương thức chia tỷ lệ tương tự.

image.AREA: int

Bộ chia tỷ lệ lấy trung bình diện tích. Dùng khi thu nhỏ; Nearest-Neighbor được dùng khi phóng to.

image.BILINEAR: int

Bộ chia tỷ lệ song tuyến tính. Lấy mẫu phụ khi thu nhỏ.

image.BICUBIC: int

Bộ chia tỷ lệ bicubic. Chất lượng cao hơn BILINEAR nhưng chậm hơn. Lấy mẫu phụ khi thu nhỏ.

Gợi ý vẽ / draw_image

Dùng phép OR bit với bất kỳ giá trị nào trong số này và truyền làm đối số hint của Image.draw_image().

image.VFLIP: int

Lật dọc nguồn trong khi vẽ.

image.HMIRROR: int

Lật ngang nguồn trong khi vẽ.

image.TRANSPOSE: int

Hoán vị (đổi x/y) nguồn trong khi vẽ.

image.CENTER: int

Căn giữa nguồn trên đích. Các offset x/y tường minh sau đó trở thành offset từ tâm thay vì từ góc trên bên trái.

image.EXTRACT_RGB_CHANNEL_FIRST: int

Khi trích xuất kênh RGB thông qua Image.draw_image(), trích xuất kênh trước khi chia tỷ lệ. Nếu không có gợi ý này, kênh sẽ được trích xuất sau khi chia tỷ lệ.

image.APPLY_COLOR_PALETTE_FIRST: int

Khi áp dụng bảng màu thông qua Image.draw_image(), áp dụng bảng màu trước khi chia tỷ lệ. Nếu không có gợi ý này, bảng màu sẽ được áp dụng sau khi chia tỷ lệ.

image.SCALE_ASPECT_KEEP: int

Chia tỷ lệ nguồn để vừa vặn bên trong đích trong khi duy trì tỷ lệ khung hình (letterbox khi tỷ lệ khác nhau).

image.SCALE_ASPECT_EXPAND: int

Chia tỷ lệ nguồn để lấp đầy đích trong khi duy trì tỷ lệ khung hình (cắt xén khi tỷ lệ khác nhau).

image.SCALE_ASPECT_IGNORE: int

Chia tỷ lệ nguồn để lấp đầy đích, bỏ qua tỷ lệ khung hình.

image.BLACK_BACKGROUND: int

Báo cho đường dẫn alpha-blending biết đích là màu đen hoàn toàn để nó có thể bỏ qua việc đọc lại điểm ảnh đích. Tăng tốc các hiệu ứng alpha trên bộ đệm vừa được xóa.

image.ROTATE_90: int

Phím tắt cho VFLIP | TRANSPOSE (xoay 90 độ theo chiều kim đồng hồ).

image.ROTATE_180: int

Phím tắt cho HMIRROR | VFLIP (xoay 180 độ).

image.ROTATE_270: int

Phím tắt cho HMIRROR | TRANSPOSE (xoay 270 độ theo chiều kim đồng hồ).

Lấy mẫu phụ JPEG

Truyền bất kỳ giá trị nào sau đây làm đối số subsampling cho Image.to_jpeg(), Image.compress(), hoặc Image.save() khi ghi JPEG.

image.JPEG_SUBSAMPLING_AUTO: int

Tự động chọn chroma subsampling dựa trên cài đặt chất lượng JPEG.

image.JPEG_SUBSAMPLING_444: int

Bắt buộc chroma subsampling 4:4:4 (không nén chroma).

image.JPEG_SUBSAMPLING_422: int

Bắt buộc chroma subsampling 4:2:2. Khuyến nghị khi phát trực tuyến MJPEG đến các trình phát video bên thứ ba hoạt động không đúng với 4:2:0.

image.JPEG_SUBSAMPLING_420: int

Bắt buộc chroma subsampling 4:2:0.

So khớp mẫu

Truyền một trong các giá trị sau làm đối số search cho Image.find_template().

image.SEARCH_EX: int

Tìm kiếm toàn diện -- đánh giá mọi vị trí trong vùng quan tâm (ROI). Chậm nhất nhưng đảm bảo tìm được kết quả khớp tốt nhất.

image.SEARCH_DS: int

Tìm kiếm kim cương -- tìm kiếm từ thô đến tinh nhanh hơn nhiều so với SEARCH_EX nhưng có thể bỏ lỡ tối ưu toàn cục trên các mẫu có độ tương đồng cao.

Phát hiện cạnh

Truyền một trong các giá trị sau làm đối số algorithm cho Image.find_edges().

image.EDGE_CANNY: int

Bộ phát hiện cạnh Canny -- độ lớn gradient + non-max suppression + hysteresis. Chất lượng cao hơn, chậm hơn.

image.EDGE_SIMPLE: int

Bộ phát hiện cạnh lọc thông cao có ngưỡng. Nhanh hơn nhưng tạo ra các cạnh dày hơn và nhiễu hơn so với EDGE_CANNY.

Bộ phát hiện góc ORB

Truyền một trong các giá trị sau làm đối số corner_detector cho Image.find_keypoints().

image.CORNER_FAST: int

Bộ phát hiện góc FAST. Nhanh hơn CORNER_AGAST nhưng kém chính xác hơn.

image.CORNER_AGAST: int

Bộ phát hiện góc AGAST. Chậm hơn CORNER_FAST nhưng tạo ra các điểm đặc trưng ổn định hơn.

Các họ AprilTag

Dùng phép OR bit với bất kỳ tổ hợp nào trong số sau và truyền làm đối số families cho Image.find_apriltags(). Mỗi họ được kiểm soát bởi tùy chọn build riêng trong firmware; các họ không được hỗ trợ sẽ vắng mặt lúc chạy thay vì luôn bằng không.

image.TAG16H5: int

Họ AprilTag 16h5 (30 ID duy nhất, sửa lỗi 0-bit).

image.TAG25H9: int

Họ AprilTag 25h9 (35 ID duy nhất, sửa lỗi lên đến 3-bit).

image.TAG36H10: int

Họ AprilTag 36h10 (2320 ID duy nhất, sửa lỗi lên đến 3-bit).

image.TAG36H11: int

Họ AprilTag 36h11 (587 ID duy nhất, sửa lỗi lên đến 4-bit). Họ phổ biến nhất.

image.TAGCIRCLE21H7: int

Họ AprilTag Circle21h7.

image.TAGCIRCLE49H12: int

Họ AprilTag Circle49h12.

image.TAGCUSTOM48H12: int

Họ AprilTag Custom48h12.

image.TAGSTANDARD41H12: int

Họ AprilTag Standard41h12.

image.TAGSTANDARD52H13: int

Họ AprilTag Standard52h13.

Các ký hiệu mã vạch

Các giá trị được báo cáo trong BarCode.type cho các mục được trả về bởi Image.find_barcodes().

image.EAN2: int

Mã vạch phụ trợ EAN-2.

image.EAN5: int

Mã vạch phụ trợ EAN-5.

image.EAN8: int

Mã vạch EAN-8.

image.UPCE: int

Mã vạch UPC-E.

image.ISBN10: int

Mã vạch ISBN-10.

image.UPCA: int

Mã vạch UPC-A.

image.EAN13: int

Mã vạch EAN-13.

image.ISBN13: int

Mã vạch ISBN-13.

image.I25: int

Mã vạch Interleaved 2-of-5.

image.DATABAR: int

Mã vạch GS1 DataBar.

image.DATABAR_EXP: int

Mã vạch GS1 DataBar Expanded.

image.CODABAR: int

Mã vạch Codabar.

image.CODE39: int

Mã vạch Code 39.

image.PDF417: int

Mã vạch 2D PDF417 dạng xếp chồng. Hằng số tồn tại để đầy đủ, nhưng bộ giải mã mã vạch hiện chưa triển khai PDF417 -- Image.find_barcodes() sẽ không trả về phát hiện loại này.

image.CODE93: int

Mã vạch Code 93.

image.CODE128: int

Mã vạch Code 128.