Browse Source

upgrade:人脸数组格式优化,优化百度人脸检索问题。

xwh 1 month ago
parent
commit
1d5d6b8fb7

+ 8 - 9
app/src/main/java/com/hanghui/senic/activity/setup/PersonnelDataActivity.java

@@ -133,18 +133,17 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
 
 
     private void addList(int page) {
     private void addList(int page) {
         int size;
         int size;
-        ConcurrentHashMap<String,User> userMap = FaceApi.getInstance().getUsers();
-        if (userMap == null ){
+        List<User> users = FaceApi.getInstance().getUsers();
+        if (users == null ){
             return;
             return;
         }
         }
-        Collection<User> values = userMap.values();
-        if (values.size() <= 20){
-            size = values.size();
+        if (users.size() <= 20){
+            size = users.size();
         }else {
         }else {
             size = page * 20;
             size = page * 20;
         }
         }
         int currentSubscript = 0;//获取当前下标,处理数据
         int currentSubscript = 0;//获取当前下标,处理数据
-        for (User value : values) {
+        for (User value : users) {
             currentSubscript++;
             currentSubscript++;
             if (currentSubscript == size){
             if (currentSubscript == size){
                 break;
                 break;
@@ -222,18 +221,18 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
 
 
     private List<User> searchList(String id, String cardNumber, String name, String idNumber, String phone){
     private List<User> searchList(String id, String cardNumber, String name, String idNumber, String phone){
         List<User> itemList = new ArrayList<>();
         List<User> itemList = new ArrayList<>();
-        ConcurrentHashMap<String,User> userMap = FaceApi.getInstance().getUsers();
+        List<User> users  = FaceApi.getInstance().getUsers();
         //当搜索条件为空时,重新添加数据
         //当搜索条件为空时,重新添加数据
         if (StringIsNull.IsStringNull(id) && StringIsNull.IsStringNull(cardNumber) && StringIsNull.IsStringNull(name)
         if (StringIsNull.IsStringNull(id) && StringIsNull.IsStringNull(cardNumber) && StringIsNull.IsStringNull(name)
                 && StringIsNull.IsStringNull(idNumber) && StringIsNull.IsStringNull(phone)){
                 && StringIsNull.IsStringNull(idNumber) && StringIsNull.IsStringNull(phone)){
-            for (User item : userMap.values()) {
+            for (User item : users) {
                 User userInfoBean = ConfigManager.getGson().fromJson(item.getUserInfo(), User.class);
                 User userInfoBean = ConfigManager.getGson().fromJson(item.getUserInfo(), User.class);
                 itemList.add(userInfoBean);
                 itemList.add(userInfoBean);
             }
             }
             return itemList;
             return itemList;
         }
         }
 
 
-        for (User item : userMap.values()) {
+        for (User item : users) {
             User userInfoBean = ConfigManager.getGson().fromJson(item.getUserInfo(), User.class);
             User userInfoBean = ConfigManager.getGson().fromJson(item.getUserInfo(), User.class);
             // 比较当前元素是否等于 "Apple"
             // 比较当前元素是否等于 "Apple"
             String userId = String.valueOf(userInfoBean.getUserId());
             String userId = String.valueOf(userInfoBean.getUserId());

+ 3 - 3
app/src/main/java/com/hanghui/senic/baiduface/WebsocketService.java

@@ -1097,7 +1097,7 @@ public class    WebsocketService extends Service {
         FaceSDKManager.getInstance().initDataBases2(MyAppliction.getContext());
         FaceSDKManager.getInstance().initDataBases2(MyAppliction.getContext());
 
 
         //数据库1万8千条数据时,DBManager.getInstance().queryAllUsers()查询数据库需要6秒左右
         //数据库1万8千条数据时,DBManager.getInstance().queryAllUsers()查询数据库需要6秒左右
-        ConcurrentHashMap<String, User> usersMap = FaceApi.getInstance().getAllUserList();
+        List<User> users = FaceApi.getInstance().getAllUserList();
 
 
      /*   ArrayList<Integer> userIds = new ArrayList<>();
      /*   ArrayList<Integer> userIds = new ArrayList<>();
 
 
@@ -1124,14 +1124,14 @@ public class    WebsocketService extends Service {
         data.setDeviceSn(ConfigManager.SN);
         data.setDeviceSn(ConfigManager.SN);
         data.setInternetIp(CommonUtil.getIPAddress());
         data.setInternetIp(CommonUtil.getIPAddress());
         data.setHhFaceVersion(CommonUtil.getVersionName());
         data.setHhFaceVersion(CommonUtil.getVersionName());
-        data.setUserCount(usersMap.size());
+        data.setUserCount(users.size());
       //  data.setUserIds(userIds);
       //  data.setUserIds(userIds);
 
 
         userFaceDataReportRequest.setData(data);
         userFaceDataReportRequest.setData(data);
 
 
         String userFaceDataReportRequestJsonStr = GsonUtil.toJson(userFaceDataReportRequest);
         String userFaceDataReportRequestJsonStr = GsonUtil.toJson(userFaceDataReportRequest);
 //        AppLogUtils.i(true, TAG + " ,sendMessage_userinfoReport", "sendMessage_userinfoReport(), userIds.size()=" + userIds.size() +  " ,userFaceDataReportRequestJsonStr=" + userFaceDataReportRequestJsonStr);
 //        AppLogUtils.i(true, TAG + " ,sendMessage_userinfoReport", "sendMessage_userinfoReport(), userIds.size()=" + userIds.size() +  " ,userFaceDataReportRequestJsonStr=" + userFaceDataReportRequestJsonStr);
-        AppLogUtils.i(true, TAG + " ,sendMessage_userinfoReport", "sendMessage_userinfoReport(), userIds.size()=" + usersMap.size());
+        AppLogUtils.i(true, TAG + " ,sendMessage_userinfoReport", "sendMessage_userinfoReport(), userIds.size()=" + users.size());
         sendMessage(userFaceDataReportRequestJsonStr);
         sendMessage(userFaceDataReportRequestJsonStr);
 
 
     }
     }

+ 127 - 86
datalibrary/src/main/java/com/example/datalibrary/api/FaceApi.java

@@ -14,8 +14,10 @@ import com.example.datalibrary.model.Group;
 import com.example.datalibrary.model.User;
 import com.example.datalibrary.model.User;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
 import java.util.UUID;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentHashMap;
@@ -27,11 +29,24 @@ public class FaceApi {
 
 
     public boolean isDelete;
     public boolean isDelete;
 
 
-    private volatile ConcurrentHashMap<String, User> users = new ConcurrentHashMap<>();
+    //  private volatile ConcurrentHashMap<String, User> users = new ConcurrentHashMap<>();
 
 
+    private final List<User> users;
 
 
-    private FaceApi() {
+    public void add(User user) {
+        synchronized (users) {
+            users.add(user);
+        }
+    }
 
 
+    public void remove(int element) {
+        synchronized (users) {
+            users.remove((Object) element);
+        }
+    }
+
+    private FaceApi() {
+        users = Collections.synchronizedList(new LinkedList<User>());
     }
     }
 
 
     public static synchronized FaceApi getInstance() {
     public static synchronized FaceApi getInstance() {
@@ -42,8 +57,6 @@ public class FaceApi {
     }
     }
 
 
     public void  init(DBLoadListener dbLoadListener , Context context){
     public void  init(DBLoadListener dbLoadListener , Context context){
-
-        users = new ConcurrentHashMap<>();
         DBManager.getInstance().init(context);
         DBManager.getInstance().init(context);
         DBManager.getInstance().queryAllUsers(dbLoadListener);
         DBManager.getInstance().queryAllUsers(dbLoadListener);
     }
     }
@@ -120,19 +133,39 @@ public class FaceApi {
                 return false;
                 return false;
             }
             }
             //Log.i("FaceApi", "人脸注册成功,user.getId=" + newUser.getId() );
             //Log.i("FaceApi", "人脸注册成功,user.getId=" + newUser.getId() );
-            users.put(newUser.getUserId() , newUser);
+            add(newUser);
         }
         }
         return ret;
         return ret;
     }
     }
 
 
+/*    *//**
+     * 查找所有用户
+     *//*
+    public  List<User> getAllUserList() {
+        if(users.size()==0){
+            synchronized (users){
+                if(users.size()==0){
+                    users.clear();
+                    DBManager.getInstance().queryAllUsers(new DBManager.DBUserCallback() {
+                        @Override
+                        public void callback(User user) {
+                            users.add(user);
+                        }
+                    });
+                }
+            }
+        }
+        return users;
+    }*/
     /**
     /**
      * 查找所有用户
      * 查找所有用户
      */
      */
-    public  ConcurrentHashMap<String, User> getAllUserList() {
-        if(users==null|| users.size() == 0){
-            synchronized (FaceApi.class){
-                if(users==null || users.size() == 0){
-                    users = DBManager.getInstance().queryAllUsers();
+    public  List<User> getAllUserList() {
+        if(users.size()==0){
+            synchronized (users){
+                if(users.size()==0){
+                    users.clear();
+                    DBManager.getInstance().queryAllUsers(users);
                 }
                 }
             }
             }
         }
         }
@@ -156,23 +189,24 @@ public class FaceApi {
         if (TextUtils.isEmpty(userName)) {
         if (TextUtils.isEmpty(userName)) {
             return null;
             return null;
         }
         }
-
-        if (users != null && users.size() > 0){
+        if (users != null && users.size() > 0) {
             List<User> list = new ArrayList();
             List<User> list = new ArrayList();
-
-            Iterator<HashMap.Entry<String, User>> iterator = users.entrySet().iterator();
+            // 使用迭代器安全地遍历和删除
+            Iterator<User> iterator = users.iterator();
             while (iterator.hasNext()) {
             while (iterator.hasNext()) {
-                HashMap.Entry<String, User> entry = iterator.next();
-                if (entry.getValue() != null &&
-                        entry.getValue().getUserName()!=null &&
-                        entry.getValue().getUserName().indexOf(userName)!= -1) { // 根据条件移除元素
-                    list.add(entry.getValue());
+                User item = iterator.next();
+                if (item != null &&
+                        item.getUserName() != null &&
+                        item.getUserName().indexOf(userName) != -1) {
+                    list.add(item);
                 }
                 }
             }
             }
+
             return list;
             return list;
-        }else {
+        } else {
             return DBManager.getInstance().queryUserByUserNameVag(userName);
             return DBManager.getInstance().queryUserByUserNameVag(userName);
         }
         }
+
     }
     }
 
 
     /**
     /**
@@ -199,19 +233,14 @@ public class FaceApi {
         if (_id < 0) {
         if (_id < 0) {
             return null;
             return null;
         }
         }
-        synchronized (FaceApi.class) {
-            //先从内存中寻找
-            for (String key : users.keySet()) {
-                User user = users.get(key);
-                if (user == null) {
-                    continue;
-                }
+            // 使用迭代器安全地遍历和删除
+            Iterator<User> iterator = users.iterator();
+            while (iterator.hasNext()) {
+                User user = iterator.next();
                 if (user.getId() == _id) {
                 if (user.getId() == _id) {
-                    //Log.i("faceApi","getUserListById_new, 内存中找到 _id=" + _id);
                     return user;
                     return user;
                 }
                 }
             }
             }
-
             //Log.i("faceApi","getUserListById_new, 内存中没有找到 _id=" + _id);
             //Log.i("faceApi","getUserListById_new, 内存中没有找到 _id=" + _id);
 
 
             //再从数据库中寻找
             //再从数据库中寻找
@@ -219,7 +248,6 @@ public class FaceApi {
             if (userList != null && userList.size() > 0) {
             if (userList != null && userList.size() > 0) {
                 return userList.get(0);
                 return userList.get(0);
             }
             }
-        }
         return null;
         return null;
     }
     }
 
 
@@ -230,12 +258,15 @@ public class FaceApi {
         if (TextUtils.isEmpty(userId)) {
         if (TextUtils.isEmpty(userId)) {
             return null;
             return null;
         }
         }
-        if (users != null && users.containsKey(userId)) {
-            User user = users.get(userId);
-            if (user != null&&user.getId()!=0) {
-                return user;
+        synchronized (users) {
+            // 使用迭代器安全地遍历和删除
+            Iterator<User> iterator = users.iterator();
+            while (iterator.hasNext()) {
+                User user = iterator.next();
+                if (userId.equals(user.getUserId())) {
+                    return user;
+                }
             }
             }
-
         }
         }
         return DBManager.getInstance().queryUser(userId);
         return DBManager.getInstance().queryUser(userId);
     }
     }
@@ -245,30 +276,25 @@ public class FaceApi {
      * 更新用户
      * 更新用户
      */
      */
     public boolean userUpdate(User user) {
     public boolean userUpdate(User user) {
-        synchronized (DBManager.class) {
-            if (user == null) {
+        synchronized (users) {
+            if (user == null || TextUtils.isEmpty(user.getUserId())) {
                 return false;
                 return false;
             }
             }
 
 
             boolean ret = DBManager.getInstance().updateUser(user);
             boolean ret = DBManager.getInstance().updateUser(user);
+            User dbUser= DBManager.getInstance().queryUser(user.getUserId());
             if (ret) {
             if (ret) {
                 String userId = user.getUserId();
                 String userId = user.getUserId();
                 int size = users.size();
                 int size = users.size();
-
-                //先从内存中寻找
-                for (String key : users.keySet()) {
-                    User curUser = users.get(key);
-                    if (curUser == null) {
-                        continue;
-                    }
-                    if (userId != null && userId.equals(curUser.getUserId())) {
-                        curUser.setUserName(user.getUserName());
-                        curUser.setImageName(user.getImageName());
-                        curUser.setUserInfo(user.getUserInfo());
-                        curUser.setFeature(user.getFeature());
-                        curUser.setUserInfo(user.getUserInfo());
-                        users.put(curUser.getUserId(), curUser);
-                        break;
+                if (TextUtils.isEmpty(userId) || dbUser == null) {
+                    return false;
+                }
+                synchronized (users) {
+                    for (int i = 0; i < users.size(); i++) {
+                        if(userId.equals(users.get(i).getUserId())){
+                            users.set(i, dbUser); // 更新值,比如翻倍
+                            break;
+                        }
                     }
                     }
                 }
                 }
             }
             }
@@ -298,15 +324,18 @@ public class FaceApi {
         }
         }
         boolean ret = DBManager.getInstance().deleteUser(userId);
         boolean ret = DBManager.getInstance().deleteUser(userId);
         if (ret){
         if (ret){
-            Iterator<HashMap.Entry<String, User>> iterator = users.entrySet().iterator();
-            while (iterator.hasNext()) {
-                HashMap.Entry<String, User> entry = iterator.next();
-                if (entry.getValue() != null &&
-                        userId.equals(entry.getValue().getUserId())) { // 根据条件移除元素
-                    iterator.remove();
+            synchronized (users) {
+                // 使用迭代器安全地遍历和删除
+                Iterator<User> iterator = users.iterator();
+                while (iterator.hasNext()) {
+                    User item = iterator.next();
+                    if (item != null &&
+                            item.getUserId() != null &&
+                            item.getUserId().indexOf(userId) != -1) {
+                        iterator.remove();
+                    }
                 }
                 }
             }
             }
-
         }
         }
         return ret;
         return ret;
     }
     }
@@ -329,14 +358,17 @@ public class FaceApi {
                     break;
                     break;
                 }
                 }
             }*/
             }*/
-
-            Iterator<HashMap.Entry<String, User>> iterator = users.entrySet().iterator();
-            while (iterator.hasNext()) {
-                HashMap.Entry<String, User> entry = iterator.next();
-                if (entry.getValue() != null &&
-                        userId.equals(entry.getValue().getUserId())) { // 根据条件移除元素
-                    FaceSDKManager.getInstance().delPush(entry.getValue());
-                    iterator.remove();
+            synchronized (users) {
+                // 使用迭代器安全地遍历和删除
+                Iterator<User> iterator = users.iterator();
+                while (iterator.hasNext()) {
+                    User item = iterator.next();
+                    if (item != null &&
+                            item.getUserId() != null &&
+                            item.getUserId().indexOf(userId) != -1) {
+                        FaceSDKManager.getInstance().delPush(item);
+                        iterator.remove();
+                    }
                 }
                 }
             }
             }
 
 
@@ -367,7 +399,7 @@ public class FaceApi {
         if (isAllCover){
         if (isAllCover){
             dbLoadListener.onLoad(count / 2 ,
             dbLoadListener.onLoad(count / 2 ,
                     count , 0.5f);
                     count , 0.5f);
-            users = new ConcurrentHashMap<>();
+            users.clear();
             DBManager.getInstance().clearTable();
             DBManager.getInstance().clearTable();
             dbLoadListener.onComplete(null , count);
             dbLoadListener.onComplete(null , count);
             return true;
             return true;
@@ -377,32 +409,36 @@ public class FaceApi {
         int i = 0;
         int i = 0;
         dbLoadListener.onStart(count);
         dbLoadListener.onStart(count);
         try {
         try {
-            Iterator<User> iterator = list.iterator();
-            while (iterator.hasNext()) {
-                User user = iterator.next();
-                int userId = user.getId();
-                if (user.isChecked()) {
-                    boolean ret = DBManager.getInstance().deleteUser(userId);
-                    if (ret){
-                        iterator.remove();
-                        if (isHave){
-                            users.remove(user);
+
+            synchronized (users){
+                // 使用迭代器安全地遍历和删除
+                Iterator<User> iterator = users.iterator();
+                while (iterator.hasNext()) {
+                    User item = iterator.next();
+                    if (item != null &&
+                            item.isChecked()) {
+                        boolean ret = DBManager.getInstance().deleteUser(item.getUserId());
+                        if (ret){
+                            iterator.remove();
                         }
                         }
+
                     }
                     }
                 }
                 }
             }
             }
+
         }catch (Exception e){
         }catch (Exception e){
 
 
         }
         }
         dbLoadListener.onComplete(null , count);
         dbLoadListener.onComplete(null , count);
-            return rets;
+        return rets;
     }
     }
 
 
     public void userClean(){
     public void userClean(){
-        if(users != null) {
-            users.clear();
+        synchronized (users) {
+            if (users != null) {
+                users.clear();
+            }
         }
         }
-        users = new ConcurrentHashMap<>();
         DBManager.getInstance().clearTable();
         DBManager.getInstance().clearTable();
     }
     }
 
 
@@ -577,15 +613,20 @@ public class FaceApi {
     }
     }
 
 
     public void clean(){
     public void clean(){
-        users = null;
+        synchronized (users) {
+            users.clear();
+        }
     }
     }
 
 
-    public ConcurrentHashMap<String, User> getUsers() {
+    public List<User> getUsers() {
         return users;
         return users;
     }
     }
 
 
-    public void setUsers(ConcurrentHashMap<String, User> users) {
-        this.users = users;
+    public void setUsers(List<User> users) {
+        synchronized (users){
+            users.clear();
+            users.addAll(users);
+        }
     }
     }
 
 
 
 

+ 56 - 52
datalibrary/src/main/java/com/example/datalibrary/db/DBManager.java

@@ -379,14 +379,13 @@ public class DBManager {
     /**
     /**
      * 查询所有用户(按时间降序排序)
      * 查询所有用户(按时间降序排序)
      */
      */
-    public ConcurrentHashMap<String, User> queryAllUsers() {
+    public void queryAllUsers( final List<User> users) {
         synchronized (DBManager.class) {
         synchronized (DBManager.class) {
             Cursor cursor = null;
             Cursor cursor = null;
-            ConcurrentHashMap<String, User> users = new ConcurrentHashMap<>();
             try {
             try {
                 if (mDBHelper == null) {
                 if (mDBHelper == null) {
                     Log.e(TAG, "mDBHelper异常,mDBHelper == null");
                     Log.e(TAG, "mDBHelper异常,mDBHelper == null");
-                    return null;
+                    return ;
                 }
                 }
                 SQLiteDatabase db = mDBHelper.getReadableDatabase();
                 SQLiteDatabase db = mDBHelper.getReadableDatabase();
                 String where = "group_id = ? order by ctime desc";
                 String where = "group_id = ? order by ctime desc";
@@ -429,12 +428,15 @@ public class DBManager {
                     user.setFaceToken(faceToken);
                     user.setFaceToken(faceToken);
                     user.setFeature(feature);
                     user.setFeature(feature);
                     user.setImageName(imageName);
                     user.setImageName(imageName);
-                    users.put(userId, user);
+                    if (users != null) {
+                        users.add(user);
+                    }
+
                 }
                 }
             } finally {
             } finally {
                 closeCursor(cursor);
                 closeCursor(cursor);
             }
             }
-            return users;
+
         }
         }
     }
     }
 
 
@@ -676,59 +678,61 @@ public class DBManager {
      * 查询用户(根据dbId)
      * 查询用户(根据dbId)
      */
      */
     public List<User> queryUserById(int _id) {
     public List<User> queryUserById(int _id) {
-        List<User> users = new ArrayList<>();
-        Cursor cursor = null;
-        try {
-            if (mDBHelper == null) {
-                return null;
-            }
-            SQLiteDatabase db = mDBHelper.getReadableDatabase();
-            String where = "_id = ? ";
-            String[] whereValue = {String.valueOf(_id)};
-            cursor = db.query(DBHelper.TABLE_USER, null, where, whereValue, null, null, null);
-            if (cursor != null && cursor.getCount() > 0 && cursor.moveToNext()) {
-                String groupId = cursor.getString(cursor.getColumnIndex("group_id"));
-                String userId = cursor.getString(cursor.getColumnIndex("user_id"));
-                String userName = cursor.getString(cursor.getColumnIndex("user_name"));
-                String userInfo = cursor.getString(cursor.getColumnIndex("user_info"));
-                String faceToken = cursor.getString(cursor.getColumnIndex("face_token"));
-                byte[] feature = cursor.getBlob(cursor.getColumnIndex("feature"));
-                String imageName = cursor.getString(cursor.getColumnIndex("image_name"));
-                long updateTime = cursor.getLong(cursor.getColumnIndex("update_time"));
-                long ctime = cursor.getLong(cursor.getColumnIndex("ctime"));
+        synchronized (DBManager.class) {
+            List<User> users = new ArrayList<>();
+            Cursor cursor = null;
+            try {
+                if (mDBHelper == null) {
+                    return null;
+                }
+                SQLiteDatabase db = mDBHelper.getReadableDatabase();
+                String where = "_id = ? ";
+                String[] whereValue = {String.valueOf(_id)};
+                cursor = db.query(DBHelper.TABLE_USER, null, where, whereValue, null, null, null);
+                if (cursor != null && cursor.getCount() > 0 && cursor.moveToNext()) {
+                    String groupId = cursor.getString(cursor.getColumnIndex("group_id"));
+                    String userId = cursor.getString(cursor.getColumnIndex("user_id"));
+                    String userName = cursor.getString(cursor.getColumnIndex("user_name"));
+                    String userInfo = cursor.getString(cursor.getColumnIndex("user_info"));
+                    String faceToken = cursor.getString(cursor.getColumnIndex("face_token"));
+                    byte[] feature = cursor.getBlob(cursor.getColumnIndex("feature"));
+                    String imageName = cursor.getString(cursor.getColumnIndex("image_name"));
+                    long updateTime = cursor.getLong(cursor.getColumnIndex("update_time"));
+                    long ctime = cursor.getLong(cursor.getColumnIndex("ctime"));
 
 
-                String phone = cursor.getString(cursor.getColumnIndex("user_phone"));
-                String idNumber = cursor.getString(cursor.getColumnIndex("user_id_number"));
-                String photo = cursor.getString(cursor.getColumnIndex("user_photo"));
-                String cardIdEx = cursor.getString(cursor.getColumnIndex("user_card_id_ex"));
-                long startTime = cursor.getLong(cursor.getColumnIndex("user_start_time"));
-                long endTime = cursor.getLong(cursor.getColumnIndex("user_end_time"));
+                    String phone = cursor.getString(cursor.getColumnIndex("user_phone"));
+                    String idNumber = cursor.getString(cursor.getColumnIndex("user_id_number"));
+                    String photo = cursor.getString(cursor.getColumnIndex("user_photo"));
+                    String cardIdEx = cursor.getString(cursor.getColumnIndex("user_card_id_ex"));
+                    long startTime = cursor.getLong(cursor.getColumnIndex("user_start_time"));
+                    long endTime = cursor.getLong(cursor.getColumnIndex("user_end_time"));
 
 
-                User user = new User();
+                    User user = new User();
 
 
-                user.setPhone(phone);
-                user.setIdNumber(idNumber);
-                user.setPhoto(photo);
-                user.setCardIdEx(cardIdEx);
-                user.setStartTime(startTime);
-                user.setEndTime(endTime);
+                    user.setPhone(phone);
+                    user.setIdNumber(idNumber);
+                    user.setPhoto(photo);
+                    user.setCardIdEx(cardIdEx);
+                    user.setStartTime(startTime);
+                    user.setEndTime(endTime);
 
 
-                user.setId(_id);
-                user.setUserId(userId);
-                user.setGroupId(groupId);
-                user.setUserName(userName);
-                user.setCtime(ctime);
-                user.setUpdateTime(updateTime);
-                user.setUserInfo(userInfo);
-                user.setFeature(feature);
-                user.setImageName(imageName);
-                user.setFaceToken(faceToken);
-                users.add(user);
+                    user.setId(_id);
+                    user.setUserId(userId);
+                    user.setGroupId(groupId);
+                    user.setUserName(userName);
+                    user.setCtime(ctime);
+                    user.setUpdateTime(updateTime);
+                    user.setUserInfo(userInfo);
+                    user.setFeature(feature);
+                    user.setImageName(imageName);
+                    user.setFaceToken(faceToken);
+                    users.add(user);
+                }
+            } finally {
+                closeCursor(cursor);
             }
             }
-        } finally {
-            closeCursor(cursor);
+            return users;
         }
         }
-        return users;
     }
     }
 
 
     /**
     /**

+ 3 - 3
datalibrary/src/main/java/com/example/datalibrary/factory/specific/FeatureBuilder.java

@@ -37,9 +37,9 @@ public class FeatureBuilder extends ModelBuilder<FaceFeature> {
                // Log.e("face_feature_db_add" , i + " " + i1);
                // Log.e("face_feature_db_add" , i + " " + i1);
             }
             }
         });
         });
-        faceSearch.setMaxUpdateSize(10);
+        faceSearch.setMaxUpdateSize(0);
         faceSearch.setInputDBIntervalTime(0);
         faceSearch.setInputDBIntervalTime(0);
-        faceSearch.setRegisterCompareThreshold(0.8f);
+        faceSearch.setRegisterCompareThreshold(0.9f);
         faceSearch.setUpdateCompareThreshold(0.9f);
         faceSearch.setUpdateCompareThreshold(0.9f);
         faceSearch.setInputDBThreshold(0.92f);
         faceSearch.setInputDBThreshold(0.92f);
 
 
@@ -49,7 +49,7 @@ public class FeatureBuilder extends ModelBuilder<FaceFeature> {
     public void init() {
     public void init() {
         faceFeature = new FaceFeature();
         faceFeature = new FaceFeature();
         faceSearch = new FaceSearch();
         faceSearch = new FaceSearch();
-        faceSearch.setMaxUpdateSize(10);
+        faceSearch.setMaxUpdateSize(0);
         faceSearch.setInputDBIntervalTime(0);
         faceSearch.setInputDBIntervalTime(0);
         faceSearch.setRegisterCompareThreshold(0.8f);
         faceSearch.setRegisterCompareThreshold(0.8f);
         faceSearch.setUpdateCompareThreshold(0.9f);
         faceSearch.setUpdateCompareThreshold(0.9f);

+ 12 - 7
datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java

@@ -189,23 +189,28 @@ public class FaceSDKManager {
         if (future3 != null && !future3.isDone()) {
         if (future3 != null && !future3.isDone()) {
             return;
             return;
         }
         }
+        if (faceModel != null && faceModel.getFaceSearch() != null && faceModel.getFaceSearch().getSize() > 0) {
+            return;
+        }
 
 
         future3 = es3.submit(new Runnable() {
         future3 = es3.submit(new Runnable() {
             @Override
             @Override
             public void run() {
             public void run() {
-                ConcurrentHashMap<String, User> usersMap = FaceApi.getInstance().getAllUserList();
+                List<User> usersMap = FaceApi.getInstance().getAllUserList();
                 synchronized (faceModel.getFaceSearch()) {
                 synchronized (faceModel.getFaceSearch()) {
                     //先清空数据
                     //先清空数据
                     faceModel.getFaceSearch().featureClear();
                     faceModel.getFaceSearch().featureClear();
-
-                    for (String key : usersMap.keySet()) {
-                        User user = usersMap.get(key);
+                    for (User user:usersMap){
+                        if(user==null||user.getId() == 0 ||user.getFeature() == null){
+                            continue;
+                        }
                         faceModel.getFaceSearch().pushPersonById(user.getId(), user.getFeature());
                         faceModel.getFaceSearch().pushPersonById(user.getId(), user.getFeature());
+
                     }
                     }
-                    if (FaceApi.getInstance().getmUserNum() != 0) {
+                 /*   if (FaceApi.getInstance().getmUserNum() != 0) {
                         //ToastUtils.toast(context, "人脸库加载成功");
                         //ToastUtils.toast(context, "人脸库加载成功");
                         Log.i(TAG, "人脸库加载成功");
                         Log.i(TAG, "人脸库加载成功");
-                    }
+                    }*/
                 }
                 }
             }
             }
         });
         });
@@ -851,7 +856,7 @@ public class FaceSDKManager {
             // TODO 阈值可以根据不同模型调整
             // TODO 阈值可以根据不同模型调整
             if (featureCheckMode == 3) {
             if (featureCheckMode == 3) {
                 //1:N特征比对:当前feature和预加载Feature 集合比对,返回预加载Feature集合中命中的id,feature字段和比对分值score;用户可以通过id 在数据库中查找全量信息
                 //1:N特征比对:当前feature和预加载Feature 集合比对,返回预加载Feature集合中命中的id,feature字段和比对分值score;用户可以通过id 在数据库中查找全量信息
-                int scoreThreshold= (int) (bdFaceCheckConfig.scoreThreshold*100);  //例子:80
+                int scoreThreshold = (int) (bdFaceCheckConfig.scoreThreshold * 100);  //例子:80
                 List<? extends Feature> featureResult = faceModel
                 List<? extends Feature> featureResult = faceModel
                         .getFaceSearch().search(type, scoreThreshold, 1, feature, true);
                         .getFaceSearch().search(type, scoreThreshold, 1, feature, true);
 
 

+ 2 - 7
registerlibrary/src/main/java/com/baidu/idl/main/facesdk/registerlibrary/user/manager/UserInfoManager.java

@@ -86,16 +86,11 @@ public class UserInfoManager {
                     return;
                     return;
                 }
                 }
                 //数据库1万8千条数据时,DBManager.getInstance().queryAllUsers()查询数据库需要6秒左右
                 //数据库1万8千条数据时,DBManager.getInstance().queryAllUsers()查询数据库需要6秒左右
-                ConcurrentHashMap<String, User> usersMap = FaceApi.getInstance().getAllUserList();
-                ArrayList<User> users = new ArrayList<>();
-                for (String key : usersMap.keySet()) {
-                    User user = usersMap.get(key);
-                    users.add(user);
-                }
+                List<User> rootUsers = FaceApi.getInstance().getAllUserList();
 
 
                 // 如果关键字为null,则全局查找
                 // 如果关键字为null,则全局查找
                 if (userName == null) {
                 if (userName == null) {
-                    listener.userListQuerySuccess(null, users);
+                    listener.userListQuerySuccess(null, rootUsers);
                 } else {
                 } else {
                     listener.userListQuerySuccess(userName,
                     listener.userListQuerySuccess(userName,
                             FaceApi.getInstance().getUserListByUserNameVag(userName));
                             FaceApi.getInstance().getUserListByUserNameVag(userName));