001package net.gdface.sdk;
002
003import java.util.Arrays;
004import java.util.LinkedHashMap;
005import net.gdface.utils.Assert;
006
007/**
008 * 人脸特征1:N比较结果对象<br>
009 * 用于保存{@link FaceApi#compareFaces(byte[], byte[], int)}方法调用的返回结果
010 * @author guyadong
011 *
012 */
013public class CompareResult {
014        /**
015         * 检测到的人脸信息对象(含特征)
016         */
017        CodeInfo[] codes;
018        /**
019         * 与codes数组中对应索引指定的人脸特征比较产生的相似度结果
020         */
021        double[] similartys;
022        public CompareResult() {
023                this(new CodeInfo[0], new double[0]);
024        }
025        public CompareResult(CodeInfo[] codes, double[] similartys) {
026                Assert.notNull(codes, "codes");
027                Assert.notNull(similartys, "similartys");
028                Assert.isTrue(codes.length == similartys.length, "codes.length == similartys.length");
029                this.codes = codes;
030                this.similartys = similartys;
031        }
032        /**
033         * @return codes
034         */
035        public CodeInfo[] getCodes() {
036                return codes;
037        }
038        /**
039         * @param codes 要设置的 codes
040         */
041        public void setCodes(CodeInfo[] codes) {
042                this.codes = codes;
043        }
044        /**
045         * @return similartys
046         */
047        public double[] getSimilartys() {
048                return similartys;
049        }
050        /**
051         * @param similartys 要设置的 similartys
052         */
053        public void setSimilartys(double[] similartys) {
054                this.similartys = similartys;
055        }
056        
057        /**
058         * 将比较结果以 CodeInfo--similarity 值对的形式返回,顺序与
059         * @return map instance
060         */
061        public LinkedHashMap<CodeInfo,Double> asMap(){
062                LinkedHashMap<CodeInfo,Double> map = new LinkedHashMap<>();
063                for(int i=0;i<codes.length;++i){
064                        map.put(codes[i], similartys[i]);
065                }
066                return map;
067        }
068        @Override
069        public int hashCode() {
070                final int prime = 31;
071                int result = 1;
072                result = prime * result + Arrays.hashCode(codes);
073                result = prime * result + Arrays.hashCode(similartys);
074                return result;
075        }
076
077        @Override
078        public boolean equals(Object obj) {
079                if (this == obj)
080                        return true;
081                if (obj == null)
082                        return false;
083                if (!(obj instanceof CompareResult))
084                        return false;
085                CompareResult other = (CompareResult) obj;
086                if (!Arrays.equals(codes, other.codes))
087                        return false;
088                if (!Arrays.equals(similartys, other.similartys))
089                        return false;
090                return true;
091        }
092        
093        @Override
094        public String toString() {
095                StringBuilder builder = new StringBuilder();
096                builder.append("CompareResult [codes=");
097                builder.append(Arrays.toString(codes));
098                builder.append(", similartys=");
099                builder.append(Arrays.toString(similartys));
100                builder.append("]");
101                return builder.toString();
102        }
103}