482 lines
11 KiB
Markdown
482 lines
11 KiB
Markdown
|
||
```shell
|
||
aplay -t raw -c 1 -f S16_LE -r 16000 /system/audio/pleaseFaceTheCamera.wav
|
||
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
|
||
- FacePass测试地址:http://172.16.7.36/
|
||
|
||
## 人脸识别函数调用
|
||
|
||
相关模块初始化:
|
||
|
||
```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的图像编码
|
||
GDecisionCenter::m_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;//方向,1:进,2:出
|
||
}
|
||
|
||
//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
|
||
|
||
```
|
||
|
||
|
||
|
||
```
|
||
recoUiRecognize::event() 点击拨号按钮
|
||
recoUiRecognizeTypeBase::event() 点击拨号按钮
|
||
recoUiCallDial(拨号页面) 是 recoUi 的成员
|
||
recoUiRecognize和 recoUiRecognizeTypeBase(recoUiRecognizeTypeColor、recoUiRecognizeTypeAd) 也是 recoUi 的成员
|
||
```
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
## 硬件、固件版本说明
|
||
|
||
硬件版本说明: 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"
|
||
}
|
||
```
|
||
|