Browse Source

提高识别率

x1ongzhu 6 years ago
parent
commit
51446db7cb

+ 27 - 5
src/main/java/com/izouma/awesomeadmin/util/VideoProcessToolNew.java

@@ -395,8 +395,22 @@ public class VideoProcessToolNew {
         return null;
     }
 
-    public Mat bgrFilter(Mat src, int b, int g, int r) {
+    public Mat timeFilter(Mat src) {
+        int b = 27;
+        int g = 145;
+        int r = 211;
+
+        int hmin = 28;
+        int hmax = 28;
+        int smin = 145;
+        int smax = 145;
+        int vmin = 160;
+        int vmax = 160;
+
         Mat result = new Mat(src.rows(), src.cols(), CV_8UC1, new Scalar(0));
+        Mat hsvImg = new Mat();
+        cvtColor(src, hsvImg, COLOR_BGR2HSV);
+        UByteRawIndexer hsvIndexer = hsvImg.createIndexer();
         UByteRawIndexer srcIndexer = src.createIndexer();
         UByteRawIndexer resultIndexer = result.createIndexer();
         for (int i = 0; i < src.rows(); i++) {
@@ -405,7 +419,16 @@ public class VideoProcessToolNew {
                 int dg = Math.abs(srcIndexer.get(i, j, 1) - g);
                 int dr = Math.abs(srcIndexer.get(i, j, 2) - r);
 
-                int gray = 255 - (db + dg + dr);
+                int h = hsvIndexer.get(i, j, 0);
+                int s = hsvIndexer.get(i, j, 1);
+                int v = hsvIndexer.get(i, j, 2);
+
+                int dh = h > hmax ? (h - hmax) : (h < hmin ? (hmin - h) : 0);
+                int ds = s > smax ? (s - smax) : (s < smin ? (smin - s) : 0);
+                int dv = v > vmax ? (v - vmax) : (v < vmin ? (vmin - v) : 0);
+
+                int gray = 255 - (db * 0 + dg * 3 + dr * 2);
+                // int gray = 255 - dh * 2 - ds * 2 - dv* 2;
                 if (gray < 0) gray = 0;
                 if (gray > 255) gray = 255;
                 gray *= 1.2;
@@ -413,14 +436,13 @@ public class VideoProcessToolNew {
                 resultIndexer.put(i, j, gray);
             }
         }
+        hsvImg.release();
+        hsvIndexer.release();
         srcIndexer.release();
         resultIndexer.release();
         return result;
     }
 
-    public Mat timeFilter(Mat src) {
-        return bgrFilter(src, 27, 129, 243);
-    }
 
     private String doOCR(Mat img) {
         return doOCR(img, "pubg");

BIN
src/main/resources/trainneddata/pubg.traineddata


+ 14 - 1
src/test/java/VideoProcessTest.java

@@ -1,4 +1,5 @@
 import com.izouma.awesomeadmin.util.VideoProcessToolNew;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.bytedeco.javacpp.opencv_core;
 import org.bytedeco.javacpp.opencv_ml;
 import org.bytedeco.javacv.FrameGrabber;
@@ -7,6 +8,9 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import static org.bytedeco.javacpp.opencv_core.Mat;
@@ -75,8 +79,17 @@ public class VideoProcessTest {
 
     @Test
     public void testStatistics() {
-        Mat img = getTestImg("/Users/drew/Desktop/matched.jpg");
+        Mat img = getTestImg("/Users/drew/Desktop/time.jpg");
         Map<String, String> map = videoProcessToolNew.getStatistics(img);
         System.out.println(map);
     }
+
+    @Test
+    public void randomStr() {
+        DecimalFormat df = new DecimalFormat("#.00");
+        List<String> list = new ArrayList<>();
+        list.add(df.format(Math.random() * 40) + (Math.random() > 0.5 ? "分钟" : ""));
+        System.out.println(df.format(Math.random() * 40));
+        RandomStringUtils.random(100, "01234567890./,第分钟");
+    }
 }