Compare commits

...

2 Commits

Author SHA1 Message Date
5999b2fb94 update batch exif
Signed-off-by: tykayn <contact@cipherbliss.com>
2023-12-09 12:03:11 +01:00
98666ab773 up find auto numbers in folder 2023-12-09 12:03:11 +01:00
4 changed files with 88 additions and 21 deletions

View File

@ -47,6 +47,12 @@ Ce script ne fera les assemblages que si le fichier de destination n'existe pas
## Une fois les assemblages réalisés
Il faut encore remettre les infos GPS dans les fichiers générés. Pour cela il existe le script **exif_batch.sh**.
Exemple pour assembler les infos exif depuis les images gopro front se trouvant dans INBOX_a_assembler/rouen_3 vers les
assemblages du même numéro.
```bash
bash /home/poule/encrypted/stockage-syncable/www/development/html/scripts/hugin-gopro-fusion/exif_batch.sh 36077 38695 INBOX_a_assembler/rouen_3
```
## Suivi des assemblages
On arrive vite a avoir de nombreux dossiers de capture.
@ -62,4 +68,4 @@ Il reste à lancer le script bash pour faire tous les assemblages à la suite et
Une fois les assemblages réalisés et les infos de GPS présentes, les infos d'orientation réalisées avec JOSM, il n'y a plus qu'à envoyer les assemblages sur panoramax avec geovisio_cli.
```
geovisio upload --api-url https://panoramax.openstreetmap.fr .
```
```

View File

@ -6,7 +6,8 @@
###################################
# complétion des données gps depuis une des photos assemblées
###################################
# exemple ./exif_batch.sh 36077 36159
# exemple
# bash /home/poule/encrypted/stockage-syncable/www/development/html/scripts/hugin-gopro-fusion/exif_batch.sh 36077 38695 INBOX_a_assembler/rouen_3
# va assigner les données exif des photos gopro GF036077.JPG à leur assemblage assemblage_063077.jpg
#folder="rouen/rouen_oct23"
@ -17,6 +18,7 @@ function batch_exif_photos {
local folder=$3
local dir="/home/poule/encrypted/stockage-syncable/photos/imageries/gopro/$folder"
echo "subdirectory of gopro is $dir"
echo $(seq $min $max)
for i in $(seq $min $max); do
@ -26,10 +28,10 @@ function batch_exif_photos {
if [ -f "$file" ] && [ -f "$file_assemblage" ]; then
echo "set the tags in assemblage $i from GF0$filename.jpg"
# exiftool -tagsFromFile "$file" $file $file_assemblage -overwrite_original
# echo "updated the exift tags of $file_assemblage"
exiftool -tagsFromFile "$file" $file $file_assemblage -overwrite_original
echo "updated the exift tags of $file_assemblage"
else
echo "File $file does not exist."
echo "batch_exif_photos: File $file does not exist."
fi
done
}

View File

@ -0,0 +1,54 @@
import fs from "node:fs";
import path from "path";
// @ts-ignore
import minimist from 'minimist';
let mini_arguments: any = minimist(process.argv.slice(2))
let folder = `/home/poule/encrypted/stockage-syncable/photos/imageries/gopro/INBOX_a_assembler/`
let subfolder = ``
if (mini_arguments['folder']) {
subfolder = mini_arguments['folder']
}
/**
* trouver les valeux min et max de numéros de séquence gopro dans un dossier contenant des photos jpg
* @param dirPath
*/
function findMinMaxNumberOfPhotos(dirPath: string): { min: number, max: number } {
console.log('dirPath', dirPath)
let minNumber: number = 0;
let maxNumber: number = 0;
// Boucler sur chaque fichier JPG dans le dossier
fs.readdirSync(dirPath).forEach(file => {
// 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+)/);
if (matches && matches.length && matches[0]) {
let number = parseInt(matches[0]);
// Sauver le nombre minimal et maximal trouvé jusqu'à présent
if (minNumber === 0 && number > 0) {
minNumber = number;
}
if (number > maxNumber) {
maxNumber = number;
}
}
}
});
return {
min: minNumber,
max: maxNumber,
}
}
let result = findMinMaxNumberOfPhotos(folder + subfolder)
console.log('result :\n', `bash /home/poule/encrypted/stockage-syncable/www/development/html/scripts/hugin-gopro-fusion/exif_batch.sh ${result.min} ${result.max} INBOX_a_assembler/${subfolder}`)

View File

@ -7,6 +7,8 @@
**/
const path = require('path');
// @ts-ignore
import * as fs from 'node:fs';
// @ts-ignore
@ -18,7 +20,7 @@ let mini_arguments: any = minimist(process.argv.slice(2))
* ces paramètres permettent de traiter par lots des assemblages sans avoir à scanner le dossier
*/
let gopro_fusion_separated_photos_folder = ''
let disable_pto_write = true;
let disable_pto_write = false;
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
@ -43,6 +45,7 @@ if (mini_arguments['goproMax']) {
goproMax = mini_arguments['goproMax']
}
let hugin_batch_command = 'bash /home/poule/encrypted/stockage-syncable/www/development/html/scripts/hugin-gopro-fusion/exif_batch.sh ' + goproMin + ' ' + goproMax
@ -61,11 +64,24 @@ if (mini_arguments['folder']) {
let dossier_assemblages_output = `${gopro_folder}/hugin_assemblages_script_output`;
let minmax = findMinMaxNumberOfPhotos(folder)
console.log('minmax', minmax)
goproMin = minmax.min
goproMax = minmax.max
let countPhotos = ((goproMax)) - ((goproMin));
console.log('goproMax', goproMax)
console.log('goproMin', goproMin)
console.log('max - min', (goproMax) - (goproMin))
console.log('la séquence', countPhotos, 'captures', (countPhotos / 60).toFixed(0), 'minutes');
console.log('mini_arguments', mini_arguments)
const path = require('path');
/**
* trouver les valeux min et max de numéros de séquence gopro dans un dossier contenant des photos jpg
* @param dirPath
@ -276,8 +292,9 @@ let scriptsContent = `#!/bin/bash
echo "éxécuter tous les fichiers PTO dans : ${dossier_assemblages_output}"
cd ${dossier_assemblages_output}
pwd
`;
"\n pwd\n";
function main() {
@ -288,18 +305,6 @@ function main() {
}
let minmax = findMinMaxNumberOfPhotos(folder)
console.log('minmax', minmax)
goproMin = minmax.min
goproMax = minmax.max
let countPhotos = ((goproMax)) - ((goproMin));
console.log('goproMax', goproMax)
console.log('goproMin', goproMin)
console.log('max - min', (goproMax) - (goproMin))
console.log('la séquence', countPhotos, 'captures', (countPhotos / 60).toFixed(0), 'minutes');
// run it all
main()