问题描述
我正在尝试创建一个服务器来处理与多个客户端的通信。 此应用通过cv2库运行人脸检测,如果检测到人脸,它将以字节数组的形式将图像发送给所有活动(连接)的客户端。 我在这里有两个infitite(而True)循环-一个用于在主“线程”上进行人脸检测,另一个用于在线程库中的Thread上运行,我的服务器套接字正在接受所有新客户端。 按按钮退出应用程序时出现问题,出现以下错误:
[ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-cff9bdsm\opencv\modules\videoio\src\cap_msmf.cpp (435) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
Successfully closed server application
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Users\Slavujevic\AppData\Local\Programs\Python\Python38-32\lib\threading.py",line 932,in _bootstrap_inner
self.run()
File "C:\Users\Slavujevic\AppData\Local\Programs\Python\Python38-32\lib\threading.py",line 870,in run
self._target(*self._args,**self._kwargs)
File ".\Server.py",line 51,in clientReceivement
client,address = serversock.accept()
File "C:\Users\Slavujevic\AppData\Local\Programs\Python\Python38-32\lib\socket.py",line 292,in accept
fd,addr = self._accept()
OSError: [WinError 10038] An operation was attempted on something that is not a socket
这是我的代码:
#face detection dependencies
import cv2
import numpy as np
#TCP/IP socket communication dependencies
import socket
from threading import Thread
import threading
import time
#face detection classifier
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#WebCam handler
cap = cv2.VideoCapture(0)
#socket server's IP address & port
port = 21000
host = socket.gethostname() # Get local machine name
#socket initialisation
clients = set()
clients_lock = threading.Lock()
global serversock
serversock = socket.socket()
serversock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
serversock.bind(('',port))
serversock.listen(3)
th = []
def listener(client,address):
global img
print ("\nAccepted connection from: ",address,'\n')
with clients_lock:
clients.add(client)
try:
while True:
data = client.recv(1024)
if int(data) == 0:
msg = "HI :)"
print('\nSENDING: ',str(msg),'\n')
#char = str(int(catch))
client.send(bytes(msg,encoding='utf8'))
except ValueError:
print("\nClient Disconnected\n")
def clientReceivement():
print ("\nWaiting for new clients...\n")
while True:
client,address = serversock.accept()
th.append(Thread(target=listener,args = (client,address)).start())
th.append(Thread(target=clientReceivement).start())
while True:
global img
ret,img = cap.read()
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.3,5)
for(x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255),2)
roi_gray = gray[y:y+h,x:x+w]
roi_color = img[y:y+h,x:x+w]
cv2.imshow('img',img)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
serversock.close()
print("\nSuccessfully closed server application\n")
exit()
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)