1. 简介
本文档全面系统的简介描述了人脸系统的数据库结构与设计。
2. 设计约束
人脸系统基于分布式数据OPAQ和业务数据库MYSQL实现。因为人脸抓拍日志(capture_log)数据量非常大,设计上存放在OPAQ,<font color=red>布控报警(alarm)后续要存入到OPAQ中</font>,其余数据存在MySQL。
- 人脸默认是Hibernate ORM框架,数据库表命名规则为全部小写,例如数据库中的capture_log对应Hibernate中的实体类为CaptureLog。
- 数据库编码一律使用UTF-8编码
public class CustomMysqlDialect extends MySQL5InnoDBDialect
{
public String getTableTypeString()
{
return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
}
}
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=com.netposa.face.config.CustomMysqlDialect
3. 数据字典
3.1 用户权限
一个用户可以对应多个角色,一个角色可以对应多个用户。多对多关系。
用于做认证和权限控制
用户表(s_user)
用户表保存用户的登录信息
字段 |
类型 |
备注 |
id |
int(11) NOT NULL AUTO_INCREMENT |
用户唯一ID,主键 |
create_date |
date DEFAULT NULL |
创建日期 |
idcard |
varchar(20) NOT NUL |
身份证 |
name |
varchar(20) NOT NULL |
用户名 |
password |
varchar(64) NOT NULL |
MD5码后的密码 |
realname |
varchar(20) DEFAULT NULL |
真实姓名 |
sex |
varchar(20) DEFAULT NULL |
性别 |
status |
tinyint(1) DEFAULT NULL |
状态,0表示可用, 1表示禁用 |
<font color=red>原来的status设计为status int(11) DEFAULT NULL</font>
角色表(s_role)
用来关联用户表,确定每个用户的关系
字段 |
类型 |
备注 |
id |
int(11) NOT NULL AUTO_INCREMENT |
角色唯一ID,主键 |
name |
varchar(20) DEFAULT NULL |
组名称 |
description |
varchar(100) DEFAULT NULL |
组描述 |
<font color=red>将现在的uid删除,没有意义,实际中组也不会特别多,没必要再弄个uuid,删除,目前有很多需求,不想某个人使用某个静态库,因为涉及一些敏感信息</font>
用户角色表(user_role)
字段 |
类型 |
备注 |
id |
int(11) NOT NULL AUTO_INCREMENT |
唯一ID,主键 |
userid |
int(20) NOT NULL |
用户的唯一ID |
roleid |
int(20) NOT NULL |
用户所属的组信息 |
资源表(resource)
字段 |
类型 |
备注 |
id |
int(11) NOT NULL AUTO_INCREMENT |
资源唯一ID,主键 |
name |
varchar(20) DEFAULT NULL |
资源名称 |
资源角色表(resource_role)
字段 |
类型 |
备注 |
id |
int(11) NOT NULL AUTO_INCREMENT |
资源唯一ID,主键 |
resouceid |
varchar(20) DEFAULT NULL |
资源ID |
roleid |
int(20) NOT NULL |
资源所属的角色 |
3.2 配置管理
人脸库(lib)
库分为静态库和布控库,布控库因为人员不是很多,所有数据全部存放在一张表中
静态库分表存(每个静态库分两张表,一个人员信息表,一个人员图片表,一个人最多有五张图片)
字段 |
类型 |
备注 |
id |
bigint(20) NOT NULL AUTO_INCREMENT |
人脸唯一ID,主键 |
createtime |
datetime DEFAULT NULL |
库创建时间 |
creator |
varchar(255) DEFAULT NULL |
库的创建者 |
memo |
varchar(512) DEFAULT NULL |
库的备注信息 |
subpictablename |
varchar(255) DEFAULT |
静态库的图片表名称 |
subtablename |
varchar(64) DEFAULT NULL |
静态库的人员信息表名称 |
threshold |
int(11) DEFAULT NULL |
阈值1-100 |
type |
varchar(255) DEFAULT NULL |
库的类型 |
库的类型为下面两种类型
public enum LibType
{
GENERAL, //普通库
LARGE //静态大库
}
人员信息(person)
字段 |
类型 |
备注 |
objectid |
bigint(20) NOT NULL AUTO_INCREMENT |
人脸唯一ID,主键 |
birth |
date DEFAULT NULL |
生日 |
createtime |
datetime NOT NULL |
创建时间 |
idcard |
varchar(30) DEFAULT NULL |
身份证 |
memo |
varchar(30) DEFAULT NULL |
备注 |
name |
varchar(64) DEFAULT NULL |
姓名 |
sex |
varchar(1) DEFAULT NULL |
性别 |
threshold |
int(2) DEFAULT NULL |
阈值0-100,目前未使用,预留 |
lib |
bigint(20) |
所在的库ID |
credentialstype |
varchar(2) DEFAULT NULL |
证件类型 |
degree |
varchar(2) DEFAULT NULL |
文化程度 |
homeaddress |
varchar(255) DEFAULT NULL |
家庭住址 |
homeplace |
varchar(255) DEFAULT NULL |
出生地 |
householdreg |
varchar(255) DEFAULT |
籍贯 |
identity |
varchar(64) DEFAULT NULL |
身份职衔 |
militaryservice |
varchar(1) DEFAULT NULL |
服兵役情况 |
nation |
varchar(2) DEFAULT NULL |
民族 |
nationality |
varchar(64) DEFAULT NULL |
国籍 |
oldname |
varchar(64) DEFAULT NULL |
曾用名 |
organization |
varchar(64) DEFAULT NULL |
机构(所在处室或分管工作) |
stature |
varchar(64) DEFAULT NULL |
身高 |
人员图片信息(person_pic)
字段 |
类型 |
备注 |
picid |
bigint(20) NOT NULL AUTO_INCREMENT |
图片唯一ID,键 |
filepath |
varchar(255) DEFAULT NULL |
文件路径 |
objectid |
bigint(20) NOT NULL |
对象ID |
设备信息 (device)
字段 |
类型 |
备注 |
id |
bigint(20) NOT NULL AUTO_INCREMENT |
设备唯一ID,主键 |
ip |
varchar(64) DEFAULT NULL |
设备IP地址 |
name |
varchar(255) DEFAULT NULL |
设备名称 |
outerip |
varchar(64) DEFAULT NULL |
外网的IP |
outerport |
int(6) DEFAULT NULL |
外网的端口 |
password |
varchar(64) DEFAULT NULL |
密码 |
port |
int(6) DEFAULT NULL |
摄像机端口 |
username |
varchar(64) DEFAULT NULL |
摄像机用户名 |
path |
varchar(255) DEFAULT NULL |
IOD服务路径,默认:/iod/system/device/devices |
type |
bigint(20) NOT NULL AUTO_INCREMENT |
设备唯类型,具体值见下 |
public enum DeviceType {
/**
* PVG设备
*/
PVG,
/**
* IoD设备
*/
IoD
}
<font color=red>目前设备信息包含PVG和IoD信息,表名叫pvg,建议修改成device</font>
摄像机表 (camera)
字段 |
类型 |
备注 |
id |
bigint(20) NOT NULL AUTO_INCREMENT |
摄像机一ID,主键 |
host |
varchar(64) DEFAULT NULL |
摄像机IP地址 |
name |
varchar(64) DEFAULT NULL |
摄像机av通道名称 |
path |
varchar(64) DEFAULT NULL |
摄像机分层,直接从PVG设备同步过来的字段 |
title |
varchar(64) DEFAULT NULL |
标题,摄像机显示的名称 |
deviceid |
bigint(20) DEFAULT NULL |
摄像机对应上层的设备(PVG、IoD)的ID |
iod_id |
varchar(50) DEFAULT NULL |
Iod对象的ID |
latitude |
double(20,8) DEFAULT NULL |
摄像机的纬度 |
longitude |
double(20,8) DEFAULT NULL |
摄像机的经度 |
<font color=red>目前摄像机表存在很多无用的字段,上表已经是精简过的,其它字段都可以删除不用</font>
任务表 (task)
字段 |
类型 |
备注 |
id |
bigint(20) NOT NULL AUTO_INCREMENT |
摄像机一ID,主键 |
creater |
varchar(255) DEFAULT NULL |
任务创建者 |
createtime |
datetime DEFAULT NULL |
任务创建时间 |
starttime |
varchar(255) DEFAULT NULL |
任务开始时间 |
endtime |
datetime DEFAULT NULL |
任务结束时间 |
errcode |
varchar(255) NOT NULL |
PCC返回的pccJobReport.errorCode |
jobkey |
bigint(20) DEFAULT NULL |
任务提交后的jobkey |
jobstate |
varchar(255) DEFAULT NULL |
PCC返回的jobstate |
memo |
varchar(255) DEFAULT NULL |
任务说明 |
name |
varchar(255) DEFAULT NULL |
任务名称 |
causes |
varchar(255) DEFAULT NULL |
PCC返回的原因状态 |
committime |
datetime DEFAULT NULL, |
PCC任务提交时间 |
costedtime |
datetime DEFAULT NULL |
PCC整个任务花费的时间 |
processedtime |
varchar(255) DEFAULT NULL |
PCC实际算法花费的时间 |
任务额外配置表 (task_additional_property)
该表主要是在创建布控任务对摄像机进行配置
字段 |
类型 |
备注 |
id |
bigint(20) NOT NULL AUTO_INCREMENT |
关联关系唯一ID |
bottom |
int(11) DEFAULT NULL |
摄像机处理区域bottom |
left |
int(11) DEFAULT NULL |
摄像机处理区域left |
right |
int(11) DEFAULT NULL |
摄像机处理区域right |
top |
int(11) DEFAULT NULL |
摄像机处理区域top |
camera |
bigint(20) DEFAULT NULL |
摄像机ID |
taskid |
bigint(20) DEFAULT NULL |
任务ID |
maxsize |
bigint(11) DEFAULT NULL |
摄像机最大人脸库 |
minsize |
bigint(11) DEFAULT NULL |
摄像机最小人脸框 |
3.3 布防布控
告警表 (alarm)
字段 |
类型 |
备注 |
id |
bigint(20) NOT NULL AUTO_INCREMENT |
告警ID |
alarm_person_image |
varchar(255) DEFAULT NULL |
告警图片源 |
alarm_panorama_image |
varchar(255) DEFAULT NULL |
告警全景图片 |
alarm_time |
datetime DEFAULT NULL |
告警时间 |
camera_id |
bigint(20) DEFAULT NULL |
摄像机ID |
target |
varchar(255) DEFAULT NULL |
比重库的人员json |
status |
int(1) DEFAULT NULL |
处理的状态见下 |
public enum AlarmStatusType {
ALARM_UNTREATED("未处理", 0),
ALARM_VALID("有效", 1),
ALARM_INVALID("无效", 2),
ALARM_UNKNOWEN("未知", 3);
}
{
["libid":1,"objectid":12, "picid":216, "score":85]
}
<font color=red>目前保存的告警表设计冗余度太高,重复太多,并且分别在两张表中,建议重构</font>