Skip to content

Releases: ProtectorAnalytics/protector-isapi-manager

v4.2.1 — Event Listener: recebe fotos via HTTP Host

02 Apr 00:42

Choose a tag to compare

Nova funcionalidade: Event Listener

O que é

Servidor HTTP local que recebe eventos dos terminais Hikvision em tempo real. Quando alguém autentica com face, o terminal envia a foto capturada via HTTP POST — e o listener salva automaticamente no cache.

Por que resolve o DS-K1T672MX

Este terminal não permite download de fotos via ISAPI (FDSearch multipart 400, LOCALS 404). Mas ele envia a foto no evento de autenticação quando uploadVerificationPic=true.

Arquitetura

Terminal → HTTP POST (evento multipart com JPEG) → EventListener:8889
                                                       ↓
                                                  _FaceCache.save(employeeNo, jpeg)
                                                       ↓
                                                  face_cache/{employeeNo}.jpg

Como usar

from core.event_listener import EventListener, configure_http_host

# 1. Iniciar listener
listener = EventListener(port=8889, on_photo=my_callback)
listener.start()

# 2. Configurar terminal
configure_http_host(client, listener_ip="172.16.143.55", listener_port=8889)

# 3. Fotos são salvas automaticamente no cache

Configuração automática do terminal

  • HTTP Host Notification → IP do listener
  • uploadVerificationPic: true (habilita foto no evento)
  • saveVerificationPic: true
  • Event triggers para Access Control

Protector Sistemas — v4.2.1

v4.2.0 — Cache local de fotos faciais

02 Apr 00:29

Choose a tag to compare

Nova funcionalidade: Cache de Fotos

Problema

Terminais DS-K1T672MX (e similares) não permitem download de fotos faciais via ISAPI — o endpoint /ISAPI/Intelligent/FDLib/1/picture/{FPID} retorna 404 e o path LOCALS/ não é acessível via HTTP.

Solução: Cache local compartilhado

Pasta face_cache/{employeeNo}.jpg — compartilhada entre todos os terminais.

Operação Comportamento
Upload de foto (add_face) Salva cópia no cache automaticamente
Buscar foto (get_face) Cache hit instantâneo, sem request ao terminal
Export em lote (_export_all_faces) Todas as fotos exportadas vão para o cache
Download ISAPI Quando sucesso, salva no cache para uso futuro

Fluxo do get_face

  1. Cache local → retorno instantâneo se existir
  2. Fase 1-4: Tentativas ISAPI (FDSearch, LOCALS, endpoints diretos)
  3. Fase 5: Busca em backups ZIP

Como popular o cache

  • Automaticamente: Ao cadastrar/clonar faces de qualquer terminal
  • Via export: Faça backup do DS-K1T671MF (que funciona) — as fotos ficam no cache
  • Via evento: Fotos de eventos de autenticação (futuro)

Protector Sistemas — v4.2.0

v4.1.9 — Fallback: busca foto no backup quando ISAPI não suporta

01 Apr 22:42

Choose a tag to compare

Nova funcionalidade

Fase 5: Busca foto no backup local

Quando o terminal não suporta download remoto de fotos via ISAPI (ex: DS-K1T672MX), o sistema agora busca automaticamente no último backup ZIP do terminal.

Fluxo completo do get_face:

  1. Fase 1: FDSearch multipart (JPEG embutido)
  2. Fase 2: FDSearch JSON → download via faceURL/LOCALS
  3. Fase 3: FDSearch multipart filtrado por employeeNo
  4. Fase 4: Endpoints alternativos (FaceDataRecord, GET direto)
  5. Fase 5 (NOVO): Busca no backup local — abre Backups/{serial}/*.zipfaces/{employeeNo}.jpg

Como usar

  1. Faça um backup do terminal que suporta download de fotos (ex: DS-K1T671MF via LOCALS/)
  2. O backup salva as fotos em faces/{employeeNo}.jpg dentro do ZIP
  3. Nos terminais que não suportam download (ex: DS-K1T672MX), a Fase 5 encontra a foto no backup

Compatibilidade testada em terminais reais

Modelo Firmware Download direto Via backup
DS-K1T671MF V3.2.30 ✅ LOCALS/
DS-K1T672MX V3.18.0 ✅ (se backup existir)

Protector Sistemas — v4.1.9

v4.1.8 — Diagnóstico completo download de fotos por modelo

01 Apr 22:33

Choose a tag to compare

Resultado dos testes em terminais reais

DS-K1T671MF (V3.2.30) — FUNCIONA

  • Download via /LOCALS/pic/enrlFace/ retorna JPEG (200 OK)
  • O código já baixa corretamente via Fase 2 (faceURL → path local)

DS-K1T672MX (V3.18.0) — LIMITAÇÃO DO FIRMWARE

  • isSupportFDSearchDataPackage = false (não suporta JPEG embutido no FDSearch)
  • /LOCALS/ não acessível via HTTP (404)
  • FDSearch só funciona com ?format=json (sem ele → 400)
  • Nenhum endpoint alternativo retorna a foto

Melhorias nesta versão

  • Fase 3 com logging detalhado: Content-Type, tamanho, primeiros bytes
  • Mensagem final clara indicando limitação do firmware
  • Fix de bug de indentação no log final

Resumo de compatibilidade de download de fotos

Modelo Firmware LOCALS HTTP FDSearch multipart Download
DS-K1T671MF V3.2.30 ✅ 200+JPEG ❌ 400 ✅ Via LOCALS
DS-K1T672MX V3.18.0 ❌ 404 ❌ 400 ❌ Não suportado

Protector Sistemas — v4.1.8

v4.1.7 — Fix download de fotos em terminais LOCALS/

01 Apr 22:14

Choose a tag to compare

Correções

Download de fotos — terminais com armazenamento LOCALS/ (erro 404)

  • Problema: Terminais que armazenam fotos em /LOCALS/pic/enrlFace/ retornavam faceURL com path interno que dá 404 via HTTP. O campo modelData é um template biométrico (364 bytes), não uma imagem.
  • Solução: FDSearch multipart filtrado por employeeNo — sem ?format=json, o terminal retorna o JPEG embutido diretamente na resposta multipart.

Melhoria na v4.1.6 (faceLibType)

  • Sistema de fallback blackFD/staticFD continua ativo
  • Detecção automática com teste real antes de paginar

Novas tentativas de download (Fase 3 e 4)

  • FDSearch com faceCustomCondition (byEmployeeNo)
  • FDSearch com FPID direto
  • FDSearch multipart por página
  • FaceDataRecord + FDDownload + endpoints GET adicionais

Protector Sistemas — v4.1.7

v4.1.6 — Fix download de fotos (faceLibType fallback)

01 Apr 22:01

Choose a tag to compare

Correções

Download de fotos faciais (erro 400)

  • Problema: Terminais que reportavam faceLibType=staticFD na API FDLib causavam erro 400 em todas as tentativas de download de foto. O log mostrava "Todas tentativas falharam — sem foto disponível".
  • Causa: O código usava staticFD hardcoded, mas muitos terminais de controle de acesso Hikvision exigem blackFD.
  • Solução:
    • Novo sistema de detecção automática com fallback: sempre tenta blackFD primeiro, depois staticFD
    • Teste real com requisição antes de paginar (evita 400 em lote)
    • Método centralizado _detect_face_lib_type() com cache
    • Todas as operações (add/delete/export/clone) usam o tipo correto

Operações corrigidas

  • get_face — download individual
  • add_face — upload de foto
  • delete_face / delete_faces — remoção de fotos
  • _export_all_faces — exportação em lote
  • Clone de faces entre terminais

Protector Sistemas — v4.1.6

v4.1.5 — Fix download de foto facial (5 abordagens)

01 Apr 20:04

Choose a tag to compare

Correção: Download de foto facial

O terminal retornava 400 Bad Request no FDSearch com faceCustomCondition.

Agora tenta 5 abordagens em cascata:

  1. FDSearch com FPID direto (formato simples, mais compatível)
  2. FDSearch com faceCustomCondition (formato avançado)
  3. GET direto em 4 endpoints conhecidos de foto
  4. UserPic / facePic endpoints
  5. FDSearch paginado sequencial — varre a biblioteca até encontrar o FPID

v4.1.4 — Auditoria completa: 15 correções API + 3 crashes + otimização

01 Apr 19:27

Choose a tag to compare

Correções Críticas

API ISAPI — Face Recognition

  • faceLibType: blackFD → staticFD em TODOS os endpoints — estava usando biblioteca de blocklist em vez da padrão!
  • FDSearch: campo FaceLibTypefaceLibType (casing), searchResultPositionstartNumber
  • get_face: busca por faceCustomCondition/byEmployeeNo conforme spec oficial
  • delete_faces: POST → PUT + body FDSearchCond conforme spec
  • modify_user/modify_card: endpoint /Modify/SetUp (correto)
  • add_face: campos multipart faceURL + img conforme documentação
  • Download de fotos: cooldown adaptativo (0.3s–3s), fallback FDSearch multipart

Crashes Corrigidos (app.py)

  • NameError: src_label no monitor de clone facial
  • AttributeError: log_text em ScreenCadastros
  • AttributeError: _get_selected_terminal em ScreenCadastros

Estabilidade

  • log_activity e set_status agora thread-safe via self.after()
  • restore_backup: verifica device_info.get("ok") corretamente
  • list_backups: busca serial completo E truncado

v4.1.3 — Backup resiliente com retry e diagnóstico

01 Apr 18:10

Choose a tag to compare

Correções

  • Backup v4.0: retry automático 3x ao obter device info — resolve falhas intermitentes de conexão com terminais Hikvision
  • Mensagens de erro detalhadas no backup — agora exibe IP do terminal, erro HTTP real (timeout, 401, connection refused) em vez de mensagem genérica
  • Serial vazio — mensagem orientativa com IP, modelo e sugestão de verificar firmware
  • Acesso seguro a campos device_info com .get() — evita KeyError quando terminal retorna dados incompletos

v4.1.2 - Fix DLL + Splash ajustada

18 Mar 03:53

Choose a tag to compare

v4.1.2

  • Fix critico: resolvido erro 'Failed to load Python DLL' no Windows (caminho com acentos)
  • Build migrado para modo onedir - sem extracao em temp, mais estavel
  • Splash screen com duracao maior (~4s) e fade mais suave
  • Instalador 25MB (era 34MB)