faceAPIで取得した数値をソケット通信を使ってリアルタイムで送信したい
pythonと使用してWEBカメラの映像を取得し、映像をFaceAPIを使って表情を解析した後、割り出した感情の数値をソケット通信を使って同一ネットワーク下の別のパソコンに送信したいです。
発生している問題・エラーメッセージ
タイミングが合えば一回は数値が送信されるのですが、それ以降以降全く画像習得さえできずウィンドウに応答なしと表示されます。
強制終了すると以下のエラー文が出ます。
ConnectionRefusedError: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。
該当のソースコード
送信側
test1
1import cv2 2import os 3import datetime 4import time 5import http.client, urllib.request, urllib.parse, urllib.error, base64 6import json 7import numpy as np 8import json 9import socket 10import pickle 11 12 13headers = { 14# 'Content-Type': 'application/json', 15 'Content-Type': 'application/octet-stream', 16 'Ocp-Apim-Subscription-Key': '', 17} 18params = urllib.parse.urlencode({ 19 'returnFaceId': 'False', 20# 'returnFaceLandmarks': 'true', 21 'returnFaceAttributes': 'emotion' 22}) 23 24cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) 25 26os.makedirs("Desktop/data/temp", exist_ok=True) 27 28 29 30n = 0 31i = 0 32while True: 33 34 ret, frame = cap.read() 35 frame = cv2.resize(frame, dsize=(960, 540)) 36 cv2.imshow('frame', frame) 37 if cv2.waitKey(1) & 0xFF == ord('q'): 38 break 39 40 41 time.sleep(2) 42 i = i + 1 43 write_file_name = "Desktop/data/temp/"+str(i) + ".jpg" 44 cv2.imwrite(write_file_name, frame) 45 46 image_file = open(write_file_name,'rb') 47 body = image_file.read() 48 image_file.close() 49 50 51 try: 52 conn = http.client.HTTPSConnection('westus2.api.cognitive.microsoft.com') 53 conn.request("POST", "/face/v1.0/detect?%s" % params, body, headers) 54 response = conn.getresponse() 55 data = json.loads(response.read()) 56 jdata =json.dumps(data, indent=4) 57 dec = json.loads(jdata) 58 if len(dec)>0: 59 dec0 = dec[0] 60 decatt = dec0['faceAttributes'] 61 print(decatt['emotion']) 62 d = decatt['emotion'] 63 laugh = d['happiness'] 64 print(laugh) 65 else: 66 print(dec) 67 conn.close() 68 69 70 except Exception as e: 71 print("[Errno {0}] {1}".format(e.errno, e.strerror)) 72 print(dec[0]) 73 74 os.remove(write_file_name) 75 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 76 s.bind(('', 2434)) 77 s.listen() 78 while True: 79 clientsocket, address = s.accept() 80 print(f"Connection from {address} has been established!") 81 msg = pickle.dumps() 82 clientsocket.send(msg) 83 print('OK') 84 clientsocket.close(d) 85 86cv2.destroyWindow('frame') 87
受信側
cliant1
1 2import socket 3import pickle 4import time 5import winsound 6 7 8while True: 9 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 10 s.connect(('172.20.10.2', 2434)) 11 full_msg = b'' 12 while True: 13 msg = s.recv(2048) 14 if len(msg) <= 0: 15 break 16 full_msg += msg 17 d = pickle.loads(full_msg) 18 print(d) 19 laugh = d["happiness"] 20 if laugh >= 0: 21 print("OK") 22
試したこと
FaceAPIを使ってウェブカメラで取得した映像から感情の数値を割り出すこと、ソケット通信で辞書型のデータを同一ネットワーク下の別のパソコンに送信することはできました。
###利用環境
Windous10
Python 3.7.6
お手数をおかけしますが、回答お待ちしております。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/05 23:40