現在、AlexABのDarknetを使ってシステム構築を行っています。
tkinterでGUIを表示し、目的とするターゲットをラジオボタンにて選択するようにして
そのターゲットを検出した時にビープ音が鳴るようにしたいのですが
ラジオボタンで選択した変数を、検出に渡すことができません。
下記コードにて
target_canvasで選択したラジオボタンからの変数を
さらに下のコード
print_detectionsに渡したいのです。
Multiprocessで変数に.valueを付けると受け渡しができるとのことでしたが、うまくいきません。
どなたかご教授願えませんでしょうか。
python
1import queue 2from ctypes import * 3import random 4import os 5import cv2 6import time 7import darknet 8import argparse 9from threading import Thread, enumerate 10from queue import Queue 11import tkinter as tk 12import time 13from multiprocessing import Value 14 15def inference(darknet_image_queue, detections_queue, fps_queue): 16 17 while cap.isOpened(): 18 darknet_image = darknet_image_queue.get() 19 prev_time = time.time() 20 detections = darknet.detect_image(network, class_names, darknet_image, thresh=args.thresh) 21 detections_queue.put(detections) 22 fps = int(1/(time.time() - prev_time)) 23 fps_queue.put(fps) 24 print("FPS: {}".format(fps)) 25 darknet.print_detections(detections, args.ext_output) 26 darknet.free_image(darknet_image) 27 cap.release() 28 29def target_canvas(): 30 global target 31 32 root = tk.Tk() 33 root.geometry("300x200") 34 root.title("Target") 35 var = tk.IntVar() 36 37 var.set(1) 38 39 # ラジオボタン作成 40 rdo0 = tk.Radiobutton(root, value=0, variable=var, text='taeget0') 41 rdo0.place(x=70, y=40) 42 43 rdo1 = tk.Radiobutton(root, value=1, variable=var, text='taeget1') 44 rdo1.place(x=70, y=70) 45 46 rdo2 = tk.Radiobutton(root, value=2, variable=var, text='taeget2') 47 rdo2.place(x=70, y=100) 48 49 rdo3 = tk.Radiobutton(root, value=3, variable=var, text='taeget3') 50 rdo3.place(x=70, y=130) 51 52 lst_target = ['taeget0', 'taeget1', 'taeget2', 'taeget3'] 53 target.value = lst_target[var.get()] 54 55 root.mainloop() 56 57 58 59if __name__ == '__main__': 60 61 frame_queue = Queue() 62 darknet_image_queue = Queue(maxsize=1) 63 detections_queue = Queue(maxsize=1) 64 fps_queue = Queue(maxsize=1) 65 66 args = parser() 67 check_arguments_errors(args) 68 network, class_names, class_colors = darknet.load_network( 69 args.config_file, 70 args.data_file, 71 args.weights, 72 batch_size=1 73 ) 74 darknet_width = darknet.network_width(network) 75 darknet_height = darknet.network_height(network) 76 input_path = str2int(args.input) 77 cap = cv2.VideoCapture(input_path) 78 video_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) 79 video_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) 80 drg = queue.Queue 81 Thread(target=video_capture, args=(frame_queue, darknet_image_queue)).start() 82 Thread(target=target_canvas).start() 83 Thread(target=inference, args=(darknet_image_queue, detections_queue, fps_queue)).start() 84 Thread(target=drawing, args=(frame_queue, detections_queue, fps_queue)).start()
python
1from ctypes import * 2import math 3import random 4import os 5import winsound 6 7 8def print_detections(detections, coordinates=False): 9 10 print("\nObjects:") 11 for label, confidence, bbox in detections: 12 x, y, w, h = bbox 13 if coordinates: 14 print("{}: {}% (left_x: {:.0f} top_y: {:.0f} width: {:.0f} height: {:.0f})".format(label, confidence, x, y, w, h)) 15 if label == target: 16 winsound.Beep(800,1000) 17 else: 18 print("{}: {}%".format(label, confidence)) 19 20 if label == target: 21 winsound.Beep(800,1000)
回答2件
あなたの回答
tips
プレビュー