houxiao
2017-01-11 6ec2cc5ab6bb2ef338461604636f5bd7dbb6ebbc
face daemon develop finish

git-svn-id: http://192.168.1.226/svn/proxy@89 454eff88-639b-444f-9e54-f578c98de674
5个文件已修改
77 ■■■■ 已修改文件
RtspFace/PL_SensetimeFaceDetect.cpp 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RtspFace/PL_SensetimeFaceDetect.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RtspFace/SensetimeFaceAPIWrapper/src/FaceDBPool.cpp 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RtspFace/SensetimeFaceAPIWrapper/src/faceAPI.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RtspFace/main_face_daemon.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RtspFace/PL_SensetimeFaceDetect.cpp
@@ -94,10 +94,10 @@
        return false;
    }
    faceDB* _faceDB = (faceDB*)frame->_faceDB;
    if (_faceDB == nullptr)
    faceAPI* _faceAPI = (faceAPI*)frame->_faceAPI;
    if (_faceAPI == nullptr)
    {
        LOG_ERROR << "faceDB is null";
        LOG_ERROR << "faceAPI is null";
        return false;
    }
    
@@ -109,8 +109,9 @@
    }
    
    cv::Mat yuvMat(cv::Size(frame->width,frame->height), CV_8UC3, frame->buffer);
    cv_feature_t* feature = _faceDB->extract_feature(yuvMat);
    in->lastResult.st_id = _faceDB->search_db(feature);
    //cv_feature_t* feature = _faceAPI->extract_feature(yuvMat);
    //in->lastResult.st_id = _faceAPI->search_db(feature);
    in->lastResult.st_id = _faceAPI->do_reasch(yuvMat);
    //#todo release feature
    
    in->lastResult.school_id = frame->school_id;
RtspFace/PL_SensetimeFaceDetect.h
@@ -8,9 +8,9 @@
struct SensetimeFaceDetectDbFrame : public MB_Frame
{
    int school_id;
    void* _faceDB;
    void* _faceAPI;
    
    SensetimeFaceDetectDbFrame() : MB_Frame(), school_id(-1), _faceDB(nullptr)
    SensetimeFaceDetectDbFrame() : MB_Frame(), school_id(-1), _faceAPI(nullptr)
    { }
};
RtspFace/SensetimeFaceAPIWrapper/src/FaceDBPool.cpp
@@ -1,5 +1,5 @@
#include "FaceDBPool.h"
#include "logger.h"
#include "../../logger.h"
#include "faceAPI.h"
#include <pthread.h>
@@ -26,7 +26,7 @@
struct MutexLocker
{
    pthread_mutex_t* mut;
    MutexLocker(pthread_mutex_t* _mut) : mut(_mut)
    MutexLocker(void* _mut) : mut((pthread_mutex_t*)_mut)
    {
        PLP_MUTEX_LOCK(mut,);
    }
@@ -44,12 +44,12 @@
    
    ThreadSafeFaceDB() : dbid(-1), db_mutex(), api(nullptr)
    {
        pthread_mutex_init(db_mutex, NULL);
        pthread_mutex_init(&db_mutex, NULL);
    }
    
    ~ThreadSafeFaceDB()
    {
        pthread_mutex_destroy(db_mutex);
        pthread_mutex_destroy(&db_mutex);
    }
};
@@ -69,12 +69,12 @@
    facedb_map_t* _face_db_map = (facedb_map_t*)face_db_map;
    for (facedb_map_t::iterator iter = _face_db_map->begin(); iter != _face_db_map->end(); ++iter)
    {
        iter->second.api->db_save();
        delete iter->second.api;
        iter->second->api->db_save();
        delete iter->second->api;
        delete iter->second;
    }
    
    _face_db_map.clear();
    _face_db_map->clear();
    
    pthread_mutex_destroy((pthread_mutex_t*)pool_mutex);
    delete (pthread_mutex_t*)pool_mutex;
@@ -90,14 +90,14 @@
    
    facedb_map_t* _face_db_map = (facedb_map_t*)face_db_map;
    
    if (_face_db_map.find(dbid) != _face_db_map.end())
    if (_face_db_map->find(dbid) != _face_db_map->end())
        return;
    
    ThreadSafeFaceDB* tsfdb = new ThreadSafeFaceDB;
    tsfdb.dbid = dbid;
    tsfdb.api = db;
    tsfdb->dbid = dbid;
    tsfdb->api = db;
    
    _face_db_map.insert(std::make_pair(dbid, tsfdb));
    _face_db_map->insert(std::make_pair(dbid, tsfdb));
}
void FaceDBPool::unmanage(int dbid)
@@ -105,15 +105,15 @@
    MutexLocker _ml(pool_mutex);
    facedb_map_t* _face_db_map = (facedb_map_t*)face_db_map;
    facedb_map_t::iterator iter = _face_db_map.find(dbid);
    if (iter == _face_db_map.end())
    facedb_map_t::iterator iter = _face_db_map->find(dbid);
    if (iter == _face_db_map->end())
        return;
    
    iter->second.api->db_save();
    delete iter->second.api;
    iter->second->api->db_save();
    delete iter->second->api;
    delete iter->second;
    
    _face_db_map.erase(iter);
    _face_db_map->erase(iter);
}
faceAPI* FaceDBPool::get_free(int dbid)
@@ -124,11 +124,11 @@
        MutexLocker _ml(pool_mutex);
        
        facedb_map_t* _face_db_map = (facedb_map_t*)face_db_map;
        if (_face_db_map.empty())
        if (_face_db_map->empty())
            return nullptr;
        
        facedb_map_t::iterator iter = _face_db_map.find(dbid);
        if (iter == _face_db_map.end())
        facedb_map_t::iterator iter = _face_db_map->find(dbid);
        if (iter == _face_db_map->end())
            return nullptr;
        
        tsfdb = iter->second;
@@ -136,7 +136,7 @@
    if (tsfdb != nullptr)
    {
        PLP_MUTEX_LOCK(tsfdb->db_mutex, nullptr);
        PLP_MUTEX_LOCK(&(tsfdb->db_mutex), nullptr);
        return tsfdb->api;
    }
}
@@ -149,18 +149,18 @@
        MutexLocker _ml(pool_mutex);
        
        facedb_map_t* _face_db_map = (facedb_map_t*)face_db_map;
        if (_face_db_map.empty())
        if (_face_db_map->empty())
            return;
        
        facedb_map_t::iterator iter = _face_db_map.find(dbid);
        if (iter == _face_db_map.end())
            return nullptr;
        facedb_map_t::iterator iter = _face_db_map->find(dbid);
        if (iter == _face_db_map->end())
            return;
        
        tsfdb = iter->second;
    }
    
    if (tsfdb != nullptr)
    {
        PLP_MUTEX_UNLOCK(tsfdb->db_mutex,);
        PLP_MUTEX_UNLOCK(&(tsfdb->db_mutex),);
    }
}
RtspFace/SensetimeFaceAPIWrapper/src/faceAPI.h
@@ -22,6 +22,8 @@
    int do_reasch(cv::Mat image);
    //注册  后台另一进程调用
    int do_register(cv::Mat image);
    bool db_save();
private:
RtspFace/main_face_daemon.cpp
@@ -57,7 +57,7 @@
PipeLinePool g_PipeLinePool;
FaceDBPool g_FaceDBPool;//#todo config
FaceDBPool g_faceAPIPool;//#todo config
evclient_proc_t evclient_proc;
@@ -102,15 +102,15 @@
    
    FDP_Image* fdpImage = (FDP_Image*)(client.recvBuff + sizeof(EVPHeader));
    faceAPI* _faceDB = g_FaceDBPool.get_free(fdpImage->school_id);
    if (_faceDB == nullptr)
    faceAPI* _faceAPI = g_faceAPIPool.get_free(fdpImage->school_id);
    if (_faceAPI == nullptr)
    {
        LOG_WARN << "can't get face db";
        ev_send_status_packet(client, EVPStatus::EVPS_PARAMETER_ERROR);
        return false;
    }
    
    PoolElemLocker<FaceDBPool*, int> _lock_faceDB(&g_FaceDBPool, fdpImage->school_id);
    PoolElemLocker<FaceDBPool*, int> _lock_faceAPI(&g_faceAPIPool, fdpImage->school_id);
    PipeLine* pipeLine = g_PipeLinePool.get_free();
    if (pipeLine == nullptr)
@@ -132,7 +132,7 @@
    dbFrame.width = fdpImage->width;
    dbFrame.height = fdpImage->height;
    dbFrame.school_id = fdpImage->school_id;
    dbFrame._faceDB = _faceDB;
    dbFrame._faceAPI = _faceAPI;
    PipeMaterial pm;
    pm.type = PipeMaterial::PMT_FRAME;