我在facedetails中有14个属性我想查询并找到每个属性最接近的匹配,并且只有当14个属性与人脸匹配时我的代码才会返回person对象。 以下是数据库中的示例:
"faceDetails":{
"mCalculateFaceSizeHeight" : 121,
"mCalculateFaceSizeWidth" : 107,
"mCalculateLeftEyeBrowSizeHeight" : 31,
"mCalculateLeftEyeBrowSizeWidth" : 43,
"mCalculateLeftEyeSizeHeight" : 64,
"mCalculateLeftEyeSizeWidth" : 10,
"mCalculateMouthSizeHeight" : 24,
"mCalculateMouthSizeWidth" : 30,
"mCalculateNoseSizeHeight" : 43,
"mCalculateNoseSizeWidth" : 71,
"mCalculateRightEyeBrowSizeHeight" : 43,
"mCalculateRightEyeBrowSizeWidth" : 52,
"mCalculateRightEyeSizeWidth" : 14,
"mCalculatedRightEyeSizeHeight" : 36
}
目前在Android设备中,我有类似的内容。
Query personLeftEyeSizeWidthQueryendAt = myRef.orderByChild("mCalculateLeftEyeSizeWidth")
.endAt(mCalculateLeftEyeSizeWidth())
.limitToLast(1);
personLeftEyeSizeWidthQuery.addChildEventListener(new ChildEventListener() {....
Query personLeftEyeSizeWidthQueryStartAt = myRef.orderByChild("mCalculateLeftEyeSizeWidth")
.startAt(mCalculateLeftEyeSizeWidth())
.limitToFirst(1);
personLeftEyeSizeWidthQuery.addChildEventListener(new ChildEventListener() {....
My index is like this:
".indexOn": [
"mCalculateLeftEyeSizeWidth",
"mCalculateLeftEyeSizeHeight",
"mCalculateRightEyeSizeWidth",
"mCalculatedRightEyeSizeHeight",
"mCalculateNoseSizeWidth",
"mCalculateNoseSizeHeight",
"mCalculateMouthSizeWidth",
"mCalculateMouthSizeHeight",
"mCalculateLeftEyeBrowSizeWidth",
"mCalculateLeftEyeBrowSizeHeight",
"mCalculateRightEyeBrowSizeWidth",
"mCalculateRightEyeBrowSizeHeight",
"mCalculateFaceSizeWidth",
"mCalculateFaceSizeHeight"
]
我的问题是,每次单个查询都会向前推进28个单个查询,或者有更好的方法来组合所有28个查询。 我不想放弃其中的一些,因为面部识别准确性对于找到匹配非常重要。 让我知道如果我继续28单一查询,然后检查每个查询的关键,看他们都匹配同一个人或可能是另一种方法。
由于 伊兰格罗斯
答案 0 :(得分:2)
当前的Firebase数据库API没有提供组合查询的确切方法。
但是,the video来自Firebase的人员告诉我们如何构建数据库以减轻负担。
我建议,分离leftEyeHeight
和leftEyeWidth
你可以简单地leftEyeSize
合并它们,其值可以写成(leftEyeHeight, leftEyeWidth)
即使你手动编写每个查询,这也会使你的问题减少一半