Browse Source

识别判断 needKill

suochencheng 6 years ago
parent
commit
93d0a47b55

+ 2 - 1
src/main/java/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.java

@@ -66,10 +66,11 @@ public class VideoRecognitionServiceImpl implements VideoRecognitionService {
         executor.execute(() -> {
             try {
                 playerInfoService.updatePlayerInfo(playerInfo);
-                VideoProcessResult result = videoProcessTool.processVideo(playerInfo.getVideo(), 0);
+                VideoProcessResult result = videoProcessTool.getKill3Time(playerInfo.getVideo(), 0,playerInfo.getNeedkill());
                 if (result != null && result.getKill3time() != null) {
                     playerInfo.setImage(result.getImage());
                     playerInfo.setKill3time(result.getKill3time());
+                    playerInfo.setKillNumber(result.getKillNum());
                     playerInfo.setStatusFlag(AppConstant.PlayerStatus.PROCESSED);
                 } else {
                     playerInfo.setStatusFlag(AppConstant.PlayerStatus.PROCESSED_FAIL);

+ 19 - 16
src/main/java/com/izouma/awesomeadmin/util/VideoProcessToolNew.java

@@ -37,7 +37,7 @@ import static org.bytedeco.javacpp.tesseract.PSM_SINGLE_LINE;
 
 public class VideoProcessToolNew {
     private OSSFileService ossFileService = new OSSFileService();
-    public  String         imgPrefix      = "/tmp/";
+    public String imgPrefix = "/tmp/";
 
     public VideoProcessResult processVideo(String path, int frameSkip) throws FrameGrabber.Exception {
         SVM svm = SVM.load(GetResource.class.getClassLoader().getResource("trainneddata/pubg.xml").getPath());
@@ -84,9 +84,9 @@ public class VideoProcessToolNew {
                         }
                         filtered.release();
                         if (result.getRank() != null
-                            && result.getTotal() != null
-                            && result.getLiveTime() != null
-                            && result.getScore() != null) {
+                                && result.getTotal() != null
+                                && result.getLiveTime() != null
+                                && result.getScore() != null) {
                             try {
                                 double score = result.getScore();
                                 double total = result.getTotal();
@@ -118,7 +118,7 @@ public class VideoProcessToolNew {
         return result.isValid() ? result : null;
     }
 
-    public VideoProcessResult getKill3Time(String path, int frameSkip) throws FrameGrabber.Exception {
+    public VideoProcessResult getKill3Time(String path, int frameSkip, int needKill) throws FrameGrabber.Exception {
         SVM svm = SVM.load(GetResource.class.getClassLoader().getResource("trainneddata/pubg.xml").getPath());
         VideoProcessResult result = new VideoProcessResult();
         OpenCVFrameConverter.ToMat converterToMat = new OpenCVFrameConverter.ToMat();
@@ -146,11 +146,14 @@ public class VideoProcessToolNew {
                     Mat frame = removeBlackBarAndRotate(converterToMat.convert(vFrame));
                     Mat filtered = new Mat();
                     bilateralFilter(frame, filtered, 25, 25 * 2, 25 / 2f);
-                    if (getKillNum(filtered) >= 3) {
+
+                    int killNumber = getKillNum(filtered);
+                    if (killNumber >= needKill) {
                         String filename = "/var/samples/" + DateFormatUtils.format(new Date(), "yyyyMMddHHmmss") + RandomStringUtils.randomNumeric(8) + ".jpg";
                         org.bytedeco.javacpp.opencv_imgcodecs.imwrite(filename, frame);
                         result.setImage(uploadImage(frame));
                         result.setKill3time(ts);
+                        result.setKillNum(killNumber);
                         break;
                     }
                     frame.release();
@@ -239,8 +242,8 @@ public class VideoProcessToolNew {
                     dv = 238 - v;
                 }
                 int gray = (int) (255 - Math.min(255, dh * 50)
-                                  - Math.min(255, ds * 3)
-                                  - Math.min(255, dv * 10));
+                        - Math.min(255, ds * 3)
+                        - Math.min(255, dv * 10));
                 gray = gray < 0 ? 0 : gray;
                 // int gray = (h == 26 && Math.abs(s - S) < 50) ? 255 : 0;
                 filteredIndexer.put(i, j, gray);
@@ -468,7 +471,7 @@ public class VideoProcessToolNew {
         filtered.release();
         roi.release();
         if (Pattern.matches("((^([0-9]+[.][0-9]*))|(^\\d{1,2}))分钟", map.get("参赛时间")) &&
-            Pattern.matches("((^([0-9]+[.][0-9]+)$)|(^\\d{1,2})$)", map.get("评分"))) {
+                Pattern.matches("((^([0-9]+[.][0-9]+)$)|(^\\d{1,2})$)", map.get("评分"))) {
             try {
                 double score = Double.parseDouble(map.get("评分"));
                 double time = Double.parseDouble(map.get("参赛时间").replace("分钟", ""));
@@ -571,9 +574,9 @@ public class VideoProcessToolNew {
         for (Rect rect : rects) {
             int rowStart = (img.rows() - rect.height()) / 2;
             filtered2.rowRange(new Range(rect.y(), rect.y() + rect.height()))
-                     .colRange(new Range(rect.x(), rect.x() + rect.width()))
-                     .copyTo(img.rowRange(rowStart, rowStart + rect.height())
-                                .colRange(colStart, colStart + rect.width()));
+                    .colRange(new Range(rect.x(), rect.x() + rect.width()))
+                    .copyTo(img.rowRange(rowStart, rowStart + rect.height())
+                            .colRange(colStart, colStart + rect.width()));
             colStart += rect.width();
         }
         filtered2.release();
@@ -659,16 +662,16 @@ public class VideoProcessToolNew {
 
     private void dilate(Mat src, Mat dst, float dilation_size) {
         Mat dilationElement = getStructuringElement(MORPH_ELLIPSE,
-                                                    new Size((int) (2 * dilation_size + 1), (int) (2 * dilation_size + 1)),
-                                                    new Point((int) dilation_size, (int) dilation_size));
+                new Size((int) (2 * dilation_size + 1), (int) (2 * dilation_size + 1)),
+                new Point((int) dilation_size, (int) dilation_size));
         opencv_imgproc.dilate(src, dst, dilationElement);
         dilationElement.release();
     }
 
     private void erode(Mat src, Mat dst, float erosion_size) {
         Mat erodeElement = getStructuringElement(MORPH_RECT,
-                                                 new Size((int) (2 * erosion_size + 1), (int) (2 * erosion_size + 1)),
-                                                 new Point((int) erosion_size, (int) erosion_size));
+                new Size((int) (2 * erosion_size + 1), (int) (2 * erosion_size + 1)),
+                new Point((int) erosion_size, (int) erosion_size));
         opencv_imgproc.erode(src, dst, erodeElement);
         erodeElement.release();
     }

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

@@ -28,7 +28,7 @@ public class VideoProcessTest {
     public void testVideoNew() {
         try {
             long ts = System.currentTimeMillis();
-            VideoProcessResult result = videoProcessToolNew.getKill3Time("/Users/drew/Downloads/2019-08-12-05-26-16-6j9l2tpm.mp4", 0);
+            VideoProcessResult result = videoProcessToolNew.getKill3Time("/Users/drew/Downloads/2019-08-12-05-26-16-6j9l2tpm.mp4", 0, 3);
             System.out.println(result);
         } catch (FrameGrabber.Exception e) {
             e.printStackTrace();