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

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

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

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

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Python

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

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Q&A

解決済

2回答

1360閲覧

faceAPIで取得した数値をソケット通信を使ってリアルタイムで送信したい

tani0729

総合スコア1

OpenCV

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

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Python

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

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

0グッド

0クリップ

投稿2021/10/05 11:13

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

お手数をおかけしますが、回答お待ちしております。

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

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

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

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

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

guest

回答2

0

自己解決

自分自身で試行錯誤して、サーバーに接続→画像処理→送信の順になるようにしたらできました。
備忘録のために送信側のコードを書いておきます。

cliant

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 12HOST='' 13#接続先ホストのポート番号 14PORT = 50001 15#ソケットから受信するデータのバッファサイズ 16BUFSIZE = 4096 17 18#ソケットの作成 19sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 20try: 21 #サーバへの接続 22 sock.connect((HOST,PORT)) 23finally: 24 #接続のクローズ 25 pass 26 27headers = { 28# 'Content-Type': 'application/json', 29 'Content-Type': 'application/octet-stream', 30 'Ocp-Apim-Subscription-Key': '', 31} 32params = urllib.parse.urlencode({ 33 'returnFaceId': 'False', 34# 'returnFaceLandmarks': 'true', 35 'returnFaceAttributes': 'emotion' 36}) 37 38cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) 39 40os.makedirs("Desktop/data/temp", exist_ok=True) 41 42 43 44n = 0 45i = 0 46while True: 47 ret, frame = cap.read() 48 frame = cv2.resize(frame, dsize=(960, 540)) 49 cv2.imshow('frame', frame) 50 if cv2.waitKey(1) & 0xFF == ord('q'): 51 break 52 53 54 time.sleep(0.1) 55 i = i + 1 56 write_file_name = "Desktop/data/temp/"+str(i) + ".jpg" 57 cv2.imwrite(write_file_name, frame) 58 59 image_file = open(write_file_name,'rb') 60 body = image_file.read() 61 image_file.close() 62 63 64 try: 65 conn = http.client.HTTPSConnection('westus2.api.cognitive.microsoft.com') 66 conn.request("POST", "/face/v1.0/detect?%s" % params, body, headers) 67 response = conn.getresponse() 68 data = json.loads(response.read()) 69 jdata =json.dumps(data, indent=4) 70 dec = json.loads(jdata) 71 if len(dec)>0: 72 dec0 = dec[0] 73 decatt = dec0['faceAttributes'] 74 print(decatt['emotion']) 75 d = decatt['emotion'] 76 laugh = str(d['happiness']) 77 print(laugh) 78 79 else: 80 print(dec) 81 conn.close() 82 83 84 except Exception as e: 85 print("[Errno {0}] {1}".format(e.errno, e.strerror)) 86 print(dec[0]) 87 88 os.remove(write_file_name) 89 90 try: 91 #サーバへの接続 92 mesg = laugh 93 #この行を加えた 94 #バイトコード化してデータ送信 95 sock.send(mesg.encode('utf-8')) 96 #データを受信 97 receive_msg = sock.recv(BUFSIZE) 98 finally: 99 pass 100 101 102 103cv2.destroyWindow('frame') 104

投稿2021/10/05 23:40

tani0729

総合スコア1

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

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

tani0729

2021/10/05 23:40

回答していただいた方ありがとうございました。
guest

0

ソケットをcloseしたらそりゃ切断されますよ

投稿2021/10/05 11:18

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問