Go to file
2024-07-09 10:41:51 +08:00
.vscode initial commit. 2024-06-18 14:27:48 +08:00
GatePass initial commit. 2024-06-18 14:27:48 +08:00
Record initial commit. 2024-06-18 14:27:48 +08:00
resources add script. 2024-07-09 10:41:51 +08:00
VoucherVerifyServer initial commit. 2024-06-18 14:27:48 +08:00
.clang-format add script. 2024-07-09 10:41:51 +08:00
.gitignore initial commit. 2024-06-18 14:27:48 +08:00
CMakeLists.txt initial commit. 2024-06-18 14:27:48 +08:00
Readme.md add script. 2024-07-09 10:41:51 +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
{
    "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上图标不对

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。

人脸识别函数调用

相关模块初始化:

GoThread::taskProc();	// 初始化摄像头
FaceGate::preLoad();	// 等待摄像头初始化完成
FaceGate::taskProc();	// 初始化算法

AntiSpoof4Rv1109::init();
AttrDetector4Rv1109::init()
DetectorImpl4Rv1109::init()
LandmarkDetectorRk::init()
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

flowchart TB
	A["ADMsg::showDisplayMsg()"]
	B["View::showRecoSuccess()"]
	C["GDecisionActuator::showRecoResult()"]
	D["GDecisionCenter::maskProc()"]
	D-->C-->B-->A

人证核验逻辑

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

通行记录

//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网络管理

classDiagram
	NetConfigThread --> NetConfig
	NetConfig --> Linker
	EthLinker ..|> Linker
	WlanLinker ..|> Linker
	SIMLinker ..|> Linker
	
	

wifi_connect 连接wifi耗时过长

UI组织

---
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

classDiagram
	SettingUiPage --|> MyWidgetWithMainStyleColor
	settingUiDevMngNetWifi --|> SettingUiPage
	settingUiDevMngNetWifiAccPoint --|> SettingUiPage
	SettingUiPage *-- QListWidget
	myListWidget --|> QWidget

recoUi

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

万睿面板机

// MAC  6C:5C:3D:B2:27:81
{
	"mt": 98,
    "ct": "HWA0310722C1110W",
    "mac": "6C5C3DB22781",
    "id": "412d00003263",
    "key": "412d9f3500c79fb3",
    "sct": "b42f6f643aedaf00"
}

B045 V05带屏幕

{"mt": 98,"ct": "HWA0310722C1110U","mac": "6C5C3DB229A0"}

keydata set hardware HWA0310722C1110W -f

B033 V05裸板

// MAC  6C:5C:3D:B2:27:82

{
	"mt": 98,
    "ct": "HW00000011C3000U",
    "mac": "6C5C3DB22782",
    "id": "6c5c3db22782",
    "key": "6d711a5543353b5a",
    "sct": "06b619feadfae838"
}

B026啪啪运动裸板

// 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"
}