123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- package com.fdkankan.model.utils;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.io.FileUtil;
- import cn.hutool.core.util.StrUtil;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.fdkankan.common.constant.ErrorCode;
- import com.fdkankan.common.exception.BusinessException;
- import com.fdkankan.common.util.FileUtils;
- import com.fdkankan.model.constants.ConstantFileName;
- import com.fdkankan.model.constants.ConstantFilePath;
- import com.fdkankan.model.constants.UploadFilePath;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import java.io.File;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.UUID;
- /**
- * 生成场景和计算场景
- * Created by Hb_zzZ on 2019/5/8.
- */
- public class ComputerUtil {
- private static Logger log = LoggerFactory.getLogger(ComputerUtil.class.getName());
- public static void computer(String projectNum, String path, String buildType) throws Exception{
- Map<String,String> map = new HashMap<String,String>();
- path = path.replace("//", "/");
- log.info("开始建模:"+projectNum);
- //构建算法isModel去掉,因此改成空字符串
- if("V2".equals(buildType)){
- CreateObjUtil.build3dModelOld(path, "");
- }
- if("V3".equals(buildType)){
- CreateObjUtil.build3dModel(path, "");
- }
- log.info("建模完成转换数据:"+projectNum);
- boolean vision2 = false;
- //读取upload文件,检验需要上传的文件是否存在
- String uploadJsonPath = path + File.separator + "results" +File.separator+"upload.json";
- String uploadData = FileUtils.readFile(uploadJsonPath);
- log.info("upload.json 文件路径:{}, 内容:{}" , uploadJsonPath, uploadData);
- JSONObject uploadJson = null;
- JSONArray array = null;
- if(uploadData!=null) {
- uploadJson = JSONObject.parseObject(uploadData);
- array = uploadJson.getJSONArray("upload");
- }
- if(array == null){
- String instanceId = FileUtils.readFile("/opt/hosts/hosts.txt");
- FileUtils.writeFile(path + File.separator + "javaErrorNow.log", instanceId + ":计算错误!");
- Thread.sleep(10000L);
- FileUtils.writeFile(path + File.separator + "javaError.log", instanceId + ":计算错误!");
- throw new Exception("upload.json数据出错");
- }
- }
- public static Map<String,String> computerRebuildVideo(String projectNum, String path) throws Exception{
- String videosPath = String.format(UploadFilePath.VIDEOS_VIEW_PATH, projectNum); //新版本文件路径
- Map<String,String> map = new HashMap<String,String>();
- path = path.replace("//", "/");
- log.info("开始建模:"+projectNum);
- //构建算法isModel去掉,因此改成空字符串
- CreateObjUtil.build3dModel(path, "");
- log.info("建模完成转换数据:"+projectNum);
- boolean vision2 = false;
- //读取upload文件,检验需要上传的文件是否存在
- String uploadData = FileUtils.readFile(path + File.separator + "results" +File.separator+"upload.json");
- JSONObject uploadJson = null;
- JSONArray array = null;
- if(uploadData!=null) {
- uploadJson = JSONObject.parseObject(uploadData);
- array = uploadJson.getJSONArray("upload");
- }
- if(array == null){
- String instanceId = FileUtils.readFile("/opt/hosts/hosts.txt");
- FileUtils.writeFile(path + File.separator + "javaErrorNow.log", instanceId + ":计算错误!");
- Thread.sleep(10000L);
- FileUtils.writeFile(path + File.separator + "javaError.log", instanceId + ":计算错误!");
- throw new Exception("upload.json数据出错");
- }
- JSONObject fileJson = null;
- String fileName = "";
- for(int i = 0, len = array.size(); i < len; i++) {
- fileJson = array.getJSONObject(i);
- fileName = fileJson.getString("file");
- //文件不存在抛出异常
- if (!new File(path + File.separator + "results" + File.separator + fileName).exists()) {
- throw new Exception(path + File.separator + "results" + File.separator + fileName + "文件不存在");
- }
- //video视频文件或封面图
- if (fileJson.getIntValue("clazz") == 20) {
- if (fileName.contains(".flv")) {
- map.put(path + File.separator + "results" + File.separator + fileName,
- "video/video" + projectNum + File.separator + fileName.replace("videos/", ""));
- //todo 待删除oldPath
- map.put(path + File.separator + "results" + File.separator + fileName,
- videosPath + fileName.replace("videos/", ""));
- }
- if (fileName.contains(".mp4")) {
- map.put(path + File.separator + "results" + File.separator + fileName,
- "video/video" + projectNum + File.separator + fileName.replace("videos/", ""));
- map.put(path + File.separator + "results" + File.separator + fileName,
- videosPath+ fileName.replace("videos/", ""));
- }
- }
- }
- log.info("准备上传文件到oss:"+projectNum);
- return map;
- }
- /**
- * 标定算法
- * @param path
- * @throws Exception
- */
- public static Map<String,String> computerCalibration(String path) throws Exception{
- Map<String,String> map = new HashMap<String,String>();
- log.info("开始标定:" );
- //构建算法isModel去掉,因此改成空字符串
- CreateObjUtil.build3dModel(path, "");
- // CreateObjUtil.build3dModel(unicode, "");
- log.info("标定完成转换数据:" );
- boolean vision2 = false;
- //读取upload文件,检验需要上传的文件是否存在
- String uploadData = FileUtils.readFile(path + File.separator + "results" +File.separator+"upload.json");
- JSONObject uploadJson = null;
- JSONArray array = null;
- if(uploadData!=null) {
- uploadJson = JSONObject.parseObject(uploadData);
- array = uploadJson.getJSONArray("upload");
- }
- if(array == null){
- throw new Exception("upload.json数据出错");
- }
- JSONObject fileJson = null;
- String fileName = "";
- for(int i = 0, len = array.size(); i < len; i++) {
- fileJson = array.getJSONObject(i);
- fileName = fileJson.getString("file");
- //文件不存在抛出异常
- if (!new File(path + File.separator + "results" + File.separator + fileName).exists()) {
- throw new Exception(path + File.separator + "results" + File.separator + fileName + "文件不存在");
- }
- if(fileJson.getIntValue("clazz") == 13 || fileJson.getIntValue("clazz") == 14){
- map.put(path + File.separator + "results" +File.separator+ fileName,
- ConstantFilePath.OSS_PREFIX + path.replace(ConstantFilePath.BUILD_MODEL_PATH, "") +
- File.separator + fileName);
- }
- }
- return map;
- }
- //
- public static void createJson(String path, String splitType, String skyboxType, String dataDescribe,
- String sceneNum, String dataSource) throws Exception{
- JSONObject projectJson = new JSONObject();
- projectJson.put("version", "201909231830");
- projectJson.put("protocol", "file api 1.4");
- projectJson.put("uuid", UUID.randomUUID().toString());
- projectJson.put("description", "");
- projectJson.put("time", System.currentTimeMillis());
- projectJson.put("category", "default");
- projectJson.put("tag", null);
- projectJson.put("status", null);
- projectJson.put("sceneNum", sceneNum);
- projectJson.put("dataSource", dataSource);
- FileUtils.writeFile(path + File.separator + "project.json", projectJson.toString());
- JSONObject dataJson = new JSONObject();
- dataJson.put("split_type", splitType);
- dataJson.put("skybox_type", skyboxType);
- dataJson.put("extras", null);
- FileUtils.writeFile(path + File.separator + "data.json", dataJson.toString());
- }
- public static void createExtras(String rebuildParam, String hdrParam, String path) throws Exception {
- FileUtils.writeFile( path + File.separator + "extras" + File.separator + "videos_hdr_param.json", hdrParam);
- FileUtils.writeFile( path + File.separator + "extras" + File.separator + "required_videos.json", rebuildParam);
- }
- public static void createExtras(String rebuildParam,String path) throws Exception {
- FileUtils.writeFile( path + File.separator + "extras" + File.separator + "image-ROI.json", rebuildParam);
- }
- /**
- * 生成标定数据
- * @param calPath
- * @param prefix
- * @throws Exception
- */
- public static void createCalibrationData(String calPath, String prefix) throws Exception{
- File calFile = new File(calPath);
- if(calFile.exists()){
- calFile.mkdirs();
- }
- //删除results和capture文件夹
- FileUtils.deleteDirectory(calPath + "/capture");
- FileUtils.deleteDirectory(calPath + "/results");
- // CreateObjUtil.ossUtilCp(ConstantFilePath.OSS_PREFIX + prefix, calPath + "/capture");
- for(File oldFile : new File(prefix).listFiles()){
- FileUtils.copyFile(oldFile.getAbsolutePath(), calPath + "/capture/" + oldFile.getName(), true);
- }
- JSONObject dataJson = new JSONObject();
- dataJson.put("split_type", "SPLIT_V7");
- dataJson.put("skybox_type", "SKYBOX_V5");
- FileUtils.writeFile(calPath + "/data.json", dataJson.toString());
- }
- public static Map<String, String> getTypeString(String cameraType, String algorithm, String resolution){
- Map<String, String> map = new HashMap<String, String>();
- String splitType = "";
- String skyboxType = "";
- String dataDescribe = "";
- if(Integer.parseInt(cameraType) >= 4){
- if("0".equals(resolution)){
- // skyboxType = "SKYBOX_V4"; //tiles
- // skyboxType = "SKYBOX_V6"; //high,low,4k
- skyboxType = "SKYBOX_V7"; //high,low,2k
- }else {
- skyboxType = "SKYBOX_V1";
- }
- splitType = "SPLIT_V1";
- // skyboxType = "SKYBOX_V4"; //tiles
- dataDescribe = "double spherical";
- if(Integer.parseInt(cameraType) == 5 ){
- //新双目相机
- // skyboxType = "SKYBOX_V9";
- splitType = "SPLIT_V9";
- skyboxType = "SKYBOX_V1";
- }
- if(Integer.parseInt(cameraType) == 6){
- //小红屋新双目相机
- // skyboxType = "SKYBOX_V9";
- splitType = "SPLIT_V3";
- skyboxType = "SKYBOX_V7";
- }
- if(Integer.parseInt(cameraType) == 13){
- //转台相机
- skyboxType = "SKYBOX_V6";
- splitType = "SPLIT_V12";
- }
- if(Integer.parseInt(cameraType) == 14){
- //转台相机
- log.info("激光转台相机调用算法");
- skyboxType = "SKYBOX_V11";
- splitType = "SPLIT_V14";
- }
- }else {
- if("sfm".equals(algorithm)){
- splitType = "SPLIT_V2";
- skyboxType = "SKYBOX_V1";
- dataDescribe = "old sfm";
- }else {
- splitType = "SPLIT_V3";
- skyboxType = "SKYBOX_V1";
- dataDescribe = "old slam";
- }
- }
- map.put("splitType", splitType);
- map.put("skyboxType", skyboxType);
- map.put("dataDescribe", dataDescribe);
- return map;
- }
- /**
- * 循环检测算法是否计算成功
- * @param uploadJsonPath uploadjson路径
- * @param maxCheckTimes 循环次数
- * @param waitTime 每次检测间隔时间,毫秒
- * @return boolean
- * @throws Exception
- */
- public static boolean checkComputeCompleted(String uploadJsonPath, int maxCheckTimes, long waitTime) throws Exception{
- int checkTimes = 1;
- boolean exist = false;
- do {
- if(new File(uploadJsonPath).exists()){
- exist = true;
- break;
- }
- Thread.sleep(waitTime);
- ++checkTimes;
- }while (checkTimes <= maxCheckTimes);
- return exist;
- }
- /**
- * 获取计算完需要上传的文件数组
- * @param uploadJsonPath uploadjson路径
- * @param maxCheckTimes 校验upload.json文件是否存在循环次数
- * @param waitTime 每次检测间隔时间,毫秒
- * @return boolean
- * @throws Exception
- */
- public static JSONArray getUploadArray(String uploadJsonPath, int maxCheckTimes, long waitTime) throws Exception{
- boolean buildCompeleted = ComputerUtil.checkComputeCompleted(uploadJsonPath, maxCheckTimes, waitTime);
- if(!buildCompeleted){
- throw new BusinessException(ErrorCode.FAILURE_CODE_7013);
- }
- String uploadData = FileUtil.readUtf8String(uploadJsonPath);
- JSONObject uploadJson;
- JSONArray array = null;
- if(StrUtil.isNotEmpty(uploadData)) {
- uploadJson = JSONObject.parseObject(uploadData);
- array = uploadJson.getJSONArray("upload");
- }
- if(CollUtil.isEmpty(array)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_7013);
- }
- return array;
- }
- }
|