質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Q&A

解決済

1回答

1615閲覧

pillowでリアルタイム映像に日本語字幕を出力させたい

genosuke

総合スコア12

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

0クリップ

投稿2020/01/07 16:19

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
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 5from 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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ImageDraw.Draw(frame)Imageオブジェクトを引数に取るため、numpy.ndarrayオブジェクトには対応していません。
下記のように、numpy.ndarrayオブジェクトをImageオブジェクトに変換してからImageDraw.Draw(draw)を実行してください。

Python

1frame_img = Image.fromarray(np.uint8(frame)) # numpy.ndarray to Image 2draw = ImageDraw.Draw(frame_img)

投稿2020/01/08 00:21

編集2020/01/14 00:22
cpthgli

総合スコア76

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

genosuke

2020/01/12 05:54

ご回答ありがとうございます! numpy.ndarrayオブジェクトをImageオブジェクトに変換しようと numpy.ndarray = ImageDraw.Draw(frame)と実行してみたのですが AttributeError: 'numpy.ndarray' object has no attribute 'load'とエラーが出てうまく実行できません。。 もし解決策がお分かりでしたらご回答していただきたいです。。
cpthgli

2020/01/14 00:23

誤解の生じる回答であったため修正しました。
genosuke

2020/01/14 08:27

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問