Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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