リンク内容
このサイトを参考にして自分のパソコン環境でも動くようにしたいと思い少しずつ改変していっいるのですが、
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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/11 11:55