重复识别

master
lzq 2025-06-23 15:33:12 +08:00
parent e388c5a8eb
commit e7cb901478
1 changed files with 23 additions and 1 deletions

View File

@ -18,7 +18,7 @@ namespace zsy
GenericBarrier::GenericBarrier(const BarrierProperties &config) GenericBarrier::GenericBarrier(const BarrierProperties &config)
: config(config) : config(config)
{ {
Application::eventManager->subscribe(config.sn + "/open", [this](const EventManager::Event&) Application::eventManager->subscribe(config.sn + "/open", [this](const EventManager::Event &)
{ {
this->open(); this->open();
}); });
@ -48,6 +48,8 @@ namespace zsy
Application::httpSvr->postEndpoint("/plateRecognize", [](const httplib::Request &req, httplib::Response &res) Application::httpSvr->postEndpoint("/plateRecognize", [](const httplib::Request &req, httplib::Response &res)
{ {
static std::unordered_map<std::string, long long> cache;
static std::mutex cacheMutex;
try try
{ {
auto body = req.body; auto body = req.body;
@ -75,6 +77,26 @@ namespace zsy
res.set_content(R"({})", "application/json"); res.set_content(R"({})", "application/json");
return; return;
} }
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
auto key = serialno + license;
long long time = ms + 60000 * 5;
{
std::lock_guard<std::mutex> lock(cacheMutex);
std::erase_if(cache, [time](const auto &pair)
{
return pair.second >= time;
});
if (cache.contains(key))
{
if (cache[key] < time)
{
res.set_content(R"({})", "application/json");
LOGGER_INFO("重复的车牌识别结果:{} {}", serialno, license);
return;
}
}
cache[key] = ms;
}
Application::threadPool->submit([imageFile,license, barrier = Application::deviceHolder->getBarrier(serialno)] Application::threadPool->submit([imageFile,license, barrier = Application::deviceHolder->getBarrier(serialno)]
{ {