如何使用微软Face API识别用户?Android创建PersonGroup报错求助
解决Person Group ID无效的问题
看起来你在使用原微软Project Oxford Face API(现在的Azure Face API)创建PersonGroup时遇到了Person group ID is invalid的错误,这个问题几乎都是因为传入的ID不符合API的格式规范导致的,我来帮你一步步排查解决:
首先明确PersonGroup ID的强制格式要求
Azure Face API对PersonGroup ID有严格的规则,必须满足以下所有条件:
- 长度在1到64个字符之间(不能为空,也不能太长)
- 只能包含ASCII字母、数字,以及以下特殊符号:
-、_、?、.、, - 不能包含空格、中文、非ASCII字符或者其他未允许的特殊符号(比如
@、#、!这些都不行)
你的代码可能存在的问题
你的createPersonGroup函数本身逻辑没问题,但问题大概率出在调用这个函数时传入的personGroupId参数不符合上面的规则,比如:
- 传入了空字符串或者长度超过64的字符串
- 包含了空格、中文或者像
@这类非法符号 - 有前后未注意到的空格
解决方案
1. 先给ID做格式校验
在调用API创建PersonGroup之前,先校验ID是否合法,避免无效请求。可以写一个工具函数来做这件事:
fun isValidPersonGroupId(id: String): Boolean { // 正则匹配允许的字符和长度范围 val validPattern = Regex("^[a-zA-Z0-9-_?,\\.]{1,64}$") // 先去掉前后空格再校验,避免空格导致的无效 return validPattern.matches(id.trim()) }
2. 修改createPersonGroup函数,加入校验逻辑
在调用Face API之前先检查ID合法性,提前抛出明确的错误提示,方便调试:
public fun createPersonGroup(personGroupId: String, personGroupName: String) { val trimmedId = personGroupId.trim() if (!isValidPersonGroupId(trimmedId)) { throw IllegalArgumentException( "Person group ID格式无效:请确保长度在1-64字符之间,仅允许字母、数字和-_?, .符号" ) } faceServiceClient.createPersonGroup(trimmedId, personGroupName, null) }
3. 检查调用时传入的ID
确保你调用createPersonGroup时传入的ID符合要求,比如:
- 不要用用户输入的原始字符串(比如用户名)直接作为ID,最好做过滤或转换(比如把非法字符替换成
-或者去掉) - 避免使用动态生成的过长字符串,比如UUID可以直接使用(UUID的
-是允许的,长度也在64以内)
额外提醒
如果还是不确定问题出在哪,可以先手动传入一个绝对合法的ID测试,比如"test-group-001",如果这个能成功创建,那就是你之前传入的ID确实不符合规范,针对性调整即可。
内容的提问来源于stack exchange,提问作者VivekRajendran
相关产品推荐
相关产品推荐

