diff --git a/hugin-gopro-fusion/gather_sequences.ts b/hugin-gopro-fusion/gather_sequences.ts new file mode 100644 index 00000000..2f2d2e4c --- /dev/null +++ b/hugin-gopro-fusion/gather_sequences.ts @@ -0,0 +1,53 @@ +const fs = require('fs'); +const path = require('path'); + +// Chemin du dossier INBOX_a_assembler +const inboxDir = '/home/poule/encrypted/stockage-syncable/photos/imageries/gopro/INBOX_a_assembler'; + +// Chemin du dossier de destination pour les séquences assemblées +const outDir = '/home/poule/encrypted/stockage-syncable/photos/imageries/gopro/INBOX_a_assembler'; + +// Parse les fichiers dans le dossier INBOX_a_assembler +fs.readdirSync(inboxDir).forEach((file: any) => { + + console.log('file', file) + + + let dossier = file + // Ignorer les fichiers qui ne sont pas des dossiers + if (!fs.lstatSync(path.join(inboxDir, dossier)).isDirectory()) return; + + console.log('dossier', dossier) + // Extraire le numéro du nom de fichier + const number = dossier.match(/\d+/); + + console.log('number', number[0]) + // Si le dossier de la séquence existe déjà, ignorez-le + // if (fs.existsSync(path.join(outDir, number[0]))) return; + + // Créer le dossier de la séquence + // fs.mkdirSync(path.join(outDir, number[0])); + + // Copier les photos front et back dans le nouveau dossier + let lepath_source_front = path.join('' + inboxDir, number[0] + 'GFRNT', '*.JPG') + let lepath_source_back = path.join('' + inboxDir, number[0] + 'GBACK', '*.JPG') + let lepath_destination = path.join('' + outDir, number[0]) + + console.log('source front', lepath_source_front) + console.log('source back', lepath_source_back) + console.log('destination', lepath_destination) + + + const files_front = fs.readdirSync(path.join(inboxDir, number[0] + 'GFRNT')); + console.log('files front', files_front.length) + if (files_front.length > 2) { + fs.renameSync(lepath_source_front, lepath_destination); + } + const files_back = fs.readdirSync(path.join(inboxDir, number[0] + 'GBACK')); + console.log('files back', files_back.length) + if (files_back.length > 2) { + fs.renameSync(lepath_source_back, lepath_destination); + + } + +}); \ No newline at end of file diff --git a/hugin-gopro-fusion/main.ts b/hugin-gopro-fusion/main.ts index 99ae02b8..54315733 100644 --- a/hugin-gopro-fusion/main.ts +++ b/hugin-gopro-fusion/main.ts @@ -1,7 +1,8 @@ /** conversion de données gpx conversion de données exif - utilisation: + + Utilisation: ts-node main.ts --goproMin=80800 --goproMax=80801 --goproSubFolder="rouen_oct23" **/ @@ -10,21 +11,21 @@ import * as fs from 'node:fs'; // @ts-ignore import minimist from 'minimist'; -// @ts-ignore -const moment = require("moment"); let mini_arguments: any = minimist(process.argv.slice(2)) // configs /** * ces paramètres permettent de traiter par lots des assemblages sans avoir à scanner le dossier */ -let gorpro_fusion_separated_photos_folder = '' +let gopro_fusion_separated_photos_folder = '' +let disable_pto_write = true; let previous_zero = '0'// numéro de photo gopro minimum front et back. correspond à GF080800.JPG + GB080800.JPG let goproMin = 80800// numéro de photo gopro minimum front et back. correspond à GF080800.JPG + GB080800.JPG let goproMax = 80801 // et maximum. correspond à GF080866.JPG + GB080866.JPG -let addExifToolInScript = false; -let outputStitchedFolder = '/home/poule/encrypted/stockage-syncable/photos/imageries/gopro/hugin_assemblages_script_output/' +let addExifToolInScript = true; +let base_gopro_folder = '/home/poule/encrypted/stockage-syncable/photos/imageries/gopro' +let outputStitchedFolder = base_gopro_folder + '/hugin_assemblages_script_output/' if (mini_arguments['addExifToolInScript']) { addExifToolInScript = mini_arguments['addExifToolInScript'] @@ -36,7 +37,7 @@ if (mini_arguments['goproMin']) { goproMin = mini_arguments['goproMin'] } if (mini_arguments['goproSubFolder']) { - gorpro_fusion_separated_photos_folder = mini_arguments['goproSubFolder'] + gopro_fusion_separated_photos_folder = mini_arguments['goproSubFolder'] } if (mini_arguments['goproMax']) { goproMax = mini_arguments['goproMax'] @@ -51,15 +52,13 @@ extension_photo_source = 'JPG' let gopro_folder = "/home/poule/encrypted/stockage-syncable/photos/imageries/gopro"; let dossier_pto_output = `/home/poule/encrypted/stockage-syncable/photos/imageries/gopro/INBOX_PTO_hugin`; -let absolutePath = `${gopro_folder}/${gorpro_fusion_separated_photos_folder}`; -let folder = `${gopro_folder}/${gorpro_fusion_separated_photos_folder}` +let absolutePath = `${gopro_folder}/${gopro_fusion_separated_photos_folder}`; +let folder = `${gopro_folder}/${gopro_fusion_separated_photos_folder}` if (mini_arguments['folder']) { folder = mini_arguments['folder'] } -let subFolder = "" - let dossier_assemblages_output = `${gopro_folder}/hugin_assemblages_script_output`; console.log('mini_arguments', mini_arguments) @@ -83,9 +82,9 @@ function findMinMaxNumberOfPhotos(dirPath: string): { min: number, max: number } // Vérifier si le fichier est un fichier JPG if (path.extname(file) === '.jpg' || path.extname(file) === '.JPG') { // Éxtraire le nombre du nom de fichier - let matches:any = file.match(/(\d+)/); + let matches: any = file.match(/(\d+)/); if (matches && matches.length && matches[0]) { - let number = 1 * parseInt(matches[0]); + let number = parseInt(matches[0]); // Sauver le nombre minimal et maximal trouvé jusqu'à présent if (minNumber === 0 && number > 0) { @@ -104,11 +103,6 @@ function findMinMaxNumberOfPhotos(dirPath: string): { min: number, max: number } } } -function getGoproFiles(folder: string) { - console.log('getGoproFiles folder', folder) - return fs.readdirSync('' + folder) -} - function makeBashScriptHugin(minmax: any) { console.log('makeBashScriptHugin') @@ -119,28 +113,33 @@ function makeBashScriptHugin(minmax: any) { minmax.max ); ii++) { - // console.log('make PTO file : ii', ii) - // makePto(absolutePath, ii) let currentNumber = `${previous_zero}${ii}`; // let currentNumber = '080096'; let ptoContent = makePto(absolutePath, currentNumber); let ptoFileName = `merging_${currentNumber}.pto` let stitchedFileName = `assemblage_${currentNumber}` + let input_front_jpg = base_gopro_folder + '/' + gopro_fusion_separated_photos_folder + '/GF' + currentNumber + '.JPG' let ptoPath = `${dossier_pto_output}/${ptoFileName}` scriptsContent += '\n\n# capture n°' + currentNumber - scriptsContent += '\nif [ ! -f ' + outputStitchedFolder + stitchedFileName + '.jpg ]; then \n' + - 'hugin_executor' + + scriptsContent += + '\nif [ ! -f ' + outputStitchedFolder + stitchedFileName + '.jpg ]; then \n' + + '\n if [ -f ' + input_front_jpg + ' ]; then \n' + + ' hugin_executor' + ' ' + ptoPath + ' ' + '--stitching ' + '--prefix=' + stitchedFileName + - ' -t=6' + + '\n' + + ' fi' + '\n' + 'fi' - // console.log('ptoContent', ptoContent) - writeFile(ptoFileName, ptoContent) + if (!disable_pto_write) { + + // console.log('ptoContent', ptoContent) + writeFile(ptoFileName, ptoContent) + } } @@ -150,9 +149,9 @@ function makeBashScriptHugin(minmax: any) { } console.log('##############\n pour lancer le script : \n', 'bash /home/poule/encrypted/stockage-syncable/photos/imageries/gopro/INBOX_PTO_hugin/hugin_executor_from_' + goproMin + '_to_' + goproMax + '.sh', - '\n'+ - ' bash /home/poule/encrypted/stockage-syncable/www/development/html/scripts/hugin-gopro-fusion/exif_batch.sh '+goproMin+' '+goproMax+' '+gorpro_fusion_separated_photos_folder, - '\n'+ + '\n' + + ' bash /home/poule/encrypted/stockage-syncable/www/development/html/scripts/hugin-gopro-fusion/exif_batch.sh ' + goproMin + ' ' + goproMax + ' ' + gopro_fusion_separated_photos_folder, + '\n' + '\n##############\n' ) console.log('hugin_batch_command: \n', hugin_batch_command) @@ -160,7 +159,6 @@ function makeBashScriptHugin(minmax: any) { writeFile('hugin_executor_from_' + goproMin + '_to_' + goproMax + '.sh', scriptsContent); - } function makePto(absolutePath: string, currentNumber: string) { @@ -274,10 +272,12 @@ function writeFile(fileName: string, fileContent: any) { ) } -let scriptsContent = '#!/bin/bash' + - '\necho "éxécuter tous les fichiers PTO dans : ' + dossier_assemblages_output + '"\n ' + - '\ncd ' + dossier_assemblages_output + '\n'; -'\n pwd\n'; +let scriptsContent = `#!/bin/bash +echo "éxécuter tous les fichiers PTO dans : ${dossier_assemblages_output}" + +cd ${dossier_assemblages_output} +`; +"\n pwd\n"; function main() { @@ -287,6 +287,7 @@ function main() { }) } + let minmax = findMinMaxNumberOfPhotos(folder) console.log('minmax', minmax)