应用程序布局
安装位置: /outdoor/app(此目录有空间限制,不能放太多内容,我们只放置应用程序部分和出厂设置,且只读)
运行数据: /data/jingxi目录,分为 /data/jingxi/shadow,此目录放置服务器影子同步数据
/data/jingxi/log,此目录存放日志,包含outdoor,exservice,webrtc三者的日志
OEM目录:存放人脸激活数据,此目录更新固件不会删除。
设备出厂配置,位于: /outdoor/app/res目录
人脸识别引擎
位于 /outdoor/app目录下,包含如下几个文件:
libstdc++.so
librknn_api.so
libgomp.so.1
libarcsoft_face_engine.so
libarcsoft_face.so
将以上文件删除,人脸识别就失效
app.json
定义app的基于规则
{
"interface":"eth0", #网卡接口名称
"workspace":"/data/jingxi", #运行环境的目录
"model":"rv1109_webrtc", #这个参数用于处理升级,与upgrade.json有关
"disableFaceRecognition":false, #是否禁止人脸识别,如使能,则人脸识别不会启动
"autoReboot":"2,0-5", #自动重启规则,每2天重启一次,重启时间在0点到5点的某个随机时间
"screenOffDelay":60, #息屏的延迟时间,系统空闲60秒之后息屏
"externalServiceTimeout":300, #主要针对NFC的驱动bug,5个小时重启NFC一次
"maxParallelCall":3, #最多只能并行呼叫3个设备
"maxMonitorCall":1 #查看监控只允许一路并发
}
device.json
描述核心外设的属性和行为
{
"camera":[
{
"camera_id":1, #RGB camera的参数
"name":"RGB", #这个名称不能改
"vi_dev_name":"rkispp_scale0",
"rotation":270, #camera 旋转角度
"fps":30, #帧率
"channel_id":0,
"buf_cnt":2,
"capture_size":"1280,720", #摄像头输出分辨率,旋转之前的,就是设备本身的分辨率
"iq_file_dir":"/etc/iqfiles" #图像 3A算法配置文件
},
{
"camera_id":0, #IR camera的参数,如果不配置IR,则启用RGB活体
"name":"IR", #这个名称不能改
"vi_dev_name":"rkispp_scale0",
"rotation":90,
"fps":30,
"channel_id":1,
"buf_cnt":2,
"capture_size":"1280,720",
"iq_file_dir":"/etc/iqfiles"
}
],
"encoder":{ #视频编码参数
"crop":"0,0,960,720", #从原始RGB摄像头剪裁一部分作为编码源
"coded_size":"480,640", #将上述剪裁的区域压缩到这个分辨率
"miniFPS":20, #接听之前的帧率
"maxFPS":24 #接听之后的帧率
},
"display":{ #屏幕,villa目前没有屏幕,此部分可以不用关心
"vo_dev_name":"/dev/dri/card0", #显卡设备名称
"display_size":"800,1280" #显示分辨率
},
"qrcode":{ #二维码识别参数
"qr_code_interval":300, #识别间隔,毫秒
"crop_rect":"0,0,1280,720", #剪裁区域,从原始camera分辨率中
"target_size":"720,1280",#识别分辨率,这里默认是全屏识别
"authedExpiredTime":120, #已经从服务器认证的二维码缓存时间,超过这个时间重新去服务器验证,秒单位
"unAuthedExpiredTime":60, #60秒不重复验证未授权的二维码
"miniRepeatTime":2 #2秒钟重复识别不报告
},
"mp4":{ #移动侦测MP4视频编码规则
"rcMode":"VBR", #动态码率
"gop":300, #300帧编码一个关键帧
"bitrateFactor":3.0, #比特率因子,要想提高编码质量,可以提高这个数值,计算方法:width*height*factor
"computeBitrate":true #编码结束之后,是否计算平均比特率,这个操作比较耗时,但我们文件不大,可以计算,具体参考MP4规范
}
}
face.json
人脸引擎的配置参数
{
"face":{
"arcsoft_conf":"/oem/jingxi/arcsoft", #配置文件,激活文件所在位置
"feature_mask":"ASF_NONE|ASF_MASKDETECT", #特征提取的时候,我们额外提取口罩信息
"video_scale":16, #标准参数,具体参考虹软文档
"image_scale":32, #标准参数,具体参考虹软文档
"max_face_num":4, #最多可检测4个人脸,也就是说,如果屏幕上出现4个人脸可以检测,超过则引擎不会工作
"max_buffer":2, #rockchip RGA缓冲区大小,检测速度和设备性能消耗之间的平衡就指望这个参数
"orient_priority":"ASF_OP_0_ONLY", #只检测正脸
"confidence_threshold":0.8, #置信度
"rgb_liveness_threshold":0.5, #RGB活体的阈值
"ir_liveness_threshold":0.7, #IR活体的阈值
"compare_model":"ASF_LIFE_PHOTO", #特征对比模型,这里是生活照
"min_face_area":6400 #人脸面积小于这个数值将被忽略
}
}
http.json
室外机提供http服务的基本配置
{
"protocol_handlers":[
{
"name":"http",
"port":8080, #默认侦听8080端口
"use_tls":false
}
],
"use_debug":true,
"log_directory":"/tmp" #日志位置,可用于分析调试
}
mqtt.json
MQTT客户端的基本配置
{
"mqtt":{
"sendWhileDisconnected":false,
"cleanSession":true,
"subscribeQOS":1, #订阅 QOS
"publishQOS":1, #发布 QOS
"keepAliveInterval":20 #心跳周期20秒,这个参数很重要,与服务器负载均衡的配置保持一致
}
}
peripheral.json
外设和IO口配置
{
"antiTamper":{ #防拆传感器
"dev":"/dev/at_adc", #设备名称
"threshold":900, #阈值
"interval":100 #检查周期,毫秒单位
},
"relay":{ #继电器,用于开门
"dev":"/dev/relay", #设备名称
"level":0 #低电平有效
},
"watchdog":{ #看门狗配置
"dev":"/dev/watchdog",
"timeout":0, #这个不能配置,目前硬件上固定为5分钟狗被饿死
"interval":30 #喂狗周期,30秒喂狗一次
},
"human":{ #人感辅助设置
"delay":10 #人感离开之后延迟10秒才会触发人感离开事件
},
"distance":{ #距离传感器,已废弃,正式版删除
"interval":20,
"name":"/dev/stmvl53l0x_ranging",
"threshold":900,
"continueCount":10,
"errorCount":3,
"factor":1.4826 #绝对中位差计算因子,经验值,不需要修改
},
"rs485":{ #485配置,目前没有
"dev":"/dev/ttyS4:115200",
"dir":"/dev/rs485_dir",
"write_level":1,
"delay":20
},
"button":{ #按键配置,可以多个
"pollMs":40, #40毫秒检测一次
"debounceDelayMs":90, #消抖的延迟时间
"key":[
{
"name":"call", #呼叫按键
"dev":"/dev/doorbell",
"level":0 #按下低电平
}
]
},
"light":[ #灯光配置,这里有多个
{
"name":"rgb", #rgb灯光
"dev":"/dev/rgb_led",
"maxValue":255, #最大亮度
"defValue":1.0 #最低亮度
},
{
"name":"ir", #红外灯
"dev":"/dev/ir_led",
"maxValue":255,
"defValue":1.0
},
{
"name":"number", #门牌号灯
"dev":"/dev/key_led2",
"maxValue":255,
"defValue":1.0
},
{
"name":"button", #呼叫按键灯
"dev":"/dev/key_led1",
"maxValue":255,
"defValue":1.0
}
],
"gpio":[ #GPIO配置
{
"name":"human", #微波传感器
"listen":true,
"pin":46,
"edge":"both",
"active":"",
"dir":"in",
"level":0
}
]
}
push.json
移动端推送配置,目前还没用到,具体看阿里官方文档
[
{
"name":"invite", #邀请移动端的通知消息
"lang":"zh-cn",
"pushType":"NOTICE",
"deviceType":"ALL",
"target":"TAG", # TAG 推送!!!
"targetValue":"push_%s",
"title":"访客呼叫",
"body":"门口有访客呼叫您",
"isProduct":false, #这个用于IOS是否是生产环境还是测试环境
"storeOffline":true,
"expireTime":60
}
]
ssdp.json
自动发送协议配置
{
"host":"239.255.255.250:1900", #组播地址和端口
"groupInterface":"eth0", #接口名称,已废弃
"nt":"urn:genius-intercom:device:outdoor", #室外机属性
"st":"urn:genius-intercom:device:room", #室内机属性
"productName":"Villa-Intercom-Outdoor", #SERVER字段中的产品名称
"enableLoopback":false, #不允许本地回环发现
"httpPort":8080, #http server地址,与http.json中保持一致
"sipPort":5080, #sip端口,webrtc版本用不到
"maxAge":60, #60秒超时
"ttl":4 #最多经过4个网关设备
}
webrtc.json
webrtc的基本配置
{
"audioLabel":"audio", #默认即可
"videoLabel":"video",#默认即可
"portRange":"50000,55000",#默认即可,表示webrtc通讯使用的端口范围
"initializeMute":true, #一开始是静音状态,模拟接听过程,webrtc自己机制在传送音视频之前就要完成接听
"ice_transport_type":"All", #使能所有可能的穿透方式,如果向测试中转(设置为 Relay),此刻只走中转,用于测试中转服务器是否可用
"video_direction":"sendonly", #室外机只发送不接收
"webrtc_audio":{ #webrtc通话的音频设置,这些都可以删除,默认配置都已经使能
"echo_cancellation":true, #使能回音消除
"auto_gain_control":true, #使能自动增益,避免声音忽大忽小的问题
"noise_suppression":true, #噪音抑制
"highpass_filter":true, #高通滤波
"typing_detection":true, #人声检测
"experimental_agc":false, #此项,webrtc底层没有实现
"experimental_ns":true, #使能还处于体验版的噪声抑制
"residual_echo_detector":true, #残留回声消除
"audio_jitter_buffer_max_packets":200, #以下与声音延迟有关,一般我们不用设置
"audio_jitter_buffer_fast_accelerate":true, #可以加速音频播放,变速不变调
"audio_jitter_buffer_min_delay_ms":0,
"audio_jitter_buffer_enable_rtx_handling":false
},
"voip_audio":{ #拨打移动电话的配置
"echo_cancellation":true,
"auto_gain_control":true,
"noise_suppression":true,
"highpass_filter":true,
"typing_detection":false, #这个必须为false,否则会导致手机数字按键的声音播放两次
"experimental_agc":false,
"experimental_ns":true,
"residual_echo_detector":true
}
}
音效配置
音效文件位置:
/outdoor/app/res/resource/sound/common: 存放与语言无关的音效,比如滴滴声
/outdoor/app/res/resource/sound/zh-cn:存放中文音效
/outdoor/app/res/resource/sound/xxx:存放其他语种音效,具体看室内机在绑定家庭中提供了语言参数
语言相关的音效都是mp3格式,由 google WaveNet神经网络合成,效果比其他的都好。