/// <summary> /// 画像ファイルを解析し、Musicオブジェクトを返却する。 /// </summary> /// <param name="setting">Exeのパス等が格納されたSettingオブジェクト</param> /// <param name="screenshotImageFilePath">解析したい画像ファイルのパス</param> /// <param name="destDirPath">アプリケーションのデータ格納先ディレクトリパス</param> /// <param name="analyzeAllFile">true:全ファイルを解析、false:既に解析済みファイルがあればスキップ</param> /// <returns>Musicオブジェクト</returns> internal static Music AnalyzeBndrImage(Setting setting, string screenshotImageFilePath, string destDirPath, bool analyzeAllFile) { // Check setting object if (setting == null) { logger.Error("Setting object is null!"); return(null); } // Load ocr setting BndrOcrSetting bndrOcrSetting = setting.defaultBndrOcrSetting; if (bndrOcrSetting == null) { logger.Error("Default setting is null!"); return(null); } // File path check logger.Info("Screenshot image file = " + screenshotImageFilePath); if (File.Exists(screenshotImageFilePath) == false) { string errorMessage = "Screenshot Image File is not exists. FilePath = " + screenshotImageFilePath; logger.Error(errorMessage); throw new FileNotFoundException(errorMessage); } // If dest directory is not exists, create directory string screenshotDestDirPath = destDirPath + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(screenshotImageFilePath); logger.Info("Screenshot dest directory path = " + screenshotDestDirPath); if (Directory.Exists(screenshotDestDirPath) == true) { if (analyzeAllFile == true) { logger.Info("Target directory is still exists, delete derectory."); Directory.Delete(screenshotDestDirPath, true); } else { logger.Info("Target directory is still exists, skip regist."); return(null); } } Directory.CreateDirectory(screenshotDestDirPath); // Move image file to dest directory string scrennShotImageFileDestPath = screenshotDestDirPath + Path.DirectorySeparatorChar + Path.GetFileName(screenshotImageFilePath); logger.Info("Copy screen shot file. Destination path = " + scrennShotImageFileDestPath); if (File.Exists(scrennShotImageFileDestPath) == true) { if (analyzeAllFile == true) { logger.Info("Overwrite copy file."); File.Delete(scrennShotImageFileDestPath); } else { logger.Info("Target file is still exists, skip regist."); return(null); } } File.Copy(screenshotImageFilePath, scrennShotImageFileDestPath); // Dest file path check logger.Info("OCR read screenshot image file = " + scrennShotImageFileDestPath); if (File.Exists(scrennShotImageFileDestPath) == false) { string errorMessage = "OCR read creenshot Image File is not exists. FilePath = " + scrennShotImageFileDestPath; logger.Error(errorMessage); throw new FileNotFoundException(errorMessage); } logger.Info("OCR read section start."); return(AnalyzeMusic(setting, scrennShotImageFileDestPath, destDirPath)); }
/// <summary> /// 画像ファイルを解析し、Musicオブジェクトを返却する。 /// </summary> /// <param name="setting">Exeのパス等が格納されたSettingオブジェクト</param> /// <param name="scrennShotImageWorkFilePath">解析したい画像ファイルのパス</param> /// <param name="destDirPath">アプリケーションのデータ格納先ディレクトリパス</param> /// <returns></returns> private static Music AnalyzeMusic(Setting setting, string scrennShotImageWorkFilePath, string destDirPath) { // Check setting object if (setting == null) { logger.Error("Setting object is null!"); return(null); } // Load ocr setting BndrOcrSetting bndrOcrSetting = setting.defaultBndrOcrSetting; if (bndrOcrSetting == null) { logger.Error("Default setting is null!"); return(null); } logger.Info("OCR read section start."); // Title read string titleString = OcrReader.ReadFromImageFileJapaneseLang( setting.pathImageMagickConvertExe, setting.pathTesseractExe, scrennShotImageWorkFilePath, SUFFIX_CROPNAME_TITLE, bndrOcrSetting.getTitleOcrOption()); logger.Info("Title = " + titleString); // Difficult code read string difficultString = OcrReader.ReadFromImageFileJapaneseLang( setting.pathImageMagickConvertExe, setting.pathTesseractExe, scrennShotImageWorkFilePath, SUFFIX_CROPNAME_TITLE, bndrOcrSetting.getDifficultOcrOption()); logger.Info("Difficult = " + difficultString); // Result notes read string resultNotesString = OcrReader.ReadFromImageFileOnlyNumber( setting.pathImageMagickConvertExe, setting.pathTesseractExe, scrennShotImageWorkFilePath, SUFFIX_CROPNAME_SCORE, bndrOcrSetting.getResultNotesOcrOption()); logger.Info("Score = " + resultNotesString); // Max combo read string maxComboString = OcrReader.ReadFromImageFileOnlyNumber( setting.pathImageMagickConvertExe, setting.pathTesseractExe, scrennShotImageWorkFilePath, SUFFIX_CROPNAME_MAXCOMBO, bndrOcrSetting.getMaxComboOcrOption()); logger.Info("Max combo = " + maxComboString); // Level read string levelString = OcrReader.ReadFromImageFileOnlyNumber( setting.pathImageMagickConvertExe, setting.pathTesseractExe, scrennShotImageWorkFilePath, SUFFIX_CROPNAME_LEVEL, bndrOcrSetting.getLevelOcrOption()); logger.Info("Level = " + levelString); // Score read string scoreString = OcrReader.ReadFromImageFileOnlyNumber( setting.pathImageMagickConvertExe, setting.pathTesseractExe, scrennShotImageWorkFilePath, SUFFIX_CROPNAME_LEVEL, bndrOcrSetting.getScoreOcrOption()); logger.Info("Level = " + levelString); logger.Info("OCR read section end."); // Create return value start logger.Info("Music score result creation start."); Music analyzedMusic = new Music { title = titleString, difficult = difficultString }; try { analyzedMusic.level = int.Parse(levelString); } catch (FormatException) { analyzedMusic.level = 0; } // Create Hashed OCR Data analyzedMusic.CreateHashedOcrDataFromTitleAndDifficult(); // Parse analyzedMusic.scoreResultList.Add(ScoreResult.Parse( resultNotesString, maxComboString, scoreString, scrennShotImageWorkFilePath.Replace(destDirPath, string.Empty)) ); logger.Info("Musc score result creation end."); return(analyzedMusic); }