TensorImage

คลาสสาธารณะ TensorImage

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(ประเภทข้อมูล DataType)
เริ่มต้นออบเจ็กต์ TensorImage ด้วยประเภทข้อมูลที่ระบุ

วิธีการสาธารณะ

ภาพนิ่ง TensorImage
createFrom(TensorImage src, DataType dataType)
สร้างสำเนาเชิงลึกของ TensorImage ที่ระบุพร้อมประเภทข้อมูลที่ต้องการ
ภาพนิ่ง TensorImage
fromBitmap(บิตแมป)
เริ่มต้นออบเจ็กต์ TensorImage ของ DataType.UINT8 ด้วย Bitmap
บิตแมป
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 นี้

การคืนสินค้า

สาธารณะ 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

พารามิเตอร์
รูปภาพ