From 622bd51f179a9c2007be1cae04a49b08330fa9c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E5=A4=A9=E5=AE=87?= <jiangtianyu@wmdigit.com> Date: Fri, 25 Apr 2025 17:07:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:UvcCamera=E4=BB=8Emjpeg=E6=94=B9=E4=B8=BAy?= =?UTF-8?q?uv;=E5=A2=9E=E5=8A=A0=E6=8E=A8=E7=90=86=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E6=97=A5=E5=BF=97;=E4=BF=AE=E6=94=B9=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=E5=BA=93=E9=BB=98=E8=AE=A4=E9=98=88=E5=80=BC=E4=B8=BA0.77;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- camera/build.gradle | 1 + .../java/com/jiangdg/uvc/USBCameraHelper.java | 46 +-- .../main/jniLibs/armeabi-v7a/libUVCCamera.so | Bin 154736 -> 154736 bytes .../jniLibs/armeabi-v7a/libjpeg-turbo1500.so | Bin 317220 -> 317220 bytes .../src/main/jniLibs/armeabi-v7a/libusb100.so | Bin 108168 -> 108168 bytes camera/src/main/jniLibs/armeabi-v7a/libuvc.so | Bin 104304 -> 104304 bytes .../com/wmdigit/common/utils/StopWatch.java | 303 ++++++++++++++++++ .../catering/TargetDetectionRepository.java | 3 + .../core/catering/dish/DishDetection.java | 2 - .../core/catering/plate/PlateDetection.java | 5 +- .../com/wmdigit/core/hnsw/HnswRepository.java | 2 +- .../wmdigit/core/opencv/OpencvRepository.java | 26 ++ history.txt | 4 + .../viewmodel/DataLearningViewModel.java | 11 + .../viewmodel/DataManagerViewModel.java | 1 + .../service/aidl/CateringInterfaceImpl.java | 12 +- 17 files changed, 392 insertions(+), 28 deletions(-) create mode 100644 common/src/main/java/com/wmdigit/common/utils/StopWatch.java diff --git a/app/build.gradle b/app/build.gradle index dd33c7f..fd5e058 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,8 +3,8 @@ plugins { id 'org.jetbrains.kotlin.android' } -def APP_VERSION_CODE = 1000201 -def APP_VERSION_NAME = "1.0.2.1" +def APP_VERSION_CODE = 1000202 +def APP_VERSION_NAME = "1.0.2.2" android { namespace 'com.wmdigit.cateringdetect' diff --git a/camera/build.gradle b/camera/build.gradle index 6b9487c..465e6ea 100644 --- a/camera/build.gradle +++ b/camera/build.gradle @@ -36,6 +36,7 @@ dependencies { implementation project(path: ":common") implementation project(path: ":data-local") + implementation project(path: ":opencv") // CameraX core library using the camera2 implementation def camerax_version = "1.3.0-beta01" diff --git a/camera/src/main/java/com/jiangdg/uvc/USBCameraHelper.java b/camera/src/main/java/com/jiangdg/uvc/USBCameraHelper.java index 847dd94..eedf1b9 100644 --- a/camera/src/main/java/com/jiangdg/uvc/USBCameraHelper.java +++ b/camera/src/main/java/com/jiangdg/uvc/USBCameraHelper.java @@ -4,7 +4,10 @@ package com.jiangdg.uvc; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.ImageFormat; +import android.graphics.Rect; import android.graphics.SurfaceTexture; +import android.graphics.YuvImage; import android.hardware.usb.UsbDevice; import android.opengl.GLES11Ext; import android.os.Handler; @@ -20,6 +23,7 @@ import com.wmdigit.common.utils.NV21ToBitmap; import com.wmdigit.common.utils.YuvToRgbConverter; import com.wmdigit.data.mmkv.repository.CameraLocalRepository; +import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; /** @@ -62,16 +66,6 @@ public class USBCameraHelper { @Override public void onFrame(ByteBuffer buffer) { synchronized (mSyncFrame) { - /*try { - if (isFirstFrame) { - isFirstFrame = false; - if (onCameraOpenListener != null) { - onCameraOpenListener.onSuccess(); - } - } - } catch (Exception e) { - onCameraOpenListener = null; - }*/ count ++; int len = buffer.capacity(); frame = new byte[len]; @@ -79,14 +73,34 @@ public class USBCameraHelper { if (count % frameInterval == 0){ count = 0; if (onImageAnalyzeListener != null){ + onImageAnalyzeListener.onAnalyzed(encodeYuvToJpeg(frame, 640, 480, ImageFormat.NV21)); // onImageAnalyzeListener.onAnalyzed(nv21ToBitmap.nv21ToBitmap(frame, 640, 480)); - onImageAnalyzeListener.onAnalyzed(BitmapFactory.decodeByteArray(frame, 0, frame.length)); +// onImageAnalyzeListener.onAnalyzed(BitmapFactory.decodeByteArray(frame, 0, frame.length)); } } } } }; + private Bitmap encodeYuvToJpeg(byte[] yuvData, int width, int height, int format){ + try { + // å°†YUVæ•°æ®è½¬æ¢ä¸ºBitmap + YuvImage yuvImage = new YuvImage(yuvData, format, width, height, null); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + yuvImage.compressToJpeg(new Rect(0, 0, width, height), 75, out); + byte[] imageBytes = out.toByteArray(); + return BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); +// // 使用OpenCV进一æ¥åŽ‹ç¼© +// Mat mat = Imgcodecs.imdecode(new MatOfByte(imageBytes), Imgcodecs.IMREAD_UNCHANGED); +// MatOfByte mob = new MatOfByte(); +// Imgcodecs.imencode(".jpg", mat, mob); +// return mob.toArray(); + } catch (Exception e) { + XLog.e(e); + return null; + } + } + public static USBCameraHelper getInstance(Context context) { if (instance == null) { synchronized (USBCameraHelper.class) { @@ -98,10 +112,6 @@ public class USBCameraHelper { return instance; } -/* public void setOnCameraOpenListener(OnCameraOpenListener onListener) { - onCameraOpenListener = onListener; - }*/ - public USBCameraHelper(Context context) { mContext = context; if (mWorkerHandler == null) { @@ -148,17 +158,17 @@ public class USBCameraHelper { final UVCCamera camera = new UVCCamera(); camera.open(ctrlBlock); try { - camera.setPreviewSize(640, 480, UVCCamera.FRAME_FORMAT_MJPEG); + camera.setPreviewSize(640, 480, UVCCamera.PIXEL_FORMAT_YUV420SP); } catch (final IllegalArgumentException e) { // fallback to YUV mode try { - camera.setPreviewSize(640, 480, UVCCamera.FRAME_FORMAT_MJPEG); + camera.setPreviewSize(640, 480,UVCCamera.PIXEL_FORMAT_YUV420SP); } catch (final IllegalArgumentException e1) { camera.destroy(); return; } } - camera.setFrameCallback(iFrameCallback, UVCCamera.FRAME_FORMAT_MJPEG); + camera.setFrameCallback(iFrameCallback, UVCCamera.PIXEL_FORMAT_YUV420SP); if (mSurfaceTexture == null) { mSurfaceTexture = new SurfaceTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES); } diff --git a/camera/src/main/jniLibs/armeabi-v7a/libUVCCamera.so b/camera/src/main/jniLibs/armeabi-v7a/libUVCCamera.so index d24bea07964855057850b2f72d5ac8733005f1e8..c5589c72593b5a7ed9de26fde7428666c130ef3a 100644 GIT binary patch delta 41798 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 M&350sJUA=xA5B*oYybcN delta 41744 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 WAGtW);rG%PaTV<T@f!azzW)Nkn5{qn diff --git a/camera/src/main/jniLibs/armeabi-v7a/libjpeg-turbo1500.so b/camera/src/main/jniLibs/armeabi-v7a/libjpeg-turbo1500.so index bd947432916b18cb272540c59c01ab4e49c76373..5bc114a983864330d147cc400ff793ef12d0fbea 100644 GIT binary patch delta 51 zcmZ3oPI$>W;SF~fMP#R%t)A(s%k;UEMN{{izmo~yuC2`<7~4NEf-n;hGjIRE$YOF8 E03!?(u>b%7 delta 51 zcmZ3oPI$>W;SF~fMdbD^TIO-z^SSEJDQnzoEgrcackgNbz}WtQ5rmn5n0fmLMi!H+ E0D_?xn*aa+ diff --git a/camera/src/main/jniLibs/armeabi-v7a/libusb100.so b/camera/src/main/jniLibs/armeabi-v7a/libusb100.so index 894d9b2c448e02f42a106c65599118b15bab602d..611e2047c004d08554c108c7ade7b4af33925775 100644 GIT binary patch delta 39 xcmV+?0NDSC%?60g2C&=#6o-tOiC6cm`2_1bP<;GHL)5&Rk%RC7x9|Z0n52z%6cPXc delta 39 xcmV+?0NDSC%?60g2C&=#6zV$M_uYBoQ9wDu4_7f<G6XeYScC8Zx9|Z0n51!v5rY5# diff --git a/camera/src/main/jniLibs/armeabi-v7a/libuvc.so b/camera/src/main/jniLibs/armeabi-v7a/libuvc.so index a8b633de832d137dec3b22e8fb7dc8d5db3d0f5e..5f1a42dcd2fb016266a5e6d9d98a96393f8e8389 100644 GIT binary patch delta 39 xcmV+?0NDTVt_JX~2C&=#6n8o6W&M*QYr9<Eg>pOKb9XEw_=E5Px9|Z0fR&Lc6LSCn delta 39 xcmV+?0NDTVt_JX~2C&=#6e53Z(tiEetnvaWov)`}Q0~$1LWA%Dx9|Z0fR&=R6sZ6J diff --git a/common/src/main/java/com/wmdigit/common/utils/StopWatch.java b/common/src/main/java/com/wmdigit/common/utils/StopWatch.java new file mode 100644 index 0000000..7a9a008 --- /dev/null +++ b/common/src/main/java/com/wmdigit/common/utils/StopWatch.java @@ -0,0 +1,303 @@ +package com.wmdigit.common.utils; + +import java.text.NumberFormat; +import java.util.LinkedList; +import java.util.List; + +/** + * Simple stop watch, allowing for timing of a number of tasks, + * exposing total running time and running time for each named task. + * + * <p>Conceals use of {@code System.currentTimeMillis()}, improving the + * readability of application code and reducing the likelihood of calculation errors. + * + * <p>Note that this object is not designed to be thread-safe and does not + * use synchronization. + * + * <p>This class is normally used to verify performance during proof-of-concepts + * and in development, rather than as part of production applications. + * + * @author Rod Johnson + * @author Juergen Hoeller + * @author Sam Brannen + * @since May 2, 2001 + */ +public class StopWatch { + + /** + * Identifier of this stop watch. + * Handy when we have output from multiple stop watches + * and need to distinguish between them in log or console output. + */ + private final String id; + + private boolean keepTaskList = true; + + private final List<TaskInfo> taskList = new LinkedList<TaskInfo>(); + + /** + * Start time of the current task + */ + private long startTimeMillis; + + /** + * Is the stop watch currently running? + */ + private boolean running; + + /** + * Name of the current task + */ + private String currentTaskName; + + private TaskInfo lastTaskInfo; + + private int taskCount; + + /** + * Total running time + */ + private long totalTimeMillis; + + + /** + * Construct a new stop watch. Does not start any task. + */ + public StopWatch() { + this.id = ""; + } + + /** + * Construct a new stop watch with the given id. + * Does not start any task. + * + * @param id identifier for this stop watch. + * Handy when we have output from multiple stop watches + * and need to distinguish between them. + */ + public StopWatch(String id) { + this.id = id; + } + + + /** + * Determine whether the TaskInfo array is built over time. Set this to + * "false" when using a StopWatch for millions of intervals, or the task + * info structure will consume excessive memory. Default is "true". + */ + public void setKeepTaskList(boolean keepTaskList) { + this.keepTaskList = keepTaskList; + } + + + /** + * Start an unnamed task. The results are undefined if {@link #stop()} + * or timing methods are called without invoking this method. + * + * @see #stop() + */ + public void start() throws IllegalStateException { + start(""); + } + + /** + * Start a named task. The results are undefined if {@link #stop()} + * or timing methods are called without invoking this method. + * + * @param taskName the name of the task to start + * @see #stop() + */ + public void start(String taskName) throws IllegalStateException { + if (this.running) { + throw new IllegalStateException("Can't start StopWatch: it's already running"); + } + this.startTimeMillis = System.currentTimeMillis(); + this.running = true; + this.currentTaskName = taskName; + } + + /** + * Stop the current task. The results are undefined if timing + * methods are called without invoking at least one pair + * {@link #start()} / {@link #stop()} methods. + * + * @see #start() + */ + public void stop() throws IllegalStateException { + if (!this.running) { + throw new IllegalStateException("Can't stop StopWatch: it's not running"); + } + long lastTime = System.currentTimeMillis() - this.startTimeMillis; + this.totalTimeMillis += lastTime; + this.lastTaskInfo = new TaskInfo(this.currentTaskName, lastTime); + if (this.keepTaskList) { + this.taskList.add(lastTaskInfo); + } + ++this.taskCount; + this.running = false; + this.currentTaskName = null; + } + + /** + * Return whether the stop watch is currently running. + */ + public boolean isRunning() { + return this.running; + } + + + /** + * Return the time taken by the last task. + */ + public long getLastTaskTimeMillis() throws IllegalStateException { + if (this.lastTaskInfo == null) { + throw new IllegalStateException("No tasks run: can't get last task interval"); + } + return this.lastTaskInfo.getTimeMillis(); + } + + /** + * Return the name of the last task. + */ + public String getLastTaskName() throws IllegalStateException { + if (this.lastTaskInfo == null) { + throw new IllegalStateException("No tasks run: can't get last task name"); + } + return this.lastTaskInfo.getTaskName(); + } + + /** + * Return the last task as a TaskInfo object. + */ + public TaskInfo getLastTaskInfo() throws IllegalStateException { + if (this.lastTaskInfo == null) { + throw new IllegalStateException("No tasks run: can't get last task info"); + } + return this.lastTaskInfo; + } + + + /** + * Return the total time in milliseconds for all tasks. + */ + public long getTotalTimeMillis() { + return this.totalTimeMillis; + } + + /** + * Return the total time in seconds for all tasks. + */ + public double getTotalTimeSeconds() { + return this.totalTimeMillis / 1000.0; + } + + /** + * Return the number of tasks timed. + */ + public int getTaskCount() { + return this.taskCount; + } + + /** + * Return an array of the data for tasks performed. + */ + public TaskInfo[] getTaskInfo() { + if (!this.keepTaskList) { + throw new UnsupportedOperationException("Task info is not being kept!"); + } + return this.taskList.toArray(new TaskInfo[this.taskList.size()]); + } + + + /** + * Return a short description of the total running time. + */ + public String shortSummary() { + return "StopWatch '" + this.id + "': running time (millis) = " + getTotalTimeMillis(); + } + + /** + * Return a string with a table describing all tasks performed. + * For custom reporting, call getTaskInfo() and use the task info directly. + */ + public String prettyPrint() { + StringBuilder sb = new StringBuilder(shortSummary()); + sb.append('\n'); + if (!this.keepTaskList) { + sb.append("No task info kept"); + } else { + sb.append("-----------------------------------------\n"); + sb.append("ms % Task name\n"); + sb.append("-----------------------------------------\n"); + NumberFormat nf = NumberFormat.getNumberInstance(); + nf.setMinimumIntegerDigits(5); + nf.setGroupingUsed(false); + NumberFormat pf = NumberFormat.getPercentInstance(); + pf.setMinimumIntegerDigits(3); + pf.setGroupingUsed(false); + for (TaskInfo task : getTaskInfo()) { + sb.append(nf.format(task.getTimeMillis())).append(" "); + sb.append(pf.format(task.getTimeSeconds() / getTotalTimeSeconds())).append(" "); + sb.append(task.getTaskName()).append("\n"); + } + } + return sb.toString(); + } + + /** + * Return an informative string describing all tasks performed + * For custom reporting, call {@code getTaskInfo()} and use the task info directly. + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(shortSummary()); + if (this.keepTaskList) { + for (TaskInfo task : getTaskInfo()) { + sb.append("; [").append(task.getTaskName()).append("] took ").append(task.getTimeMillis()); + long percent = Math.round((100.0 * task.getTimeSeconds()) / getTotalTimeSeconds()); + sb.append(" = ").append(percent).append("%"); + } + } else { + sb.append("; no task info kept"); + } + return sb.toString(); + } + + + /** + * Inner class to hold data about one task executed within the stop watch. + */ + public static final class TaskInfo { + + private final String taskName; + + private final long timeMillis; + + TaskInfo(String taskName, long timeMillis) { + this.taskName = taskName; + this.timeMillis = timeMillis; + } + + /** + * Return the name of this task. + */ + public String getTaskName() { + return this.taskName; + } + + /** + * Return the time in milliseconds this task took. + */ + public long getTimeMillis() { + return this.timeMillis; + } + + /** + * Return the time in seconds this task took. + */ + public double getTimeSeconds() { + return this.timeMillis / 1000.0; + } + } + +} \ No newline at end of file diff --git a/core/src/main/java/com/wmdigit/core/catering/TargetDetectionRepository.java b/core/src/main/java/com/wmdigit/core/catering/TargetDetectionRepository.java index 569475c..dbf44d9 100644 --- a/core/src/main/java/com/wmdigit/core/catering/TargetDetectionRepository.java +++ b/core/src/main/java/com/wmdigit/core/catering/TargetDetectionRepository.java @@ -9,9 +9,12 @@ import com.wmdigit.common.model.CropValueDTO; import com.wmdigit.core.catering.dish.DishDetection; import com.wmdigit.core.catering.model.TargetDetectResult; import com.wmdigit.core.catering.plate.PlateDetection; +import com.wmdigit.data.database.entity.ProductsPO; +import com.wmdigit.data.disk.repository.DiskRepository; import com.wmdigit.data.mmkv.repository.AiLocalRepository; import com.wmdigit.data.mmkv.repository.CropLocalRepository; +import java.util.ArrayList; import java.util.List; import io.reactivex.Observable; diff --git a/core/src/main/java/com/wmdigit/core/catering/dish/DishDetection.java b/core/src/main/java/com/wmdigit/core/catering/dish/DishDetection.java index c57438d..f19b29e 100644 --- a/core/src/main/java/com/wmdigit/core/catering/dish/DishDetection.java +++ b/core/src/main/java/com/wmdigit/core/catering/dish/DishDetection.java @@ -59,12 +59,10 @@ public class DishDetection implements TargetDetection { @Override public TargetDetectResult processImage(Bitmap bitmap) { synchronized (syncLock) { - long startTime = System.currentTimeMillis(); TargetDetectResult result = process(bitmap); if (result == null){ return null; } - XLog.i("推ç†è€—时:" + (System.currentTimeMillis() - startTime) + "ms"); return result; } } diff --git a/core/src/main/java/com/wmdigit/core/catering/plate/PlateDetection.java b/core/src/main/java/com/wmdigit/core/catering/plate/PlateDetection.java index d43aa4a..59c7afc 100644 --- a/core/src/main/java/com/wmdigit/core/catering/plate/PlateDetection.java +++ b/core/src/main/java/com/wmdigit/core/catering/plate/PlateDetection.java @@ -63,11 +63,8 @@ public class PlateDetection implements TargetDetection { @Override public TargetDetectResult processImage(Bitmap bitmap) { synchronized (syncLock) { - long startTime = System.currentTimeMillis(); - TargetDetectResult result = process(bitmap); - XLog.i("推ç†è€—时:" + (System.currentTimeMillis() - startTime) + "ms" ); - return result; + return process(bitmap); } } diff --git a/core/src/main/java/com/wmdigit/core/hnsw/HnswRepository.java b/core/src/main/java/com/wmdigit/core/hnsw/HnswRepository.java index f875a21..9be036a 100644 --- a/core/src/main/java/com/wmdigit/core/hnsw/HnswRepository.java +++ b/core/src/main/java/com/wmdigit/core/hnsw/HnswRepository.java @@ -115,7 +115,7 @@ public class HnswRepository { XLog.i("索引库未完æˆåˆå§‹åŒ–"); return null; } - String productCode = hnsw.retrieve(feature, 0.8f); + String productCode = hnsw.retrieve(feature, 0.77f); if (TextUtils.isEmpty(productCode)){ return null; } diff --git a/core/src/main/java/com/wmdigit/core/opencv/OpencvRepository.java b/core/src/main/java/com/wmdigit/core/opencv/OpencvRepository.java index 3143163..5d27f00 100644 --- a/core/src/main/java/com/wmdigit/core/opencv/OpencvRepository.java +++ b/core/src/main/java/com/wmdigit/core/opencv/OpencvRepository.java @@ -1,9 +1,12 @@ package com.wmdigit.core.opencv; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.YuvImage; import com.elvishew.xlog.XLog; import com.wmdigit.common.font.TypefaceHelper; @@ -16,10 +19,13 @@ import com.wmdigit.data.database.entity.ProductsPO; import org.opencv.android.OpenCVLoader; import org.opencv.android.Utils; import org.opencv.core.Mat; +import org.opencv.core.MatOfByte; import org.opencv.core.Point; import org.opencv.core.Scalar; +import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.List; @@ -139,4 +145,24 @@ public class OpencvRepository { } return bitmapCopy; } + + public Bitmap encodeYuvToJpeg(byte[] yuvData, int width, int height, int format){ + try { + // å°†YUVæ•°æ®è½¬æ¢ä¸ºBitmap + YuvImage yuvImage = new YuvImage(yuvData, format, width, height, null); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + yuvImage.compressToJpeg(new Rect(0, 0, width, height), 90, out); + byte[] imageBytes = out.toByteArray(); + return BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); +// // 使用OpenCV进一æ¥åŽ‹ç¼© +// Mat mat = Imgcodecs.imdecode(new MatOfByte(imageBytes), Imgcodecs.IMREAD_UNCHANGED); +// MatOfByte mob = new MatOfByte(); +// Imgcodecs.imencode(".jpg", mat, mob); +// +// return mob.toArray(); + } catch (Exception e) { + XLog.e(e); + return null; + } + } } diff --git a/history.txt b/history.txt index a0a78ae..4ff12a1 100644 --- a/history.txt +++ b/history.txt @@ -21,6 +21,10 @@ v1.0.2.1 2025/04/22 1.特å¾è¡¨å¢žåŠ å—æ®µè®°å½•图片地å€ï¼Œæ•°æ®åº“版本 4.å¢žåŠ æœ¬åœ°å›¾ç‰‡å¦ä¹ 5.å¢žåŠ LOGO 6.ä¿®å¤å®‰è£…APKåŽå‡ºçŽ°ä¸¤ä¸ªå›¾æ ‡çš„é—®é¢˜ +v1.0.2.2 2025/04/25 1.UvcCamera从mjpeg改为yuv + 2.å¢žåŠ æŽ¨ç†æ—¶çš„æ—¥å¿— + 3.修改索引库默认阈值为0.77 + todo å¢žåŠ å¦ä¹ è®°å½•ç®¡ç†æ¨¡å— todo 替æ¢LOGO diff --git a/module-setting/src/main/java/com/wmdigit/setting/viewmodel/DataLearningViewModel.java b/module-setting/src/main/java/com/wmdigit/setting/viewmodel/DataLearningViewModel.java index b650425..0c50527 100644 --- a/module-setting/src/main/java/com/wmdigit/setting/viewmodel/DataLearningViewModel.java +++ b/module-setting/src/main/java/com/wmdigit/setting/viewmodel/DataLearningViewModel.java @@ -17,6 +17,7 @@ import com.wmdigit.common.model.CropValueDTO; import com.wmdigit.common.model.IdentifyRecordDTO; import com.wmdigit.common.model.ProductsVO; import com.wmdigit.common.utils.ParcelHelper; +import com.wmdigit.common.utils.StopWatch; import com.wmdigit.core.catering.TargetDetectionRepository; import com.wmdigit.core.catering.model.TargetDetectResult; import com.wmdigit.core.hnsw.HnswRepository; @@ -255,11 +256,17 @@ public class DataLearningViewModel extends BaseViewModel { // 从当å‰å†…å˜ä¸æ‹·è´å‡ºå›¾ç‰‡ bitmap = ParcelHelper.copy(frame.getValue()); } + StopWatch stopWatch = new StopWatch(); + stopWatch.start("å›¾åƒæŽ¨ç†"); // å›¾ç‰‡æŽ¨ç† detectResult = TargetDetectionRepository.getInstance().processImage(bitmap, true); if (detectResult == null || detectResult.getRectArray() == null) { + stopWatch.stop(); + XLog.i(stopWatch.prettyPrint()); return; } + stopWatch.stop(); + stopWatch.start("æ•°æ®æ£€ç´¢"); // æ ¹æ®æŽ¨ç†ç»“果去索引库查询 List<ProductsPO> result = new ArrayList<>(); for (int i = 0; i < detectResult.getFeatures().length; i++) { @@ -268,8 +275,12 @@ public class DataLearningViewModel extends BaseViewModel { result.add(product); } detectResult.setProducts(result); + stopWatch.stop(); + stopWatch.start("图åƒç»˜åˆ¶"); // 在图片上绘制框和商å“å drawOnBitmap(detectResult); + stopWatch.stop(); + XLog.i(stopWatch.prettyPrint()); } } diff --git a/module-setting/src/main/java/com/wmdigit/setting/viewmodel/DataManagerViewModel.java b/module-setting/src/main/java/com/wmdigit/setting/viewmodel/DataManagerViewModel.java index d715a95..bb937d3 100644 --- a/module-setting/src/main/java/com/wmdigit/setting/viewmodel/DataManagerViewModel.java +++ b/module-setting/src/main/java/com/wmdigit/setting/viewmodel/DataManagerViewModel.java @@ -103,6 +103,7 @@ public class DataManagerViewModel extends BaseViewModel { // å¦ä¹ 失败,éšè—åŠ è½½ä¸ä¿¡æ¯å¹¶æç¤ºç”¨æˆ·å¤±è´¥ loadingProgressText.postValue(""); toastMessage.postValue(getApplication().getString(R.string.learn_local_image_fail)); + XLog.e(error); }) ); } diff --git a/service/src/main/java/com/wmdigit/service/aidl/CateringInterfaceImpl.java b/service/src/main/java/com/wmdigit/service/aidl/CateringInterfaceImpl.java index 05045a8..b6b9609 100644 --- a/service/src/main/java/com/wmdigit/service/aidl/CateringInterfaceImpl.java +++ b/service/src/main/java/com/wmdigit/service/aidl/CateringInterfaceImpl.java @@ -19,6 +19,7 @@ import com.wmdigit.common.model.ProductsDTO; import com.wmdigit.common.utils.BitmapUtils; import com.wmdigit.common.utils.DateUtils; import com.wmdigit.common.utils.ParcelHelper; +import com.wmdigit.common.utils.StopWatch; import com.wmdigit.core.catering.TargetDetectionRepository; import com.wmdigit.core.catering.model.TargetDetectResult; import com.wmdigit.core.hnsw.HnswRepository; @@ -377,14 +378,19 @@ public class CateringInterfaceImpl extends ICateringInterface.Stub{ isUpload = true; bitmap = ParcelHelper.copy(bitmapCopy); } + StopWatch stopWatch = new StopWatch(); + stopWatch.start("å›¾åƒæŽ¨ç†"); // 对图åƒè¿›è¡Œå¤„ç†ï¼Œå°è¯•æ£€æµ‹ç›®æ ‡ targetDetectResult = TargetDetectionRepository.getInstance().processImage(bitmap, true); // 如果没有检测到任何矩形对象,直接返回 if (targetDetectResult.getRectArray() == null) { + stopWatch.stop(); + XLog.i(stopWatch.prettyPrint()); return detectResult; } + stopWatch.stop(); + stopWatch.start("æ•°æ®æ£€ç´¢"); List<ProductsPO> productsPOList = new ArrayList<>(); - // æ ¹æ®æ£€æµ‹åˆ°çš„ç‰¹å¾æ£€ç´¢äº§å“ï¼Œå¹¶å°†ç»“æžœæ·»åŠ åˆ°åˆ—è¡¨ä¸ for (int i = 0; i < targetDetectResult.getFeatures().length; i++) { ProductsPO product = HnswRepository.getInstance().retrieveByFeature(targetDetectResult.getFeatures()[i]); @@ -434,11 +440,15 @@ public class CateringInterfaceImpl extends ICateringInterface.Stub{ XLog.e("å›¾ç‰‡è®°å½•ä¸Šä¼ å¤±è´¥"); }); } + stopWatch.stop(); // 如果需è¦ç”ŸæˆBitmapï¼Œè¿›è¡Œç›¸å…³å¤„ç† if (generateBitmap) { + stopWatch.start("绘制结果"); // 在Bitmap上绘制检测结果 detectResult.setBitmap(OpencvRepository.getInstance().drawDetectResultOnBitmap(targetDetectResult)); + stopWatch.stop(); } + XLog.i(stopWatch.prettyPrint()); return detectResult; } } -- 2.18.1