人脸识别与数据发送(多进程)

1.进程detect_process:

        读取视频或者摄像头,使用yolov5进行检测人体位置,然后根据人体位置进行检测人脸,并识别,并将检测到的人脸信息放入 多进程队列 result_queue 中。

  放入 多进程队列 result_queue  数据格式

send_data = {
            'image': base64.b64encode(img_bytes).decode('utf-8'),
             'name': 'cuijiayu',
             'time': str(datetime.datetime.now()),
             'address': '置地大厦23层'}
def detect(mycap, f, total_num, yolo5_config, face_args, face_app, Model, 
           class_names, deepsort_tracker, Obj_Counter, result_queue):
    fps_time = time.time()
    while mycap.ifcontinue():
        f += 1
        if len(yolo5_config.input) <= 1:
            # 从摄像头读入
            ret, img, name = mycap.read()
        else:
            # 从本地视频读入
            ret, img = mycap.read()
        if ret:
            # 开始检测图片中的人
            """
                isCountPresent:
                    True:表示只显示当前人数
                    False:表示显示总人数和当前人数
            """
            # Counting_Processing 函数封装了 yolov5检测,deepsort跟踪计数函数
            result_img = Counting_Processing(img, yolo5_config, face_args, face_app, Model, class_names, deepsort_tracker, Obj_Counter,  result_queue,  isCountPresent = False)
            result_img = imutils.resize(result_img, height=600)
            result_img = cv2.putText(result_img, '%d, FPS: %f' % (f, 1.0 / (time.time() - fps_time)),
                                (50, 90), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)
            fps_time = time.time()
            cv2.imshow('video', result_img)
            cv2.waitKey(1)
            if cv2.getWindowProperty('video', cv2.WND_PROP_AUTOSIZE) < 1:
                # 点x退出
                break

        sys.stdout.write("\r=> processing at %d; total: %d\n" % (mycap.get_index(), total_num))
        sys.stdout.flush()

    print("\n=> 总检测人数:", len(Global.total_person))
    cv2.destroyAllWindows()
    mycap.release()
    print("=> 任务结束于: {}".format(datetime.now().strftime('%H:%M:%S')))

2.进程send_process:

       不断的从 多进程队列 result_queue 读取检测数据,并添加信息头  message = detect_data,然后发送给服务器。

发送数据格式

send_data = {
            "message": 'detect_data',
            'image': base64.b64encode(img_bytes).decode('utf-8'),
             'name': 'cuijiayu',
             'time': str(datetime.datetime.now()),
             'address': '置地大厦23层'}
def send_face_data(client_socket, result_queue):
    """
     不断的从 队列result_queue 读取数据并且发送, 模型检测
    Args:
        client_socket: 客户端连接器
        result_queue:  多进程队列
        发送数据:图片,姓名,时间,地点
    """
    # 发送消息给服务器, 告知将要发送 检测信息
    while True:
        while not result_queue.empty():
            face_detect_data = result_queue.get()
            face_detect_data['message'] = 'detect_data'
            json_data = json.dumps(face_detect_data)
            # 将JSON字符串编码为字节
            send_receive(client_socket, json_data)

你可能感兴趣的:(人工智能,python)