| 15 | |
| 16 | |
| 17 | class EvalReidNode: |
| 18 | def __init__(self): |
| 19 | self.appeared_time = {} |
| 20 | self.recognized_ids = {} |
| 21 | self.face_name = {} |
| 22 | self.read_data() |
| 23 | |
| 24 | self.recognition_time = [] |
| 25 | self.success = 0 |
| 26 | self.failure = 0 |
| 27 | |
| 28 | subs = [ |
| 29 | message_filters.Subscriber('/face_recognition/people_tracks', TrackArray), |
| 30 | message_filters.Subscriber('/tracker/tracks_smoothed', TrackArray) |
| 31 | ] |
| 32 | self.sync = message_filters.TimeSynchronizer(subs, 100) |
| 33 | self.sync.registerCallback(self.callback) |
| 34 | |
| 35 | def read_data(self): |
| 36 | names = {} |
| 37 | n = 0 |
| 38 | for line in csv.reader(open('data2', 'r'), delimiter=' '): |
| 39 | for id in line[1:]: |
| 40 | names[int(id)] = line[0] |
| 41 | n += 1 |
| 42 | n -= 1 |
| 43 | print names, n |
| 44 | self.names = names |
| 45 | |
| 46 | self.face_name = {0: 'Kenji', 1: 'Francisca', 2: 'Enrico', 3: 'Andrea', 4: 'Yongheng', 5: 'Stefano'} |
| 47 | |
| 48 | def callback(self, face_msg, track_msg): |
| 49 | for face, track in zip(face_msg.tracks, track_msg.tracks): |
| 50 | track_id = track.id |
| 51 | face_id = face.id |
| 52 | |
| 53 | if track_id not in self.names: |
| 54 | continue |
| 55 | |
| 56 | if track_id not in self.appeared_time: |
| 57 | self.appeared_time[track_id] = rospy.Time.now() |
| 58 | |
| 59 | if face_id < 10000 and track_id not in self.recognized_ids: |
| 60 | self.recognized_ids[track_id] = (rospy.Time.now() - self.appeared_time[track_id]).to_sec() |
| 61 | self.recognition_time.append(self.recognized_ids[track_id]) |
| 62 | |
| 63 | print track_id, face_id, self.names[track_id] |
| 64 | |
| 65 | if face_id in self.face_name: |
| 66 | if self.face_name[face_id] != self.names[track_id]: |
| 67 | self.failure += 1 |
| 68 | else: |
| 69 | self.success += 1 |
| 70 | self.face_name[face_id] = self.names[track_id] |
| 71 | print self.failure, self.success, sum(self.recognition_time) / len(self.recognition_time) |
| 72 | print self.face_name |
| 73 | |
| 74 | |