001package net.gdface.sdk.fse;
002
003import net.gdface.annotation.DeriveMethod;
004
005/**
006 * 特征码内存搜索引擎(feature search engine)接口<br>
007 * 提供高速的人脸特征相似度比对搜索/排序,支持多线程并行搜索,适用于百万级以上人脸库的快速搜索。<br>
008 * 1.使用 {@link #addFeature(byte[], byte[], String)}方法将特征添加到搜索引擎<br>
009 * 2.使用 {@link #searchCode(byte[], double, int)}在内存中搜索与指定特征相似的的特征返回搜索结果
010 * @author guyadong
011 *
012 */
013public interface FeatureSe {
014        /**
015         *      在内存表中根据比对相似度进行特征码搜索
016         * @param code 要比对的特征码
017         * @param sim 相似度阀值
018         * @param rows  最大返回的记录数
019         * @return 返回包含相似度(降序)的结果数组,如果没有查到匹配的记录则返回空数组
020         */
021        @DeriveMethod(methodSuffix="FromFse")
022        public CodeBean[] searchCode(byte[] code, double sim, int rows);
023        /**
024         * 根据特征码ID在表中查找指定的记录
025         * @param featureId 特征码ID,MD5校验码(16 bytes)
026         * @return 返回指定的特征记录,没有找到则返回{@code null},{@code featureId}为{@code null}或空返回{@code null}
027         */
028        @DeriveMethod(methodSuffix="FromFse")
029        public CodeBean getFeature(byte[] featureId);
030        /**
031         * 根据特征码ID在表中查找指定的记录
032         * @param featureId 特征码ID,MD5校验码(32字节HEX字符串)
033         * @return 返回指定的特征记录,没有找到则返回{@code null},{@code featureId}为{@code null}或空返回{@code null}
034         */
035        @DeriveMethod(methodSuffix="FromFse")
036        public CodeBean getFeatureByHex(String featureId);
037        /**
038         * 添加一条特征码到内存表<br>
039         * @param featureId 特征码ID(MD5校验码),为null时,native library会自动计算MD5作为特征码ID
040         * @param feature 特征码字节数组,为{@code null}时返回false
041         * @param imgMD5 特征所属图的MD5(32字节HEX字符串),可为null
042         * @return 添加成功返回true, 否则返回false
043         */
044        @DeriveMethod(methodSuffix="ToFse")
045        public boolean addFeature(byte[] featureId,byte[]feature, String imgMD5);
046        /**
047         * 添加一条特征码到内存表<br>
048         * @param featureId 特征码ID(MD5校验码),为null时,native library会自动计算MD5作为特征码ID
049         * @param feature 特征码字节数组,为{@code null}时返回false
050         * @param appid 应用id,由调用者定义,可为null
051         * @return 添加成功返回true, 否则返回false
052         */
053        @DeriveMethod(methodSuffix="ToFseWithAppId")
054        boolean addFeature(byte[] featureId, byte[] feature, long appid);
055        /**
056         * 根据特征码ID中表中删除指定的记录
057         * @param featureId  特征码ID,MD5校验码(16 bytes)
058         * @return 成功删除则返回true,否则返回false
059         */
060        @DeriveMethod(methodSuffix="FromFse")
061        public boolean removeFeature(byte[] featureId);
062        /**
063         * 根据特征码ID中表中删除指定的记录
064         * @param featureId 特征码ID,MD5校验码(32字节HEX字符串)
065         * @return 成功删除则返回true,否则返回false
066         */
067        @DeriveMethod(methodSuffix="FromFse")
068        public boolean removeFeatureByHex(String featureId);
069        /**
070         * 删除内存表中所有特征数据
071         */
072        @DeriveMethod(methodSuffix="OfFse")
073        public void clearAll();
074        /**
075         * 
076         * @return 内存表中元素个数
077         */
078        @DeriveMethod(methodSuffix="OfFse")
079        public int size();
080}