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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

OpenCV

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

Python

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

Q&A

解決済

2回答

1817閲覧

ValueError: I/O operation on closed file というエラーが出てしまう。

Kokku

総合スコア39

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

OpenCV

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

Python

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

0グッド

0クリップ

投稿2020/10/11 11:43

編集2020/10/11 11:54

リンク内容
このサイトを参考にして自分のパソコン環境でも動くようにしたいと思い少しずつ改変していっいるのですが、

9\x11@\x1d\xd6f\x1bO\\x0c\x1c\xf5\x185\xcek\x9e6\xbe\xbe\x9f\xca\x02G\xc6\xe2\x1d$}\xee\xd9%\x8b\x00\xdc\x8e2O\xd7\x8a\xa0\x9a6\xbfw\x033\'\xca\xd9\x92GT?+`\x809\xfa\x8c\x91\xfe5\xa3\xa5\xf8v\xd2\x00\xbet{\xb6\x1d\xcd+7\uS\x8fa\xeb\xff\x00\xd このような文字がいっぱい続いてました。 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-1-4b147de06743> in <module> 53 } 54 response = requests.post(face_api_url, headers=headers, ---> 55 params=params, data=image_data)#FaceAPIで解析 56 57 response.raise_for_status() E:\Anaconda\envs\env\lib\site-packages\requests\api.py in post(url, data, json, **kwargs) 117 """ 118 --> 119 return request('post', url, data=data, json=json, **kwargs) 120 121 E:\Anaconda\envs\env\lib\site-packages\requests\api.py in request(method, url, **kwargs) 59 # cases, and look like a memory leak in others. 60 with sessions.Session() as session: ---> 61 return session.request(method=method, url=url, **kwargs) 62 63 E:\Anaconda\envs\env\lib\site-packages\requests\sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) 514 hooks=hooks, 515 ) --> 516 prep = self.prepare_request(req) 517 518 proxies = proxies or {} E:\Anaconda\envs\env\lib\site-packages\requests\sessions.py in prepare_request(self, request) 457 auth=merge_setting(auth, self.auth), 458 cookies=merged_cookies, --> 459 hooks=merge_hooks(request.hooks, self.hooks), 460 ) 461 return p E:\Anaconda\envs\env\lib\site-packages\requests\models.py in prepare(self, method, url, headers, files, data, params, auth, cookies, hooks, json) 315 self.prepare_headers(headers) 316 self.prepare_cookies(cookies) --> 317 self.prepare_body(data, files, json) 318 self.prepare_auth(auth, url) 319 E:\Anaconda\envs\env\lib\site-packages\requests\models.py in prepare_body(self, data, files, json) 476 if is_stream: 477 try: --> 478 length = super_len(data) 479 except (TypeError, AttributeError, UnsupportedOperation): 480 length = None E:\Anaconda\envs\env\lib\site-packages\requests\utils.py in super_len(o) 118 elif hasattr(o, 'fileno'): 119 try: --> 120 fileno = o.fileno() 121 except io.UnsupportedOperation: 122 pass ValueError: I/O operation on closed file ​

というエラーが出てしまいます。
保存する画像名の指定の仕方が悪いのか保存されないです。
少し調べたことろファイルが開かれてないのに編集しようとしているからこのエラーが起こる?みたいなことが書かれていたのですが本当の原因がこれなのかわかりません。

実行したことは画像が保存されるごとに画像の名前を変えて保存したいです。
そのためにdatetime.now()の箇所を変えないといけないのですがどう変えていいのかわからず質問させていただきました。

import requests import json import time import numpy as np import cv2 from datetime import datetime import matplotlib.pyplot as plt import pandas as pd ##初期設定 cap=cv2.VideoCapture(0) #0にするとmacbookのカメラ、1にすると外付けのUSBカメラにできる lastflame = None csv_name = datetime.now().strftime('%Y%m%d_%H%M')#csvファイルとして保存するファイル名 data_name = ["anger","contempt","disgust","fear","happiness",'sadness','surprise']#保存データの系列 emotion_data =[0,0,0,0,0,0,0]#初期値 count = 0#撮影回数を示すカウンタ ##顔認識の設定 cascade_path = r'haarcascade_frontalface_alt.xml'# 顔判定で使うxmlファイルを指定する。(opencvのpathを指定) cascade = cv2.CascadeClassifier(cascade_path) ##Faceの設定 subscription_key = '####################'#ここに取得したキー1を入力 assert subscription_key face_api_url = 'https://#######.cognitiveservices.azure.com/face/v1.0/detect'#ここに取得したエンドポイントのURLを入力 ##実行 while True: ret, img = cap.read() if ret == True: img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#グレースケールに変換 faces=cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(100, 100))#顔判定 minSizeで顔判定する際の最小の四角の大きさを指定できる。(小さい値を指定し過ぎると顔っぽい小さなシミのような部分も判定されてしまう。) cv2.imshow('image',img_gray) if lastflame is None: lastflame = img_gray.astype('float') cv2.imshow('image',img_gray) if len(faces) > 0: #顔を検出した場合 for face in faces: now = 1#撮影時間 filename = "face{}.jpg".format(now)#保存するfilename cv2.imwrite(filename, img)#画像の書き出し with open(filename, mode="rb") as image_data:#処理をする画像を選択 content = image_data.read() print(content) now += 1 headers = {'Ocp-Apim-Subscription-Key': subscription_key, 'Content-Type': 'application/octet-stream'} params = { 'returnFaceId': 'true', 'returnFaceLandmarks': 'false', 'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise', } response = requests.post(face_api_url, headers=headers, params=params, data=image_data)#FaceAPIで解析 response.raise_for_status() analysis = response.json()#json出力 #faceのjsonから抽出する項目をピック result = [analysis[0]['faceAttributes']['emotion']['anger'],analysis[0]['faceAttributes']['emotion']['contempt'], analysis[0]['faceAttributes']['emotion']['disgust'],analysis[0]['faceAttributes']['emotion']['fear'], analysis[0]['faceAttributes']['emotion']['happiness'],analysis[0]['faceAttributes']['emotion']['sadness'], analysis[0]['faceAttributes']['emotion']['surprise']] emotion_data = np.array(result) + np.array(emotion_data) df = pd.DataFrame({now:emotion_data}, index=data_name)#取得データをDataFrame1に変換しdfとして定義 if count == 0:#初期 print(df) else: df = pd.concat([df_past,df],axis = 1, sort = False)#dfを更新 print(df) plt.plot(df.T)#dfの行列を反転 plt.legend(data_name)#凡例を表示 plt.draw()#グラフ描画 plt.pause(4)#ウェイト時間(=Azure更新時間) plt.cla()#グラフを閉じる count = count + 1#撮影回数の更新 df_past = df#df_pastを更新 df.T.to_csv(csv_name+'.csv')#感情分析結果をcsvファイルとして書き出し

開発環境
windows10
anaconda
opencv
faceapi
python

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

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

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

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

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

guest

回答2

0

OSError: [Errno 22] Invalid argument: 'face2020-10-11 19:42:50.885527.jpg

ファイル名に使えない文字が入ってます。
本当にそういう名前のファイルがあるんですか?

投稿2020/10/11 11:49

y_waiwai

総合スコア87774

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

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

Kokku

2020/10/11 11:55

載せるコードなどが間違っていたので編集しました。
guest

0

ベストアンサー

Windowsではコロン:はファイル名に使えません。
削除するか別の文字にしましょう。

投稿2020/10/11 11:48

otn

総合スコア84533

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

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

Kokku

2020/10/11 11:56

載せるコードなどが間違っていたので編集しました。 具体的にどう文字を置き換えるとfor分がうまく回るのでしょうか。
otn

2020/10/11 12:23

全然別の質問?? > params=params, data=image_data)#FaceAPIで解析 と書いてますが、image_dataは、 > with open(filename, mode="rb") as image_data のブロックの中だけで有効です。
Kokku

2020/10/11 12:51

params=params, data=image_data この指定は消しても大丈夫ということでしょうか。
otn

2020/10/11 12:54

何をしたくて response = requests.post(face_api_url, headers=headers, params=params, data=image_data)#FaceAPIで解析 を書いたのかを思い出せば自明だと思います。
otn

2020/10/11 13:31 編集

削除しては駄目では?? もしかして、プログラムはコピペで内容を全く理解していないということでしょうか? イメージデータをPostするプログラムでは? data=イメージデータ自体 を指定しましょう。
Kokku

2020/10/11 14:41

プログラミング初心者で細かいパラメータなどはほとんど理解できていない為、今回のこのエラーも解決法がわからずこのサイトで質問させていただきました。
otn

2020/10/11 14:47

content = image_data.read() と、イメージファイルから読み込んでいるようなので、data=contentでは? 全体見てないので想像ですが。 理解できない物は調べましょう。
Kokku

2020/10/11 14:48

contentを指定しました。が IndexError: list index out of rangeがまたエラーになってしまいました。何度も初歩的な質問をして申し訳ありません。
otn

2020/10/11 14:53

どこの行でですか? プログラムの先頭から、ちゃんと読んでみましょう。分からないところは分かるまで調べる。
Kokku

2020/10/11 14:55

result = の箇所がindexerrorになってしまいました。
otn

2020/10/11 15:05

response.json()が期待通りでないのでしょう。 print(response.text) して確認しましょう。
Kokku

2020/10/11 15:16 編集

空のリストが返されたり、[{"faceId":"b782cebe-e4f8-4ab7-ac1d-cddde84573cf","faceRectangle":{"top":282,"left":287,"width":192,"height":192},"faceAttributes":{"smile":0.0,"headPose":{"pitch":-1.5,"roll":-5.1,"yaw":0.5},"gender":"male","age":20.0,"facialHair":{"moustache":0.1,"beard":0.1,"sideburns":0.1},"glasses":"ReadingGlasses","emotion":{"anger":0.0,"contempt":0.0,"disgust":0.0,"fear":0.0,"happiness":0.0,"neutral":0.538,"sadness":0.0,"surprise":0.462},"blur":{"blurLevel":"low","value":0.0},"exposure":{"exposureLevel":"goodExposure","value":0.5},"noise":{"noiseLevel":"medium","value":0.32},"makeup":{"eyeMakeup":false,"lipMakeup":false},"accessories":[{"type":"glasses","confidence":1.0}],"occlusion":{"foreheadOccluded":false,"eyeOccluded":false,"mouthOccluded":false},"hair":{"bald":0.25,"invisible":false,"hairColor":[{"color":"black","confidence":0.96},{"color":"brown","confidence":0.57},{"color":"other","confidence":0.51},{"color":"gray","confidence":0.5},{"color":"blond","confidence":0.31},{"color":"red","confidence":0.07},{"color":"white","confidence":0.0}]}}}] このように出力されたりする2パターンあります
otn

2020/10/11 15:27

空だとanalysis[0]がエラーですね。
Kokku

2020/10/11 15:33

今回ですとグラフの更新が13回目の時にIndexErrorが起こったのですがこれは取得した画像によって変わってくるということでしょうか。また、このエラーの回避方法などはありますでしょうか。。
otn

2020/10/11 22:56

> 今回ですとグラフの更新が13回目の時にIndexErrorが起こったのですがこれは取得した画像によって変わってくるということでしょうか。 そんなこと知りませんよ。 > また、このエラーの回避方法などはありますでしょうか。。 回避だけで良いなら、空なら処理をやめれば?
otn

2020/10/11 22:58

いずれにせよ、何をしているプログラムか理解せずに動かすのは無理なので、理解しましょう。
Kokku

2020/10/12 09:50 編集

空の時にエラー処理をするのではなく五回で終了させるという風に変えました。 若干の修正点はまだあるもののとりあえず動くようになりました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問