RtspFace/PL_SensetimeFaceDetect.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
RtspFace/PL_SensetimeFaceDetect.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
RtspFace/SensetimeFaceAPIWrapper/src/FaceDBPool.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
RtspFace/SensetimeFaceAPIWrapper/src/faceAPI.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
RtspFace/main_face_daemon.cpp | ●●●●● 补丁 | 查看 | 原始文档 | 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;