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
พารามิเตอร์
| รูปภาพ |
|---|