質問編集履歴

5

質問の追記

2021/02/16 01:41

投稿

songyong
songyong

スコア21

test CHANGED
File without changes
test CHANGED
@@ -26,9 +26,13 @@
26
26
 
27
27
 
28
28
 
29
+
30
+
29
31
  ①下記のソースコードを実行した場合に、分析のために定義している関数「analyze_image」が未定義とされてしまう原因と解決のための実装方法
30
32
 
31
- 関数を定義しているのに、なぜでしょうか。。。
33
+ 関数を定義しているのに、なぜでしょうか。。。 → クラスメソッドとして定義出来ていないため??
34
+
35
+ クラスメソッドとして定義する際の実装方法をご教示頂けますと幸甚です。
32
36
 
33
37
  ```関数未定義のエラー
34
38
 
@@ -44,7 +48,7 @@
44
48
 
45
49
  ②分析結果をテキストボックスに出力する方法
46
50
 
47
- テキストボックスさえきちんと定義すれば、下記のコーディングで問題なく、出力されますでしょうか。
51
+ 下記のコーディングで問題なく、テキストボックス内にanalyze_imageの戻り値が出力されますでしょうか。
48
52
 
49
53
  また①と関連しますが、記載すべき場所がよく分かっておりません。
50
54
 

4

変更

2021/02/16 01:41

投稿

songyong
songyong

スコア21

test CHANGED
File without changes
test CHANGED
@@ -18,13 +18,11 @@
18
18
 
19
19
 
20
20
 
21
- 3点質問させて頂きたいです。
21
+ 2点質問させて頂きたいです。
22
22
 
23
23
  ①下記のソースコードを実行した場合に、分析のために定義している関数「analyze_image」が未定義とされてしまう原因と解決のための実装方法
24
24
 
25
- ②分析結果を表示させるテキストボックスの定義方法
26
-
27
- 分析結果をテキストボックスに出力する方法
25
+ 分析結果をテキストボックスに出力する方法
28
26
 
29
27
 
30
28
 
@@ -44,320 +42,300 @@
44
42
 
45
43
 
46
44
 
47
- ②分析結果を表示させるテキストボックスの定義方法
45
+ ②分析結果をテキストボックスに出力する方法
46
+
48
-
47
+ テキストボックスさえきちんと定義すれば、下記のコーディングで問題なく、出力されますでしょうか。
48
+
49
- def create_widgets(self):内へ記載する認識です
49
+ また①と関連しますが、記載すべき場所よく分かっておりません。
50
-
50
+
51
+
52
+
51
- 配置方法の理解が追いついおらずどこにどよう書けばランスよく表示きるか分かりません。
53
+ 加えて、写真を撮った場合こちらの内容を削除してブランクの状態にしたいの
52
-
53
- もし可能であれば、綺麗にテキストボックスを表示させるための実装方法をご教示ください。
54
+
54
-
55
- ※勉強不足訳ございません
55
+ どのように実装すれば良いでしょうか
56
-
56
+
57
+
58
+
57
- ```テキストボックスの定義部分抜粋
59
+ ```テキストボックスの出力部分抜粋
60
+
61
+ # 表示させたいがどこにどのようにプログラムを書けば良いかわからない
62
+
63
+ self.text.insert(tk.END, result)
64
+
65
+ ```
66
+
67
+
68
+
69
+ 以上、拙い文書・初歩的な質問で大変恐縮ですが、
70
+
71
+ お助けいただけると幸甚です。。。
72
+
73
+
74
+
75
+ 宜しくお願いします。
76
+
77
+
78
+
79
+
80
+
81
+ ```ソースコード全体
82
+
83
+ #ソースコード全体
84
+
85
+
86
+
87
+ import tkinter as tk
88
+
89
+ from tkinter import ttk
90
+
91
+ import cv2
92
+
93
+ import PIL.Image, PIL.ImageTk
94
+
95
+ from tkinter import font
96
+
97
+ from tkinter import filedialog
98
+
99
+ import time
100
+
101
+
102
+
103
+
104
+
105
+ class Application(tk.Frame):
106
+
107
+ def __init__(self,master, video_source=0):
108
+
109
+ super().__init__(master)
110
+
111
+
112
+
113
+ self.master.geometry("1250x1000")
114
+
115
+ self.master.title("Tkinter with Video Streaming and Capture")
116
+
117
+
118
+
119
+ # ---------------------------------------------------------
120
+
121
+ # Font
122
+
123
+ # ---------------------------------------------------------
124
+
125
+ self.font_frame = font.Font( family="Meiryo UI", size=15, weight="normal" )
126
+
127
+ self.font_btn_big = font.Font( family="Meiryo UI", size=20, weight="bold" )
128
+
129
+ self.font_btn_small = font.Font( family="Meiryo UI", size=15, weight="bold" )
130
+
131
+
132
+
133
+ self.font_lbl_bigger = font.Font( family="Meiryo UI", size=45, weight="bold" )
134
+
135
+ self.font_lbl_big = font.Font( family="Meiryo UI", size=30, weight="bold" )
136
+
137
+ self.font_lbl_middle = font.Font( family="Meiryo UI", size=15, weight="bold" )
138
+
139
+ self.font_lbl_small = font.Font( family="Meiryo UI", size=12, weight="normal" )
140
+
141
+
142
+
143
+ # ---------------------------------------------------------
144
+
145
+ # Open the video source
146
+
147
+ # ---------------------------------------------------------
148
+
149
+
150
+
151
+ self.vcap = cv2.VideoCapture( video_source )
152
+
153
+ self.width = self.vcap.get( cv2.CAP_PROP_FRAME_WIDTH )
154
+
155
+ self.height = self.vcap.get( cv2.CAP_PROP_FRAME_HEIGHT )
156
+
157
+
158
+
159
+ # ---------------------------------------------------------
160
+
161
+ # Widget
162
+
163
+ # ---------------------------------------------------------
164
+
165
+
166
+
167
+ self.create_widgets()
168
+
169
+
170
+
171
+ # ---------------------------------------------------------
172
+
173
+ # Canvas Update
174
+
175
+ # ---------------------------------------------------------
176
+
177
+
178
+
179
+ self.delay = 15 #[mili seconds]
180
+
181
+ self.update()
182
+
183
+
184
+
185
+
186
+
187
+ def create_widgets(self):
188
+
189
+
190
+
191
+ #Frame_Camera
192
+
193
+ self.frame_cam = tk.LabelFrame(self.master, text = 'Camera', font=self.font_frame)
194
+
195
+ self.frame_cam.place(x = 10, y = 10)
196
+
197
+ self.frame_cam.configure(width = self.width -90, height = self.height - 50)
198
+
199
+ self.frame_cam.grid_propagate(0)
200
+
201
+
202
+
203
+ #Canvas
204
+
205
+ self.canvas1 = tk.Canvas(self.frame_cam)
206
+
207
+ self.canvas1.configure( width= self.width -90 , height=self.height - 100)
208
+
209
+ self.canvas1.grid(column= 0, row=0,padx = 10, pady=10)
210
+
211
+
212
+
213
+ # Frame_Button
214
+
215
+ self.frame_btn = tk.LabelFrame( self.master, text='Control', font=self.font_frame )
216
+
217
+ self.frame_btn.place( x=10, y=680 )
218
+
219
+ self.frame_btn.configure( width=self.width - 90, height=120 )
220
+
221
+ self.frame_btn.grid_propagate( 0 )
222
+
223
+
224
+
225
+ #Snapshot Button
226
+
227
+ self.btn_snapshot = tk.Button( self.frame_btn, text='Snapshot', font=self.font_btn_big)
228
+
229
+ self.btn_snapshot.configure(width = 15, height = 1, command=self.press_snapshot_button)
230
+
231
+ self.btn_snapshot.grid(column=0, row=0, padx=30, pady= 10)
232
+
233
+
234
+
235
+ # Close Button
236
+
237
+ self.btn_close = tk.Button( self.frame_btn, text='Close', font=self.font_btn_big )
238
+
239
+ self.btn_close.configure( width=15, height=1, command=self.press_close_button )
240
+
241
+ self.btn_close.grid( column=1, row=0, padx=20, pady=10 )
242
+
243
+
58
244
 
59
245
  # Text Boxの書き方がよく分かりません。。。。
60
246
 
247
+ # テキストボックスの作成
248
+
61
249
  txtbox = tk.Entry(width=150)
62
250
 
63
- txtbox.place(x=37, y=750)
251
+ txtbox.place(x=37, y=750)
252
+
253
+
254
+
255
+ def update(self):
256
+
257
+ #Get a frame from the video source
258
+
259
+ _, frame = self.vcap.read()
260
+
261
+
262
+
263
+ frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
264
+
265
+ self.photo = PIL.ImageTk.PhotoImage(image = PIL.Image.fromarray(frame))
266
+
267
+
268
+
269
+ #self.photo -> Canvas
270
+
271
+ self.canvas1.create_image(0,0, image= self.photo, anchor = tk.NW)
272
+
273
+
274
+
275
+ self.master.after(self.delay, self.update)
276
+
277
+
278
+
279
+ def analyze_img(self, pic_name):
280
+
281
+
282
+
283
+ img_test = cv2.imread(pic_name, cv2.IMREAD_GRAYSCALE)
284
+
285
+ result = "実装中"
286
+
287
+ return result
288
+
289
+
290
+
291
+ def press_snapshot_button(self):
292
+
293
+ # Get a frame from the video source
294
+
295
+ _, frame = self.vcap.read()
296
+
297
+ frame1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
298
+
299
+ pic_name = "frame-" + time.strftime( "%Y-%d-%m-%H-%M-%S")+ ".jpg"
300
+
301
+ cv2.imwrite(pic_name, cv2.cvtColor( frame1, cv2.COLOR_BGR2RGB ) )
302
+
303
+
304
+
305
+ # analyze_imageが未定義のエラーになる
306
+
307
+ result = analyze_img(pic_name)
308
+
309
+ # 表示させたいがどこにどのようにプログラムを書けば良いかわからない
310
+
311
+ self.text.insert(tk.END, result)
312
+
313
+
314
+
315
+ def press_close_button(self):
316
+
317
+ self.master.destroy()
318
+
319
+ self.vcap.release()
320
+
321
+
322
+
323
+ def main():
324
+
325
+ root = tk.Tk()
326
+
327
+ app = Application(master=root)#Inherit
328
+
329
+ app.mainloop()
330
+
331
+
332
+
333
+ if __name__ == "__main__":
334
+
335
+ main()
336
+
337
+
338
+
339
+
64
340
 
65
341
  ```
66
-
67
- ③分析結果をテキストボックスに出力する方法
68
-
69
- テキストボックスさえきちんと定義すれば、下記のコーディングで問題なく、出力されますでしょうか。
70
-
71
- また①と関連しますが、記載すべき場所がよく分かっておりません。
72
-
73
-
74
-
75
- 加えて、次の写真を撮った場合には、こちらの内容を削除してブランクの状態にしたいのですが、
76
-
77
- どのように実装すれば良いでしょうか。
78
-
79
-
80
-
81
- ```テキストボックスの出力部分抜粋
82
-
83
- # 表示させたいがどこにどのようにプログラムを書けば良いかわからない
84
-
85
- self.text.insert(tk.END, result)
86
-
87
- ```
88
-
89
-
90
-
91
- 以上、拙い文書・初歩的な質問で大変恐縮ですが、
92
-
93
- お助けいただけると幸甚です。。。
94
-
95
-
96
-
97
- 宜しくお願いします。
98
-
99
-
100
-
101
-
102
-
103
- ```ソースコード全体
104
-
105
- #ソースコード全体
106
-
107
-
108
-
109
- import tkinter as tk
110
-
111
- from tkinter import ttk
112
-
113
- import cv2
114
-
115
- import PIL.Image, PIL.ImageTk
116
-
117
- from tkinter import font
118
-
119
- from tkinter import filedialog
120
-
121
- import time
122
-
123
-
124
-
125
-
126
-
127
- class Application(tk.Frame):
128
-
129
- def __init__(self,master, video_source=0):
130
-
131
- super().__init__(master)
132
-
133
-
134
-
135
- self.master.geometry("1250x1000")
136
-
137
- self.master.title("Tkinter with Video Streaming and Capture")
138
-
139
-
140
-
141
- # ---------------------------------------------------------
142
-
143
- # Font
144
-
145
- # ---------------------------------------------------------
146
-
147
- self.font_frame = font.Font( family="Meiryo UI", size=15, weight="normal" )
148
-
149
- self.font_btn_big = font.Font( family="Meiryo UI", size=20, weight="bold" )
150
-
151
- self.font_btn_small = font.Font( family="Meiryo UI", size=15, weight="bold" )
152
-
153
-
154
-
155
- self.font_lbl_bigger = font.Font( family="Meiryo UI", size=45, weight="bold" )
156
-
157
- self.font_lbl_big = font.Font( family="Meiryo UI", size=30, weight="bold" )
158
-
159
- self.font_lbl_middle = font.Font( family="Meiryo UI", size=15, weight="bold" )
160
-
161
- self.font_lbl_small = font.Font( family="Meiryo UI", size=12, weight="normal" )
162
-
163
-
164
-
165
- # ---------------------------------------------------------
166
-
167
- # Open the video source
168
-
169
- # ---------------------------------------------------------
170
-
171
-
172
-
173
- self.vcap = cv2.VideoCapture( video_source )
174
-
175
- self.width = self.vcap.get( cv2.CAP_PROP_FRAME_WIDTH )
176
-
177
- self.height = self.vcap.get( cv2.CAP_PROP_FRAME_HEIGHT )
178
-
179
-
180
-
181
- # ---------------------------------------------------------
182
-
183
- # Widget
184
-
185
- # ---------------------------------------------------------
186
-
187
-
188
-
189
- self.create_widgets()
190
-
191
-
192
-
193
- # ---------------------------------------------------------
194
-
195
- # Canvas Update
196
-
197
- # ---------------------------------------------------------
198
-
199
-
200
-
201
- self.delay = 15 #[mili seconds]
202
-
203
- self.update()
204
-
205
-
206
-
207
-
208
-
209
- def create_widgets(self):
210
-
211
-
212
-
213
- #Frame_Camera
214
-
215
- self.frame_cam = tk.LabelFrame(self.master, text = 'Camera', font=self.font_frame)
216
-
217
- self.frame_cam.place(x = 10, y = 10)
218
-
219
- self.frame_cam.configure(width = self.width -90, height = self.height - 50)
220
-
221
- self.frame_cam.grid_propagate(0)
222
-
223
-
224
-
225
- #Canvas
226
-
227
- self.canvas1 = tk.Canvas(self.frame_cam)
228
-
229
- self.canvas1.configure( width= self.width -90 , height=self.height - 100)
230
-
231
- self.canvas1.grid(column= 0, row=0,padx = 10, pady=10)
232
-
233
-
234
-
235
- # Frame_Button
236
-
237
- self.frame_btn = tk.LabelFrame( self.master, text='Control', font=self.font_frame )
238
-
239
- self.frame_btn.place( x=10, y=680 )
240
-
241
- self.frame_btn.configure( width=self.width - 90, height=120 )
242
-
243
- self.frame_btn.grid_propagate( 0 )
244
-
245
-
246
-
247
- #Snapshot Button
248
-
249
- self.btn_snapshot = tk.Button( self.frame_btn, text='Snapshot', font=self.font_btn_big)
250
-
251
- self.btn_snapshot.configure(width = 15, height = 1, command=self.press_snapshot_button)
252
-
253
- self.btn_snapshot.grid(column=0, row=0, padx=30, pady= 10)
254
-
255
-
256
-
257
- # Close Button
258
-
259
- self.btn_close = tk.Button( self.frame_btn, text='Close', font=self.font_btn_big )
260
-
261
- self.btn_close.configure( width=15, height=1, command=self.press_close_button )
262
-
263
- self.btn_close.grid( column=1, row=0, padx=20, pady=10 )
264
-
265
-
266
-
267
- # Text Boxの書き方がよく分かりません。。。。
268
-
269
- # テキストボックスの作成
270
-
271
- txtbox = tk.Entry(width=150)
272
-
273
- txtbox.place(x=37, y=750)
274
-
275
-
276
-
277
- def update(self):
278
-
279
- #Get a frame from the video source
280
-
281
- _, frame = self.vcap.read()
282
-
283
-
284
-
285
- frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
286
-
287
- self.photo = PIL.ImageTk.PhotoImage(image = PIL.Image.fromarray(frame))
288
-
289
-
290
-
291
- #self.photo -> Canvas
292
-
293
- self.canvas1.create_image(0,0, image= self.photo, anchor = tk.NW)
294
-
295
-
296
-
297
- self.master.after(self.delay, self.update)
298
-
299
-
300
-
301
- def analyze_img(self, pic_name):
302
-
303
-
304
-
305
- img_test = cv2.imread(pic_name, cv2.IMREAD_GRAYSCALE)
306
-
307
- result = "実装中"
308
-
309
- return result
310
-
311
-
312
-
313
- def press_snapshot_button(self):
314
-
315
- # Get a frame from the video source
316
-
317
- _, frame = self.vcap.read()
318
-
319
- frame1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
320
-
321
- pic_name = "frame-" + time.strftime( "%Y-%d-%m-%H-%M-%S")+ ".jpg"
322
-
323
- cv2.imwrite(pic_name, cv2.cvtColor( frame1, cv2.COLOR_BGR2RGB ) )
324
-
325
-
326
-
327
- # analyze_imageが未定義のエラーになる
328
-
329
- result = analyze_img(pic_name)
330
-
331
- # 表示させたいがどこにどのようにプログラムを書けば良いかわからない
332
-
333
- self.text.insert(tk.END, result)
334
-
335
-
336
-
337
- def press_close_button(self):
338
-
339
- self.master.destroy()
340
-
341
- self.vcap.release()
342
-
343
-
344
-
345
- def main():
346
-
347
- root = tk.Tk()
348
-
349
- app = Application(master=root)#Inherit
350
-
351
- app.mainloop()
352
-
353
-
354
-
355
- if __name__ == "__main__":
356
-
357
- main()
358
-
359
-
360
-
361
-
362
-
363
- ```

3

2021/02/16 01:20

投稿

songyong
songyong

スコア21

test CHANGED
File without changes
test CHANGED
@@ -354,4 +354,10 @@
354
354
 
355
355
  if __name__ == "__main__":
356
356
 
357
- main()```
357
+ main()
358
+
359
+
360
+
361
+
362
+
363
+ ```

2

修正

2021/02/16 00:21

投稿

songyong
songyong

スコア21

test CHANGED
File without changes
test CHANGED
@@ -56,278 +56,284 @@
56
56
 
57
57
  ```テキストボックスの定義部分抜粋
58
58
 
59
- # Text Boxの書き方がよく分かりません。。。。
59
+ # Text Boxの書き方がよく分かりません。。。。
60
+
61
+ txtbox = tk.Entry(width=150)
62
+
63
+ txtbox.place(x=37, y=750)
64
+
65
+ ```
66
+
67
+ ③分析結果をテキストボックスに出力する方法
68
+
69
+ テキストボックスさえきちんと定義すれば、下記のコーディングで問題なく、出力されますでしょうか。
70
+
71
+ また①と関連しますが、記載すべき場所がよく分かっておりません。
72
+
73
+
74
+
75
+ 加えて、次の写真を撮った場合には、こちらの内容を削除してブランクの状態にしたいのですが、
76
+
77
+ どのように実装すれば良いでしょうか。
78
+
79
+
80
+
81
+ ```テキストボックスの出力部分抜粋
82
+
83
+ # 表示させたいがどこにどのようにプログラムを書けば良いかわからない
84
+
85
+ self.text.insert(tk.END, result)
86
+
87
+ ```
88
+
89
+
90
+
91
+ 以上、拙い文書・初歩的な質問で大変恐縮ですが、
92
+
93
+ お助けいただけると幸甚です。。。
94
+
95
+
96
+
97
+ 宜しくお願いします。
98
+
99
+
100
+
101
+
102
+
103
+ ```ソースコード全体
104
+
105
+ #ソースコード全体
106
+
107
+
108
+
109
+ import tkinter as tk
110
+
111
+ from tkinter import ttk
112
+
113
+ import cv2
114
+
115
+ import PIL.Image, PIL.ImageTk
116
+
117
+ from tkinter import font
118
+
119
+ from tkinter import filedialog
120
+
121
+ import time
122
+
123
+
124
+
125
+
126
+
127
+ class Application(tk.Frame):
128
+
129
+ def __init__(self,master, video_source=0):
130
+
131
+ super().__init__(master)
132
+
133
+
134
+
135
+ self.master.geometry("1250x1000")
136
+
137
+ self.master.title("Tkinter with Video Streaming and Capture")
138
+
139
+
140
+
141
+ # ---------------------------------------------------------
142
+
143
+ # Font
144
+
145
+ # ---------------------------------------------------------
146
+
147
+ self.font_frame = font.Font( family="Meiryo UI", size=15, weight="normal" )
148
+
149
+ self.font_btn_big = font.Font( family="Meiryo UI", size=20, weight="bold" )
150
+
151
+ self.font_btn_small = font.Font( family="Meiryo UI", size=15, weight="bold" )
152
+
153
+
154
+
155
+ self.font_lbl_bigger = font.Font( family="Meiryo UI", size=45, weight="bold" )
156
+
157
+ self.font_lbl_big = font.Font( family="Meiryo UI", size=30, weight="bold" )
158
+
159
+ self.font_lbl_middle = font.Font( family="Meiryo UI", size=15, weight="bold" )
160
+
161
+ self.font_lbl_small = font.Font( family="Meiryo UI", size=12, weight="normal" )
162
+
163
+
164
+
165
+ # ---------------------------------------------------------
166
+
167
+ # Open the video source
168
+
169
+ # ---------------------------------------------------------
170
+
171
+
172
+
173
+ self.vcap = cv2.VideoCapture( video_source )
174
+
175
+ self.width = self.vcap.get( cv2.CAP_PROP_FRAME_WIDTH )
176
+
177
+ self.height = self.vcap.get( cv2.CAP_PROP_FRAME_HEIGHT )
178
+
179
+
180
+
181
+ # ---------------------------------------------------------
182
+
183
+ # Widget
184
+
185
+ # ---------------------------------------------------------
186
+
187
+
188
+
189
+ self.create_widgets()
190
+
191
+
192
+
193
+ # ---------------------------------------------------------
194
+
195
+ # Canvas Update
196
+
197
+ # ---------------------------------------------------------
198
+
199
+
200
+
201
+ self.delay = 15 #[mili seconds]
202
+
203
+ self.update()
204
+
205
+
206
+
207
+
208
+
209
+ def create_widgets(self):
210
+
211
+
212
+
213
+ #Frame_Camera
214
+
215
+ self.frame_cam = tk.LabelFrame(self.master, text = 'Camera', font=self.font_frame)
216
+
217
+ self.frame_cam.place(x = 10, y = 10)
218
+
219
+ self.frame_cam.configure(width = self.width -90, height = self.height - 50)
220
+
221
+ self.frame_cam.grid_propagate(0)
222
+
223
+
224
+
225
+ #Canvas
226
+
227
+ self.canvas1 = tk.Canvas(self.frame_cam)
228
+
229
+ self.canvas1.configure( width= self.width -90 , height=self.height - 100)
230
+
231
+ self.canvas1.grid(column= 0, row=0,padx = 10, pady=10)
232
+
233
+
234
+
235
+ # Frame_Button
236
+
237
+ self.frame_btn = tk.LabelFrame( self.master, text='Control', font=self.font_frame )
238
+
239
+ self.frame_btn.place( x=10, y=680 )
240
+
241
+ self.frame_btn.configure( width=self.width - 90, height=120 )
242
+
243
+ self.frame_btn.grid_propagate( 0 )
244
+
245
+
246
+
247
+ #Snapshot Button
248
+
249
+ self.btn_snapshot = tk.Button( self.frame_btn, text='Snapshot', font=self.font_btn_big)
250
+
251
+ self.btn_snapshot.configure(width = 15, height = 1, command=self.press_snapshot_button)
252
+
253
+ self.btn_snapshot.grid(column=0, row=0, padx=30, pady= 10)
254
+
255
+
256
+
257
+ # Close Button
258
+
259
+ self.btn_close = tk.Button( self.frame_btn, text='Close', font=self.font_btn_big )
260
+
261
+ self.btn_close.configure( width=15, height=1, command=self.press_close_button )
262
+
263
+ self.btn_close.grid( column=1, row=0, padx=20, pady=10 )
264
+
265
+
266
+
267
+ # Text Boxの書き方がよく分かりません。。。。
268
+
269
+ # テキストボックスの作成
270
+
271
+ txtbox = tk.Entry(width=150)
272
+
273
+ txtbox.place(x=37, y=750)
60
274
 
61
275
 
62
276
 
63
- ```
277
+ def update(self):
278
+
64
-
279
+ #Get a frame from the video source
280
+
281
+ _, frame = self.vcap.read()
282
+
283
+
284
+
285
+ frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
286
+
287
+ self.photo = PIL.ImageTk.PhotoImage(image = PIL.Image.fromarray(frame))
288
+
289
+
290
+
65
- ③分析結果をテキストボックスに出力する方法
291
+ #self.photo -> Canvas
292
+
66
-
293
+ self.canvas1.create_image(0,0, image= self.photo, anchor = tk.NW)
294
+
295
+
296
+
297
+ self.master.after(self.delay, self.update)
298
+
299
+
300
+
301
+ def analyze_img(self, pic_name):
302
+
303
+
304
+
305
+ img_test = cv2.imread(pic_name, cv2.IMREAD_GRAYSCALE)
306
+
307
+ result = "実装中"
308
+
309
+ return result
310
+
311
+
312
+
313
+ def press_snapshot_button(self):
314
+
315
+ # Get a frame from the video source
316
+
317
+ _, frame = self.vcap.read()
318
+
67
- テキストボックスさえきちんと定義すれば、下記のコーディングで問題なく、出力されますでしょうか。
319
+ frame1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
320
+
68
-
321
+ pic_name = "frame-" + time.strftime( "%Y-%d-%m-%H-%M-%S")+ ".jpg"
322
+
323
+ cv2.imwrite(pic_name, cv2.cvtColor( frame1, cv2.COLOR_BGR2RGB ) )
324
+
325
+
326
+
327
+ # analyze_imageが未定義のエラーになる
328
+
69
- また①と関連しますが、記載すべき場所がよく分かっておりません。
329
+ result = analyze_img(pic_name)
70
-
71
-
72
-
73
- 加えて、次の写真を撮った場合には、こちらの内容を削除してブランクの状態にしたいのですが、
330
+
74
-
75
- どのように実装すれば良いでしょうか。
76
-
77
-
78
-
79
- ```テキストボックスの出力部分抜粋
80
-
81
- # 表示させたいがどこにどのようにプログラムを書けば良いかわからない
331
+ # 表示させたいがどこにどのようにプログラムを書けば良いかわからない
82
332
 
83
333
  self.text.insert(tk.END, result)
84
334
 
85
- ```
86
-
87
-
88
-
89
- 以上、拙い文書・初歩的な質問で大変恐縮ですが、
90
-
91
- お助けいただけると幸甚です。。。
92
-
93
-
94
-
95
- 宜しくお願いします。
96
-
97
-
98
-
99
-
100
-
101
- ```ソースコード全体
102
-
103
- #ソースコード全体
104
-
105
- import tkinter as tk
106
-
107
- from tkinter import ttk
108
-
109
- import cv2
110
-
111
- import PIL.Image, PIL.ImageTk
112
-
113
- from tkinter import font
114
-
115
- import time
116
-
117
-
118
-
119
-
120
-
121
- class Application(tk.Frame):
122
-
123
- def __init__(self,master, video_source=0):
124
-
125
- super().__init__(master)
126
-
127
-
128
-
129
- self.master.geometry("1000x1000")
130
-
131
- self.master.title("Tkinter with Video Streaming and Capture")
132
-
133
-
134
-
135
- # ---------------------------------------------------------
136
-
137
- # Font
138
-
139
- # ---------------------------------------------------------
140
-
141
- self.font_frame = font.Font( family="Meiryo UI", size=15, weight="normal" )
142
-
143
- self.font_btn_big = font.Font( family="Meiryo UI", size=20, weight="bold" )
144
-
145
- self.font_btn_small = font.Font( family="Meiryo UI", size=15, weight="bold" )
146
-
147
-
148
-
149
- self.font_lbl_bigger = font.Font( family="Meiryo UI", size=45, weight="bold" )
150
-
151
- self.font_lbl_big = font.Font( family="Meiryo UI", size=30, weight="bold" )
152
-
153
- self.font_lbl_middle = font.Font( family="Meiryo UI", size=15, weight="bold" )
154
-
155
- self.font_lbl_small = font.Font( family="Meiryo UI", size=12, weight="normal" )
156
-
157
-
158
-
159
- # ---------------------------------------------------------
160
-
161
- # Open the video source
162
-
163
- # ---------------------------------------------------------
164
-
165
-
166
-
167
- self.vcap = cv2.VideoCapture( video_source )
168
-
169
- self.width = self.vcap.get( cv2.CAP_PROP_FRAME_WIDTH )
170
-
171
- self.height = self.vcap.get( cv2.CAP_PROP_FRAME_HEIGHT )
172
-
173
-
174
-
175
- # ---------------------------------------------------------
176
-
177
- # Widget
178
-
179
- # ---------------------------------------------------------
180
-
181
-
182
-
183
- self.create_widgets()
184
-
185
-
186
-
187
- # ---------------------------------------------------------
188
-
189
- # Canvas Update
190
-
191
- # ---------------------------------------------------------
192
-
193
-
194
-
195
- self.delay = 15 #[mili seconds]
196
-
197
- self.update()
198
-
199
-
200
-
201
-
202
-
203
- def create_widgets(self):
204
-
205
-
206
-
207
- #Frame_Camera
208
-
209
- self.frame_cam = tk.LabelFrame(self.master, text = 'Camera', font=self.font_frame)
210
-
211
- self.frame_cam.place(x = 10, y = 10)
212
-
213
- self.frame_cam.configure(width = self.width+30, height = self.height+50)
214
-
215
- self.frame_cam.grid_propagate(0)
216
-
217
-
218
-
219
- #Canvas
220
-
221
- self.canvas1 = tk.Canvas(self.frame_cam)
222
-
223
- self.canvas1.configure( width= self.width, height=self.height)
224
-
225
- self.canvas1.grid(column= 0, row=0,padx = 10, pady=10)
226
-
227
-
228
-
229
- # Frame_Button
230
-
231
- self.frame_btn = tk.LabelFrame( self.master, text='Control', font=self.font_frame )
232
-
233
- self.frame_btn.place( x=10, y=550 )
234
-
235
- self.frame_btn.configure( width=self.width + 30, height=120 )
236
-
237
- self.frame_btn.grid_propagate( 0 )
238
-
239
-
240
-
241
- #Snapshot Button
242
-
243
- self.btn_snapshot = tk.Button( self.frame_btn, text='Snapshot', font=self.font_btn_big)
244
-
245
- self.btn_snapshot.configure(width = 15, height = 1, command=self.press_snapshot_button)
246
-
247
- self.btn_snapshot.grid(column=0, row=0, padx=30, pady= 10)
248
-
249
-
250
-
251
- # Close Button
252
-
253
- self.btn_close = tk.Button( self.frame_btn, text='Close', font=self.font_btn_big )
254
-
255
- self.btn_close.configure( width=15, height=1, command=self.press_close_button )
256
-
257
- self.btn_close.grid( column=1, row=0, padx=20, pady=10 )
258
-
259
-
260
-
261
- # Text Boxの書き方がよく分かりません。。。。
262
-
263
335
 
264
336
 
265
-
266
-
267
-
268
-
269
- def update(self):
270
-
271
- #Get a frame from the video source
272
-
273
- _, frame = self.vcap.read()
274
-
275
-
276
-
277
- frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
278
-
279
- self.photo = PIL.ImageTk.PhotoImage(image = PIL.Image.fromarray(frame))
280
-
281
-
282
-
283
- #self.photo -> Canvas
284
-
285
- self.canvas1.create_image(0,0, image= self.photo, anchor = tk.NW)
286
-
287
-
288
-
289
- self.master.after(self.delay, self.update)
290
-
291
-
292
-
293
- def analyze_image(pic_name):
294
-
295
-
296
-
297
- img_test = cv2.imread(pic_name, cv2.IMREAD_GRAYSCALE)
298
-
299
- result = '実装中'
300
-
301
- return result
302
-
303
-
304
-
305
-
306
-
307
- def press_snapshot_button(self):
308
-
309
- # Get a frame from the video source
310
-
311
- _, frame = self.vcap.read()
312
-
313
- frame1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
314
-
315
- pic_name = "frame-" + time.strftime( "%Y-%d-%m-%H-%M-%S")+ ".jpg"
316
-
317
- cv2.imwrite(pic_name, cv2.cvtColor( frame1, cv2.COLOR_BGR2RGB ) )
318
-
319
-
320
-
321
- # analyze_imageが未定義のエラーになる
322
-
323
- result = analyze_image(pic_name)
324
-
325
- # 表示させたいがどこにどのようにプログラムを書けば良いかわからない
326
-
327
- self.text.insert(tk.END, result)
328
-
329
-
330
-
331
337
  def press_close_button(self):
332
338
 
333
339
  self.master.destroy()
@@ -348,6 +354,4 @@
348
354
 
349
355
  if __name__ == "__main__":
350
356
 
351
- main()
357
+ main()```
352
-
353
- ```

1

修正

2021/02/15 18:33

投稿

songyong
songyong

スコア21

test CHANGED
File without changes
test CHANGED
@@ -296,7 +296,9 @@
296
296
 
297
297
  img_test = cv2.imread(pic_name, cv2.IMREAD_GRAYSCALE)
298
298
 
299
+ result = '実装中'
300
+
299
- return restlt
301
+ return result
300
302
 
301
303
 
302
304