当前位置: 首页 > news >正文

从服务器端获取人脸数据,在本地检测特征,并将特征发送给服务器

目录

1.定义函数get_database_process:        

2.定义函数features_construct:

3.定义函数send_features_data:

4. 定义函数database_features_construct:

5. main 函数


1.定义函数get_database_process:        

        首先,发送一条消息,告知服务器端要进行人脸数据库特征构建

message_to_send = {'message': 'get_database_face', 'data': 0}

        然后就等待接收 服务端发送的数据,并将数据存储在多进程队列result_queue 中,等待检测函数获取。

        接收数据格式:

{”name“: 姓名, "image": 图片}

def receive_send(client_socket, result_queue):"""接收服务器端 receive_data信息,若成功接收则发送success 否则发送 failure并将信息存储在result_queue 中Args:client_socket:"""receive_data = client_socket.recv(4096000)receive_data = receive_data.decode('utf-8')if len(receive_data):feedback_data = 'success'client_socket.sendall(feedback_data.encode('utf-8'))result_queue.put(receive_data)else:feedback_data = 'failure'client_socket.sendall(feedback_data.encode('utf-8'))
def get_database(client_socket, result_queue):"""从服务器端接收数据(姓名,图片)  {”name“: 姓名, "image": 图片}放在result_queue队列中,然后让本地模型检测特征 用于人脸数据库的构建Args:client_socket:result_queue:"""message_to_send = {'message': 'get_database_face', 'data': 0}send_receive(client_socket, message_to_send)while True:receive_send(client_socket, result_queue)

2.定义函数features_construct:

        从 result_queue 队列中取出,从服务器获取的人脸数据库信息(姓名,图片) {”name“: 姓名, "image": 图片}

        然后 将数据 进行 字节序列解码为字符串的操作,

        再将 JSON 格式的字符串转换为 Python 对象 词典,

        然后提取,姓名,人脸图片

        然后将经过Base64编码的图像数据解码,并使用OpenCV库将解码后的字节数据转换为NumPy数组,以便在Python中进行图像处理和分析

        使用app.get 检测人脸特征 并存放在 result_queue1 以待发送

        存放在 result_queue1 队列的 数据格式为词典形式

       {”name“: 姓名, "feature": 人脸特征}

        姓名:str

        人脸特征:[ 1,2,3..............]

def features_construct(app, result_queue, result_queue1):"""从 result_queue 队列中取出,从服务器获取的人脸数据库信息(姓名,图片)  {”name“: 姓名, "image": 图片}使用app.get 检测人脸特征 并存放如result_queue1 以待发送发送数据格式  {”name“: 姓名, "feature": 人脸特征}Args:app:result_queue:result_queue1:"""while True:while not result_queue.empty():face_data = result_queue.get()face_data = json.loads(face_data.decode('utf-8'))name = face_data['name']image = face_data['image']# 解码图像img_bytes = base64.b64decode(image)# 将字节数据转换为NumPy数组image = cv2.imdecode(np.frombuffer(img_bytes, np.uint8), cv2.IMREAD_COLOR)features = []data_dict = {}for i in range(image):img = image[i]face_all = app.get(img)for face_single in face_all:  # 遍历每个人脸features.append(face_single.normed_embedding)  # 将人脸的嵌入特征加入features列表feature = mean_feature_fusion(features)data_dict['name'] = namedata_dict['feature'] = featureresult_queue1.put(data_dict)

3.定义函数send_features_data:

       从多进程队列result_queue1 中 读取数据 feature_data,

        添加消息头message:feature

        数据格式:

{'message': 'feature', "name": '姓名', 'feature': "人脸特征"}

        将词典数据 转换为JSON格式的字符串

        然后对字符串进行UTF-8编码 进行传输

def send_features_data(client_socket, result_queue1):"""进行数据发送,将多进程队列result_queue1 中 数据读取并发送回服务器端  :人脸数据可特征构建人脸特征数据(姓名,特征数据)Args:client_socket:result_queue: 多进程队列"""while True:while not result_queue1.empty():feature_data = result_queue1.get()feature_data['message'] = 'feature'json_data = json.dumps(feature_data)send_receive(client_socket, json_data)
def send_receive(client_socket, data):"""发送数据 data,并接收服务器端  feedback信息Args:client_socket:data: 要发送的数据"""client_socket.sendall(data.encode('utf-8'))feedback_data = client_socket.recv(1024)feedback_data = feedback_data.decode('utf-8')print("已发送数据,对方已接收,反馈信息为:", feedback_data)

4. 定义函数database_features_construct:

        使用多进程 将上述函数串联起来

def database_features_construct(app, result_queue, result_queue1):# 服务器地址和端口server_address = ('192.168.2.4', 12345)# 创建一个TCP socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器client_socket.connect(server_address)print(f"Connected to server at {server_address}")# 发送消息给服务器message_to_send = "Hello, server! This is the client."client_socket.send(message_to_send.encode('utf-8'))# 接收服务器消息data = client_socket.recv(1024)print(f"Received data from server: {data.decode('utf-8')}")get_database_process = multiprocessing.Process(target=get_database, args=(client_socket, result_queue))features_construct_process = multiprocessing.Process(target=features_construct, args=(app, result_queue, result_queue1))send_features_data_process = multiprocessing.Process(target=send_features_data, args=(client_socket, result_queue1))# 启动进程get_database_process.start()features_construct_process.start()send_features_data_process.start()# 等待两个进程结束get_database_process.join()features_construct_process.join()send_features_data_process.join()# 关闭连接client_socket.close()

5. main 函数

if __name__ == "__main__":parser2 = argparse.ArgumentParser(description='insightface app test')  # 创建参数解析器,设置描述为'insightface app test'# 通用设置parser2.add_argument('--ctx', default=0, type=int,help='ctx id, <0 means using cpu')  # 添加参数'--ctx',默认值为0,类型为整数,帮助信息为'ctx id, <0 means using cpu'parser2.add_argument('--det-size', default=640, type=int,help='detection size')  # 添加参数'--det-size',默认值为640,类型为整数,帮助信息为'detection size'face_args = parser2.parse_args()  # 解析参数face_app = FaceAnalysis()  # 创建FaceAnalysis实例face_app.prepare(ctx_id=face_args.ctx, det_size=(face_args.det_size, face_args.det_size))  # 准备分析器,设置ctx_id和det_sizeresult_queue = multiprocessing.Queue()  # 多进程队列result_queue1 = multiprocessing.Queue()database_features_construct(face_app, result_queue, result_queue1)

相关文章:

从服务器端获取人脸数据,在本地检测特征,并将特征发送给服务器

目录 1.定义函数get_database_process&#xff1a; 2.定义函数features_construct&#xff1a; 3.定义函数send_features_data&#xff1a; 4. 定义函数database_features_construct&#xff1a; 5. main 函数 1.定义函数get_database_process&#xff1a; …...

ARDUINO UNO 12颗LED超酷流水灯效果

效果代码&#xff1a; #define t 30 #define t1 20 #define t2 100 #define t3 50 void setup() { // set up pins 2 to 13 as outputs for (int i 2; i < 13; i) { pinMode(i, OUTPUT); } } /Effect 1 void loop() { effect_1(); effect_1(); effect_…...

Linux下查看pytorch运行时真正调用的cuda版本

一般情况我们会安装使用多个cuda版本。而且pytorch在安装时也会自动安装一个对应的版本。 正确查看方式&#xff1a; 想要查看 Pytorch 实际使用的运行时的 cuda 目录&#xff0c;可以直接输出 cpp_extension.py 中的 CUDA_HOME 变量。 import torch import torch.utils imp…...

​分享mfc140u.dll丢失的解决方法,针对原因解决mfc140u.dll丢失的问题

作为电脑小白&#xff0c;如果电脑中出现了mfc140u.dll丢失的问题&#xff0c;肯定会比较的慌乱。但是出现mfc140u.dll丢失的问题&#xff0c;其实也有很简单的办法&#xff0c;所以大家不用慌张&#xff0c;接下来就教大家解决办法&#xff0c;能够有效的解决mfc140u.dll丢失的…...

torch_cluster、torch_scatter、torch_sparse三个包的安装

涉及到下面几个包安装的时候经常会出现问题&#xff0c;这里我使用先下载然后再安装的办法&#xff1a; pip install torch_cluster pip install torch_scatter pip install torch_sparse 1、选择你对应的torch版本&#xff1a;https://data.pyg.org/whl/ 2、点进去然后&…...

软件安利——火绒安全

近年来&#xff0c;以优化、驱动、管理为目标所打造的软件屡见不鲜&#xff0c;大同小异的电脑管家相继走入了公众的视野。然而&#xff0c;在这日益急功近利的社会氛围驱动之下&#xff0c;真正坚持初心、优先考虑用户体验的电脑管家逐渐湮没在了浪潮之中。无论是鲁大师&#…...

Induced AI:一个专门为自动化任务而设计的AI原生浏览器RPA平台

​内容来源&#xff1a;xiaohuggg Induced AI&#xff1a;一个专门为自动化任务而设计的AI原生浏览器RPA平台 刚刚获得OpenAI CEOsama的个人投资&#xff01; 它能够模拟人类浏览网页的行为&#xff0c;自动化地浏览网页&#xff0c;搜集关键信息&#xff0c;并对这些信息进行…...

vue3中使用reactive定义的变量响应式丢失问题(大坑!!!)

前言 在Vue 3中&#xff0c;可以使用reactive函数将普通JavaScript对象转换为响应式对象&#xff0c;这样当对象的属性发生变化时&#xff0c;就会自动更新相应的UI。 但是请注意以下情况可能会丢失数据的响应式&#xff1a; 响应式丢失的情况&#xff1a; 1、对使用reactiv…...

Windows Server 2012 R2系统服务器远程桌面服务多用户登录配置分享

Windows Server 2012系统在没有安装远程多界面的情况下&#xff0c;最多只能同时运行2个远程桌面&#xff0c;如果是有多个技术员、合伙人同时操作或是像游戏开发需要用到多界面&#xff0c;但是没有安装就很不方便&#xff0c;今天飞飞来和你们分享Windows server 2012R2系统远…...

mysql之搭建MHA架构实现高可用

1、定义 全称是masterhigh avaliabulity。基于主库的高可用环境下可以实现主从复制及故障切换&#xff08;基于主从复制才能故障切换&#xff09; MHA最少要求一主两从&#xff0c;半同步复制模式 2、作用 解决mysql的单点故障问题。一旦主库崩溃&#xff0c;MHA可以在0-30…...

Databend 与海外某电信签约:共创海外电信数据仓库新纪元

为什么选择 Databend 海外某电信面临的主要挑战是随着业务量的增加&#xff0c;传统的 Clickhouse Hive 方案在数据存储和处理上开始显露不足。 原来的大数据分析采用的 Clickhouse Hive 方案进行离线的实时报表。但随着业务量的上升后&#xff0c;Hive的数据存储压力变大&…...

scala解析命令行参数

如何用scala解析命令行参数&#xff1a; 首先&#xff0c;需要在项目中添加Apache Commons CLI库的依赖。可以在build.sbt文件中添加如下行&#xff1a; libraryDependencies "commons-cli" % "commons-cli" % "1.4" import org.apache.comm…...

盘点60个Python各行各业管理系统源码Python爱好者不容错过

盘点60个Python各行各业管理系统源码Python爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 源码下载链接&#xff1a;https://pan.baidu.com/s/1VdAFp4P0mtWmsA158oC-aA?pwd8888 提取码&#xff1a;8888 项目名…...

SpringSecurity6 | 自动配置(下)

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…...

6、传统CV之均值滤波

在前5节,从最基础的像素开始了介绍,并且着重介绍了像素局部性、RGB图片和YUV图片以及通道的概念。 其实写那么多,很多细节知识也不用都学会,只需要知道计算机在处理图片时,看到的都是一堆像素,而这一堆像素,都是以数据点的形式存放在计算机中的。 为了更好的展示图像和…...

快速搭建本地的chatgpt

快速搭建本地的chatgpt 参考&#xff1a;一篇文章教你使用Docker本地化部署Chatgpt&#xff08;非api&#xff0c;速度非常快&#xff01;&#xff01;&#xff01;&#xff09;及裸连GPT的方式&#xff08;告别镜像GPT&#xff09;-CSDN博客 前提是linux下 已安装docker 命…...

分布式下多节点WebSocket消息收发

1、使用场景 2、疑问 第一次发送请求后&#xff0c;通过N1&#xff0c;W2&#xff0c;到达service2&#xff0c;建立websocket连接。 1、接下来发送的消息&#xff0c;通过Ngixn后和网关gateway后还能落在service2上面吗&#xff1f; 如果不能落在service2上&#xff0c;需要怎…...

LeetCode算法题解(动态规划)|LeetCode509. 斐波那契数、LeetCode70. 爬楼梯、LeetCode746. 使用最小花费爬楼梯

一、LeetCode509. 斐波那契数 题目链接&#xff1a;509. 斐波那契数 题目描述&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a…...

【图像处理】:Otsu算法最大类间方差法(大津算法:附源码)

这里写自定义目录标题 数学原理算法评价参考链接 数学原理 以灰度图像为例&#xff0c;对于图像MN大小的矩阵&#xff0c;即图像中的像素&#xff0c;每一个值即为像素值&#xff0c;其中灰度图像像素值在(0~255)之间。 主要实现前景(即目标)和背景的分割&#xff1a; 主要公式…...

【uni-app】设置背景颜色相关

1. 全局页面背景色设置&#xff1a; 在App.vue的style样式表中设置 <style> page {background-color: #F0AD4E; } </style> 2. 顶部导航栏背景色设置&#xff1a; 在pages.json页面路由中&#xff0c;globalStyle设置 "globalStyle": {"navi…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...