前提・実現したいこと
ここに質問の内容を詳しく書いてください。
OpenCVとKerasを利用して、webカメラに写されたイラストの顔を検知し判別するプログラムを作りました。
イラストを判別したときに作品名を画面上に日本語で表示させたいと思い、OpenCVは日本語に対応していないとのことなのでpillowを使って表示させようと思ったのですが、エラーが発生して実行できません。
どなたか解決方法がわかる方、教えていただきたいです。。
イラストの顔を判別するプログラムコードは以下のホームページとほぼ同じ物を書いていますのでホームページから追加した部分「」で囲んでおきます。
↓ ↓
https://ai-coordinator.jp/real-time-person-detection
※画像の上にpillowを使って日本語を書いてみたところできていたのでpillowのインストール等は問題ないと思います。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:\Users\Taisei\Anaconda3\envs\opencv\lib\site-packages\PIL\ImageDraw.py", line 466, in Draw return im.getdraw(mode) AttributeError: 'numpy.ndarray' object has no attribute 'getdraw' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "check3.py", line 83, in <module> main() File "check3.py", line 23, in main draw = ImageDraw.Draw(frame) File "C:\Users\Taisei\Anaconda3\envs\opencv\lib\site-packages\PIL\ImageDraw.py", line 468, in Draw return ImageDraw(im, mode) File "C:\Users\Taisei\Anaconda3\envs\opencv\lib\site-packages\PIL\ImageDraw.py", line 60, in __init__ im.load() AttributeError: 'numpy.ndarray' object has no attribute 'load' [ WARN:0] terminating async callback
該当のソースコード
python
1import gakusyu2 as face 2import sys, os 3from keras.preprocessing.image import load_img, img_to_array 4import numpy as np 5「from PIL import Image, ImageDraw, ImageFont」 6import cv2 7import time 8 9cascade_path = 'C:\Users\Taisei\Anaconda3\envs\OpenCV\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml' 10cascade = cv2.CascadeClassifier(cascade_path) 11cam = cv2.VideoCapture(0) 12color = (255, 0, 255) 13 14image_size = 32 15categories = ["monariza","Lady with an Ermine","Girl with a Pearl Earring"] 16 17def main(): 18 19 while(True): 20 ret, frame = cam.read() 21 facerect = cascade.detectMultiScale(frame, scaleFactor=1.3, minNeighbors=2, minSize=(10, 10)) 22 23 「「draw = ImageDraw.Draw(frame)」」 24 25 「「font = ImageFont.truetype('C:\Windows\Fonts\meiryo.ttc', 27)」」 26 27 for rect in facerect: 28 cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=2) 29 x = rect[0] 30 y = rect[1] 31 width = rect[2] 32 height = rect[3] 33 34 cv2.imwrite("frontalface.png", frame) 35 img = cv2.imread("frontalface.png") 36 37 dst = img[y:y+height, x:x+width] 38 cv2.imwrite("output.png", dst) 39 cv2.imread("output.png") 40 X = [] 41 42 img = load_img("output.png", target_size=(image_size,image_size)) 43 in_data = img_to_array(img) 44 45 X.append(in_data) 46 X = np.array(X) 47 X = X.astype("float") / 256 48 49 model = face.build_model(X.shape[1:]) 50 model.load_weights("C:\python code\system2.hdf5") 51 52 pre = model.predict(X) 53 print(pre) 54 if pre[0][0] > 0.95: 55 print(categories[0]) 56 text = categories[0] 57 font = cv2.FONT_HERSHEY_PLAIN 58 cv2.putText(frame,text,(rect[0],rect[1]-10),font, 2, color, 2, cv2.LINE_AA) 59 「「draw.text((10, 10), u'これはモナリザです。', fill=(255, 0, 0), font=font)」」 60 elif pre[0][1] > 0.95: 61 print(categories[1]) 62 text = categories[1] 63 font = cv2.FONT_HERSHEY_PLAIN 64 cv2.putText(frame,text,(rect[0],rect[1]-10),font, 2, color, 2, cv2.LINE_AA) 65 「「draw.text((10, 10), u'これは真珠の耳飾りです。', fill=(255, 0, 0), font=font)」」 66 elif pre[0][2] > 0.95: 67 print(categories[2]) 68 text = categories[2] 69 font = cv2.FONT_HERSHEY_PLAIN 70 cv2.putText(frame,text,(rect[0],rect[1]-10),font, 2, color, 2, cv2.LINE_AA) 71 「「draw.text((10, 10), u'これは牛乳を注ぐ女です。', fill=(255, 0, 0), font=font)」」 72 73 cv2.imshow("Show FLAME Image", frame) 74 #time.sleep(0.1) 75 76 k = cv2.waitKey(1) 77 78 if k == ord('q'): 79 break 80 81 cam.release() 82 cv2.destroyAllWindows() 83 84if __name__ == '__main__': 85 main()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/12 05:54
2020/01/14 00:23
2020/01/14 08:27