TensorImage คือคลาส Wrapper สำหรับออบเจ็กต์รูปภาพ เมื่อใช้ยูทิลิตีการประมวลผลรูปภาพในไลบรารี TFLite.support ระบบจะแปลงออบเจ็กต์รูปภาพในประเภทตัวแปรเป็น TensorImage ก่อนเป็นอันดับแรก
ปัจจุบันระบบรองรับเฉพาะรูปภาพ RGB เท่านั้น และจะไม่สนใจช่อง A เสมอ
รายละเอียดพื้นที่เก็บข้อมูล: ออบเจ็กต์ TensorImage
อาจมีแหล่งที่มาจริงที่เป็นไปได้ 2 แห่ง ได้แก่ Bitmap
หรือ TensorBuffer
TensorImage
จะคงสถานะไว้และแปลงข้อมูลหนึ่งเป็นอีกสถานะหนึ่งเท่านั้นเมื่อจำเป็น Use Case ทั่วไปของ TensorImage
คือการโหลดรูปภาพ Bitmap
ก่อน จากนั้นประมวลผลโดยใช้ ImageProcessor
และสุดท้าย รับ ByteBuffer
เบื้องหลังของ TensorBuffer
แล้วฟีดลงในล่ามของ TFLite
สำคัญ: เพื่อให้ได้ประสิทธิภาพที่ดีที่สุด TensorImage
จะหลีกเลี่ยงการคัดลอกข้อมูลทุกครั้งที่ทำได้ จึงไม่ได้เป็นเจ้าของข้อมูล ผู้โทรไม่ควรแก้ไขออบเจ็กต์ข้อมูลที่ส่งไปยัง load(Bitmap)
หรือ load(TensorBuffer, ColorSpaceType)
สำคัญ: วิธีการทั้งหมดจะไม่ได้รับการพิสูจน์ว่าปลอดภัยสำหรับชุดข้อความ
บริษัทก่อสร้าง
TensorImage()
เริ่มต้นออบเจ็กต์
TensorImage |
|
วิธีการสาธารณะ
ภาพนิ่ง TensorImage |
createFrom(TensorImage src, DataType dataType)
สร้างสำเนาเชิงลึกของ
TensorImage ที่ระบุพร้อมประเภทข้อมูลที่ต้องการ |
ภาพนิ่ง TensorImage |
fromBitmap(บิตแมป)
|
บิตแมป |
getBitmap()
แสดงผล
Bitmap แทน TensorImage นี้ |
ByteBuffer |
getBuffer()
แสดงผล
ByteBuffer แทน TensorImage นี้พร้อมประเภทข้อมูลที่คาดไว้ |
ColorSpaceType |
getColorSpaceType()
รับประเภทพื้นที่สีของ
TensorImage นี้ |
DataType |
getDataType()
รับประเภทข้อมูลของ
TensorImage นี้ |
int |
getHeight()
รับข้อมูลความสูงของรูปภาพ
|
รูปภาพ |
getMediaImage() หน
แสดงผล
Image แทน TensorImage นี้ |
TensorBuffer |
getTensorBuffer()
แสดงผล
TensorBuffer แทน TensorImage นี้พร้อมประเภทข้อมูลที่คาดไว้ |
int |
getWidth()
รับความกว้างของรูปภาพ
|
void |
load(บัฟเฟอร์ TensorBuffer, ColorSpaceType colorSpaceType)
โหลด
TensorBuffer ที่มีค่าพิกเซลที่มีค่า ColorSpaceType ที่เจาะจง |
void |
load(บิตแมปบิตแมป)
โหลดออบเจ็กต์รูปภาพ
Bitmap ลงใน TensorImage นี้ |
void |
load(int[] พิกเซล, รูปร่าง int[])
โหลดอาร์เรย์ int เป็นพิกเซล RGB ลงใน
TensorImage นี้ โดยแสดงพิกเซลภายใน |
void |
load(Float[] พิกเซล, รูปร่าง int[])
โหลดอาร์เรย์แบบลอยเป็นพิกเซล RGB ลงใน
TensorImage นี้ โดยแสดงพิกเซลภายใน |
void |
load(บัฟเฟอร์ ByteBuffer, คุณสมบัติของรูปภาพ ImageProperties)
โหลด
ByteBuffer ที่มีค่าพิกเซลที่มีค่า ImageProperties ที่เจาะจง |
void |
load(บัฟเฟอร์ TensorBuffer, คุณสมบัติของรูปภาพ ImageProperties)
โหลด
TensorBuffer ที่มีค่าพิกเซลที่มีค่า ImageProperties ที่เจาะจง |
void |
load(รูปภาพ)
โหลดออบเจ็กต์
Image ลงใน TensorImage นี้ |
วิธีการที่รับช่วงมา
บริษัทก่อสร้าง
สาธารณะ TensorImage ()
เริ่มต้นออบเจ็กต์ TensorImage
หมายเหตุ: ประเภทข้อมูลของ TensorImage
นี้คือ DataType.UINT8
ใช้ TensorImage(DataType)
หากต้องการประเภทข้อมูลอื่น
สาธารณะ TensorImage (DataType dataType)
เริ่มต้นออบเจ็กต์ TensorImage
ด้วยประเภทข้อมูลที่ระบุ
เมื่อได้รับ TensorBuffer
หรือ ByteBuffer
จาก TensorImage
นี้ เช่น การใช้ getTensorBuffer()
และ getBuffer()
ระบบจะแปลงค่าของข้อมูลเป็นประเภทข้อมูลที่ระบุ
หมายเหตุ: รูปร่างของ TensorImage
ไม่คงที่ ปรับได้ตามรูปร่างของรูปภาพที่กำลังโหลดไปยัง TensorImage
นี้
พารามิเตอร์
dataType | ประเภทข้อมูลที่คาดไว้ของ TensorBuffer ที่ได้ ประเภทจะมีค่าตายตัวเสมอตลอดอายุของ TensorImage หากต้องการแปลงประเภทข้อมูล ให้ใช้ createFrom(TensorImage, DataType) เพื่อสร้างสำเนาและแปลงประเภทข้อมูลในเวลาเดียวกัน |
---|
การขว้าง
IllegalArgumentException | หาก dataType ไม่ใช่ทั้ง DataType.UINT8 และ DataType.FLOAT32
|
---|
วิธีการสาธารณะ
ภาพนิ่งสาธารณะ TensorImage createFrom (TensorImage src, DataType dataType)
สร้างสำเนาเชิงลึกของ TensorImage
ที่ระบุพร้อมประเภทข้อมูลที่ต้องการ
พารามิเตอร์
src | TensorImage ที่จะคัดลอก |
---|---|
dataType | ประเภทข้อมูลที่คาดไว้ของ TensorImage ที่สร้างขึ้นใหม่ |
การคืนสินค้า
TensorImage
ที่ข้อมูลคัดลอกจากsrc
และประเภทข้อมูลคือdataType
ภาพนิ่งสาธารณะ TensorImage fromBitmap (บิตแมปบิตแมป)
เริ่มต้นออบเจ็กต์ TensorImage
ของ DataType.UINT8
ด้วย Bitmap
พารามิเตอร์
บิตแมป |
---|
สาธารณะ บิตแมป getBitmap ()
แสดงผล Bitmap
แทน TensorImage
นี้
ระบบจะใช้การแคสต์และการปรับตัวเลขหากข้อมูลที่จัดเก็บไว้ไม่ใช่ uint8
โปรดทราบว่า วิธีที่เชื่อถือได้ในการรับพิกเซลจากบิตแมป ALPHA_8
คือการใช้ copyPixelsToBuffer
เมธอดบิตแมป เช่น "setPixels()" และ "getPixels" จะใช้ไม่ได้
สำคัญ: เป็นเพียงการอ้างอิง โปรดอย่าแก้ไข เราไม่สร้างสำเนาที่นี่เนื่องจากข้อกังวลด้านประสิทธิภาพ แต่หากจำเป็นต้องแก้ไข โปรดทำสำเนาไว้
การคืนสินค้า
- การอ้างอิงไปยัง
Bitmap
ในการกำหนดค่าARGB_8888
(แชนเนล "A" จะทึบแสงเสมอ) หรือในALPHA_8
ขึ้นอยู่กับColorSpaceType
ของTensorBuffer
นี้
การขว้าง
IllegalStateException | หาก TensorImage ไม่โหลดข้อมูล
|
---|
สาธารณะ ByteBuffer getBuffer ()
แสดงผล ByteBuffer
แทน TensorImage
นี้พร้อมประเภทข้อมูลที่คาดไว้
ระบบจะใช้การแคสต์และการปรับตัวเลขหากข้อมูลที่จัดเก็บไว้แตกต่างจากประเภทข้อมูลของ TensorImage
สำคัญ: เป็นเพียงการอ้างอิง โปรดอย่าแก้ไข เราไม่สร้างสำเนาที่นี่เนื่องจากข้อกังวลด้านประสิทธิภาพ แต่หากจำเป็นต้องแก้ไข โปรดทำสำเนาไว้
เนื้อหาแบบสั้นคือ getTensorBuffer().getBuffer()
การคืนสินค้า
- การอ้างอิงไปยัง
ByteBuffer
ที่เก็บข้อมูลรูปภาพ
การขว้าง
IllegalStateException | หาก TensorImage ไม่โหลดข้อมูล
|
---|
สาธารณะ ColorSpaceType getColorSpaceType ()
รับประเภทพื้นที่สีของ TensorImage
นี้
การขว้าง
IllegalStateException | หาก TensorImage ไม่โหลดข้อมูล
|
---|
สาธารณะ DataType getDataType ()
รับประเภทข้อมูลของ TensorImage
นี้
การคืนสินค้า
- ประเภทข้อมูล ปัจจุบันรองรับเฉพาะ
DataType.UINT8
และDataType.FLOAT32
สาธารณะ int getHeight ()
รับข้อมูลความสูงของรูปภาพ
การขว้าง
IllegalStateException | หาก TensorImage ไม่โหลดข้อมูล |
---|---|
IllegalArgumentException | หากข้อมูลสำคัญเสียหาย |
สาธารณะ รูปภาพ getMediaImage ()
แสดงผล Image
แทน TensorImage
นี้
เมธอดนี้จะทำงานก็ต่อเมื่อ TensorImage
ได้รับการสนับสนุนโดย Image
ซึ่งหมายความว่าคุณต้องโหลด Image
ถึง load(Image)
ก่อน
สำคัญ: เป็นเพียงการอ้างอิง โปรดอย่าแก้ไข เราไม่สร้างสำเนาที่นี่เนื่องจากข้อกังวลด้านประสิทธิภาพ แต่หากจำเป็นต้องแก้ไข โปรดทำสำเนาไว้
การคืนสินค้า
- การอ้างอิงไปยัง
Bitmap
ในการกำหนดค่าARGB_8888
(แชนเนล "A" จะทึบแสงเสมอ) หรือในALPHA_8
ขึ้นอยู่กับColorSpaceType
ของTensorBuffer
นี้
การขว้าง
IllegalStateException | หาก TensorImage ไม่โหลดข้อมูล
|
---|
สาธารณะ TensorBuffer getTensorBuffer ()
แสดงผล TensorBuffer
แทน TensorImage
นี้พร้อมประเภทข้อมูลที่คาดไว้
ระบบจะใช้การแคสต์และการปรับตัวเลขหากข้อมูลที่จัดเก็บไว้แตกต่างจากประเภทข้อมูลของ TensorImage
สำคัญ: เป็นเพียงการอ้างอิง โปรดอย่าแก้ไข เราไม่สร้างสำเนาที่นี่เนื่องจากข้อกังวลด้านประสิทธิภาพ แต่หากจำเป็นต้องแก้ไข โปรดทำสำเนาไว้
การคืนสินค้า
- การอ้างอิงไปยัง
TensorBuffer
ที่เก็บข้อมูลรูปภาพ
การขว้าง
IllegalStateException | หาก TensorImage ไม่โหลดข้อมูล
|
---|
สาธารณะ int getWidth ()
รับความกว้างของรูปภาพ
การขว้าง
IllegalStateException | หาก TensorImage ไม่โหลดข้อมูล |
---|---|
IllegalArgumentException | หากข้อมูลสำคัญเสียหาย |
สาธารณะ void load (บัฟเฟอร์ TensorBuffer, ColorSpaceType colorSpaceType)
โหลด TensorBuffer
ที่มีค่าพิกเซลที่มีค่า ColorSpaceType
ที่เจาะจง
รองรับเฉพาะ ColorSpaceType.RGB
และ ColorSpaceType.GRAYSCALE
ใช้ load(TensorBuffer, ImageProperties)
สำหรับพื้นที่สีประเภทอื่นๆ
หมายเหตุ: หากประเภทข้อมูลของ buffer
ไม่ตรงกับประเภทของ TensorImage
นี้ ระบบจะใช้การแคสต์และการปรับตัวเลขเมื่อเรียกใช้ getTensorBuffer()
และ getBuffer()
พารามิเตอร์
บัฟเฟอร์ | TensorBuffer ที่จะโหลด รูปร่างของรูปควรเป็น (h, w, 3) หรือ (1, h, w, 3) สำหรับรูปภาพ RGB และ (h, w) หรือ (1, h, w) สำหรับรูปภาพ GRAYSCALE อย่างใดอย่างหนึ่ง |
---|---|
colorSpaceType |
การขว้าง
IllegalArgumentException | หากรูปร่างของบัฟเฟอร์ไม่ตรงกับประเภทพื้นที่สี หรือ หากระบบไม่รองรับประเภทพื้นที่สี |
---|
สาธารณะ void load (บิตแมปบิตแมป)
โหลดออบเจ็กต์รูปภาพ Bitmap
ลงใน TensorImage
นี้
หมายเหตุ: หาก TensorImage
มีข้อมูลประเภทอื่นที่ไม่ใช่ DataType.UINT8
ระบบจะใช้การแคสต์และการปรับตัวเลขเมื่อเรียกใช้ getTensorBuffer()
และ getBuffer()
ซึ่ง Bitmap
จะแปลงเป็น TensorBuffer
ข้อสำคัญ: เมื่อโหลดบิตแมป โปรดอย่าแก้ไขบิตแมปจากฝั่งผู้โทรอีกต่อไป ออบเจ็กต์ TensorImage
จะอาศัยบิตแมป ซึ่งอาจจะแก้ไขบิตแมปด้วย
ในวิธีนี้ เราดำเนินการแบบ Zero-copy สำหรับบิตแมปนั้น โดยเพียงแค่ถือการอ้างอิงของบิตแมปนั้น ใช้ bitmap.copy(bitmap.getConfig(), true)
เพื่อสร้างสำเนาหากจำเป็น
หมายเหตุ: เพื่อให้ได้ประสิทธิภาพที่ดีที่สุด โปรดโหลดรูปภาพที่ทรงเดียวกันเพื่อหลีกเลี่ยงการจัดสรรหน่วยความจำใหม่
พารามิเตอร์
บิตแมป |
---|
การขว้าง
IllegalArgumentException | หาก bitmap ไม่ได้อยู่ใน ARGB_8888
|
---|
สาธารณะ void โหลด (int[] พิกเซล, รูปร่าง int[])
โหลดอาร์เรย์ int เป็นพิกเซล RGB ลงใน TensorImage
นี้ โดยแสดงพิกเซลภายใน
หมายเหตุ: ระบบจะใช้การแคสต์และการปรับตัวเลขเพื่อแปลงค่าเป็นประเภทข้อมูลของ TensorImage
นี้เมื่อเรียกใช้ getTensorBuffer()
และ getBuffer()
พารามิเตอร์
พิกเซล | พิกเซล RGB ที่แสดงรูปภาพ |
---|---|
รูปร่าง | รูปร่างของรูปภาพ ควรอยู่ในรูปแบบ (h, w, 3) หรือในรูปแบบ (1, h, w, 3) |
การขว้าง
IllegalArgumentException | ถ้ารูปร่างไม่ใช่ (h, w, 3) หรือ (1, h, w, 3) |
---|
สาธารณะ void โหลด (Float[] พิกเซล, รูปร่าง int[])
โหลดอาร์เรย์แบบลอยเป็นพิกเซล RGB ลงใน TensorImage
นี้ โดยแสดงพิกเซลภายใน
หมายเหตุ: หาก TensorImage
มีประเภทข้อมูลที่ไม่ใช่ DataType.FLOAT32
ระบบจะใช้การแคสต์และการปรับตัวเลขเมื่อเรียกใช้ getTensorBuffer()
และ getBuffer()
พารามิเตอร์
พิกเซล | พิกเซล RGB ที่แสดงรูปภาพ |
---|---|
รูปร่าง | รูปร่างของรูปภาพ ควรอยู่ในรูปแบบ (h, w, 3) หรือในรูปแบบ (1, h, w, 3) |
การขว้าง
IllegalArgumentException | ถ้ารูปร่างไม่ใช่ (h, w, 3) หรือ (1, h, w, 3) |
---|
สาธารณะ void โหลด (บัฟเฟอร์ ByteBuffer, ImageProperties พร็อพเพอร์ตี้
โหลด ByteBuffer
ที่มีค่าพิกเซลที่มีค่า ImageProperties
ที่เจาะจง
หมายเหตุ: หากประเภทข้อมูลของ buffer
ไม่ตรงกับประเภทของ TensorImage
นี้ ระบบจะใช้การแคสต์และการปรับตัวเลขเมื่อเรียกใช้ getTensorBuffer()
และ getBuffer()
พารามิเตอร์
บัฟเฟอร์ | |
---|---|
imageProperties |
การขว้าง
IllegalArgumentException | หากขนาดบัฟเฟอร์น้อยกว่าขนาดรูปภาพที่ระบุโดยประเภทความสูง ความกว้าง และพื้นที่สีใน ImageProperties
|
---|
สาธารณะ void โหลด (บัฟเฟอร์ TensorBuffer, ImageProperties พร็อพเพอร์ตี้
โหลด TensorBuffer
ที่มีค่าพิกเซลที่มีค่า ImageProperties
ที่เจาะจง
ระบบจะไม่ใช้รูปร่างของ TensorBuffer
ในการกำหนดความสูงและความกว้างของรูปภาพ
ตั้งค่าคุณสมบัติของรูปภาพผ่าน ImageProperties
หมายเหตุ: หากประเภทข้อมูลของ buffer
ไม่ตรงกับประเภทของ TensorImage
นี้ ระบบจะใช้การแคสต์และการปรับตัวเลขเมื่อเรียกใช้ getTensorBuffer()
และ getBuffer()
พารามิเตอร์
บัฟเฟอร์ | |
---|---|
imageProperties |
การขว้าง
IllegalArgumentException | หากขนาดบัฟเฟอร์น้อยกว่าขนาดรูปภาพที่ระบุโดยประเภทความสูง ความกว้าง และพื้นที่สีใน ImageProperties
|
---|
สาธารณะ void โหลด (รูปภาพ)
โหลดออบเจ็กต์ Image
ลงใน TensorImage
นี้
การใช้งานหลักของเมธอดนี้คือการโหลดออบเจ็กต์ Image
เป็นอินพุตโมเดลไปยัง https://www.tensorflow.org/lite/inference_with_metadata/task_library/overview
ImageProcessor
ไม่รองรับ TensorImage
ที่ Image
รองรับ
* @throws IllegalArgumentException หาก ImageFormat
ของ image
ไม่ใช่ YUV_420_888
พารามิเตอร์
รูปภาพ |
---|