# ODK, un outil open source pour la création de formulaires embarqués

Eric Quinton, Sylvie Ladet, Alain Benard, Florent Blaise

► To cite this version:

Eric Quinton, Sylvie Ladet, Alain Benard, Florent Blaise. ODK, un outil open source pour la création de formulaires embarqués. Printemps de la Donnée 2024, INRAE; Université Haute-Alsace; Université de Strasbourg; INSA; PNDB; AgroParisTech; Université de Lille; Sorbonne Université; Data Terra, Mar 2024, Paris, France. hal-04708638

HAL Id: hal-04708638

https://hal.inrae.fr/hal-04708638v1

Submitted on 25 Sep 2024

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons Attribution 4.0 International License
# ODK, un outil open source pour la création de formulaires embarqués

<figure><img src="image_2.png" /></figure>

<figure><img src="image_3.png" /></figure>
# Contexte & constats à Inrae

* Développement des carnets de terrain électronique pour la collecte de données facilitée, sécurisée (Cf. qualité des données) par de multiples acteurs (agents Inrae; science participative/crowdsourcing...)

* Possibilité de s'adapter facilement et rapidement aux n protocoles des scientifiques

* Difficulté de maintien des solutions maison développées from scratch par manque de moyens humains/temps

ODK dans le CATI Gedeop, c'est une équipe projet ad-hoc (A. Bénard, F. Blaise, W. Heintz, S. Ladet, E. Quinton) réunis depuis 2022 avec comme objectifs :

* montée en compétences au sein du CATI Gedeop en 3 temps : **avril 2022**: formation de l'équipe projet (2 jours par M. Bossaert CEN, financé par Gedeop ), puis **janvier 2023**: atelier ODK à l'AG Gedeop puis **mars 2024**: au-delà de Gedeop à Inrae

* mise en place d'un serveur ODK Central, hébergé dans l'infrastructure technique d'INRAE

* construction de divers formulaires ODK (naturaliste, inventaire, enquête pratiques...).

<figure><img src="image_4.png" /></figure>

INRAE
# Résumé de fonctionnement d'ODK

## ☐ Ensemble d'outils Open Source pour :

1. Construire un formulaire, sous la forme d'un tableau, avec des questions à réponses de diverse nature: nombre, texte, date, donnée géographique point/ligne/polygone, image, audio, vidéo, QRcode... cf liste des types https://docs.getodk.org/form-question-types/ avec saisie contrôlée (bornes de valeurs, listes déroulantes simple / en cascade avec des référentiels internes ou externes ...) et champs calculés

2. Collecter avec un appareil nomade (ou web) ces données avec l'application mobile ODK Collect même en conditions contraintes (déconnecté)

3. Centraliser ces données, temporairement, dans ODK Central, serveur unique avant transfert

4. afin de pouvoir ensuite les exploiter dans des SGBD (PostgreSQL/PostGIS) et/ou des logiciels d'analyse (QGIS, R,...) via extensions, scripts API...

<figure><img src="image_5.png" /></figure>

<figure><img src="image_6.png" /></figure>

INRAO

Open Data Kit (ODK)

CAFE NUMERIQUE DIPSO 25/03/2024 / Groupe de travail GEDEOP ODK
# Gouvernance d'ODK et documentation

□ **Projet initié en 2008 et porté par la société GetODK**, qui développe ODK composée de 14 personnes qui s'appuie sur un comité technique TAB (Technical Advisory Board) impliquant des utilisateurs de toute la planète et de différents domaines. Ce TAB se réunit tous les 15 jours de manière très transparente.

* En 2020 ODK a été utilisé dans tous les pays du monde excepté au Groenland et en Corée du Nord !

* ODK Collect, la partie mobile a été téléchargé plus d'un million de fois sur le playstore de google.
  cf. https://getodk.org/#success-stories

□ **ODK Collect et ODK Central s'appuient sur des composants ouverts et interoperables**, produits / maintenus par GetODK, qui sont devenus des briques de base de l'industrie de la collecte de données mobile :

* XLSForm - Spécification de formulaires basée sur Excel

* pyxform - Librairie Python qui convertit les XLSForms en ODK Xforms

* ODK XForms - Spécification de formulaires basée sur la norme Xforms du W3C

* OpenRosa - APIs pour communication client/serveur des outils ODK

* Enketo Express - formulaires web compatible avec ODK

□ **Un forum vivant** https://forum.getodk.org en langue anglaise

* développé sous Discourse (comme le forum Dipso!) avec partage de fichiers tableurs (debug)

* 13000 membres inscrits

* qui facilite la co-construction des outils

<figure><img src="image_7.png" /></figure>
# Présentation de formulaire en quelques captures 1/2

Type de la question
(tous prédéfinis)

Nom interne
choisi

Titre affiché
(mis en gras dans
le formulaire)

<table><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td>type</td><td>name</td><td>label</td></tr><tr><td>begin group</td><td>presentation</td><td>Présentation de l'application</td></tr><tr><td>username</td><td>username</td><td>username</td></tr><tr><td></td><td>note_bienvenue</td><td>Bienvenue sur la démo ODK dans l'UE GeoAgri ENSAT 2A</td></tr><tr><td>note</td><td></td><td></td></tr><tr><td>note</td><td>devlp</td><td>développé par:</td></tr><tr><td>note</td><td>remerciement</td><td>Remerciements</td></tr><tr><td>note</td><td>contact</td><td>Contact</td></tr><tr><td>end group</td><td></td><td></td></tr><tr><td>begin group</td><td>releve</td><td>**Généralités sur le relevé**; TEXTE ET NOMBRES</td></tr><tr><td>date</td><td>releve_date</td><td>Date du relevé: choisissez dans le calendrier.</td></tr><tr><td>text</td><td>nom</td><td>Quel est votre nom ?</td></tr><tr><td>decimal</td><td>taille</td><td>Quelle est votre taille ?</td></tr><tr><td>integer</td><td>travees_nb</td><td>A quel rang dans la salle êtes-vous assis?</td></tr><tr><td>end group</td><td></td><td></td></tr></tbody></table>

<table><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td>begin_group</td><td>position</td><td>**Où êtes-vous situé**; CARTOS: question liée à position</td></tr><tr><td>geopoint</td><td>lat.lon</td><td>Position actuelle</td></tr><tr><td>calculate</td><td>latitude</td><td></td></tr><tr><td>calculate</td><td>longitude</td><td></td></tr><tr><td>select_one_from_file centre_bati_ensat_WGS84.geojson</td><td>centre_salle</td><td>Choisissez un bâtiment de l'ENSAT</td></tr><tr><td>geopoint</td><td>geo</td><td>Positionnez la salle sur la carte</td></tr><tr><td>end_group</td><td></td><td></td></tr><tr><td>begin_group</td><td>photo</td><td>**Et pour finir**; MEDIAS</td></tr><tr><td>image</td><td>photo</td><td>prendre et annoter une photo</td></tr><tr><td>end_group</td><td></td><td></td></tr></tbody></table>

<figure><img src="image_8.png" /><figcaption>Écran 1</figcaption></figure>

<figure><img src="image_9.png" /><figcaption>Écran 2</figcaption></figure>

<figure><img src="image_10.png" /><figcaption>Écran 3</figcaption></figure>

<figure><img src="image_11.png" /><figcaption>Écran 4</figcaption></figure>
# Présentation de formulaire en quelques captures 2/2

- ☐ Plein d'autres colonnes facultatives dans le tableau pour définir :

- les valeurs par défaut : date d'aujourd'hui (colonne default)

- la saisie contrôlée : bornes de valeurs de la taille (colonne constraint)

- Les champs calculés: le nom du collecteur

<figure><img src="image_12.png" /><figcaption>Écran 2</figcaption></figure>

<table><thead><tr><td>hint</td><td>constraint</td><td>constraint_message</td><td>calculation</td><td>required</td><td>appearance</td><td>default</td></tr></thead><tbody><tr><td>Saisie d'un texte, d'un nombre entier ou décimal (avec contrainte)</td><td></td><td></td><td></td><td></td><td>field-list</td><td>today()</td></tr><tr><td>Saisissez un texte</td><td></td><td></td><td>${username}</td><td>yes</td><td></td><td>${username}</td></tr><tr><td>Saississez un décimal en m contraint entre 2 bornes</td><td>${taille} >= 0.5 and ${taille} <= 2.5</td><td>Entre 0.5 m et 2.5 m SVP !</td><td></td><td></td><td></td><td>round(1.50 + 0.4 * random(),2)</td></tr><tr><td>Saississez un entier contraint entre 2 bornes (taper 30 par exemple)</td><td>> 0 and <= 25</td><td>Entre 1 et 25 ans SVP !</td><td></td><td>yes</td><td></td><td>10</td></tr></tbody></table>
# Quelques utilisations Inrae/Gedeop [nombre de soumissions reçues ODK Central]

☐ Suivi floristique, protocole Baïonnette, avec référentiel TaxRef, en mode déconnecté avec sélection des transects sur carte et fonction GoTo sur fond de carte Mbtiles ScanIGN (Dynafor, 2022) [58]

☐ Enquête web via Enketo sur études Inrae dans réserve MAB (Dynafor, 2023) [11]

☐ Collecte d'enregistrements sonores géolocalisée à Florence en Italie avec fond de carte OSM/GoogleHybride (Dynafor, 2023) [111]

☐ Travaux pratiques avec étudiants ENSAT (2ièmeA ; master 2) avec centralisation sur GoogleDrive (Dynafor, 2023) [16]

☐ Saisie d'informations relatives aux arbres d'un arboretum avec sélection sur fond carto (Silva, 2023) [55]

☐ Description de stations de prélèvements ADNe en rivière : saisie des paramètres lus sur les sondes, caractérisation du prélèvement (EABX, 2023,2024) [22]

☐ Saisie du résultat de tris de poissons en laboratoire avec mode web Enketo (EABX, projet DILEME, 2022,2023) [800]

<figure><img src="image_13.png" /></figure>

INRAE
# Administration du serveur ODK Central mutualisé

## ☐ Service proposé par Cati Gedeop:

https://odk.gedeop.inrae.fr (34 projets, 46 mbres au 18/03/24)

* Gestion des droits via divers rôles: administrateurs(équipe ODK Gedeop)/gestionnaires/simple utilisateurs

https://docs.getodk.org/central-users/#central-users-web-roles

* Les gestionnaires de projets :

* gère les formulaires (versionnés) regroupés par projets projet=1 unité INRAE

* les utilisateurs mobiles et leurs accès aux formulaires

* les soumissions et leur validation. Les soumissions sont consultables en ligne ou téléchargeable (archive zip)

* les utilisateurs web et leurs droits

* la publication web des formulaires avec Enketo

## ☐ Architecture et maintenance INRAE

* Machine virtuelle hébergée dans le datacenter de Toulouse (4 vCPU, RAM: 8 Go et 75 Go de disque)

* Machine sauvegardée

* Backup de la base de données vers le CINES :

* PgBackRest : sauvegarde incrémentale horaire en journée ouvrable

* Taille actuelle de la base de données : 2,5Go

* Rétention des sauvegardes pendant un mois

* Demande de création de compte et de projet via tickets Ariane: cf diapos suivantes

* Rédaction en cours des règles d'usage
https://forum.dipso.inrae.fr/t/odk-gedeop/2027

<figure><img src="image_14.png" /></figure>
# Ticket Ariane n°1: Demander un compte/espace

https://ariane.inrae.fr/block?id=ariane_sc_cat_item&sys_id=1e08275987db251096b2a7580cbb3566&sysparm_category=2ca7d5920f3b7500db989
36792050e22

- ☐ Demande sur Ariane dans Tous les catalogues => Informatique de proximité => Amélioration continue => ODK. (non automatisé, traitement manuel de la demande)

- ☐ Entrer le bénéficiaire d'un espace ou d'un compte, possibilité de demander l'espace (1 espace = 1 unité) et le compte sur le même formulaire.

- ☐ Possibilité d'ajouter un commentaire sur la demande.

<figure><img src="image_15.png" /></figure>
# Ticket Ariane n°2: Support

https://ariane.inrae.fr/block?id=ariane_sc_cat_item&sys_id=906528a10a0a0bf000a85bc20dfb6541&sys_parm_service=fd4305b81b57a110fffd09821b24bcb3f

- ☐ Possibilité de déclarer un incident ou de poser des questions sur Ariane.

- ☐ Nous ne fournissons pas de support pour coder les formulaires.

- ☐ Fiche de présentation du service dans la base de connaissances

<figure><img src="image_16.png" /></figure>

<figure><img src="image_17.png" /></figure>
# Exploitation des données

<figure><img src="image_18.png" /></figure>

## Soumissions

https://odk.gedeop.inrae.fr/
# Télécharger les soumissions d'un formulaire

https://docs.getodk.org/central-submissions/#downloading-submissions-as-csvs

## Via l'interface ODK Central

- ☐ Statut gestionnaire ou lecteur de projet

- ☐ Sélection du projet / formulaire / onglet 'Soumissions'

- ☐ Bouton 'Télécharger N soumissions' :

- 1 ou plusieurs fichiers csv selon les boucles de répétitions

- Des fichiers 'médias' (photos, sons ...)

<figure><img src="image_19.png" /></figure>

## Via pyodk (https://www.youtube.com/watch?v=slaquyz5bP8)

- ☐ Installer et importer 'import pyodk'

- ☐ Instancier la classe Client() ⚙️ connexion

- ☐ Utiliser les méthodes de l'objet submissions

- monclient.submissions.get_table(...)

- Gérer les blocs de répétition par jointure
# Télécharger les soumissions d'un formulaire

https://docs.getodk.org/central-submissions/#downloading-submissions-as-csvs

Via ruODK (https://docs.ropensci.org/ruODK/reference/ruODK-package.html)

☐ Installer et déclarer 'library ('ruODK')

☐ Utiliser la fonction ru_setup() ⚙️ connexion

☐ Lister les tables à récupérer :
odata_service_get()

☐ Récupérer les tables :
odata_submission_get(table = ...)

☐ Gérer les blocs de répétition par jointure

## Bonus

https://appgeodb.nancy.inrae.fr/donnees/documentations/ruodk/

☐ Un fichier pdf d'une demi-page qui décrit ce qu'il faut faire / savoir

☐ Un tuto video (11')

☐ Les sources

☐ Fonction qui récupère / fusionne

☐ 1 seul csv

☐ Multi csv

☐ Json

☐ Perspectives :

☐ Export SQLite

☐ Porter le travail sur pyodk
# PHPOdkRead

https://github.com/inrae/phpodkread

## Principe :

Le programme permet de créer un fichier JSON contenant l'ensemble des données présentes dans le fichier ZIP fourni par ODK

Structure hiérarchique (entrée *CHILDREN* créée à chaque niveau)

Positionnez correctement les « boucles »

Il est possible d'alimenter directement une base de données PostgreSQL (pas testé avec Mysql)

Une classe à écrire pour réaliser les opérations :

```php
<?php
```

```php
include_once "lib/db.class.php";
```

```php
class Dileme extends Db implements Database {
```

```php
(...)
```

## Lancement du code en ligne de commande

```bash
php odkread.php
```

Gère le déplacement des fichiers zip traités
# Ressources

* https://docs.getodk.org/ – Guide d'utilisation de la suite ODK (anglais)

* https://docs.getodk.org/collect-intro/ – Guide Utilisation ODK Collect

* https://docs.getodk.org/form-question-types/ – Inventaire des questions (widgets) utilisables dans les formulaires

* https://static.geotribu.fr/articles/2021/2021-06-08 odk postgis 1/ – Série de 3 articles présentant Open Data Kit en français

* https://xlsform.org/en/ – Guide complet d'utilisation (en anglais)

* https://www.youtube.com/watch?v=22l0xHxJ3vo – xlsform template

* https://xlsform.org/en/ref-table/ – Table de tous les items utilisables dans les 3 feuilles survey, choices et settings d'un classeur XLSForm

* https://biodiversityforms.org/ – Des formulaires relatifs à la biodiversité
# Conclusion & Perspectives

- [ ] Opensource / Mode Déconnecté / Cartographique

- [ ] Communauté +++)

- [ ] Facilité de mise en œuvre de la solution

- [ ] Grande souplesse (workflows simples ou complexes)

- [ ] Conception aisée de formulaires de saisie
  → Par des collègues « thématiciens »

- [ ] Intégration facilitée au SI préexistant

- [ ] Généricité
  → +/-

- [ ] Formation Inrae (tous CATIs), en cours de discussion avec Dipso/FTLV Inrae

- [ ] Elargir l'équipe projet

- [ ] Roadmap GetODK riche avec plus de fonctionnalités sur entités, widgets cartographiques

→ A la faveur d'un financement important de la Fondation Gates

ODK receives $3.7M Gates Foundation grant to improve global health data

ODK is used to collect the data that powers the fight against poverty, inequity, and disease around the world. In global health alone, the platform's impact has been notable. ODK was used to:

• Eradicate wild polio from Africa

• Prove the efficacy of the RTS,S malaria vaccine

• Measure the global burden of disease

This impact is only possible because of the incredible partners, big and small, ODK has had over the years. To everyone who has been an ODK champion, thank you. Together, we've changed the world!

This grant from the Gates Foundation enables us to continue making the world better through data. In particular, it will accelerate ongoing work extending ODK to better support global health workflows with geospatial and longitudinal data.

We have an incredible opportunity to further improve the health of the billions of people who live in the places where ODK is used. It's an opportunity we're excited to deliver on with you.

<figure><img src="image_20.png" /></figure>

INRAO
gedeop-odk-admin[at]inrae.fr

Merci de votre attention et place aux questions

Sources:

* Apéro technique OSU OREME du 30/01/24 avec intervention de Mathieu Bossaert (CEN Occitanie) devant CEFE et UMR G-eau INRAE Pierre Balzergue et Bruno Bonté : *lien à la présentation*

<figure><img src="image_21.png" /></figure>