从服务器端获取人脸数据,在本地检测特征,并将特征发送给服务器
目录
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…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
