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

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

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

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

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

854閲覧

UnboundLocalError: local variable 'image_rgb' referenced before assignmentのエラーの解決策が知りたいです.

BASEBALL-Y

総合スコア67

Keras

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

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/03/17 09:39

##質問内容
以下のコードを実行すると,このようなエラーが出ます.

##エラー結果
UnboundLocalError: local variable 'image_rgb' referenced before assignment

##コード

Python

1 2 #映像を表示 3 cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) 4 5 #顔の検出器を作成 6 face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml") 7 8 9 while True: 10 11 ret, frame = cap.read() 12 13 #画像にする際のサイズを変更する 14 frame = cv2.resize(frame,(width, height)) 15 16 #グレイスケールに変換 17 frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 18 19 20 #顔認証を実行 21 face_list = face_cascade.detectMultiScale(frame_gray, minNeighbors=20) 22 23 #--------------------------------------------------------------------------- 24 25 #認証した部分に印をつける(枠で囲む) 26 for (x,y,w,h) in face_list: 27 28 #赤を用意 29 red = (0,0,255) 30 31 #顔の部部を囲む 32 cv2.rectangle(frame, (x,y), (x+w, y+h), red, 1) 33 34 #顔の部分のみ取り出す 35 trim_face = frame[y:y+h,x:x+w] 36 37 #RGBに変換する(OpenCVのBGRをRGBに変換する) 38 image_rgb = cv2.cvtColor(trim_face,cv2.COLOR_BGR2RGB) 39 40 #--------------------------------------------------------------------------- 41 42 #pillowに変換 43 change_pillow = Image.fromarray(image_rgb) 44 45 46 #OpenCVのRGBからpillowのRGBに変換する 47 rgb_pillow = change_pillow.convert("RGB") 48 49 50 #画像のサイズをリサイズする(顔のみの画像) 51 resize_face = rgb_pillow.resize((image_size, image_size)) 52 53 54 #顔の部分のみの画像を数値に変換する 55 data = np.asarray(resize_face) 56 57 #リストを用意 58 X = [] 59 60 #Xにdataを入れる 61 X.append(data) 62 63 #XをTensorFlowが扱いやすいようにNumpy型に変換する 64 X = np.array(X) 65 66 #ニューラルネットワークのモデル関数を呼び出す 67 model = neural_model() 68 69 #画像をニューラルネットワークのモデルから予測する 70 result = model.predict([X])[0] 71 72 #一番値の大きい配列の添え字を返す 73 pred = result.argmax() 74 75 76 #もし,"my_face"なら, 77 if face_classes[pred] == "my_face": 78 79 #映像の顔の部分を青色で囲む 80 for (x,y,w,h) in face_list: 81 82 #青色を準備 83 blue = (255,0,0) 84 85 #顔を枠で囲む 86 cv2.rectangle(frame, (x, y), (x+w,y+h), blue, 2) 87 88 cv2.imshow("Detect_Face", frame) 89 90 #もし,Enterキーが押されたら終了する 91 exit_wind = cv2.waitKey(1) 92 93 if exit_wind == 13: 94 break 95

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

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

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

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

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

tetsunosuke

2020/03/17 10:51

for (x,y,w,h) in face_list: のところで、face_listが空だった場合、 image_rgb = cv2.cvtColor(trim_face,cv2.COLOR_BGR2RGB) が呼び出されず、問題のエラーメッセージになりそうです。 そこを確認してみては。
guest

回答1

0

ベストアンサー

顔が1つも検出されなかった場合、for (x,y,w,h) in face_list: のループ内の処理は1回も実行されないことになるので、その場合は変数 image_rgb が定義されませんが、そのあとの change_pillow = Image.fromarray(image_rgb) で変数が参照されるので未定義エラーとなります。

顔が検出されなかった場合の例外処理を追加しましょう。

投稿2020/03/17 10:58

tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問