Пример #1
0
 def post(self):
     result = {'status': False}
     try:
         user_id = self.get_argument('user_id', '')
         user_name = self.get_argument('username', '')
         password = self.get_argument('password', '')
         lang = self.get_argument('lang', 'zh-CN')
         if user_id == '' or user_name == '' or password == '':
             self.write(json.dumps(result))
             return
         
         user = MongoHelper.get_user_by_id(user_id)
         if user is not None:
             self.write(json.dumps(result))
             return
         
         user = {'user_id': user_id, 'user_name': user_name, 'password': password, 'lang': lang}
         server = Utils.allocate_user_server(user_id)
         user['server'] = server
         MongoHelper.register_user(user)
         MongoHelper.increase_server_usage(server, 1)
         result['status'] = True
         user["_id"] = '';
         result['user'] = user
         result['token'] = Utils.generate_access_token(user_id)
         
         FaceUtils.train_default(user_id)
     finally:
         self.write(json.dumps(result))
Пример #2
0
    def post(self):
        result = {'status': False}
        try:
            user_id = self.get_argument('user_id', '')
            user_name = self.get_argument('username', '')
            password = self.get_argument('password', '')
            lang = self.get_argument('lang', 'zh-CN')
            if user_id == '' or user_name == '' or password == '':
                self.write(json.dumps(result))
                return

            user = MongoHelper.get_user_by_id(user_id)
            if user is not None:
                self.write(json.dumps(result))
                return

            user = {
                'user_id': user_id,
                'user_name': user_name,
                'password': password,
                'lang': lang
            }
            server = Utils.allocate_user_server(user_id)
            user['server'] = server
            MongoHelper.register_user(user)
            MongoHelper.increase_server_usage(server, 1)
            result['status'] = True
            user["_id"] = ''
            result['user'] = user
            result['token'] = Utils.generate_access_token(user_id)

            FaceUtils.train_default(user_id)
        finally:
            self.write(json.dumps(result))
Пример #3
0
def process_face_groups(image):
    faces = yield from FaceUtils.detect_faces_in_photo(
        Utils.get_user_path(image['user_id']) + "/" + image['image_name'])
    Logger.debug('processing: ' + Utils.get_user_path(image['user_id']) + "/" +
                 image['image_name'])
    #     faces = yield from FaceUtils.detect_faces_in_photo("e:/data/images/" + image['image_name'])
    #     Logger.debug('processing: ' + "e:/data/images/" + image['image_name'])
    if len(faces) == 0 or len(faces) > 10:
        return

    names = Utils.get_human_names(image.get('desc', ''))
    names.reverse()
    tags = image.get('tags', [])
    for face in faces:
        face_id = ''
        similars = yield from FaceUtils.find_similar_faces(
            image['user_id'], face)
        Logger.debug('similars: ' + str(similars))

        for simi in similars:
            conf = simi['confidence']
            if conf >= 0.9:
                face_id = simi['faceId']
                break

        if not face_id:
            Logger.debug('no face id detected')
            face_id = face
            yield from FaceUtils.add_face_to_group(image['user_id'], face)
            try:
                name = names.pop()
            except:
                name = ''

            face_info = {
                'user_id': image['user_id'],
                'face_id': face,
                'name': name,
                'candidates': similars
            }
            for simi in similars:
                fid = simi['faceId']
                sm = MongoHelper.get_person(image['user_id'], fid)
                smcd = [i['faceId'] for i in sm['candidates']]
                if not fid in smcd:
                    sm['candidates'].append({
                        'faceId': face,
                        'confidence': simi['confidence']
                    })
                MongoHelper.save_person(sm)

            MongoHelper.save_person(face_info)

        if not face_id in tags:
            tags.append(face_id)

    image['tags'] = tags
    Logger.debug('tags: ' + str(tags))
Пример #4
0
def process_faces(image):
    tags = image.get('tags', [])
    user_id = image.get('user_id', '')
    if not user_id:
        return
    
    exists = FaceUtils.is_person_group_exists(user_id)
    if not exists:
        FaceUtils.create_person_group(user_id)
        
    image_name = image.get('image_name', '')
    if not image_name:
        return
    
    names = Utils.get_human_names(image.get('desc', ''))
    names.reverse()
    faces = FaceUtils.detect_faces_in_photo(Utils.get_user_path(user_id) + "/" + image_name)
    result = FaceUtils.identify_faces(user_id, faces)
    
    for res in result:
        face_id = res['faceId']
        target_id = ''
        candidates = res.get('candidates', [])
        if len(candidates) > 0:
            target_id = candidates[0]
        
        if target_id:
            tags.append(target_id)
        else:
            person_id = FaceUtils.create_person(user_id, [face_id], uuid.uuid4())
            FaceUtils.train_person_group_wait(user_id)
            person = {'person_id': person_id, 'name': names.pop()}
            MongoHelper.save_person(person)
    
    image['tags'] = tags
Пример #5
0
def process_face_groups(image):
    faces = yield from FaceUtils.detect_faces_in_photo(Utils.get_user_path(image['user_id']) + "/" + image['image_name'])
    Logger.debug('processing: ' + Utils.get_user_path(image['user_id']) + "/"  + image['image_name'])
#     faces = yield from FaceUtils.detect_faces_in_photo("e:/data/images/" + image['image_name'])
#     Logger.debug('processing: ' + "e:/data/images/" + image['image_name'])
    if len(faces) == 0 or len(faces) > 10:
        return
    
    names = Utils.get_human_names(image.get('desc', ''))
    names.reverse()
    tags = image.get('tags', [])
    for face in faces:
        face_id = ''
        similars = yield from FaceUtils.find_similar_faces(image['user_id'], face)
        Logger.debug('similars: ' + str(similars))
        
        for simi in similars:
            conf = simi['confidence']
            if conf >= 0.9:
                face_id = simi['faceId']
                break
            
        if not face_id:
            Logger.debug('no face id detected')
            face_id = face
            yield from FaceUtils.add_face_to_group(image['user_id'], face)
            try:
                name = names.pop()
            except:
                name = ''
                
            face_info = {'user_id':image['user_id'], 'face_id':face, 'name':name, 'candidates': similars}
            for simi in similars:
                fid = simi['faceId']
                sm = MongoHelper.get_person(image['user_id'], fid)
                smcd = [i['faceId'] for i in sm['candidates']]
                if not fid in smcd:
                    sm['candidates'].append({'faceId': face, 'confidence': simi['confidence']})
                MongoHelper.save_person(sm)
                
            MongoHelper.save_person(face_info)

        if not face_id in tags:
            tags.append(face_id)
        
    image['tags'] = tags
    Logger.debug('tags: ' + str(tags))
Пример #6
0
def process_faces(image):
    faces = yield from FaceUtils.detect_faces_in_photo(
        Utils.get_user_path(image['user_id']) + "/" + image['image_name'])
    Logger.debug('processing: ' + Utils.get_user_path(image['user_id']) + "/" +
                 image['image_name'])
    if len(faces) == 0 or len(faces) > 10:
        return

    names = Utils.get_human_names(image.get('desc', ''))
    names.reverse()
    for face in faces:
        candidates = []
        person_id = ''
        identify_res = yield from FaceUtils.identify_faces(
            image['user_id'], [face], 3)
        if len(identify_res) > 0:
            result = identify_res[0]
            candidates = result['candidates']
            for cand in candidates:
                if cand['confidence'] > 0.9:
                    person_id = cand['personId']
                    break

        if not person_id:
            person_id = yield from FaceUtils.create_person(
                image['user_id'], [face], uuid.uuid4())
            Logger.debug('person created: ' + person_id)
            name = ''
            try:
                name = names.pop()
            except:
                pass
            person = {
                'user_id': image['user_id'],
                'person_id': person_id,
                'name': name,
                'candidates': candidates
            }
            MongoHelper.save_person(person)
            MongoHelper.add_train_person_groups(image['user_id'])

        tags = image.get('tags', set())
        tags.add(person_id)
        image['tags'] = tags
        Logger.debug('tags: ' + str(tags))
Пример #7
0
def process_faces(image):
    faces = yield from FaceUtils.detect_faces_in_photo(Utils.get_user_path(image['user_id']) + "/" + image['image_name'])
    Logger.debug('processing: ' + Utils.get_user_path(image['user_id']) + "/" + image['image_name'])
    if len(faces) == 0 or len(faces) > 10:
        return
    
    names = Utils.get_human_names(image.get('desc', ''))
    names.reverse()
    for face in faces:
        candidates = []
        person_id = ''
        identify_res = yield from FaceUtils.identify_faces(image['user_id'], [face], 3)
        if len(identify_res) > 0:
            result = identify_res[0]
            candidates = result['candidates']
            for cand in candidates:
                if cand['confidence'] > 0.9:
                    person_id = cand['personId']
                    break
        
        if not person_id:
            person_id = yield from FaceUtils.create_person(image['user_id'], [face], uuid.uuid4())
            Logger.debug('person created: ' + person_id)
            name = ''
            try:
                name = names.pop()
            except:
                pass
            person = {'user_id':image['user_id'], 'person_id':person_id, 'name':name, 'candidates': candidates} 
            MongoHelper.save_person(person)
            MongoHelper.add_train_person_groups(image['user_id'])
        
        tags = image.get('tags', set())
        tags.add(person_id)
        image['tags'] = tags
        Logger.debug('tags: ' + str(tags))
Пример #8
0
def process_faces(image):
    tags = image.get('tags', [])
    user_id = image.get('user_id', '')
    if not user_id:
        return

    exists = FaceUtils.is_person_group_exists(user_id)
    if not exists:
        FaceUtils.create_person_group(user_id)

    image_name = image.get('image_name', '')
    if not image_name:
        return

    names = Utils.get_human_names(image.get('desc', ''))
    names.reverse()
    faces = FaceUtils.detect_faces_in_photo(
        Utils.get_user_path(user_id) + "/" + image_name)
    result = FaceUtils.identify_faces(user_id, faces)

    for res in result:
        face_id = res['faceId']
        target_id = ''
        candidates = res.get('candidates', [])
        if len(candidates) > 0:
            target_id = candidates[0]

        if target_id:
            tags.append(target_id)
        else:
            person_id = FaceUtils.create_person(user_id, [face_id],
                                                uuid.uuid4())
            FaceUtils.train_person_group_wait(user_id)
            person = {'person_id': person_id, 'name': names.pop()}
            MongoHelper.save_person(person)

    image['tags'] = tags
Пример #9
0
    def do_post(self):
        result = {'status': False}
        Logger.debug('in upload')
        try:
            userId = self.get_argument('user_id', '')
            rawLocation = self.get_argument('loc','')          
            desc = [self.get_argument('tag', '')]
            rawTags = self.get_argument('tag', '')
            rowTime = self.get_argument('time', '')
            faceInfo = self.get_argument('face', '')
            token = self.get_argument('token','')           
            image_name = self.get_argument('image_name','')    
            print('image_name:',image_name)
           
            user = MongoHelper.get_user_by_id(userId)
            if token != user['token']: 
                Logger.debug('token wrong')
                return

            print('userId',userId)
            print('rawTags',rawTags)
            

            try:
                path = Utils.get_user_path(userId)    
                        #if self.request.files:
                files = self.request.files['image']
                        # process image file
                if files is None or len(files) == 0:
                    self.write(json.dumps(result))
                    return
                fileinfo = files[0]
                fname = fileinfo['filename']    
                fh = open(path + "/" + fname, 'wb')
                fh.write(fileinfo['body'])

            finally:
                if not MongoHelper.check_img_exist(userId, image_name):
                    if faceInfo is not '':
                        face = faceInfo.split(' ')
                        face_final = FaceUtils.get_face_final(face)
                            # filter out meaningful tags
                    key_words = rawTags.split(' ')
                    print('key_words:',key_words)
                    tags = []
                    if key_words is not None and len(key_words) != 0:
                        tags = Utils.get_meaningful_keywords(key_words)
                        print('tags:',tags)
                            # split date and time
                    temptime = datetime.strptime(rowTime, '%Y-%m-%d %X %z')
                    time = datetime(temptime.year, temptime.month, temptime.day, temptime.hour, temptime.minute, temptime.second, 17100)
                                
                                
                    key_location = rawLocation.split(',') # '1122, 234, beijing, zhongguan'
                    Logger.debug('key_location: ' + str(key_location))
                    
                    if key_location is not None and len(key_location) > 1:
                        location = Utils.get_location_from_rawlocation(key_location)
                        Logger.debug('location: ' + str(location))
                        
                                
                            
                    image = {'user_id': userId, 'image_name': fname, 'location':location, 'desc': desc, 'tags': tags, 'time':time, 'processed': False,'face':face_final}
                    MongoHelper.save_image(image)
                    Utils.update_time_indexer(userId,image)
                else:   ##图片上传过,则为更新tag或face
                    if faceInfo is not '':
                        face = faceInfo.split(' ')
                        face_final = FaceUtils.get_face_final(face)
                        MongoHelper.update_face_in_existimage(userId,image_name,face_final)
                    Utils.update_image_tag(rawTags,userId,image_name)
                    
                    
                result['status'] = True           

        finally:
            self.write(json.dumps(result))
            

                
    
         
      
# if __name__ == "__main__":
#     
Пример #10
0
def train_person_group(group_id):
    Logger.debug('start training: ' + group_id)
    yield from FaceUtils.train_person_group_wait(group_id)
Пример #11
0
    def do_post(self):
        result = {'status': False}
        Logger.debug('in upload')
        try:
            userId = self.get_argument('user_id', '')
            rawLocation = self.get_argument('loc', '')
            desc = [self.get_argument('tag', '')]
            rawTags = self.get_argument('tag', '')
            rowTime = self.get_argument('time', '')
            faceInfo = self.get_argument('face', '')
            token = self.get_argument('token', '')
            image_name = self.get_argument('image_name', '')
            print('image_name:', image_name)

            user = MongoHelper.get_user_by_id(userId)
            if token != user['token']:
                Logger.debug('token wrong')
                return

            print('userId', userId)
            print('rawTags', rawTags)

            try:
                path = Utils.get_user_path(userId)
                #if self.request.files:
                files = self.request.files['image']
                # process image file
                if files is None or len(files) == 0:
                    self.write(json.dumps(result))
                    return
                fileinfo = files[0]
                fname = fileinfo['filename']
                fh = open(path + "/" + fname, 'wb')
                fh.write(fileinfo['body'])

            finally:
                if not MongoHelper.check_img_exist(userId, image_name):
                    if faceInfo is not '':
                        face = faceInfo.split(' ')
                        face_final = FaceUtils.get_face_final(face)
                        # filter out meaningful tags
                    key_words = rawTags.split(' ')
                    print('key_words:', key_words)
                    tags = []
                    if key_words is not None and len(key_words) != 0:
                        tags = Utils.get_meaningful_keywords(key_words)
                        print('tags:', tags)
                        # split date and time
                    temptime = datetime.strptime(rowTime, '%Y-%m-%d %X %z')
                    time = datetime(temptime.year, temptime.month,
                                    temptime.day, temptime.hour,
                                    temptime.minute, temptime.second, 17100)

                    key_location = rawLocation.split(
                        ',')  # '1122, 234, beijing, zhongguan'
                    Logger.debug('key_location: ' + str(key_location))

                    if key_location is not None and len(key_location) > 1:
                        location = Utils.get_location_from_rawlocation(
                            key_location)
                        Logger.debug('location: ' + str(location))

                    image = {
                        'user_id': userId,
                        'image_name': fname,
                        'location': location,
                        'desc': desc,
                        'tags': tags,
                        'time': time,
                        'processed': False,
                        'face': face_final
                    }
                    MongoHelper.save_image(image)
                    Utils.update_time_indexer(userId, image)
                else:  ##图片上传过,则为更新tag或face
                    if faceInfo is not '':
                        face = faceInfo.split(' ')
                        face_final = FaceUtils.get_face_final(face)
                        MongoHelper.update_face_in_existimage(
                            userId, image_name, face_final)
                    Utils.update_image_tag(rawTags, userId, image_name)

                result['status'] = True

        finally:
            self.write(json.dumps(result))
Пример #12
0
def train_person_group(group_id):
    Logger.debug('start training: ' + group_id)
    yield from FaceUtils.train_person_group_wait(group_id)