TensorImage là lớp bao bọc cho đối tượng Image. Khi sử dụng các utils xử lý hình ảnh trong thư viện TFLite.support, lúc đầu, việc chuyển đổi các đối tượng hình ảnh trong các loại biến thể thành TensorImage là điều thường thấy.
Hiện tại, chỉ hình ảnh RGB được hỗ trợ và kênh A luôn bị bỏ qua.
Chi tiết về lưu trữ dữ liệu: một đối tượng TensorImage
có thể có 2 nguồn chân lý tiềm năng: Bitmap
hoặc TensorBuffer
. TensorImage
duy trì trạng thái và chỉ chuyển đổi trạng thái này sang trạng thái khác khi cần thiết. Một trường hợp sử dụng điển hình của TensorImage
là trước tiên tải một hình ảnh Bitmap
, sau đó xử lý nó bằng ImageProcessor
, và cuối cùng lấy ByteBuffer
cơ bản của TensorBuffer
và đưa nó vào trình thông dịch TFLite.
QUAN TRỌNG: để đạt được hiệu suất tốt nhất, TensorImage
tránh sao chép dữ liệu bất cứ khi nào có thể. Do đó, nó không sở hữu dữ liệu của mình. Người gọi không nên sửa đổi các đối tượng dữ liệu được truyền để load(Bitmap)
hoặc load(TensorBuffer, ColorSpaceType)
.
QUAN TRỌNG: tất cả các phương pháp không được chứng minh là an toàn cho luồng.
Người xây dựng công cộng
TensorImage () Khởi tạo một đối tượng TensorImage . | |
Phương thức công khai
TensorImage tĩnh | createFrom ( TensorImage src, DataType dataType) Tạo bản sao sâu của một TensorImage nhất định với kiểu dữ liệu mong muốn. |
TensorImage tĩnh | fromBitmap (Bản đồ bitmap) |
Bản đồ bit | getBitmap () Trả về biểu diễn Bitmap của TensorImage này. |
ByteBuffer | getBuffer () Trả về biểu diễn ByteBuffer của TensorImage này với kiểu dữ liệu mong đợi. |
ColorSpaceType | getColorSpaceType () Nhận loại không gian màu của TensorImage này. |
Loại dữ liệu | getDataType () Nhận kiểu dữ liệu của TensorImage này. |
int | getHeight () Nhận chiều cao hình ảnh. |
Hình ảnh | getMediaImage () Trả về biểu diễn Image của TensorImage này. |
TensorBuffer | getTensorBuffer () Trả về biểu diễn TensorBuffer của TensorImage này với kiểu dữ liệu mong đợi. |
int | getWidth () Nhận chiều rộng hình ảnh. |
vô hiệu | tải (bộ đệm TensorBuffer , ColorSpaceType colorSpaceType) Tải TensorBuffer chứa các giá trị pixel bằng ColorSpaceType cụ thể. |
vô hiệu | tải (Bản đồ bitmap) Tải một đối tượng hình ảnh Bitmap vào TensorImage này. |
vô hiệu | tải (int [] pixel, int [] shape) Tải một mảng int dưới dạng pixel RGB vào TensorImage này, đại diện cho các pixel bên trong. |
vô hiệu | tải (float [] pixel, int [] shape) Tải một mảng float dưới dạng pixel RGB vào TensorImage này, đại diện cho các pixel bên trong. |
vô hiệu | tải (Bộ đệm ByteBuffer , ImageProperties imageProperties) Tải một ByteBuffer chứa các giá trị pixel với các ImageProperties tính Hình ảnh cụ thể. |
vô hiệu | tải (bộ đệm TensorBuffer , ImageProperties imageProperties) Tải TensorBuffer chứa các giá trị pixel với các Thuộc tính Hình ảnh cụ ImageProperties . |
vô hiệu | tải (Hình ảnh) Tải một đối tượng Image vào TensorImage này. |
Phương thức kế thừa
Người xây dựng công cộng
public TensorImage ()
Khởi tạo một đối tượng TensorImage
.
Lưu ý: kiểu dữ liệu của TensorImage
này là DataType.UINT8
. Sử dụng TensorImage(DataType)
nếu các kiểu dữ liệu khác được ưu tiên.
public TensorImage ( DataType dataType)
Khởi tạo đối tượng TensorImage
với kiểu dữ liệu được chỉ định.
Khi nhận được TensorBuffer
hoặc ByteBuffer
từ TensorImage
này, chẳng hạn như sử dụng getTensorBuffer()
và getBuffer()
, các giá trị dữ liệu sẽ được chuyển đổi thành kiểu dữ liệu được chỉ định.
Lưu ý: hình dạng của TensorImage
không cố định. Nó có thể được điều chỉnh theo hình dạng của hình ảnh được tải vào TensorImage
này.
Thông số
loại dữ liệu | kiểu dữ liệu mong đợi của TensorBuffer kết quả. Loại luôn cố định trong suốt thời gian tồn tại của TensorImage . Để chuyển đổi kiểu dữ liệu, hãy sử dụng createFrom(TensorImage, DataType) để tạo bản sao và chuyển đổi kiểu dữ liệu cùng một lúc. |
---|
Ném
Ngoại lệ Đối số bất hợp pháp | nếu dataType không phải là DataType.UINT8 hoặc DataType.FLOAT32 |
---|
Phương thức công khai
public static TensorImage createFrom ( TensorImage src, DataType dataType)
Tạo bản sao sâu của một TensorImage
nhất định với kiểu dữ liệu mong muốn.
Thông số
src | TensorImage để sao chép từ |
---|---|
loại dữ liệu | kiểu dữ liệu mong đợi của TensorImage mới được tạo |
Lợi nhuận
- một
TensorImage
có dữ liệu được sao chép từsrc
và kiểu dữ liệu làdataType
public static TensorImage fromBitmap (Bản đồ bitmap)
Khởi tạo đối tượng TensorImage
của DataType.UINT8
bằng Bitmap
.
Thông số
bitmap |
---|
public Bitmap getBitmap ()
Trả về biểu diễn Bitmap
của TensorImage
này.
Đúc và kẹp số sẽ được áp dụng nếu dữ liệu được lưu trữ không phải là uint8.
Lưu ý rằng, cách đáng tin cậy để lấy pixel từ ALPHA_8
Bitmap là sử dụng copyPixelsToBuffer
. Các phương thức bitmap như, `setPixels ()` và `getPixels` không hoạt động.
Quan trọng: nó chỉ mang tính chất tham khảo. KHÔNG SỬA ĐỔI. Chúng tôi không tạo một bản sao ở đây vì lo ngại về hiệu suất, nhưng nếu cần sửa đổi, vui lòng tạo một bản sao.
Lợi nhuận
- tham chiếu đến
Bitmap
trong cấu hìnhARGB_8888
(kênh "A" luôn mờ) hoặc trongALPHA_8
, tùy thuộc vàoColorSpaceType
củaTensorBuffer
này.
Ném
Ngoại lệ nhà nước bất hợp pháp | nếu TensorImage không bao giờ tải dữ liệu |
---|
public ByteBuffer getBuffer ()
Trả về biểu diễn ByteBuffer
của TensorImage
này với kiểu dữ liệu mong đợi.
Đúc và kẹp số sẽ được áp dụng nếu dữ liệu được lưu trữ khác với kiểu dữ liệu của TensorImage
.
Quan trọng: nó chỉ mang tính chất tham khảo. KHÔNG SỬA ĐỔI. Chúng tôi không tạo một bản sao ở đây vì lo ngại về hiệu suất, nhưng nếu cần sửa đổi, vui lòng tạo một bản sao.
Về cơ bản, nó là một đoạn ngắn của getTensorBuffer().getBuffer()
.
Lợi nhuận
- một tham chiếu đến
ByteBuffer
chứa dữ liệu hình ảnh
Ném
Ngoại lệ nhà nước bất hợp pháp | nếu TensorImage không bao giờ tải dữ liệu |
---|
public ColorSpaceType getColorSpaceType ()
Nhận loại không gian màu của TensorImage
này.
Ném
Ngoại lệ nhà nước bất hợp pháp | nếu TensorImage không bao giờ tải dữ liệu |
---|
public DataType getDataType ()
Nhận kiểu dữ liệu của TensorImage
này.
Lợi nhuận
- một kiểu dữ liệu. Hiện tại chỉ
DataType.UINT8
vàDataType.FLOAT32
được hỗ trợ.
public int getHeight ()
Nhận chiều cao hình ảnh.
Ném
Ngoại lệ nhà nước bất hợp pháp | nếu TensorImage không bao giờ tải dữ liệu |
---|---|
Ngoại lệ Đối số bất hợp pháp | nếu dữ liệu cơ bản bị hỏng |
public Image getMediaImage ()
Trả về biểu diễn Image
của TensorImage
này.
Phương pháp này chỉ hoạt động khi TensorImage
được hỗ trợ bởi Image
, nghĩa là trước tiên bạn cần tải Image
thông qua load(Image)
.
Quan trọng: nó chỉ mang tính chất tham khảo. KHÔNG SỬA ĐỔI. Chúng tôi không tạo một bản sao ở đây vì lo ngại về hiệu suất, nhưng nếu cần sửa đổi, vui lòng tạo một bản sao.
Lợi nhuận
- tham chiếu đến
Bitmap
trong cấu hìnhARGB_8888
(kênh "A" luôn mờ) hoặc trongALPHA_8
, tùy thuộc vàoColorSpaceType
củaTensorBuffer
này.
Ném
Ngoại lệ nhà nước bất hợp pháp | nếu TensorImage không bao giờ tải dữ liệu |
---|
public TensorBuffer getTensorBuffer ()
Trả về biểu diễn TensorBuffer
của TensorImage
này với kiểu dữ liệu mong đợi.
Đúc và kẹp số sẽ được áp dụng nếu dữ liệu được lưu trữ khác với kiểu dữ liệu của TensorImage
.
Quan trọng: nó chỉ mang tính chất tham khảo. KHÔNG SỬA ĐỔI. Chúng tôi không tạo một bản sao ở đây vì lo ngại về hiệu suất, nhưng nếu cần sửa đổi, vui lòng tạo một bản sao.
Lợi nhuận
- một tham chiếu đến
TensorBuffer
chứa dữ liệu hình ảnh
Ném
Ngoại lệ nhà nước bất hợp pháp | nếu TensorImage không bao giờ tải dữ liệu |
---|
public int getWidth ()
Nhận chiều rộng hình ảnh.
Ném
Ngoại lệ nhà nước bất hợp pháp | nếu TensorImage không bao giờ tải dữ liệu |
---|---|
Ngoại lệ Đối số bất hợp pháp | nếu dữ liệu cơ bản bị hỏng |
tải khoảng trống công khai (bộ đệm TensorBuffer , ColorSpaceType colorSpaceType)
Tải TensorBuffer
chứa các giá trị pixel bằng ColorSpaceType
cụ thể.
Chỉ hỗ trợ ColorSpaceType.RGB
và ColorSpaceType.GRAYSCALE
. Sử dụng load(TensorBuffer, ImageProperties)
cho các loại không gian màu khác.
Lưu ý: nếu kiểu dữ liệu của buffer
không khớp với kiểu dữ liệu của TensorImage
này, việc ép và kẹp kiểu số sẽ được áp dụng khi gọi getTensorBuffer()
và getBuffer()
.
Thông số
đệm | TensorBuffer sẽ được tải. Hình dạng của nó phải là (h, w, 3) hoặc (1, h, w, 3) cho hình ảnh RGB và (h, w) hoặc (1, h, w) cho hình ảnh GRAYSCALE |
---|---|
colorSpaceType |
Ném
Ngoại lệ Đối số bất hợp pháp | nếu hình dạng của bộ đệm không phù hợp với loại không gian màu hoặc nếu loại không gian màu không được hỗ trợ |
---|
tải khoảng trống công cộng (bitmap bitmap)
Tải một đối tượng hình ảnh Bitmap
vào TensorImage
này.
Lưu ý: nếu TensorImage
có kiểu dữ liệu khác với DataType.UINT8
, ép và kẹp số sẽ được áp dụng khi gọi getTensorBuffer()
và getBuffer()
, nơi Bitmap
sẽ được chuyển đổi thành TensorBuffer
.
Quan trọng: khi tải một bitmap, KHÔNG SỬA ĐỔI bitmap từ phía người gọi nữa. Đối tượng TensorImage
sẽ dựa trên bitmap. Nó có thể cũng sẽ sửa đổi bitmap. Trong phương pháp này, chúng tôi thực hiện phương pháp không sao chép cho bitmap đó, bằng cách chỉ cần giữ tham chiếu của nó. Sử dụng bitmap.copy(bitmap.getConfig(), true)
để tạo bản sao nếu cần.
Lưu ý: để đạt hiệu quả tốt nhất, vui lòng tải các hình ảnh có hình dạng giống nhau để tránh cấp phát lại bộ nhớ.
Thông số
bitmap |
---|
Ném
Ngoại lệ Đối số bất hợp pháp | nếu bitmap không có trong ARGB_8888 |
---|
public void load (int [] pixel, int [] shape)
Tải một mảng int dưới dạng pixel RGB vào TensorImage
này, đại diện cho các pixel bên trong.
Lưu ý: ép và kẹp kiểu số sẽ được áp dụng để chuyển các giá trị thành kiểu dữ liệu của TensorImage
này khi gọi getTensorBuffer()
và getBuffer()
.
Thông số
điểm ảnh | các pixel RGB đại diện cho hình ảnh |
---|---|
hình dạng | hình dạng của hình ảnh, phải ở dạng (h, w, 3) hoặc ở dạng (1, h, w, 3) |
Ném
Ngoại lệ Đối số bất hợp pháp | nếu hình dạng không phải là (h, w, 3) cũng không phải (1, h, w, 3) |
---|
public void load (float [] pixel, int [] shape)
Tải một mảng float dưới dạng pixel RGB vào TensorImage
này, đại diện cho các pixel bên trong.
Lưu ý: nếu TensorImage
có kiểu dữ liệu khác với DataType.FLOAT32
, ép và kẹp kiểu số sẽ được áp dụng khi gọi getTensorBuffer()
và getBuffer()
.
Thông số
điểm ảnh | các pixel RGB đại diện cho hình ảnh |
---|---|
hình dạng | hình dạng của hình ảnh, phải ở dạng (h, w, 3) hoặc ở dạng (1, h, w, 3) |
Ném
Ngoại lệ Đối số bất hợp pháp | nếu hình dạng không phải là (h, w, 3) cũng không phải (1, h, w, 3) |
---|
tải khoảng trống công cộng (bộ đệm ByteBuffer , ImageProperties imageProperties)
Tải một ByteBuffer
chứa các giá trị pixel với các ImageProperties
tính Hình ảnh cụ thể.
Lưu ý: nếu kiểu dữ liệu của buffer
không khớp với kiểu dữ liệu của TensorImage
này, việc ép và kẹp kiểu số sẽ được áp dụng khi gọi getTensorBuffer()
và getBuffer()
.
Thông số
đệm | |
---|---|
imageProperties |
Ném
Ngoại lệ Đối số bất hợp pháp | nếu kích thước bộ đệm nhỏ hơn kích thước hình ảnh được chỉ ra bởi chiều cao hình ảnh, chiều rộng và loại không gian màu trong ImageProperties |
---|
tải khoảng trống công cộng (bộ đệm TensorBuffer , ImageProperties imageProperties)
Tải TensorBuffer
chứa các giá trị pixel với các Thuộc tính Hình ảnh cụ ImageProperties
.
Hình dạng của TensorBuffer
sẽ không được sử dụng để xác định chiều cao và chiều rộng của hình ảnh. Đặt thuộc tính hình ảnh thông qua ImageProperties
.
Lưu ý: nếu kiểu dữ liệu của buffer
không khớp với kiểu dữ liệu của TensorImage
này, việc ép và kẹp kiểu số sẽ được áp dụng khi gọi getTensorBuffer()
và getBuffer()
.
Thông số
đệm | |
---|---|
imageProperties |
Ném
Ngoại lệ Đối số bất hợp pháp | nếu kích thước bộ đệm nhỏ hơn kích thước hình ảnh được chỉ ra bởi chiều cao hình ảnh, chiều rộng và loại không gian màu trong ImageProperties |
---|
tải khoảng trống công cộng (Hình ảnh hình ảnh)
Tải một đối tượng Image
vào TensorImage
này.
Cách sử dụng chính của phương pháp này là tải đối tượng Image
làm đầu vào mô hình vào https://www.tensorflow.org/lite/inference_with_metadata/task_library/overview . TensorImage
được hỗ trợ bởi Image
không được ImageProcessor
hỗ trợ.
* @throws IllegalArgumentException nếu ImageFormat
của image
không phải là YUV_420_888
Thông số
hình ảnh |
---|