diff --git a/turms-ai-serving/src/main/java/ai/djl/opencv/OpenCVImageUtil.java b/turms-ai-serving/src/main/java/ai/djl/opencv/ExtendedOpenCVImage.java similarity index 60% rename from turms-ai-serving/src/main/java/ai/djl/opencv/OpenCVImageUtil.java rename to turms-ai-serving/src/main/java/ai/djl/opencv/ExtendedOpenCVImage.java index 7a64b4cc82..4b46130031 100644 --- a/turms-ai-serving/src/main/java/ai/djl/opencv/OpenCVImageUtil.java +++ b/turms-ai-serving/src/main/java/ai/djl/opencv/ExtendedOpenCVImage.java @@ -17,25 +17,34 @@ package ai.djl.opencv; -import ai.djl.modality.cv.Image; import org.opencv.core.Mat; import org.opencv.imgcodecs.Imgcodecs; /** * @author James Chen */ -public final class OpenCVImageUtil { +public class ExtendedOpenCVImage extends OpenCVImage implements AutoCloseable { - private OpenCVImageUtil() { + public ExtendedOpenCVImage(Mat image) { + super(image); } - public static Image create(String imagePath) { - Mat mat = Imgcodecs.imread(imagePath); - return new OpenCVImage(mat); + public ExtendedOpenCVImage(String imagePath) { + super(read(imagePath)); } - public static Image create(Mat image) { - return new OpenCVImage(image); + private static Mat read(String imagePath) { + Mat mat = Imgcodecs.imread(imagePath); + if (mat.empty()) { + throw new RuntimeException( + "Failed to read from the path: " + + imagePath); + } + return mat; } + @Override + public void close() { + getWrappedImage().release(); + } } \ No newline at end of file diff --git a/turms-ai-serving/src/main/java/im/turms/ai/infra/ocr/OcrManager.java b/turms-ai-serving/src/main/java/im/turms/ai/infra/ocr/OcrManager.java index 0aa169ffb1..55369ec8c6 100644 --- a/turms-ai-serving/src/main/java/im/turms/ai/infra/ocr/OcrManager.java +++ b/turms-ai-serving/src/main/java/im/turms/ai/infra/ocr/OcrManager.java @@ -28,7 +28,7 @@ import ai.djl.modality.cv.Image; import ai.djl.modality.cv.output.BoundingBox; import ai.djl.modality.cv.output.DetectedObjects; -import ai.djl.opencv.OpenCVImageUtil; +import ai.djl.opencv.ExtendedOpenCVImage; import ai.djl.paddlepaddle.engine.PpEngine; import ai.djl.repository.zoo.Criteria; import ai.djl.repository.zoo.ZooModel; @@ -37,8 +37,6 @@ import io.netty.util.concurrent.FastThreadLocal; import nu.pattern.OpenCV; import org.opencv.core.Core; -import org.opencv.core.Mat; -import org.opencv.imgcodecs.Imgcodecs; import im.turms.server.common.infra.lang.StringUtil; import im.turms.server.common.infra.logging.core.logger.Logger; @@ -165,19 +163,14 @@ public void close() { } public DetectedObjects ocr(String imagePath) { - Mat img = Imgcodecs.imread(imagePath); - if (img.empty()) { - throw new RuntimeException( - "Failed to read from the path: " - + imagePath); + try (ExtendedOpenCVImage image = new ExtendedOpenCVImage(imagePath)) { + return ocr(image); } - Image image = OpenCVImageUtil.create(img); - return ocr(image); } - public DetectedObjects ocr(Image image) { - DetectedObjects detect = detect(image); - List detectedObjects = detect.items(); + private DetectedObjects ocr(Image image) { + DetectedObjects detectResult = detect(image); + List detectedObjects = detectResult.items(); int size = detectedObjects.size(); List names = new ArrayList<>(size); List probabilities = new ArrayList<>(size);