예제 #1
0
파일: Nnode.cpp 프로젝트: rand0wn/ask-dsa
int main(){
	
	std::forward_list<int> s = {1,2,3,4,5,6};
	std::cout<<iReturn(s, 1)<<" "<<rReturn(s, 1)<<" "<<pReturn(s, 1)<<"\n";
	
	return 0;
}
예제 #2
0
/**
 * @brief FacialModule::onScoreRequest
 * On charge le modèle contenue dans le filename
 * On enregistre l'image de la personne dans une Mat
 * On tente la reconnaissance
 * @param p
 */
void FacialModule::onScoreRequest(Packet *p) {

    ScoreResultPacket pReturn(p);
    ScoringVector *score = new ScoringVector();

    FacialUtils::loadFaceRecognizer(_faceRecognizer, FACERECO);

    vector<uint8> img(p->getData(), p->getData() + p->getBodySize());

    Mat m = imdecode(img, CV_LOAD_IMAGE_GRAYSCALE);

    //On recupère la prediction;
    double confidence = 0.0;
    int predictedLabel = -1;

    try {
        _faceRecognizer->predict(m, predictedLabel, confidence);
    } catch(Exception) {
        *this << WARNING << "Impossible de prédire un score" << endl;
        score->push_back(Score("Inconnu", confidence));
    }

    map<int, string> names = FacialUtils::reloadFromCSVFile(FICHIER);

    if(predictedLabel != -1) {
        score->push_back(Score(names[predictedLabel], confidence));
        //*this << INFO << names[predictedLabel] << confidence << endl;
    }

    pReturn.setScoringVector(score)->doSend();
}
예제 #3
0
/**
 * @brief FacialModule::onListRequest
 * Listing de toutes les personnes contenues dans le fichier csv
 * @param p
 */
void FacialModule::onListRequest(Packet *p) {

    map<int, string>::iterator iter;
    PeopleVector *vp = new PeopleVector();

    map<int, string> names = FacialUtils::reloadFromCSVFile(FICHIER);

    for(iter = names.begin(); iter != names.end(); ++iter) {
        vp->push_back(Person(iter->second));
    }

    ListResultPacket pReturn(p);
    pReturn.setPeopleVector(vp)->doSend();
}
예제 #4
0
/**
 * @brief FacialModule::onTrainRequest
 * On cherche le dernier label du fichier csv
 * On vérifie que le nom envoyé n'est pas contenu dans le csv
 *
 * 2 - Absence de la personne
 * --- on ouvre le fichier csv en écriture et on enregiste la personne
 * --- sous la forme "dernierlabel;nom". On entraine ensuite le modele
 * --- et on met à jour les informations contenues dans le fichier csv
 *
 * 1 - Présence de la personne
 * --- on met juste à jour le modele en donnant l'image de personne
 * --- et son label associé
 *
 * @param p
 */
void FacialModule::onTrainRequest(Packet *p) {

    *this << DEBUG << "Train Request" << endl;

    *this << DEBUG << "Loading FaceRecognizer..." << endl;
    FacialUtils::loadFaceRecognizer(_faceRecognizer, FACERECO);
    *this << DEBUG << "FaceRecognizer loaded" << endl;
    TrainRequestPacket trp(p);
    string name = trp.getPerson()->getId(); //nom de la personne
    vector<uint8> img(trp.getTrainData(), trp.getTrainData() + trp.getTrainDataSize());

    char a[50];

    Mat m = imdecode(img, CV_LOAD_IMAGE_GRAYSCALE);

    int labelName = FacialUtils::labelFromName(FICHIER, name);

    vector<Mat> newImage;
    vector<int> newLabel;

    newImage.push_back(m);

    if(labelName == -1) {
        labelName = FacialUtils::lastClassLabel(FICHIER);
        FacialUtils::newUser(FICHIER, labelName, name);
    }

    newLabel.push_back(labelName);

    _faceRecognizer->update(newImage, newLabel);

    *this << DEBUG << "Train Request complete" << endl;

    _faceRecognizer->save(FACERECO);

    TrainResultPacket pReturn(p);
    pReturn.doSend();

}