回答編集履歴

1

追記

2021/01/07 15:28

投稿

TakaiY
TakaiY

スコア13773

test CHANGED
@@ -9,3 +9,61 @@
9
9
  今のremenber関数は、距離の計算と、データの保存を一緒にやろうとしているので使いにくいです。
10
10
 
11
11
  この2つば別の処理、というか、比較はすべにiou関数があるのでそれでやるべきでしょう。
12
+
13
+
14
+
15
+ ---
16
+
17
+ 追記です。
18
+
19
+
20
+
21
+ IDsは、dictでなくて、リストのリストでいいでしょう。
22
+
23
+ renumber(名前を変えちゃいましたが)でのデータの扱いなど、そのほうが使いやすいです。
24
+
25
+
26
+
27
+ renumber関数はチェックするだけの関数にしましょう。ここで何かを修正するのは使いにくいです。
28
+
29
+ IDsに含まれなければFalseを、含まれればIDを返すことにします。名前も替えたほうがいいかな。
30
+
31
+ ```python
32
+
33
+ def check_ID(IDs, data):
34
+
35
+ for k in IDs:#IDsから登録済みIDを一つずつ呼び出し
36
+
37
+ if iou(k, data) <= 0.8:#diffで差分の取得
38
+
39
+ return k[0]
40
+
41
+ return False
42
+
43
+ ```
44
+
45
+
46
+
47
+ 呼ぶ側ははこれを使うことになるので、こんな感じでしょうか。
48
+
49
+ ```python
50
+
51
+ for data in reader:
52
+
53
+ if "ID:" in data[0]:#一要素目がID番号なら
54
+
55
+ result = check_ID(IDs, data)#重複判定
56
+
57
+ if result:
58
+
59
+ #ヒットすれば、resultに IDが入っているので、dataを書き換える
60
+
61
+ data[0] = result
62
+
63
+ else:
64
+
65
+ IDs.append(data) #IDsにまるごと登録 これをelseでなくてに出せば全部登録になります。
66
+
67
+ writer.writerow(data)#csv形式で書き込み
68
+
69
+ ```