从服务器端获取人脸数据,在本地检测特征,并将特征发送给服务器
目录
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: 2.定义函数features_construct: 3.定义函数send_features_data: 4. 定义函数database_features_construct: 5. main 函数 1.定义函数get_database_process: …...
ARDUINO UNO 12颗LED超酷流水灯效果
效果代码: #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在安装时也会自动安装一个对应的版本。 正确查看方式: 想要查看 Pytorch 实际使用的运行时的 cuda 目录,可以直接输出 cpp_extension.py 中的 CUDA_HOME 变量。 import torch import torch.utils imp…...
分享mfc140u.dll丢失的解决方法,针对原因解决mfc140u.dll丢失的问题
作为电脑小白,如果电脑中出现了mfc140u.dll丢失的问题,肯定会比较的慌乱。但是出现mfc140u.dll丢失的问题,其实也有很简单的办法,所以大家不用慌张,接下来就教大家解决办法,能够有效的解决mfc140u.dll丢失的…...
torch_cluster、torch_scatter、torch_sparse三个包的安装
涉及到下面几个包安装的时候经常会出现问题,这里我使用先下载然后再安装的办法: pip install torch_cluster pip install torch_scatter pip install torch_sparse 1、选择你对应的torch版本:https://data.pyg.org/whl/ 2、点进去然后&…...
软件安利——火绒安全
近年来,以优化、驱动、管理为目标所打造的软件屡见不鲜,大同小异的电脑管家相继走入了公众的视野。然而,在这日益急功近利的社会氛围驱动之下,真正坚持初心、优先考虑用户体验的电脑管家逐渐湮没在了浪潮之中。无论是鲁大师&#…...
Induced AI:一个专门为自动化任务而设计的AI原生浏览器RPA平台
内容来源:xiaohuggg Induced AI:一个专门为自动化任务而设计的AI原生浏览器RPA平台 刚刚获得OpenAI CEOsama的个人投资! 它能够模拟人类浏览网页的行为,自动化地浏览网页,搜集关键信息,并对这些信息进行…...
vue3中使用reactive定义的变量响应式丢失问题(大坑!!!)
前言 在Vue 3中,可以使用reactive函数将普通JavaScript对象转换为响应式对象,这样当对象的属性发生变化时,就会自动更新相应的UI。 但是请注意以下情况可能会丢失数据的响应式: 响应式丢失的情况: 1、对使用reactiv…...
Windows Server 2012 R2系统服务器远程桌面服务多用户登录配置分享
Windows Server 2012系统在没有安装远程多界面的情况下,最多只能同时运行2个远程桌面,如果是有多个技术员、合伙人同时操作或是像游戏开发需要用到多界面,但是没有安装就很不方便,今天飞飞来和你们分享Windows server 2012R2系统远…...
mysql之搭建MHA架构实现高可用
1、定义 全称是masterhigh avaliabulity。基于主库的高可用环境下可以实现主从复制及故障切换(基于主从复制才能故障切换) MHA最少要求一主两从,半同步复制模式 2、作用 解决mysql的单点故障问题。一旦主库崩溃,MHA可以在0-30…...
Databend 与海外某电信签约:共创海外电信数据仓库新纪元
为什么选择 Databend 海外某电信面临的主要挑战是随着业务量的增加,传统的 Clickhouse Hive 方案在数据存储和处理上开始显露不足。 原来的大数据分析采用的 Clickhouse Hive 方案进行离线的实时报表。但随着业务量的上升后,Hive的数据存储压力变大&…...
scala解析命令行参数
如何用scala解析命令行参数: 首先,需要在项目中添加Apache Commons CLI库的依赖。可以在build.sbt文件中添加如下行: libraryDependencies "commons-cli" % "commons-cli" % "1.4" import org.apache.comm…...
盘点60个Python各行各业管理系统源码Python爱好者不容错过
盘点60个Python各行各业管理系统源码Python爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 源码下载链接:https://pan.baidu.com/s/1VdAFp4P0mtWmsA158oC-aA?pwd8888 提取码:8888 项目名…...
SpringSecurity6 | 自动配置(下)
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏…...
6、传统CV之均值滤波
在前5节,从最基础的像素开始了介绍,并且着重介绍了像素局部性、RGB图片和YUV图片以及通道的概念。 其实写那么多,很多细节知识也不用都学会,只需要知道计算机在处理图片时,看到的都是一堆像素,而这一堆像素,都是以数据点的形式存放在计算机中的。 为了更好的展示图像和…...
快速搭建本地的chatgpt
快速搭建本地的chatgpt 参考:一篇文章教你使用Docker本地化部署Chatgpt(非api,速度非常快!!!)及裸连GPT的方式(告别镜像GPT)-CSDN博客 前提是linux下 已安装docker 命…...
分布式下多节点WebSocket消息收发
1、使用场景 2、疑问 第一次发送请求后,通过N1,W2,到达service2,建立websocket连接。 1、接下来发送的消息,通过Ngixn后和网关gateway后还能落在service2上面吗? 如果不能落在service2上,需要怎…...
LeetCode算法题解(动态规划)|LeetCode509. 斐波那契数、LeetCode70. 爬楼梯、LeetCode746. 使用最小花费爬楼梯
一、LeetCode509. 斐波那契数 题目链接:509. 斐波那契数 题目描述: 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:…...
【图像处理】:Otsu算法最大类间方差法(大津算法:附源码)
这里写自定义目录标题 数学原理算法评价参考链接 数学原理 以灰度图像为例,对于图像MN大小的矩阵,即图像中的像素,每一个值即为像素值,其中灰度图像像素值在(0~255)之间。 主要实现前景(即目标)和背景的分割: 主要公式…...
【uni-app】设置背景颜色相关
1. 全局页面背景色设置: 在App.vue的style样式表中设置 <style> page {background-color: #F0AD4E; } </style> 2. 顶部导航栏背景色设置: 在pages.json页面路由中,globalStyle设置 "globalStyle": {"navi…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
