IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Zone cliquable dans image


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 41
    Points : 12
    Points
    12
    Par défaut Zone cliquable dans image
    Bonjour,

    Je développe actuellement un projet de détection et reconnaissance faciale. J'utilise donc Visual studio et code en C++ avec la librairie opencv.
    La détection et la reconnaissance marchent mais maintenant j'aimerai pouvoir traiter la reconnaissance d'un visage.


    Ma question est la suivante, j'obtiens par exemple cette image:


    Comment afficher "cliqué" lorsque je fais un clique gauche uniquement dans le rectangle ?
    Sachant que je connais les coordonnés et la taille de ce rectangle ?

    Tous les cliques à détecter seront uniquement dans des rectangles.
    J'ai déjà fais des recherches à droite à gauche mais j'ai pas trouvé ça très clair.

    Merci à vous

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Soir,

    Cela dépend de la bibliothèque graphique utilisé pour afficher l'image.
    Donc, quelle bibliothèque est utilisée ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    Comme indiqué, j'utilise la librairie opencv.

    Voici l'extrait du code qui crée un rectangle pour chaque visage détecté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
                // Process face by face:
                Rect face_i = faces[i];
                // Crop the face from the image. So simple with OpenCV C++:
                Mat face = gray(face_i);
     
                // Resizing the face is necessary for Eigenfaces and Fisherfaces. You can easily
                // verify this, by reading through the face recognition tutorial coming with OpenCV.
                // Resizing IS NOT NEEDED for Local Binary Patterns Histograms, so preparing the
                // input data really depends on the algorithm used.
                //
                // I strongly encourage you to play around with the algorithms. See which work best
                // in your scenario, LBPH should always be a contender for robust face recognition.
                //
                // Since I am showing the Fisherfaces algorithm here, I also show how to resize the
                // face you have just found:
                Mat face_resized;
     
                cv::resize(face, face_resized, Size(im_width, im_height), 1.0, 1.0, INTER_CUBIC);
                // Now perform the prediction, see how easy that is:
                int prediction = model->predict(face_resized);
                // And finally write all we've found out to the original image!
                // First of all draw a green rectangle around the detected face:
                rectangle(original, face_i, CV_RGB(0, 255,0), 1);

    Les dimensions du rectangle sont contenues dans face_i.
    Comment donc, détecter un clic dans le rectangle ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Dans la fonction callback fixée avec cv::setMouseCallback, il suffit de vérifier si les coordonnées (x,y) en paramètre sont bien dedans.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Merci, à toi, j'ai pu utiliser cette fonction et j'arrive à traiter un clic dans l'image mais pas encore le clic uniquement dans un rectangle.

    J'ai bien compris que la fonction MouseEvent récupérait la position du curseur c'est pour ça que j'ai fais quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ((x >=xRect && x <= xRect + WidthRect) && (y >=yRect && y <= yRect + HeightRect){
    		////CODE/////
    		}
    Je remplace par les valeurs brutes et ça marche, ça ne fait le code que lors d'un clic dans le rectangle dont les paramètres sont dans la condition.
    Mais faudrait faire ça pour chaque rectangle donc c'est un peu lourd surtout que le nombre de rectangle sur les images varie et leurs dimensions ne sont pas les mêmes pour tous.
    Faudrait faire quelque chose d'un peu plus dynamique.
    J'ai une boucle qui crée n rectangle(s) et dans cette boucle j'ai un objet face_i de type Rect qui contient les coordonnées et dimensions du rectangle à créer (x,y,width,height). Je pense que je pourrai m'en servir mais je ne vois pas comment ? Tableau ? Mais comment le réutiliser après?

    Afin de vous éclaircir au maximum, voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    /*
     * Copyright (c) 2011. Philipp Wagner <bytefish[at]gmx[dot]de>.
     * Released to public domain under terms of the BSD Simplified license.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions are met:
     *   * Redistributions of source code must retain the above copyright
     *     notice, this list of conditions and the following disclaimer.
     *   * Redistributions in binary form must reproduce the above copyright
     *     notice, this list of conditions and the following disclaimer in the
     *     documentation and/or other materials provided with the distribution.
     *   * Neither the name of the organization nor the names of its contributors
     *     may be used to endorse or promote products derived from this software
     *     without specific prior written permission.
     *
     *   See <http://www.opensource.org/licenses/bsd-license>
     */
    #include <opencv2\opencv.hpp>
    #include <opencv2/core/core.hpp>
    #include <opencv2/contrib/contrib.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/objdetect/objdetect.hpp>
    #include <windows.h>
    #include <iostream>
    #include <fstream>
    #include <sstream>
     
    using namespace cv;
    //using namespace cv::face;
    using namespace std;
     
    static void read_csv(const string& filename, vector<Mat>& images, vector<int>& labels, char separator = ';') {
        std::ifstream file(filename.c_str(), ifstream::in);
        if (!file) {
            string error_message = "No valid input file was given, please check the given filename.";
            CV_Error(CV_StsBadArg, error_message);
        }
        string line, path, classlabel;
        while (getline(file, line)) {
            stringstream liness(line);
            getline(liness, path, separator);
            getline(liness, classlabel);
            if(!path.empty() && !classlabel.empty()) {
                images.push_back(imread(path, 0));
                labels.push_back(atoi(classlabel.c_str()));
            }
        }
    }
     
     
    void mouseEvent(int evt, int x, int y, int flags, void* param) {                    
        Mat* rgb = (Mat*) param;
        if (evt == CV_EVENT_LBUTTONDOWN) { 
     
    		//if ((xCurseur >=x && xCurseur <= x + WidthRect) && (yCurseur >=y && xCurseur <= y + HeightRect){
    		////CODE/////
    		//}
       ShellExecute(0, 0, L"http://www.google.com", 0, 0 , SW_SHOW );
        }         
    }
     
    //extern "C"__declspec(dllexport) 
     
    int main(int argc, const char *argv[]) {
        // Check for valid command line arguments, print usage
        // if no arguments were given.
      /* if (argc != 4) {
            cout << "usage: " << argv[0] << " </path/to/haar_cascade> </path/to/csv.ext> </path/to/device id>" << endl;
            cout << "\t </path/to/haar_cascade> -- Path to the Haar Cascade for face detection." << endl;
            cout << "\t </path/to/csv.ext> -- Path to the CSV file with the face database." << endl;
            cout << "\t <device id> -- The webcam device id to grab frames from." << endl;
            exit(1);
        }
        // Get the path to your CSV:
        string fn_haar = string(argv[1]);
        string fn_csv = string(argv[2]);
        int deviceId = atoi(argv[3]); */
     
    	string fn_haar="D:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml";
    	string fn_csv = "D:\\opencv\\csv.ext";
    	int deviceId = 0;
        // These vectors hold the images and corresponding labels:
        vector<Mat> images;
        vector<int> labels;
        // Read in the data (fails if no valid input filename is given, but you'll get an error message):
        try {
            read_csv(fn_csv, images, labels);
        } catch (cv::Exception& e) {
            cerr << "Error opening file \"" << fn_csv << "\". Reason: " << e.msg << endl;
            // nothing more we can do
            exit(1);
        }
        // Get the height from the first image. We'll need this
        // later in code to reshape the images to their original
        // size AND we need to reshape incoming faces to this size:
        int im_width = images[0].cols;
        int im_height = images[0].rows;
        // Create a FaceRecognizer and train it on the given images:
        Ptr<FaceRecognizer> model = createFisherFaceRecognizer();
        model->train(images, labels);
        // That's it for learning the Face Recognition model. You now
        // need to create the classifier for the task of Face Detection.
        // We are going to use the haar cascade you have specified in the
        // command line arguments:
        //
        CascadeClassifier haar_cascade;
        haar_cascade.load(fn_haar);
     
    	Mat original;
    	original= imread("D:\\hugh.jpg", CV_LOAD_IMAGE_COLOR);
            // Convert the current frame to grayscale:
            Mat gray;
            cvtColor(original, gray, CV_BGR2GRAY);
            // Find the faces in the frame:
            vector< Rect_<int> > faces;
            haar_cascade.detectMultiScale(gray, faces);
            // At this point you have the position of the faces in
            // faces. Now we'll get the faces, make a prediction and
            // annotate it in the video. Cool or what?
            for(unsigned int i = 0; i < faces.size(); i++) {
                // Process face by face:
                Rect face_i = faces[i];
                // Crop the face from the image. So simple with OpenCV C++:
                Mat face = gray(face_i);
                // Resizing the face is necessary for Eigenfaces and Fisherfaces. You can easily
                // verify this, by reading through the face recognition tutorial coming with OpenCV.
                // Resizing IS NOT NEEDED for Local Binary Patterns Histograms, so preparing the
                // input data really depends on the algorithm used.
                //
                // I strongly encourage you to play around with the algorithms. See which work best
                // in your scenario, LBPH should always be a contender for robust face recognition.
                //
                // Since I am showing the Fisherfaces algorithm here, I also show how to resize the
                // face you have just found:
                Mat face_resized;
                cv::resize(face, face_resized, Size(im_width, im_height), 1.0, 1.0, INTER_CUBIC);
                // Now perform the prediction, see how easy that is:
                int prediction = model->predict(face_resized);
                // And finally write all we've found out to the original image!
                // First of all draw a green rectangle around the detected face:
                rectangle(original, face_i, CV_RGB(0, 255,0), 1);
                // Create the text we will annotate the box with:
                string box_text = format("Prediction = %d", prediction);
                // Calculate the position for annotated text (make sure we don't
                // put illegal values in there):
                int pos_x = max(face_i.tl().x - 10, 0);
                int pos_y = max(face_i.tl().y - 10, 0);
                // And now put it into the image:
                putText(original, box_text, Point(pos_x, pos_y), FONT_HERSHEY_PLAIN, 1, CV_RGB(0,255,0), 2);
            }
     
     
     
    		imwrite("D:\\ImageScanée.jpg", original);
    		namedWindow( "face_recognizer", 0 );
     
    		//Detect click on window and call mouseEvent
    		 cvSetMouseCallback("face_recognizer", mouseEvent,0);
     
    		// Show the result:
            imshow("face_recognizer", original);
     
            // And display it:
    	   waitKey(0);
     
     
    	   return 0;
    }

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Bon je n'y arrive toujours pas mais j'ai précisé l'idée !

    Je pense qu'il faudrait que je passe mon...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector< Rect_<int> > faces;
    ...en paramètre de la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cvSetMouseCallback("face_recognizer", mouseEvent,faces);
    puis le définir comme cela dans la mouseEvent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void mouseEvent(int evt, int x, int y, int flags, vector< Rect_<int> >tableau) {
    Mais ça ne marche pas, j'arrive pas à récupérer ce vecteur dans ma méthode mouseEvent car il me dit ce que je sais déjà: que ce n'est pas un void*
    Une idée ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jofcd Voir le message
    Je pense qu'il faudrait que je passe mon...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector< Rect_<int> > faces;
    ...en paramètre de la méthode
    C'est cela oui, dans le principe, mais la signature de la fonction doit rester la même, avec un void *. Il faut alors faire passer l'adresse de faces comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cv::setMouseCallback("face_recognizer", mouseEvent, static_cast<void*>(&faces));
    et le récupérer de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void mouseEvent(int evt, int x, int y, int flags, void * param) {
        vector< Rect_<int> > const & faces = *static_cast< vector< Rect_<int> >* > (param);
        // ...
    }
    Note : cv::setMouseCallback pour l'interface C++ d'OpenCV et cvSetMouseCallback pour le C.

    EDIT : Référence préférable effectivement jo_link_noir
    Dernière modification par Invité ; 15/12/2014 à 23h09.

  8. #8
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    vector< Rect_<int> > const & faces = ... (ou juste pas référence) pour éviter les copies inutiles.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Bonsoir, merci pour vos réponses
    J'ai entre temps trouvé effectivement comment il fallait faire, je me suis surpris moi même à vrai dire ^^

    Et c'est bien comme vous l'indiquez:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	vector<Rect_<int>>* tableau(static_cast<vector<Rect_<int>>*>(param));
    	auto it=tableau->begin();
    Maintenant, j'essai de récupérer mon car je voudrai qu'en fonction de sa valeur, un clic redirige sur tel ou tel site Web par exemple. Chaque rectangle est associé à un entier prédiction.
    Faudrait crée un tableau non puis le passer en paramètre de mouseEvent ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Un int prediction étant associé à chaque Rect_<int> de faces, tu peux par exemple utiliser et passer à la place un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector< std::pair<int, Rect_<int> > >

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Oh interréssant ! merci
    Et cette fonction pair à pour fonction d'associer si j'ai bien compris?

  12. #12
    Invité
    Invité(e)
    Par défaut
    std::pair<int, Rect_<int> > n'est pas une fonction, mais structure template avec dans notre cas deux champs :
    • .first de type int
    • .second de type Rect_<int>

    sa documentation

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Après un peu de réfléxion, voila donc ce que j'ai fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vector< Rect_<int> > faces;
    		vector<int> prediction;
    		vector<pair<vector<int>,vector< Rect_<int> >>> label;
    J'ai déjà passé le prediction en vecteur d'entier puis j'ai fais un vecteur qui regroupe les deux vecteurs dans un même vecteur.

    Je les regroupe en faisant cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    label.push_back(make_pair(prediction,faces));
    Première question, je dois bien mettre ce regroupement dans la boucle ?

    Ensuite, je le passe en paramètre de mon cvSetMouseCallback:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cvSetMouseCallback("face_recognizer", mouseEvent, (void*)&label);
    Puis le récupère dans la fonction MouseEvent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<pair<vector<int>,vector< Rect_<int> >>>* tableau(static_cast<vector<pair<vector<int>,vector< Rect_<int> >>>*>(param));
    Mais une fois que je fais ça, je ne sais pas comment traiter tableau.
    Comment recupérer le prediction ou le faces car lorsque je n'ai pas accès au méthode first et second sur label?


    EDIT:
    Ah j'ai trouvé ! il faut préciser le rang de l'élément voulu j'ai donc fait ça dans ma fonction mouseEvent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	vector<pair<vector<int>,vector< Rect_<int> >>>* tableau(static_cast<vector<pair<vector<int>,vector< Rect_<int> >>>*>(param));
    	auto it=tableau->begin();
    	int xRect,Yrect,Hrect,Wrect;
     
    	for (int i = 0; i < tableau->size(); i++)
    	{
    		xRect=it[i].second[i].x;
    Problème, lorsque je lance, j'ai une erreur "vector subscript out of range". Ca peut venir d'où d'après vous ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Pourquoi faire un vector du pair ?
    De ce que j'ai compris (je peux me tromper) tu as seulement des paires (prediction[i], face[i]), là tu sembles vouloir introduire une dimension supplémentaire ?
    Le pair seul suffit à regrouper tes deux vectors, pas besoin d'un vector par dessus, ni des deux autres vector< Rect_<int> > faces; et vector<int> prediction;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pair< vector<int>, vector<Rect_<int>> > label;
    label.first // == prediction
    label.second // == faces
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setMouseCallback("face_recognizer", mouseEvent, static_cast<void*>(&label));
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pair<vector<int>, vector< Rect_<int> >> const & label =  *static_cast< pair< vector<int>, vector<Rect_<int>> >* >(param));
    for (int i = 0; i < label.first.size(); i++)
    {
        prediction = label.first[i];
        xRect = label.second[i].x;
        ...

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Merci, en fait j'avais mal fait plusieurs choses:
    Mon vecteur<int> prediction et effectivement vu que j'ai déclarée la paire en vector, j'avais oublié d'indiquer l'élément du vector.

    Bref tout cela est règlé et tout marche comme je le souhaite J'arrive à rediriger sur un site lors d'un clic sur un rectangle à prediction 5 et sur un autre lors d'un clic sur un rectangle à prédiction 2.

    La partie traitement de l'image est donc clos pour mon projet (enfin je peux encore améliorer quelques petites choses je pense).

    Maintenant, l'idée est de créer un site WEB. Vous me direz facile pour ceux qui en on déjà fait en PHP ou autre mais je n'ai utilisé que Windev/WebDev donc je sais pas trop m'y prendre en php, HTML/CSS mais si faut passer par là pas de soucis !

    Sur ce site WEB, je voudrai permettre à une personne:
    -De se créer un compte
    -De se connecter
    -De rentrer quelques informations sur lui
    -D'uploader des images qu'il aura sélectionné dans l'explorateur (afin de rendre les images accessibles pas des URL).

    Voila donc toutes les fonctionnalités que je voudrai donner au site.

    Vous l'aurez compris, je vais mettre en place un base de données qui aura par exemple pour attributs "nom","prenom","login","MDP","InfosPerso","NumCompte"

    A chaque création de compte, on remplira donc tous ces attributs et j'attribuerai à chaque nouveau compte un "NumCompte" unique (propre au compte: ce qui me servira pour identifier l'utilisateur).

    Concernant l'upload, après avoir séléctionné ses photos, l'utilisateur clique sur un bouton "charger". Je veux alors uploader les photos sur un serveur et écrire une ligne de texte composée de l'url de l'image et du NumCompte avec laquelle elle à été hébergé dans un fichier.

    Ca peut parraitre complexe mais j'ai expliqué tout le fonctionnement du site.
    A l'heure qu'il est la question que je me pose surtout c'est déjà qu'elle est le meilleur langage pour faire mon site ? PHP, HTML/CSS,...?
    Concernant l'interface, si il existe des modèles tout fait pouvant s'intégrer à mon site, ça m'interresse (y'a de beaux template sur internet)
    Si je pose la question ici c'est parce que vous connaissez un peu mon programme et qu'il sera lié au site, bien sur en fonction de vos réponses, j'irai demander de l'aide dans les sections appropriées après

    Merci à vous déjà pour toute votre aide

  16. #16
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je ne suis pas expert en dev web, mais pour ce genre de trucs, moi je chercherais du côté de nodejs ou ce genre de solution.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Tout ce que tu décris pour ton site n'a rien de complexe et de nombreux (quasi tous en fait) CMS ou forums le proposent.
    Vouloir faire un site en C++, c'est possible, mais j'appelle ça du suicide perso. En PHP/SQL ton truc se réalise en quelques heures. Encore moins si tu utilises une techno prête à l'emploi. Dans ce cas il s'agit de faire un upload, lancer l'install et paramétrer un peu le backoffice.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  18. #18
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Vouloir faire un site en C++, c'est possible, mais j'appelle ça du suicide perso.
    Voir du terrorisme
    Mais il a bien dit qu'il ne voulait pas faire ça en c++
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  19. #19
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Merci à vous

    J'ai regardé du côté de node.js, effectivement, ça à l'air pas mal, j'ai juste regardé le principe et un petit code pour me donner un aperçu. A creuser, je vais continuer de m'informer sur cet outil.
    Et effectivement le site en c++ je n'y pense même pas, il y'a des langages bien plus spécialisés pour faire des sites (php,...) alors autant les utiliser.

    Je ne connaissais pas ce principe de CMS, ça correspond bien, on peut faire des uploads, remplir une base de données,...
    En PHP/SQL ton truc se réalise en quelques heures. Encore moins si tu utilises une techno prête à l'emploi. Dans ce cas il s'agit de faire un upload, lancer l'install et paramétrer un peu le backoffice.
    Quand tu dis techno, tu penses à laquelle, les CMS?
    Sur internet, j'ai trouvé des sites CMS déjà tout fait et ai téléchargé "PHPBoost CMS" quelqu'un l'a déjà utilisé ? Apparemment la première chose à faire est de transférer les dossiers sur un serveur web pour l'installer dessus et avoir accès au site. Ensuite il faut le paramétrer (BDD, Admin,...). C'est ce qu'il me faudrait faire ? Si oui alors la première chose à faire est que je "loue" un serveur Web genre kalanda ou autre ?

    Mes questions peuvent parraître novice mais c'est pour être sur de me lancer dans la bonne direction

  20. #20
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    pour les conseils web, demande donc sur le forum web, les réponses seront plus rapides... Et regarde la faq relative
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. Zone cliquable dans une image
    Par rad_hass dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/11/2010, 12h00
  2. Zone cliquable dans bandeau cliquable ?
    Par frmars dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 02/05/2010, 20h18
  3. Delimiter zone cliquable sur image
    Par SebastianPx dans le forum 2D
    Réponses: 6
    Dernier message: 28/02/2009, 19h29
  4. Positionnement zones cliquables sur image background mise en image map
    Par triblonto dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 22/01/2008, 15h42
  5. [gtkmm] Zone cliquable dans une fenetre?
    Par Valkirion dans le forum GTK+
    Réponses: 9
    Dernier message: 13/04/2007, 03h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo