API Appareil Photo

Bonsoir a tous

Je sollicite votre aide car après plusieurs heure de recherche je ne trouve aucune documentation sur mon projet de GoogleSheet.

Je souhaiterais depuis une tablette et une feuille Sheet en ligne pouvoir lancer a partir d'un bouton (clic) une photo qui s'intégrer dans un groupe de cellule.

Je ne troupe vraiment rien sur une API existante ou même un code permettant d'appeler la camera de la "device" exécutant la page.

J'en suis a tel point que je me demande tout simplement si c'est possible

Merci par avance de votre aide ou de vos pistes éventuelles

R

Bonjour,

C'est intéressant comme projet, voici une idée de déroulé :

1- lancer l'appareil photo et stocker la photo dans google drive (pour cela il faut interagir avec l'api de google chrome, google apps script n'interagissant pas avec les périphériques)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Camera Capture and Save to Google Drive</title>
</head>
<body>

<script src="https://apis.google.com/js/api.js"></script>
<script>
    document.addEventListener('DOMContentLoaded', function () {
        // Vérifie si l'API MediaDevices est supportée par le navigateur
        if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
            // Demande à l'utilisateur l'autorisation d'accéder à la caméra
            navigator.mediaDevices.getUserMedia({ video: true })
                .then(function (stream) {
                    // Affiche le flux vidéo dans un élément video
                    var video = document.createElement('video');
                    document.body.appendChild(video);
                    video.srcObject = stream;
                    video.play();

                    // Ajoute un bouton pour prendre la photo et la sauvegarder sur Google Drive
                    var captureButton = document.createElement('button');
                    captureButton.textContent = 'Prendre une photo et sauvegarder sur Google Drive';
                    document.body.appendChild(captureButton);

                    // Lorsque le bouton est cliqué, capture une image du flux vidéo et enregistre sur Google Drive
                    captureButton.addEventListener('click', function () {
                        var canvas = document.createElement('canvas');
                        canvas.width = video.videoWidth;
                        canvas.height = video.videoHeight;
                        canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);

                        // Convertit l'image en base64
                        var imageData = canvas.toDataURL('image/png');

                        // Enregistre l'image sur Google Drive
                        saveToDrive(imageData);

                        // Arrête le flux vidéo et libère la ressource
                        stream.getTracks().forEach(function (track) {
                            track.stop();
                        });
                    });
                })
                .catch(function (error) {
                    console.error('Erreur lors de l\'accès à la caméra : ', error);
                });
        } else {
            console.error('L\'API MediaDevices n\'est pas supportée par ce navigateur.');
        }
    });

    function saveToDrive(imageData) {
        // Remplacez ces valeurs par celles de votre propre projet
        var clientId = 'YOUR_CLIENT_ID';
        var apiKey = 'YOUR_API_KEY';
        var scope = 'https://www.googleapis.com/auth/drive.file';

        // Initialise l'API Google Drive
        gapi.client.init({
            apiKey: apiKey,
            clientId: clientId,
            discoveryDocs: ['https://www.googleapis.com/discovery/v1/apis/drive/v3/rest'],
            scope: scope
        }).then(function () {
            // Crée un fichier dans Google Drive
            gapi.client.drive.files.create({
                resource: {
                    name: 'CapturedImageTemp.png', // Nom du fichier à créer
                    mimeType: 'image/png' // Type MIME de l'image
                },
                media: {
                    mimeType: 'image/png',
                    body: imageData.split(',')[1] // Données base64 de l'image
                }
            }).then(function (response) {
                console.log('Image enregistrée sur Google Drive :', response.result);
            }).catch(function (error) {
                console.error('Erreur lors de l\'enregistrement sur Google Drive : ', error);
            });
        });
    }
</script>

</body>
</html>

2- ensuite c'est tout simple, il faut juste récupérer dans le dossier drive la photo CapturedImageTemp.png et l'inserer dans une cellule sheet, puis, supprimer la photo du Drive.

function insertImageInCell(imageURL, sheetName, cellAddress) {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = spreadsheet.getSheetByName(sheetName);

    // Obtenez la cellule spécifiée
    var cell = sheet.getRange(cellAddress);

    // Efface le contenu de la cellule
    cell.clearContent();

    // Insérez l'image dans la cellule
    var image = UrlFetchApp.fetch(imageURL);
    sheet.insertImage(image, cell.getColumn(), cell.getRow());
}

Attention, ces scripts ne sont que des ébauches, ce n'est pas fonctionnel en l'état, juste une piste pour atteindre votre objectif.

Bonjour,
Merci beaucoup pour votre retour !

Je vais essayer de mettre ça en place malgré mes maigres connaissances ennemis dev....
J'essai de faire un retour dans le week-end avec un fichier test

Merci encore

RA

Rechercher des sujets similaires à "api appareil photo"