up doc
This commit is contained in:
parent
e381d158c4
commit
32f0542a93
|
@ -1,25 +1,65 @@
|
||||||
# Couture de photos 360 faites à la goproFusion avec Hugin
|
# Couture de photos 360 faites à la goproFusion avec Hugin
|
||||||
|
|
||||||
Ce script utilise une config de hugin pour assembler des paires de photos prises avec la GoProFusion qui n'est plus produite depuis 2019.
|
Ce script utilise une config de hugin pour assembler des paires de photos prises à intervalle régulier avec la GoProFusion (et son GPS activé) et aucun autre modèle. Cette gopro n'est plus produite depuis 2019, les versions suivantes font l'assemblage dans la gopro et perdent de la vitesse de capture de ce fait.
|
||||||
Le script ne lit pas les photos, il va juste créer un fichier pto pour hugin pour assembler chaque paire de photos BG*** et GF***, ainsi qu'un script bash afin de lancer l'assemblage en masse.
|
Pour des tutos sur la capture, faites un tour sur le forum des géocommuns.fr: https://forum.geocommuns.fr
|
||||||
|
|
||||||
Configurer le dossier rempli de photos dans main.ts
|
## Descriptions
|
||||||
Renseigner le numéro minimum et maximum de la capture dans les variables de config mix et max.
|
Le script `main.ts` ne lit pas les photos, il va juste créer un fichier **.pto** pour `hugin` pour assembler chaque paire de photos `GB***` et `GF***`, ainsi qu'un script bash afin de lancer l'assemblage en masse. La configuration de ce script pour Hugin est définie en dur dans le script. Vous pouvez faire des essais d'assemblages dans Hugin et sauvegarder un pto, puis copier sa configuration dans le script main.ts pour changer mes configurations.
|
||||||
Lancer le script
|
|
||||||
|
- Configurer le dossier rempli de photos dans main.ts
|
||||||
|
- Renseigner le numéro minimum et maximum de la capture dans les variables de config mix et max.
|
||||||
|
J'utilise un dossier fixe pour mes dépots de code, c'est pourquoi ce dossier ainsi que ceux des photos gopro sont inscrits en dur dans les scripts:
|
||||||
|
**/home/poule/encrypted/stockage-syncable/www/development/html/**
|
||||||
|
## Flux de travail
|
||||||
|
|
||||||
|
- Capturer les séquences avec la gopro
|
||||||
|
- Copier les dossiers depuis la gopro (2 disques StillImg/DCIM) par câble usb dans un dossier prédéfini: /home/poule/encrypted/stockage-syncable/photos/imageries/gopro/INBOX_a_assembler
|
||||||
|
- Créer les fichiers d'assemblages pour chaque paire de photos
|
||||||
|
- Faire l'assemblage (stitching) et l'attribution des infos GPS en masse dans un dossier défini /home/poule/encrypted/stockage-syncable/photos/imageries/gopro/hugin_assemblages_script_output.
|
||||||
|
- Déplacer les paires de photos dans un dossier qui indique le traitement réalisé /home/poule/encrypted/stockage-syncable/photos/imageries/gopro/INBOX_assemblage_fait
|
||||||
|
- Retravailler les orientations de photos dans JOSM
|
||||||
|
- Envoyer sur Panoramax les assemblages contenant les infos GPS
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Vous aurez besoin de ts-node, node version stable (testé en version 20 sur Ubuntu), hugin.
|
||||||
|
|
||||||
|
exiftool, ts-node, minimist, hugin, et des captures photo faites avec la gopro fusion.
|
||||||
```
|
```
|
||||||
cd /home/poule/encrypted/stockage-syncable/www/development/html/scripts/hugin-gopro-fusion
|
sudo apt install node hugin
|
||||||
ts-node main.ts --goproMin=12172 --goproMax=123500
|
cd /home/poule/encrypted/stockage-syncable/www/development/html/
|
||||||
ts-node main.ts --goproMin=130489 --goproMax=56267
|
git clone https://forge.chapril.org/tykayn/scripts && cd scripts && npm i
|
||||||
|
# on installe ts-node en global pour lancer les scripts depuis le dossier à proximité des photos.
|
||||||
|
npm i -g ts-node
|
||||||
```
|
```
|
||||||
|
|
||||||
Ceci va générer un paquet de fichiers .pto dans le dossier output_pto
|
Le dossier de travail pour prendre les photos de gopro est par défaut `/home/poule/encrypted/stockage-syncable/photos/imageries/gopro`
|
||||||
|
Les assemblages seront générés par défaut dans `/home/poule/encrypted/stockage-syncable/photos/imageries/gopro/hugin_assemblages_script_output`
|
||||||
|
|
||||||
|
Lancer le script pour générer des fichiers pto, exemple pour les photos GF012000.JPG à GF013000.JPG.
|
||||||
|
|
||||||
|
```
|
||||||
|
ts-node /home/poule/encrypted/stockage-syncable/www/development/html/scripts/hugin-gopro-fusion/main.ts --goproMin=12000 --goproMax=13000 --folder=route_benerie
|
||||||
|
```
|
||||||
|
|
||||||
|
Ceci va générer un paquet de fichiers .pto dans le dossier output_pto ainsi qu'un fichier bash pour les exécuter en masse. Il faudra ensuite exécuter **hugin_batch.sh** pour faire les fusions.
|
||||||
|
Ce script ne fera les assemblages que si le fichier de destination n'existe pas déjà. Ce qui permet de reprendre un assemblage de série même si votre ordinateur passe en veille en cours de route.
|
||||||
|
|
||||||
|
## 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**.
|
||||||
|
|
||||||
|
|
||||||
|
## Suivi des assemblages
|
||||||
|
On arrive vite a avoir de nombreux dossiers de capture.
|
||||||
|
La gopro fait un nouveau dossier dès que l'on stoppe une capture.
|
||||||
|
Pour se repérer dans les assemblages faits et restant à configurer, il vaut mieux s'aider d'une feuille de calcul.
|
||||||
|
[!feuille](img.png)
|
||||||
|
|
||||||
ainsi qu'un script bash qui permet de faire tous les assemblages de photos stéréoscopiques.
|
ainsi qu'un script bash qui permet de faire tous les assemblages de photos stéréoscopiques.
|
||||||
Il reste à lancer le script bash pour faire tous les assemblages à la suite et remplir les infos exif dans le dossier assemblé.
|
Il reste à lancer le script bash pour faire tous les assemblages à la suite et remplir les infos exif dans le dossier assemblé.
|
||||||
Ensuite, il n'y a plus qu'à envoyer les assemblages sur panoramax avec geovisio_cli.
|
|
||||||
|
# Envoi sur panoramax
|
||||||
|
|
||||||
|
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 .
|
geovisio upload --api-url https://panoramax.openstreetmap.fr .
|
||||||
```
|
```
|
||||||
|
|
||||||
## Prérequis
|
|
||||||
|
|
||||||
exiftool, ts-node, minimist, hugin, et des captures photo faites avec la gopro fusion.
|
|
|
@ -7,11 +7,14 @@
|
||||||
# complétion des données gps depuis une des photos assemblées
|
# complétion des données gps depuis une des photos assemblées
|
||||||
###################################
|
###################################
|
||||||
# exemple ./exif_batch.sh 36077 36159
|
# exemple ./exif_batch.sh 36077 36159
|
||||||
|
# va assigner les données exif des photos gopro GF036077.JPG à leur assemblage assemblage_063077.jpg
|
||||||
|
|
||||||
|
folder="rouen/rouen_oct23"
|
||||||
|
|
||||||
function batch_exif_photos {
|
function batch_exif_photos {
|
||||||
local min=$1
|
local min=$1
|
||||||
local max=$2
|
local max=$2
|
||||||
local dir="/home/poule/encrypted/stockage-syncable/photos/imageries/gopro/rouen_oct23"
|
local dir="/home/poule/encrypted/stockage-syncable/photos/imageries/gopro/$folder"
|
||||||
|
|
||||||
echo $(seq $min $max)
|
echo $(seq $min $max)
|
||||||
|
|
||||||
|
|
|
@ -4,31 +4,38 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
###################################
|
###################################
|
||||||
# complétion des données gps depuis une des photos assemblées
|
#
|
||||||
###################################
|
###################################
|
||||||
# exemple ./exif_batch.sh 36077 36159
|
# exemple ./hugin_bash.sh 36077 36159
|
||||||
|
|
||||||
function batch_exif_photos {
|
function batch_exif_photos {
|
||||||
# this is a WIP
|
# this is a WIP
|
||||||
|
|
||||||
# local min=$1
|
local min=$1
|
||||||
# local max=$2
|
local max=$2
|
||||||
# local dir="/home/poule/encrypted/stockage-syncable/photos/imageries/gopro/rouen_oct23"
|
local gopro_subfolder=$3
|
||||||
#
|
|
||||||
# echo $(seq $min $max)
|
echo " création des assemblages pour le dossier $gopro_subfolder pour les photos $1 à $2"
|
||||||
#
|
|
||||||
# for i in $(seq $min $max); do
|
archive_zfs="/home/poule/encrypted/stockage-syncable"
|
||||||
# filename=$i
|
pto_folder="$archive_zfs/www/development/html/scripts/hugin-gopro-fusion/output_pto/"
|
||||||
# file="$dir/GF0$filename.JPG"
|
destination_pto="$archive_zfs/photos/imageries/gopro/pto"
|
||||||
# file_assemblage="$dir/GF0$filename.JPG"
|
# test de l'existence des dossiers
|
||||||
#
|
if [ -f "$archive_zfs" ] ; then
|
||||||
# if [ -f "$file" ] && [ -f "$file_assemblage" ] ; then
|
echo "zfs archive is not mounted"
|
||||||
# echo "set the tags in assemblage $i from GF0$filename.JPG"
|
exit 1
|
||||||
# hugin_executor "/home/poule/encrypted/stockage-syncable/www/development/html/scripts/hugin-gopro-fusion/output_pto/merging_0$i.pto" --stitching --prefix="assemblage_$i" -t=6
|
fi
|
||||||
# else
|
|
||||||
# echo "File $file does not exist."
|
if [ -f "$destination_pto" ] ; then
|
||||||
# fi
|
mkdir -p "$archive_zfs/photos/imageries/gopro/INBOX_PTO_hugin"
|
||||||
# done
|
fi
|
||||||
|
# move the generated pto and scripts
|
||||||
|
mv "$pto_folder/*" "$destination_pto"
|
||||||
|
|
||||||
|
cd "$destination_pto"
|
||||||
|
echo "lancement de hugin_executor_from$min_to_$max.sh"
|
||||||
|
# bash "hugin_executor_from$min_to_$max.sh"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
batch_exif_photos $1 $2
|
batch_exif_photos $1 $2 $3
|
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
|
@ -18,8 +18,9 @@ let mini_arguments: any = minimist(process.argv.slice(2))
|
||||||
/**
|
/**
|
||||||
* ces trois paramètres permettent de traiter par lots des assemblages sans avoir à scanner le dossier
|
* ces trois paramètres permettent de traiter par lots des assemblages sans avoir à scanner le dossier
|
||||||
*/
|
*/
|
||||||
let gorpro_fusion_separated_photos_folder = 'rouen_oct23'
|
let gorpro_fusion_separated_photos_folder = 'rouen/rouen_oct23'
|
||||||
|
|
||||||
|
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 goproMin = '80800'// numéro de photo gopro minimum front et back. correspond à GF080800.JPG + GB080800.JPG
|
||||||
let goproMax = '80866' // et maximum. correspond à GF080866.JPG + GB080866.JPG
|
let goproMax = '80866' // et maximum. correspond à GF080866.JPG + GB080866.JPG
|
||||||
let addExifToolInScript = false;
|
let addExifToolInScript = false;
|
||||||
|
@ -28,6 +29,9 @@ let outputStitchedFolder = '/home/poule/encrypted/stockage-syncable/photos/image
|
||||||
if (mini_arguments['addExifToolInScript']) {
|
if (mini_arguments['addExifToolInScript']) {
|
||||||
addExifToolInScript = mini_arguments['addExifToolInScript']
|
addExifToolInScript = mini_arguments['addExifToolInScript']
|
||||||
}
|
}
|
||||||
|
if (mini_arguments['previous_zero']) {
|
||||||
|
addExifToolInScript = mini_arguments['previous_zero']
|
||||||
|
}
|
||||||
if (mini_arguments['goproMin']) {
|
if (mini_arguments['goproMin']) {
|
||||||
goproMin = mini_arguments['goproMin']
|
goproMin = mini_arguments['goproMin']
|
||||||
}
|
}
|
||||||
|
@ -88,7 +92,7 @@ function makeBashScriptHugin(minmax: any) {
|
||||||
|
|
||||||
// console.log('make PTO file : ii', ii)
|
// console.log('make PTO file : ii', ii)
|
||||||
// makePto(absolutePath, ii)
|
// makePto(absolutePath, ii)
|
||||||
let currentNumber = `0${ii}`;
|
let currentNumber = `${previous_zero}${ii}`;
|
||||||
// let currentNumber = '080096';
|
// let currentNumber = '080096';
|
||||||
let ptoContent = makePto(absolutePath, currentNumber);
|
let ptoContent = makePto(absolutePath, currentNumber);
|
||||||
let ptoFileName = `merging_${currentNumber}.pto`
|
let ptoFileName = `merging_${currentNumber}.pto`
|
||||||
|
@ -96,7 +100,7 @@ function makeBashScriptHugin(minmax: any) {
|
||||||
|
|
||||||
let ptoPath = `${dossier_pto_output}/${ptoFileName}`
|
let ptoPath = `${dossier_pto_output}/${ptoFileName}`
|
||||||
scriptsContent += '\n\n# capture n°' + currentNumber
|
scriptsContent += '\n\n# capture n°' + currentNumber
|
||||||
scriptsContent += '\nif [ -f '+outputStitchedFolder+stitchedFileName+'.jpg ]; then \n' +
|
scriptsContent += '\nif [ ! -f '+outputStitchedFolder+stitchedFileName+'.jpg ]; then \n' +
|
||||||
'hugin_executor' +
|
'hugin_executor' +
|
||||||
' ' + ptoPath + ' ' +
|
' ' + ptoPath + ' ' +
|
||||||
'--stitching ' +
|
'--stitching ' +
|
||||||
|
|
Loading…
Reference in New Issue