Bladeren bron

生成视频

root 2 jaren geleden
bovenliggende
commit
415e12bb9c
17 gewijzigde bestanden met toevoegingen van 129 en 64 verwijderingen
  1. 1 0
      api-common/src/main/java/api/common/util/LinuxUtil.java
  2. 2 2
      simulation-gateway/src/main/resources/bootstrap-aliyun.yaml
  3. 2 2
      simulation-oauth-client/src/main/resources/bootstrap-aliyun.yaml
  4. 2 2
      simulation-oauth-server/src/main/resources/bootstrap-aliyun.yaml
  5. 2 2
      simulation-resource-common/src/main/resources/bootstrap-aliyun.yaml
  6. 2 2
      simulation-resource-monitor/src/main/resources/bootstrap-aliyun.yaml
  7. 2 2
      simulation-resource-scene/src/main/resources/bootstrap-aliyun.yaml
  8. 19 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/feign/VideoService.java
  9. 12 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/feign/fallback/VideoServiceFallBack.java
  10. 8 2
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/ProjectService.java
  11. 2 2
      simulation-resource-scheduler/src/main/resources/bootstrap-aliyun.yaml
  12. 2 2
      simulation-resource-server/src/main/resources/bootstrap-aliyun.yaml
  13. 21 6
      simulation-resource-video/src/main/java/com/css/simulation/resource/video/controller/VideoController.java
  14. 22 22
      simulation-resource-video/src/main/java/com/css/simulation/resource/video/pojo/po/VehiclePO.java
  15. 26 14
      simulation-resource-video/src/main/java/com/css/simulation/resource/video/service/VideoService.java
  16. 2 2
      simulation-resource-video/src/main/resources/bootstrap-aliyun.yaml
  17. 2 2
      simulation-resource-video/src/main/resources/bootstrap-test.yaml

+ 1 - 0
api-common/src/main/java/api/common/util/LinuxUtil.java

@@ -9,6 +9,7 @@ import java.io.InputStream;
 @Slf4j
 public class LinuxUtil {
 
+
     public static String execute(String cmd) throws IOException {
         log.info("开始执行 linux 命令:" + cmd);
         Runtime run = Runtime.getRuntime();

+ 2 - 2
simulation-gateway/src/main/resources/bootstrap-aliyun.yaml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
         file-extension: yaml

+ 2 - 2
simulation-oauth-client/src/main/resources/bootstrap-aliyun.yaml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
         file-extension: yaml

+ 2 - 2
simulation-oauth-server/src/main/resources/bootstrap-aliyun.yaml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
         file-extension: yaml

+ 2 - 2
simulation-resource-common/src/main/resources/bootstrap-aliyun.yaml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
         file-extension: yaml

+ 2 - 2
simulation-resource-monitor/src/main/resources/bootstrap-aliyun.yaml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
         file-extension: yaml

+ 2 - 2
simulation-resource-scene/src/main/resources/bootstrap-aliyun.yaml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
         file-extension: yaml

+ 19 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/feign/VideoService.java

@@ -0,0 +1,19 @@
+package com.css.simulation.resource.scheduler.feign;
+
+import api.common.pojo.common.ResponseBodyVO;
+import com.css.simulation.resource.scheduler.feign.fallback.VideoServiceFallBack;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(
+        contextId = "algoPlatform",
+        value = "simulation-resource-video",
+        path = "/simulation/resource/video",
+        fallback = VideoServiceFallBack.class
+)
+public interface VideoService {
+
+    @PostMapping(value = "/generate")
+    ResponseBodyVO<String> generateVideo(@RequestBody String param);
+}

+ 12 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/feign/fallback/VideoServiceFallBack.java

@@ -0,0 +1,12 @@
+package com.css.simulation.resource.scheduler.feign.fallback;
+
+import api.common.pojo.common.ResponseBodyVO;
+import com.css.simulation.resource.scheduler.feign.VideoService;
+
+
+public class VideoServiceFallBack implements VideoService {
+    @Override
+    public ResponseBodyVO<String> generateVideo(String param) {
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
+    }
+}

+ 8 - 2
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/ProjectService.java

@@ -226,8 +226,14 @@ public class ProjectService {
                 String[] splitOsgb = scenarioOsgb.split("/");
                 String osgbName = splitOsgb[splitOsgb.length - 1];
                 try {
-                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOdr, linuxTempPath + "video/" + projectId + "/" + taskId + "/" + xodrName);
-                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOdr, linuxTempPath + "video/" + projectId + "/" + taskId + "/" + osgbName);
+                    String xodrPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + xodrName;
+                    String xodrPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + xodrName;
+                    String osgbPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + osgbName;
+                    String osgbPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + osgbName;
+                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOdr, xodrPathOfLinux);
+                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOdr, osgbPathOfLinux);
+                    MinioUtil.uploadFromFile(minioClient, xodrPathOfLinux, bucketName, xodrPathOfMinio);
+                    MinioUtil.uploadFromFile(minioClient, osgbPathOfLinux, bucketName, osgbPathOfMinio);
                 } catch (IOException | ServerException | InsufficientDataException | ErrorResponseException |
                          NoSuchAlgorithmException | InvalidKeyException | InvalidResponseException |
                          XmlParserException | InternalException e) {

+ 2 - 2
simulation-resource-scheduler/src/main/resources/bootstrap-aliyun.yaml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
         file-extension: yaml

+ 2 - 2
simulation-resource-server/src/main/resources/bootstrap-aliyun.yaml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
         file-extension: yaml

+ 21 - 6
simulation-resource-video/src/main/java/com/css/simulation/resource/video/controller/VideoController.java

@@ -1,24 +1,39 @@
 package com.css.simulation.resource.video.controller;
 
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.util.LinuxUtil;
+import com.css.simulation.resource.video.service.VideoService;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestPart;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
 
 @RestController
-@RequestMapping("/video")
 public class VideoController {
 
+    @Resource
+    VideoService videoService;
+
 
     /**
      * 接受 xosc 文件
-     * @param file
      */
     @PostMapping(value = "/generate", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
-    public void generateVideo(@RequestPart("file") MultipartFile file) {
+    public ResponseBodyVO<String> generateVideo(String projectId, String projectType, String taskId) {
+        return videoService.generateVideo(projectId, projectType, taskId);
+    }
+
 
+    /**
+     * 接受 xosc 文件
+     */
+    @PostMapping(value = "/test", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public void testGenerateVideo() throws IOException {
+        LinuxUtil.execute("/root/simulation-cloud/esmini/build/EnvironmentSimulator/code-examples/image-capture/image-capture " +
+                "/root/simulation-cloud/esmini/resources/xosc/lane_change_crest.xosc " +
+                "/root/simulation-cloud/esmini/test/screenshot");
     }
 
 

+ 22 - 22
simulation-resource-video/src/main/java/com/css/simulation/resource/video/pojo/po/VehiclePO.java

@@ -15,28 +15,28 @@ public class VehiclePO {
 
     /**
      * 车辆模型
-     * 		"model": {
-     * 			"model_label": "AudiA6_10"
-     *                },
-     "dynamics": {
-     "dynamics_maxspeed": 67,
-     "dynamics_enginepower": 150000,
-     "dynamics_maxdecel": 9.5,
-     "dynamics_maxsteering": 0.48,
-     "dynamics_mass": 1700,
-     "dynamics_frontsurfaceeffective": 2.2,
-     "dynamics_airdragcoefficient": 0.31,
-     "dynamics_rollingresistance": 0,
-     "dynamics_wheeldiameter": 0.684,
-     "dynamics_wheeldrive": "wheel_drive_front",
-     "dynamics_overallefficiency": 0.75,
-     "dynamics_distfront": 3.838,
-     "dynamics_distrear": 1.086,
-     "dynamics_distleft": 0.94,
-     "dynamics_distright": 0.94,
-     "dynamics_distheight": 1.444,
-     "dynamics_wheelbase": 2.91
-     },
+     * "model": {
+     * "model_label": "AudiA6_10"
+     * },
+     * "dynamics": {
+     * "dynamics_maxspeed": 67,
+     * "dynamics_enginepower": 150000,
+     * "dynamics_maxdecel": 9.5,
+     * "dynamics_maxsteering": 0.48,
+     * "dynamics_mass": 1700,
+     * "dynamics_frontsurfaceeffective": 2.2,
+     * "dynamics_airdragcoefficient": 0.31,
+     * "dynamics_rollingresistance": 0,
+     * "dynamics_wheeldiameter": 0.684,
+     * "dynamics_wheeldrive": "wheel_drive_front",
+     * "dynamics_overallefficiency": 0.75,
+     * "dynamics_distfront": 3.838,
+     * "dynamics_distrear": 1.086,
+     * "dynamics_distleft": 0.94,
+     * "dynamics_distright": 0.94,
+     * "dynamics_distheight": 1.444,
+     * "dynamics_wheelbase": 2.91
+     * },
      */
     private String modelLabel;
     private BigDecimal maxSpeed;

+ 26 - 14
simulation-resource-video/src/main/java/com/css/simulation/resource/video/service/VideoService.java

@@ -1,5 +1,6 @@
 package com.css.simulation.resource.video.service;
 
+import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.po.scene.VehicleTypePO;
 import api.common.pojo.vo.model.VehicleVO;
 import api.common.util.FileUtil;
@@ -45,7 +46,8 @@ public class VideoService {
     public static final String oldXoscName = "simulation_my0.xosc";
     public static final String newXoscName = "simulation_my05.xosc";
     public static final String oldXoscRelativePath = "xosc/simulation_my0.xosc";
-    public static final String[] csvNameArray = {"Ego.csv", "evaluation.csv"};
+    public static final String csv1Name = "Ego.csv";
+    public static final String csv2Name = "evaluation.csv";
 
     //* -------------------------------- Comment --------------------------------
     @Value("${scheduler.linux-path.temp}")
@@ -60,26 +62,35 @@ public class VideoService {
      * 生成视频
      */
     @SneakyThrows
-    public void generateVideo(String projectId, String projectType, String taskId) {
+    public ResponseBodyVO<String> generateVideo(String projectId, String projectType, String taskId) {
         //1 获取两个 csv 的目录,和 xodr 和 osgb 三个路径
-        String csvDirectoryPath = linuxTempPath + "video/" + projectId + "/" + taskId + "/";
-        String xodrPath = FileUtil.listAbsolutePathByFiletype(csvDirectoryPath, ".xodr").get(0);    // xodr 文件在创建项目时已经下载好了
-        String osgbPath = FileUtil.listAbsolutePathByFiletype(csvDirectoryPath, ".osgb").get(0);    // osgb 文件在创建项目时已经下载好了
-        //2 下载 csv 文件
-        for (String csvName : csvNameArray) {
-            MinioUtil.downloadToFile(minioClient, bucketName, projectResultPathOfMinio + projectId + "/" + taskId + "/" + csvName, csvDirectoryPath + "/" + csvName);
-        }
+        String rootDirectoryPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/";
+        String xodrPathOfMinio = rootDirectoryPathOfMinio + taskId + ".xodr";
+        String osgbPathOfMinio = rootDirectoryPathOfMinio + taskId + ".osgb";
+        String csv1PathOfMinio = rootDirectoryPathOfMinio + csv1Name;
+        String csv2PathOfMinio = rootDirectoryPathOfMinio + csv2Name;
+        String rootDirectoryPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/";
+        String xodrPathOfLinux = rootDirectoryPathOfLinux + taskId + ".xodr";
+        String osgbPathOfLinux = rootDirectoryPathOfLinux + taskId + ".osgb";
+        String csv1PathOfLinux = rootDirectoryPathOfLinux + csv1Name;
+        String csv2PathOfLinux = rootDirectoryPathOfLinux + csv2Name;
+        //2 下载 csv、xodr、osgb
+        MinioUtil.downloadToFile(minioClient, bucketName, xodrPathOfMinio, xodrPathOfLinux);
+        MinioUtil.downloadToFile(minioClient, bucketName, osgbPathOfMinio, osgbPathOfLinux);
+        MinioUtil.downloadToFile(minioClient, bucketName, csv1PathOfMinio, csv1PathOfLinux);
+        MinioUtil.downloadToFile(minioClient, bucketName, csv2PathOfMinio, csv2PathOfLinux);
+
         //3 生成 xosc 文件
-        String xoscPath = generateXosc(csvDirectoryPath, xodrPath, osgbPath, projectId, projectType);
+        String xoscPath = generateXosc(rootDirectoryPathOfLinux, xodrPathOfLinux, osgbPathOfLinux, projectId, projectType);
         //4 生成图片
-        String pictureDirectoryPath = csvDirectoryPath + "picture";
+        String pictureDirectoryPath = rootDirectoryPathOfLinux + "picture";
         FileUtil.createDirectory(pictureDirectoryPath);
-        String esminiCommand =  "/root/disk1/simulation-cloud/esmini/build/EnvironmentSimulator/code-examples/image-capture/image-capture "
+        String esminiCommand = "/root/disk1/simulation-cloud/esmini/build/EnvironmentSimulator/code-examples/image-capture/image-capture "
                 + xoscPath + " " + pictureDirectoryPath + "/screenshot";
         String esminiResult = LinuxUtil.execute(esminiCommand);
         //5 生成视频
         String videoName = "simulation_output.mp4";
-        String videoTargetPathOfLinux = csvDirectoryPath + "video";
+        String videoTargetPathOfLinux = rootDirectoryPathOfLinux + "video";
         FileUtil.createDirectory(videoTargetPathOfLinux);
         String videoTargetPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + videoName;
 
@@ -91,6 +102,7 @@ public class VideoService {
         );
         //6 将视频上传到 minio
         MinioUtil.uploadFromFile(minioClient, videoTargetPathOfLinux + videoName, bucketName, videoTargetPathOfMinio);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
     /**
@@ -142,7 +154,7 @@ public class VideoService {
                                     name.setText("Audi_A3_2009_red");
                                     Attribute vehicleCategory = node3.attribute("vehicleCategory");
                                     vehicleCategory.setText(po.getVehicleCategory());
-                                    node3.addAttribute("model3d",po.getModel3d());//自车渲染
+                                    node3.addAttribute("model3d", po.getModel3d());//自车渲染
                                     Iterator<Element> iterator4 = node3.elementIterator();
                                     while (iterator4.hasNext()) {
                                         Element node4 = iterator4.next();

+ 2 - 2
simulation-resource-video/src/main/resources/bootstrap-aliyun.yaml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: 47.94.105.148:8848
+        server-addr: 172.17.0.185:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
         file-extension: yaml

+ 2 - 2
simulation-resource-video/src/main/resources/bootstrap-test.yaml

@@ -2,9 +2,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: 47.93.135.21:8848
+        server-addr: 172.17.0.192:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: 47.93.135.21:8848
+        server-addr: 172.17.0.192:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
         file-extension: yaml