Villa别墅门口机配置 - housekeeper-software/soft GitHub Wiki

应用程序布局

安装位置:  /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神经网络合成,效果比其他的都好。