回答編集履歴

4

markdown

2020/11/14 01:15

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -8,7 +8,11 @@
8
8
 
9
9
 
10
10
 
11
+ ## 動作が遅い問題の軽減策
12
+
13
+
14
+
11
- 動作が遅い問題の軽減策(一時的な問題回避策):
15
+ 一時的な問題回避策)
12
16
 
13
17
  - `canvas1.delete("all")` 画像オブジェクトが蓄積されてるので、毎回クリアする
14
18
 
@@ -24,9 +28,9 @@
24
28
 
25
29
 
26
30
 
31
+ ## 動作が遅い原因
27
32
 
28
33
 
29
- 動作が遅い原因
30
34
 
31
35
  tkinter のタイマー内で処理する場合、
32
36
 
@@ -38,7 +42,13 @@
38
42
 
39
43
 
40
44
 
45
+ ## 解決策
46
+
47
+
48
+
41
- 解決策: カメラ側の処理にはスレッドを使ってください。
49
+ カメラ側の処理にはスレッドを使ってください。
50
+
51
+
42
52
 
43
53
  GUI更新は mainloop が動いているスレッドで行う必要があるので、
44
54
 
@@ -46,11 +56,13 @@
46
56
 
47
57
 
48
58
 
59
+
60
+
49
61
  注意点: 別スレッドからはGUIを直接操作しない事。スレッドセーフではありません。
50
62
 
51
- Image.fromarray 迄はサブスレッド側、
63
+ - Image.fromarray 迄はサブスレッド側、
52
64
 
53
- ImageTk.PhotoImage はメインスレッド側で行うようにします。
65
+ - ImageTk.PhotoImage はメインスレッド側で行うようにします。
54
66
 
55
67
 
56
68
 
@@ -59,6 +71,8 @@
59
71
  一時的な遅延になるので、理想的には別スレッドで行った方が良いです。
60
72
 
61
73
 
74
+
75
+ ----
62
76
 
63
77
  追記:
64
78
 
@@ -76,19 +90,9 @@
76
90
 
77
91
 
78
92
 
79
-
80
-
81
- 終了時のエラーについては
82
-
83
- - `cv2.VideoCapture(1, cv2.CAP_DSHOW)`
84
-
85
- - mainloop の後に `c.release()`
86
-
87
-
88
-
89
93
  ----
90
94
 
91
- 他の問題点
95
+ ## 他の問題点
92
96
 
93
97
 
94
98
 
@@ -99,3 +103,15 @@
99
103
  Tk() は tkinter を使う際の初期化処理も含む為、
100
104
 
101
105
  複数回呼び出すのは、他で問題の原因になる事が多いです。
106
+
107
+
108
+
109
+ ----
110
+
111
+
112
+
113
+ 終了時のエラーについては
114
+
115
+ - `cv2.VideoCapture(1, cv2.CAP_DSHOW)`
116
+
117
+ - mainloop の後に `c.release()`

3

マルチプロセススについて追記

2020/11/14 01:15

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -60,6 +60,22 @@
60
60
 
61
61
 
62
62
 
63
+ 追記:
64
+
65
+ もし、読み込んだ画像に対して解析など何か処理を行うのであれば、
66
+
67
+ マルチプロセスで行う方が適切です。
68
+
69
+ 但し、データの受け渡し・共有方法はプロセス間通信が必要で、
70
+
71
+ スレッドの場合と異なります。
72
+
73
+ マルチスレッドでは、GUIの負担軽減である程度の効果は見込めますが、
74
+
75
+ コア数を活かした最適化にはなりません。
76
+
77
+
78
+
63
79
 
64
80
 
65
81
  終了時のエラーについては

2

tk.Tk() について補足

2020/11/13 09:26

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -67,3 +67,19 @@
67
67
  - `cv2.VideoCapture(1, cv2.CAP_DSHOW)`
68
68
 
69
69
  - mainloop の後に `c.release()`
70
+
71
+
72
+
73
+ ----
74
+
75
+ 他の問題点
76
+
77
+
78
+
79
+ 2回目の root2=tk.Tk() について
80
+
81
+ 複数のウインドウを作りたい場合は tk.Toplevel() を使ってください。
82
+
83
+ Tk() は tkinter を使う際の初期化処理も含む為、
84
+
85
+ 複数回呼び出すのは、他で問題の原因になる事が多いです。

1

文章の修正

2020/11/13 03:50

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- 動作が遅い問題の軽減策:
11
+ 動作が遅い問題の軽減策(一時的な問題回避策):
12
12
 
13
13
  - `canvas1.delete("all")` 画像オブジェクトが蓄積されてるので、毎回クリアする
14
14