从服务器端获取人脸数据,在本地检测特征,并将特征发送给服务器
目录
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…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
