FaceAccess/Readme.md

482 lines
11 KiB
Markdown
Raw Normal View History

2024-06-18 14:27:48 +08:00
```shell
2024-09-04 17:57:23 +08:00
aplay -t raw -c 1 -f S16_LE -r 16000 /system/audio/pleaseFaceTheCamera.wav
2024-06-18 14:27:48 +08:00
amixer sset 'Master' 50% # 设置音量
mount -o remount rw /system/ # 读写挂载
keydata get mac # 操作mac
keydata set mac 6C:5C:3D:B2:27:78
keydata set hardware HW00000011C3000R -f
MAC存储位置/data/.mac
ps -ef | egrep start-app.sh | grep -v grep | awk '{print $2}' | xargs kill -9 2 > /dev/null
ps -ef | egrep dk_uart_id_reader | grep -v grep | awk '{print $2}' | xargs kill -9 2 > /dev/null
killall start-app.sh && killall GateFace
killall dk_uart_id_reader
tail -f /sdcard/logs/b020.log
mount -o remount rw /system/ && mv /system/bin/start-app.sh /system/bin/start-app.sh.bak
mount -o remount rw /system/ && mv /system/bin/start-app.sh.bak /system/bin/start-app.sh
echo 1 > /dev/watchdog
dk_uart_id_reader
keydata set hardware HW00000011C3000U -f
keydata get hardware
/etc/init.d/S97_lunch_init
```
`script/start-app.sh`有个`write_mac()`函数生成`/data/.mac`文件。
## 隐藏页面参数设置
```
http://192.168.8.120/otherPage.php?cmd=get_other_page_params
http://192.168.8.120/otherPage.php?cmd=set_other_page_params&distanceType=1&distance=1&dynamicFeatSimTh=70&dynamicFeatImgQualityTh=90&fast_temp_sw=true&save_reg_img_sw=true&audio_out_enabled=true
```
```json
{
"cmd": "set_other_page_params",
"distanceType": 1,
"save_reg_img_sw": true,
"fast_temp_sw": true,
"dynamicFeatSimTh": 70,
"dynamicFeatImgQualityTh": 90,
"audio_out_enabled": true
}
{
"ret": 0,
"code": 200,
"message": "OK",
"data": {
"distanceType": 1,
"distance": 100,
"dynamicFeatSimTh": 70,
"dynamicFeatImgQualityTh": 90,
"fast_temp_sw": true,
"save_reg_img_sw": true,
"audio_out_enabled": true
}
}
```
## FacePass平台交互
### 连接不成功UI上图标不对
```c++
void statusbarUi::updatePlatformConnectionStatus(const int status)
{
QPixmap pm;
switch(status)
{
case UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_DISCONNECTED:
pm.load(":/res/image/disconnect.png");
break;
case UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_CONNECTED:
pm.load(":/res/image/display.png");
break;
case UiInterfaceForBackstage::PLATFORM_CONNECTION_STATUS_LOGGED:
pm.load(":/res/image/display.png");
break;
default:
break;
}
m_label_platform->setPixmap(pm.scaled(20, 20, Qt::KeepAspectRatio));
}
```
## 测试/开发帐号
设备业务服务器地址统一都为9002。
- FacePass开发地址http://172.16.7.16/
- 账号luocai
- 密码:.Luo19961030
- 管理员账号admin
- 管理员密码Reconova_123456
- 可视对讲阳江博物馆项目https://172.16.100.22/
- 账号admin
- 密码Reconova_123456
2024-07-09 10:41:51 +08:00
- FacePass测试地址http://172.16.7.36/
2024-06-18 14:27:48 +08:00
## 人脸识别函数调用
相关模块初始化:
```c++
GoThread::taskProc(); // 初始化摄像头
FaceGate::preLoad(); // 等待摄像头初始化完成
FaceGate::taskProc(); // 初始化算法
AntiSpoof4Rv1109::init();
AttrDetector4Rv1109::init()
DetectorImpl4Rv1109::init()
LandmarkDetectorRk::init()
```
```mermaid
classDiagram
RwRecoResult
GRecoID --|> GObject
GRecoID --* RecoIDInfo
detector
attr_detector
landmark_detector
anti_spoof
GTrackerMng *-- AntiSpoof
GTrackerMng *-- LandmarkDetector
GDetectorHeadAttr *-- AttrDetector
AntiSpoof4Rv1109 ..|> AntiSpoof
LandmarkDetectorRk ..|> LandmarkDetector
AttrDetector4Rv1109 ..|> AttrDetector
GObject <|-- GTrackerLock
GDetectorTracker *-- Detector
RecoAlgorithm *-- Detector
RecoAlgorithm *-- LandmarkDetector
ParamManage --* GoThread
UdpServer --* GoThread
GCamera --* GoThread
GDetectorTracker --* GoThread
GTrackerMng --* GoThread
GTrackerLock --* GoThread
GDetectorHeadAttr --* GoThread
GReco1vsN --* GoThread
GReco1vs1 --* GoThread
GRecoID --* GoThread
GPeInput --* GoThread
```
逻辑实现都在`src/workflow/output/decision_actuator/decision_actuator.h`
```mermaid
flowchart TB
A["ADMsg::showDisplayMsg()"]
B["View::showRecoSuccess()"]
C["GDecisionActuator::showRecoResult()"]
D["GDecisionCenter::maskProc()"]
D-->C-->B-->A
```
## 人证核验逻辑
```mermaid
flowchart TB
A-->B-->C-->D-->E-->F-->G
F-->H-->I-->J
A["UDPIDCardReader::detect()"]
B["IdReader::isNewCardAvailable()"]
C["IdReader::polling()"]
D["Peripheral::idPolling()"]
E["ReaderThread::taskProc()"]
F["ReaderThread::readerInputAvailNoti()"]
G["GPeInput::readerInputAvailCallback()"]
H["GPeInput::idReaderCallback()"]
I["GDecisionCenter::idCardReaded()"]
J["GDecisionCenter::_idCardProc()"]
```
recoUi::slotShowSceneResult()
recoUiRecognize::slotsDrawScanner()
mainUi::notifyFaceInfo()
`recoUi::slotTimer()`负责将结果页面切回待机页面
### 人证核验限制
```
http://192.168.8.127/deviceAction.php?mask_check_sw=false&no_mask_no_entry=true&mask_no_entry=false&temp_check_sw=true&temp_anomaly_no_entry=true&min=35&max=37.3&sw=false&temp_unit=0&temp_type=1&temp_audio_sw=false&temp_show_sw=true&sim_th=0&reco_distance_type=3&face_sw=true&reco_from=1&fast_access_sw=false&ic_card_sw=false&face_and_id_sw=true&yuejuma=false&succ_interval=3&fail_interval=1&helmet_sw=false&dynamic_feature=false&face_frame_sw=false&dev_local_pwd_type=1&dev_local_pwd=&health_code_sw=false&health_code_allow_stranger_sw=false&health_code_allow_access_color=1&health_code_allow_access_c19t=4&health_code_allow_access_trip=0&health_code_allow_access_abt=0&travel_card_sw=false&disable_face_sw=false&health_code_needed_tip_type=0&health_trip_fail_times=3&health_trip_need_id_sw=false&health_ui_display_time=3&access_condition=[0,1]&light_and_background=[1,1,0,0,2]&health_check_phone_num_sw=false&health_ok_display_time=3&health_white_list_free_sw=false&health_code_c19t_hours_limit=0&health_trip_show_tip_sw=false&disable_dev_setting_sw=false&temp_sensitivity=0.75&cmd=set_device&face_id_card_verify_rule={"age_limit":{"enabled":true,"precision":2,"range":[{"from":40,"to":60},{"from":30,"to":-1},{"from":-1,"to":70}]},"zone_limit":{"enabled":true,"range":["14512","78945","31103"]}}
```
## 第三方票务平台注册
```
GDecisionCenter::ReconfirmReq
RWProtocol::sendRequestOpenDoorReconfirm()
UdpParse::voucher_verify_result_proc()
RWProtocol::voucherVerifyProc()
## 读取到身份证之后
GDecisionCenter::idCardReaded()
GRecoID::onIDCard() 保存图标
ReaderInfo 保存了nv21的图像编码
GDecisionCenterm_idInfo 保存了nv21的图像编码
```
## 闸机
### 故障上报
| 功能列表 | 类别 | |
| -------------------- | ------ | -------------- |
| 闸机主机电机故障 | 故障类 | 0x21+100=133 |
| 闸机副机电机故障 | 故障类 | 0x22+100=134 |
| 闸机主机离合器故障 | 故障类 | 2003+100= 2103 |
| 闸机副机离合器故障 | 故障类 | 2004+100=2104 |
| 闸机持续开闸信号故障 | 故障类 | 0x5A+100=190 |
| 闸机红外故障 | 故障类 | 0x5B+100=191 |
| 闸机遇阻停机故障 | 故障类 | 0x0A+100=110 |
| 闸机自检失败故障 | 故障类 | 0x23+100=135 |
| 闸机固件升级失败 | 故障类 | 1001+100=1104 |
| 闸机消防告警 | 告警类 | 0x04+100=104 |
| 闸机门长久未关告警 | 告警类 | 0x5C+100=192 |
| 人员强闯告警 | 告警类 | 0x60+100=196 |
| 人员非法推杆告警 | 告警类 | 2001+100=2101 |
| 人员逆行告警 | 告警类 | 0x61+100=197 |
| 人员尾随告警 | 告警类 | 0x62+100=198 |
| 人员逗留告警 | 告警类 | 0x5F+100=195 |
### 通行记录
```protobuf
//index=593 设备上报人员通过闸机事件
message PersonAccessedReport{
Common base=1;
string alarmId=2; //消息id
int64 recordId=3; //记录id
string timestamp=4;//时间戳,格式:"yyyy-MM-dd HH:mm:ss" 举例 "2023-11-30 11:32:45"
int32 direction=5;//方向12
}
//index=594 平台应答人员通过闸机事件
message ReplyPersonAccessedReport {
Common base=1;
string alarmId=2; //消息id
int64 recordId=3; //记录id
}
```
参考人脸通行记录
```
createAccessRecord
setAccessRecordsUploadStaByRecordIdRang
deleteAccessRecordByRecordId
getAccessRecordsNumByUploadSta
GPeInput::rs485DataProc 处理闸机进出
createGateAccessRecord
# upload thread
bool checkIfSendAccessInfoData(long long curSysSec);
int pushAccessInfoListToSrv(long long curSysSec);
int uploadAccessInfo(long long curSysSec);
```
## netconfig网络管理
```mermaid
classDiagram
NetConfigThread --> NetConfig
NetConfig --> Linker
EthLinker ..|> Linker
WlanLinker ..|> Linker
SIMLinker ..|> Linker
```
wifi_connect 连接wifi耗时过长
## UI组织
```mermaid
---
title: FaceGate UI
---
classDiagram
View *-- Backstage
View *-- mainUi
mainUi ..|> UiInterfaceForBackstage
mainUi *-- SetupUi
mainUi *-- settingUi
mainUi *-- recoUi
recoUi *-- recoUiRecognize
recoUi *-- recoUiRecognizeTypeColor
recoUi *-- recoUiRecognizeTypeAd
recoUi *-- recoUiScreensaver
recoUi *-- recoUiPassword
recoUi *-- recoUiHealthCode
recoUi *-- recoUiSceneResult
class View {
viewInitBackstage();
viewCreateUi();
}
```
### SetupUi
仅当`/data/config/need_setup_wizard`文件存在时显示,流程完成时再删除此文件。
### settingUi
```mermaid
classDiagram
SettingUiPage --|> MyWidgetWithMainStyleColor
settingUiDevMngNetWifi --|> SettingUiPage
settingUiDevMngNetWifiAccPoint --|> SettingUiPage
SettingUiPage *-- QListWidget
myListWidget --|> QWidget
```
### recoUi
```mermaid
classDiagram
SceneMsgWidget --|> QWidget
MsgWidget --|> QWidget
recoUiSceneResult *-- SceneMsgWidget
recoUi *-- recoUiSceneResult
recoUiRecognize --|> PageAcceptMouseAndTouch
PageAcceptMouseAndTouch --|> WidgetWithBackstageInterface
recoUiRecognize *-- PersonWidget
recoUiRecognizeTypeBase *-- MsgWidget
recoUiRecognizeTypeBase --|> PageAcceptMouseAndTouch
recoUiRecognizeTypeColor --|> recoUiRecognizeTypeBase
recoUiRecognizeTypeAd --|> recoUiRecognizeTypeBase
```
2024-07-09 10:41:51 +08:00
```
recoUiRecognize::event() 点击拨号按钮
recoUiRecognizeTypeBase::event() 点击拨号按钮
recoUiCallDial(拨号页面) 是 recoUi 的成员
recoUiRecognize和 recoUiRecognizeTypeBase(recoUiRecognizeTypeColor、recoUiRecognizeTypeAd) 也是 recoUi 的成员
```
2024-06-18 14:27:48 +08:00
## 硬件、固件版本说明
硬件版本说明: http://wiki.reconova.cn/pages/viewpage.action?pageId=36798802
### B045 CI构建包存放地址
```
\\172.16.2.222\瑞为版本\Test\shop\B045
```
### 测试机信息记录
扫码枪:
```
/dev/hidraw0
```
万睿面板机
```json
// MAC 6C:5C:3D:B2:27:81
{
"mt": 98,
    "ct": "HWA0310722C1110W",
    "mac": "6C5C3DB22781",
    "id": "412d00003263",
    "key": "412d9f3500c79fb3",
    "sct": "b42f6f643aedaf00"
}
```
B045 V05带屏幕
```json
{"mt": 98,"ct": "HWA0310722C1110U","mac": "6C5C3DB229A0"}
keydata set hardware HWA0310722C1110W -f
```
B033 V05裸板
```json
// MAC 6C:5C:3D:B2:27:82
{
"mt": 98,
    "ct": "HW00000011C3000U",
    "mac": "6C5C3DB22782",
    "id": "6c5c3db22782",
    "key": "6d711a5543353b5a",
    "sct": "06b619feadfae838"
}
```
B026啪啪运动裸板
```json
// keydata set hardware HW00000011C3000R -f
// keydata set mac 6C:5C:3D:B2:27:83 -f
{
"mt": 98,
    "ct": "HW00000011C3000U",
    "mac": "6C5C3DB22783"
}
// 带屏幕
{
"mt": 98,
    "ct": "HWA0310511C1000R",
    "mac": "6C5C3DB22783"
}
```