人脸检测技能
技能描述
面向智慧商超的人脸采集技能。本技能使用多个深度学习算法,实时分析视频流,自动抓取画面中的清晰人脸上传至您的后台系统,用于后续实现其他业务。
本技能支持:
- 判断并过滤尺寸过小、清晰度较差、角度过大等无法判断的人脸。
- 同时检测多张人脸。
- 人脸跟踪。对同一个人抓拍的人脸做去重,避免大量的重复上报。
- 根据业务需求划定区域,只抓取固定区域内的人脸。
使用时需要提供您的业务RESTful接口和RTSP视频地址,最大支持10路网络摄像头接入,并按照接入的路数进行收费。
摄像头部署建议请参见摄像头部署。
技能配置项请参见运行时配置参数。
技能接口设计请参见技能结果上传接口。
基本信息
人脸检测技能的基本信息如表1所示。
摄像头部署
摄像头的架设会影响人脸检测模型的准确率。在实际架设中,尽量保证拍摄画面清晰,光照充足,人脸较正,无遮挡,比如前边的人脸容易挡住后边的人脸。监控视频场景下尽量保证拍摄的画面能拍到更多的正脸。
摄像头参数基本设置
不同品牌的摄像头都有一些基本的视频设置,例如分辨率、帧率和码率等,参数要求如表2所示。
参数 |
要求 |
---|---|
分辨率 |
不低于720P,如果需要做人脸识别和去重不低于1080P,不高于4K(3840*2160)。 |
帧率 |
不高于25fps,不低于15fps,建议值20fps。 |
码率 |
720P建议设为4096Kbps~6144Kbps左右,1080P建议设为6144Kpbs~8192Kbps,更高分辨率可设置更高码率。 |
视频编码 |
如果支持H.265,设置为H.265。 |
日夜切换 |
关闭夜间自动切换红外模式,暂不支持抓取红外模式下的人脸。 |
宽动态 |
关闭宽动态。普通摄像头的宽动态无法到达专业相机的效果,人的走动速度较快时存在运动模糊,应关闭宽动态设置。 |
人脸角度要求
人脸角度按照三个维度定义:人脸抬头低头角度(pitch),正面人脸旋转角度(roll),前后转头偏转角度(yaw)。人脸检测算法对三个空间维度都有限制。检测模型根据三个维度做姿态评估以后,将检测到的人脸图片发送出来。如果摄像头安装角度不合适,拍摄的画面容易将一些正脸误检为侧脸,在安装好摄像头以后,需要安装人员在现场走进画面实际测试,确认拍摄的人脸画面不产生过大的角度,不会造成算法无法抓到人脸。
请保证人在正常行走中,视频中人脸成像前后转头偏转角度“yaw”不超过45°(即摄像头无斜拍),人脸抬头低头角度“pitch”不超过30°(即摄像头架设俯视角合理),人脸旋转角度“roll”不超过20°(即摄像头两侧水平,无倾斜角),满足上述正脸姿态要求。
人脸大小要求
对于不可调焦距的摄像头,摄像头应安装在距离抓拍点较近处,使得人脸在画面中的像素大小不小于30px*30px。摄像头架设建议如下。
架设高度:2m-2.5m
监控距离:5m-6m
监控宽度:2m-3m
俯视角度:15°左右
对于可调焦距摄像头,应调节焦段使得人脸像素大小满足大于30px*30px的要求。
如果抓取人脸后还需发送给FRS服务,请保证人脸像素大小大于80px*80px,对应设置运行时配置参数中的“cropSizeMin”参数值为“80”。
光照要求
光照条件要求需要满足以下几项:
- 行人正脸光照强度较好,光线过强和过弱都不太合适。
如果不满足此要求,例如在夜晚或光线不足的白天等环境,会使得采集人脸图像曝光不足,获取的人脸画面偏暗、噪点偏多,导致发送至FRS服务的图片正确率偏低。
- 人脸两侧光照强度差值不宜过大。
- 行人背面光照强度<正面光照强度* 2。
如果不满足此要求,即行人背面光照强度远大于正面光照强度,采集人脸图像有严重“背光”现象,最终导致人脸曝光不足,五官细节丢失。
- 室外安装摄像头不宜正对着太阳光,会导致人脸拍摄光照不均,造成人脸反光。
- 室外摄像头安装,不宜选择背阴严重或者有遮挡物挡住光线的地方架设。
如果现场的光线不满足上述要求,则需要通过强光抑制或补光来优化现场的光照条件。强光抑制可以改善“阴阳脸”、“背光”现象,即通过减弱侧面光照来改善光照条件。补光则可以通过增加额外光源的方式改善光照条件,提高人脸图像的采集效果;主要通过普通射灯、白炽灯等在不影响装修、路人视觉效果的情况下提高人脸的光照度,消除“阴阳脸”。
周围环境要求
- 镜头前方不要有遮挡的障碍物,容易挡住人脸,造成漏检。
- 不要将摄像头架在房子遮阴的挡板下,会造成光照过暗,人脸完全看不清。
- 室内安装摄像头,部署在楼道里需要注意光照,楼道里灯光明暗交替变化过快,摄像头拍摄时获取的画面可能会偏暗,检测到的人脸发送给FRS后,正确率较低。比如,走廊较长,楼道光照较暗,人距离摄像头较远时,检测出的人脸很模糊。
- 室外安装摄像头,需要注意雨雪的影响,避免在露天下布置,雨水或者雪将摄像头的镜头盖住,造成拍摄画面模糊不清。
运行时配置参数
技能在运行时,需要添加运行时配置。配置完成后,参数会从华为HiLens云侧下发到端侧设备。
- 配置参数说明
技能相关配置参数设计如表3所示。
表3 运行时配置参数 名称
是否必选
参数类型
说明
logLevel
是
Enum
日志级别,包括INFO,DEBUG,WARNING和ERROR。建议设置为INFO。
keep_running
是
Int
当技能崩溃是否自动拉起技能并持续运行。此项配置在1.1.0及以后版本起作用。
multi_camera
是
List
一个设备上多路视频的技能参数,详情请参见表4。
表4 视频参数说明 名称
是否必选
参数类型
说明
camera_names
是
List
摄像头名称。可配置多个名称,表示多个摄像头采用同样的技能配置。
sendOriImgFlag
是
Int
是否发送人脸背景原始图,默认值:0。
0:表示不发送
1:表示发送
sendRepeatFaceFlag
是
Int
是否重复发送清晰人脸图,开关打开后,同一个人只要显示更清晰的人脸会重复发送, 默认值:0。
0:表示不发送
1:表示发送
sendOriImgCompressionRatio
否
Int
原始图jpeg压缩百分比,默认值为90,表示图片压缩比90%,取值范围[1 100]。
cropSizeMax
否
Int
发送人脸图片长宽的最大像素,默认值400。
cropSizeMin
否
Int
发送人脸图片长宽的最小像素,默认值80。
roi
否
String
检测区域配置。区域的设置由Polygon开头,其后依次为区域的坐标(按顺时针排列的x,y坐标)。默认值为Polygon 0 0 0 0,表示检测整个画面。
sendUrl
是
String
发送技能消息POST请求的URL地址。
faceQualityThreshold
是
Float
人脸清晰度阈值。清晰度大于此值的人脸才发送。取值范围[0.0, 1.0],默认值0.38。
centerMode
否
Int
是否只检测roi区域中的最大人脸,默认值0。
0:返回所有人脸。
1:只返回roi中最大的人脸。
- 示例
HiLens Kit设备支持多路摄像头接入,如果要为不同的摄像头设置不同的技能配置,或者几个摄像头共用同一技能配置,则可在配置列表中给出相应的配置信息,示例如下:
//Store001的两个摄像头pos1和pos2配置不同参数: { "logLevel": "INFO", "keep_running": 1, "multi_camera": [{ "camera_names": ["store001_pos1"], "sendOriImgFlag": 0, "sendRepeatFaceFlag": 0, "sendOriImgCompressionRatio": 90, "cropSizeMax": 400, "cropSizeMin": 120, "roi": "Polygon 0 0 0 0", "sendUrl": "https://abc.company.com/face", "faceQualityThreshold": 0.45, "centerMode": 0 }, { "camera_names": ["store001_pos2"], "sendOriImgFlag": 1, "sendRepeatFaceFlag": 1, "sendOriImgCompressionRatio": 100, "cropSizeMax": 300, "cropSizeMin": 80, "roi": "Polygon 0 0 0 0", "sendUrl": "https://abc.company.com/face", "faceQualityThreshold": 0.55, "centerMode": 0 }] } //Store002的两个摄像头pos1和pos2配置相同参数: { "logLevel": "INFO", "keep_running": 1, "multi_camera": [{ "camera_names": ["store002_pos1","store002_pos2"], "sendOriImgFlag": 0, "sendRepeatFaceFlag": 0, "sendOriImgCompressionRatio": 90, "cropSizeMax": 400, "cropSizeMin": 120, "roi": "Polygon 0 0 0 0", "sendUrl": "https://abc.company.com/face" "faceQualityThreshold": 0.55, "centerMode": 0 }] }
技能结果上传接口
- 请求消息
推理结果将以HTTPS POST请求方法推送到应用系统server的指定URL地址。
POST {sendUrl}
其中sendUrl在技能运行时配置中设置。
- 请求消息头
技能以json形式返回推理结果,因此消息头Content-Type类型为“application/json”,参数说明如表5所示。
- 公共消息体
华为HiLens 公共消息体包含了技能的公共消息内容,如表6所示。
- 技能消息体
人脸检测的json消息体如表7所示:
表7 技能消息体参数说明 名称
类型
说明
face_id
String
人脸图UUID。
track_id
Uint64
人脸的跟踪标记,相同的track_id表示同一个人脸。
ori_img_id
String
人脸背景原始图UUID。
time
Uint64
图片解码时间的时间戳,单位为秒。
bbox
Object
人脸图在背景图中的位置信息。位置信息参数请参见表8。
clarity
Float
人脸清晰度,范围[0,1]。
face_image
String
人脸图BASE64编码结果。
ori_image
String
原始图BASE64编码结果,如果配置不发送原始图,则无该字段。
人脸检测的json消息体示例如下:
{ "msg_type": "face_detection_result", "cam_name": "store001_pos2", "skill_id": "f5c526eb6c51440c8a0ee5e3cc65f23c", "face_id": "0DD1BEA6-634B-11E8-8B0B-407D0FAD9218", "track_id": 1, "ori_img_id": "0DD1BF0A-634B-11E8-8B0B-407D0FAD9218", "time": 1527603463, "bbox ": { "x": 32, "y": 379, "w": 49, "h": 65 }, "clarity": 0.55, "face_image": "4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQE...", "ori_image": "4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQE...", }
- 请求消息头
- 响应消息
- 响应消息头
响应消息头可包含如下两部分。
- 一个HTTP状态代码,从2xx成功代码到4xx或5xx错误代码。或者可以返回服务定义的状态码。
- 附加响应头字段,如支持请求的响应所需,如Content-type响应消息头。
详细的公共响应消息头参数说明如表9所示。
- 响应消息体(可选)
响应消息体通常以结构化格式(如json或xml)返回,与响应消息头中Content-type对应,传递除响应消息头之外的内容。
- 响应消息头