def divide_image(img_path, coords, img_name): # 切分图像并进行保存 img = Image.open(img_path) detected_img = divide_detect_img.get_targets(img, coords) img_paths = [] for i in range(len(detected_img)): path = 'result/' + img_name + '_' + str(i) + '.jpg' # path = 'result/temp_'+str(i)+'.jpg' detected_img[i].save(path) img_paths.append(path) os.remove(img_path) return img_paths
def receive_img(): tcp_client1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 与终端连接 接收 收货人照片 print('等待连接终端') tcp_client1.bind(('172.19.5.75', 2000)) # 边自己的ip #172.19.5.18 tcp_client1.listen(128) sock_client, client_addr = tcp_client1.accept( ) # 返回一对(conn socket对象,可以在该连接上发送和接受数据,address 另一端地址) print('连接成功') print('终端地址', client_addr) # 接收图片大小 img_size = sock_client.recv(1024 * 1024) # 从socket接收数据: bufsize 一次性接收最大数据量 print('图片size:', int(img_size)) sock_client.send('edge_ok'.encode()) # 将数据发送到socket count = 0 img_path = 'test_img.jpg' while True: data = sock_client.recv(1024 * 1024 * 32) count += len(data) print(count) # 第一次新建model文件 , ab 接收二进制文件 model_txt = open(img_path, 'ab') model_txt.write(data) model_txt.close() print('已传输', count * 100 / int(img_size), '%') if count == int(img_size): break print('图片路径:', img_path) sock_client.send('edge_recv'.encode()) # 将数据发送到socket # 接收目标检测坐标信息并进行切分 data = sock_client.recv(1024 * 1024) coords = pickle.loads(data) print(coords) # 保存识别后的图像 img = Image.open(img_path) detected_img = divide_detect_img.get_targets(img, coords) img_paths = [] for i in range(len(detected_img)): path = 'result/temp_' + str(i) + '.jpg' detected_img[i].save(path) img_paths.append(path) os.remove(img_path) return img_paths
def receive_img(): """ 边-端 接收端的图片 :return: 经过目标检测后识别出的所有图片的路径,列表 """ # 与终端进行连接 tcp_client1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print('等待连接终端') tcp_client1.bind(('172.19.5.75', 2000)) # 边自己的ip #172.19.5.18 tcp_client1.listen(128) sock_client, client_addr = tcp_client1.accept() # 返回一对(conn socket对象,可以在该连接上发送和接受数据,address 另一端地址) print('连接成功') print('终端地址', client_addr) # 接收从终端发送来的图片 img_size = sock_client.recv(1024*1024) # 从socket接收数据: bufsize 一次性接收最大数据量 print('图片size:', int(img_size)) sock_client.send('edge_ok'.encode()) # 将数据发送到socket count = 0 #已获取的数据量 # TODO 可修改,当前是把传过来的图片保存到img_path,多图片会覆盖 img_path = 'test_img.jpg' while True: data = sock_client.recv(1024 * 1024 * 32) count += len(data) print(count) # 打开img_path,写入接收图片数据,ab 接收二进制文件 receive_img_data = open(img_path, 'ab') receive_img_data.write(data) receive_img_data.close() print('已传输', count * 100 / int(img_size), '%') if count == int(img_size): break print('图片路径:', img_path) # 图片传输完毕,发送确认信息,可接受坐标信息 sock_client.send('edge_recv'.encode()) # 将数e据发送到sockt # 接收目标检测坐标信息 data = sock_client.recv(1024*1024) coords = pickle.loads(data) print(coords) # 坐标信息接收完毕,可接收图片名称 sock_client.send('coords_recv'.encode()) # 接收图片名称 data_img_name = sock_client.recv(1024 * 1024) # img_name = pickle.loads(data_img_name) img_name = data_img_name.decode() # print("img_name = %s" % img_name) img_name = img_name[:-4] print("new_img_name = %s" % img_name) # 切分图像并进行保存 img = Image.open(img_path) detected_img = divide_detect_img.get_targets(img, coords) img_paths = [] for i in range(len(detected_img)): path = 'result/'+img_name+'_'+str(i)+'.jpg' # path = 'result/temp_'+str(i)+'.jpg' detected_img[i].save(path) img_paths.append(path) # TODO 可修改 切分完毕后删除图像,以进行下一次图像传输 os.remove(img_path) return img_paths
def receive_img(): """ 边-端 接收端的图片 :return: 经过目标检测后识别出的所有图片的路径,列表 """ # 与终端进行连接 tcp_client1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print('等待连接终端') tcp_client1.bind((EDGE_ID, EDGE_PORT)) # 边自己的ip #172.19.5.18 tcp_client1.listen(128) sock_client, client_addr = tcp_client1.accept( ) # 返回一对(conn socket对象,可以在该连接上发送和接受数据,address 另一端地址) print('连接成功') print('终端地址', client_addr) # 接收从终端发送来的图片 img_size = sock_client.recv(1024 * 1024) # 从socket接收数据: bufsize 一次性接收最大数据量 print('图片size:', int(img_size)) sock_client.send('edge_ok'.encode()) # 将数据发送到socket count = 0 # 已获取的数据量 # TODO 可修改,当前是把传过来的图片保存到img_path,多图片会覆盖 img_path = 'test_img.jpg' while True: data = sock_client.recv(1024 * 1024 * 32) count += len(data) print(count) # 打开img_path,写入接收图片数据,ab 接收二进制文件 receive_img_data = open(img_path, 'ab') receive_img_data.write(data) receive_img_data.close() print('已传输', count * 100 / int(img_size), '%') if count == int(img_size): break print('图片路径:', img_path) # 图片传输完毕,发送确认信息,可接受坐标信息 sock_client.send('edge_recv'.encode()) # 将数据发送到socket # 接收目标检测坐标信息 data = sock_client.recv(1024 * 1024) coords = pickle.loads(data) print(coords) # 坐标信息接收完毕,可接收图片名称 sock_client.send('coords_recv'.encode()) # 接收图片名称 data_img_name = sock_client.recv(1024 * 1024) # img_name = pickle.loads(data_img_name) img_name = data_img_name.decode() # print("img_name = %s" % img_name) img_name = img_name[:-4] print("new_img_name = %s" % img_name) # return img_path, coords, img_name # 切分图像并进行保存 img = Image.open(img_path) detected_img = divide_detect_img.get_targets(img, coords) img_paths = [] for i in range(len(detected_img)): path = 'result/' + img_name + '_' + str(i) + '.jpg' # path = 'result/temp_'+str(i)+'.jpg' detected_img[i].save(path) img_paths.append(path) os.remove(img_path) print('成功接受检测后的图像,开始人脸识别') for img_path in img_paths: print('当前识别的图片路径为:%s' % img_path) try: # 检测从端发送并切割的图像,然后提取其特征 unknown_image = face_recognition.load_image_file(img_path) unknown_face_encoding = face_recognition.face_encodings( unknown_image)[0] # 匹配从云获取的图像特征和当前切割后的图像特征是否是同一人 results = face_recognition.compare_faces(known_faces, unknown_face_encoding) print(results) except IndexError: print('没有识别到人脸!') # 图片传输完毕,发送确认信息,可接受坐标信息 sock_client.send('recognition_recv'.encode()) # 将数据发送到socket