前提・実現したいこと
kerasで画像分類を行っています。Tkinterのボタンを押すと推論が実行され、スコアが表示される
プログラムは作れましたが、最終的には外部信号を元に推論を実行したいです。
そのためThread処理でInput信号を検知し、推論させるプログラムに変更したところ下記エラー
が発生しました。(Input信号はget_signalに置換えています。)
対処法、回避方法についてお教え頂きたいためよろしくお願い致します。
発生している問題・エラーメッセージ
Exception in thread Thread-6: Traceback (most recent call last): File "C:\Users\tg30214.conda\envs\DL\lib\threading.py", line 916, in _bootstrap_inner self.run() File "C:\Users\tg30214.conda\envs\DL\lib\threading.py", line 864, in run self._target(*self._args, **self._kwargs) File "<ipython-input-1-a528fff6931d>", line 31, in get_signal check() File "<ipython-input-1-a528fff6931d>", line 42, in check pred = model.predict(img)[0][0] File "C:\Users\tg30214.conda\envs\DL\lib\site-packages\keras\engine\training.py", line 1452, in predict if self._uses_dynamic_learning_phase(): File "C:\Users\tg30214.conda\envs\DL\lib\site-packages\keras\engine\training.py", line 382, in _uses_dynamic_learning_phase not isinstance(K.learning_phase(), int)) File "C:\Users\tg30214.conda\envs\DL\lib\site-packages\keras\backend\tensorflow_backend.py", line 73, in symbolic_fn_wrapper if _SYMBOLIC_SCOPE.value: AttributeError: '_thread._local' object has no attribute 'value'
該当のソースコード
Python
1import tkinter as tk 2import cv2 3import os.path 4import cv2 5from PIL import Image 6import csv 7import datetime 8import sys 9import numpy as np 10import glob 11import datetime 12import pathlib 13import threading 14 15from keras import backend as K 16import tensorflow as tf 17from keras.preprocessing import image 18from keras.preprocessing.image import array_to_img 19from keras.models import load_model 20 21root = tk.Tk() 22root.title(u"Software Title") 23root.geometry("400x300") 24 25def get_signal(test): 26 a = test 27 while True: 28 a = a+1 29 if a == 10000: 30 check() 31 32 elif a > 10000: 33 a=0 34 35def check(): 36 image_path = r"C:\Users\tg30214\Desktop\NG0000.bmp" 37 img = cv2.imread(image_path) 38 img = np.expand_dims(img, axis=0) 39 img = img.astype("float32") 40 img = img/255.0 41 pred = model.predict(img)[0][0] 42 print(pred) 43 44Frame = tk.Frame(root) 45Frame.place(x=0.0, y=0.0, height=300, width=400) 46button1 = tk.Button(Frame,text="test", command=check) 47button1.place(x=0, rely=0, height=300 , width=400) 48 49model_path = r"C:\Users\tg30214\Desktop\20200707_finetuning_final.h5" 50model = load_model(model_path) 51 52t1=threading.Thread(target=get_signal, args=(0,)) 53t1.start() 54 55root.mainloop()
補足情報(FW/ツールのバージョンなど)
Windows 10 Pro, Python 3.7, keras 2.3.1, tensorflow 2.0.0