网站的站点地图设计购物app开发多少钱
2025/12/30 12:01:07 网站建设 项目流程
网站的站点地图设计,购物app开发多少钱,wordpress评论增强,云南网站优化排名最新案例动态#xff0c;请查阅【案例共创】基于开发者空间通过FRS实现考勤系统人脸匹配功能。小伙伴们快来领取华为开发者空间进行实操吧#xff01; 本案例由开发者#xff1a;DS小龙哥提供 1 概述 1.1 背景介绍 人脸识别服务FRS基于人的脸部特征信息#xff0c;利用…最新案例动态请查阅【案例共创】基于开发者空间通过FRS实现考勤系统人脸匹配功能。小伙伴们快来领取华为开发者空间进行实操吧本案例由开发者DS小龙哥提供1 概述1.1 背景介绍人脸识别服务FRS基于人的脸部特征信息利用计算机对人脸图像进行处理、分析和理解用户通过实时访问和调用API获取人脸处理结果帮助用户自动进行人脸的识别、比对以及相似度查询等。 FRS服务提供了开放API接口提供人脸识别能力用户可以直接调用API接口访问华为云人脸识别服务完成人脸识别后返回的结果为JSON格式用户通过API接口与人脸识别服务交互就可以完成项目开发。本案例主要讲述在开发者空间通过API调用华为云人脸识别服务FRS实现考勤系统的人脸匹配功能。通过本案例可以学习到如何在开发者空间使用FRS服务完成人脸库创建向人脸库添加人脸在人脸库里搜索匹配的人脸完成人脸对比等几个主要功能。 只要完成了这几个功能就可以开发成品软件完成很多需要人脸服务的场景行业的项目落地。 比如人脸识别考勤、人脸识别签到、人脸门禁开锁 等等场景。1.2 适用对象企业个人开发者高校学生1.3 案例时间本案例总时长预计90分钟。1.4 案例流程说明登录华为云账号后进入开发者空间领取并配置云主机环境准备在云主机上安装必要的开发工具和依赖库比如Python及其相关库requests等以便调用华为云API获取API凭证在华为云平台上创建并获取Access Key ID和Secret Access Key用于身份验证。部署与优化根据实际应用场景将开发完成的人脸识别解决方案部署到生产环境中并持续优化性能和用户体验。1.5 资源总览本案例预计花费总计0元。资源名称规格单价元时长分钟开发者空间—云主机2vCPUs 4GB Ubuntu 22.04090人脸识别服务FRS按流量计费 月累计调用次数 2000次0902 开发者空间环境准备2.1 配置云主机本案例中需要调用人脸识别服务FRS的接口来实现对应的功能需要安装requests库。说明requests库是一个非常强大的工具它允许你发起HTTP请求这个模块可以让你用简单的代码完成大部分的HTTP操作。登录华为开发者空间登录后页面如下点击“配置云主机”会弹出对话框进行云主机配置。按如规格下配置云主机云主机名称默认/自定义CPU架构X86规格2 vCPUs 4 GB操作系统Ubuntu系统镜像公共镜像 Ubuntu 22.04 server 64bit (xfce4 desktop)确认以上配置无误点击“安装”进行云主机操作系统安装。安装完毕之后点击“进入桌面”。环境准备中大约需要3-5分钟请您耐心等待…进入桌面后的默认效果如下点击左下角的“所有应用程序”-“开发”-“CodeArts IDE for Python”打开IDE。CodeArts IDE for Python 启动后在弹框界面选择“新建工程”。在新建工程页面自定义输入工程名称点击“创建”。在CodeArts IDE for Python 中在新建的工程文件目录中选择“venv/lib/python3.10/site-packages”路径下的任一文件单击鼠标右键后选择“打开所在文件夹”。复制被打开的文件夹路径。在CodeArts IDE for Python 中点击下方的“终端”输入以下命令后回车安装requests库pipinstallrequests --target{package-path}其中{package-path}用上一步中复制的文件夹路径替换。到此云主机的开发环境配置完成。2.2 开通人脸识别服务进入人脸识别服务控制台区域选择“华北-北京四”分别点击下图中所示产品的“开通服务”。开通后如下图所示点击对应的“接口文档”可已快速查阅对应产品的接口使用说明。3 获取Token鉴权华为云人脸识别服务FRS服务的API调用需要通过用户Token进行用户鉴权所以接口调用前需要先获取用户的Token。获取Token鉴权同样需要接口调用详细请参考获取IAM用户Token使用密码。获取的Token有效性说明Token的有效期为24小时。建议进行缓存避免频繁调用。使用Token前请确保Token离过期有足够的时间防止调用API的过程中Token过期导致调用API失败。重新获取Token不影响已有Token有效性。3.1 编写获取Token代码在CodeArts IDE for Python中点击“文件”-“新建”-“文件”。点击“文件”-“保存”。输入文件名称为“get_token.py”点击“保存”。在get_token.py文件中输入以下代码复制文档中python代码时可能会导致格式错误可以点击下载获取get_token.py文件内容用于获取用户Tokenimportrequestsimportjson \# 主账号用户名 MAIN_USER[填你自己的]\# IAM 子账户用户名 IAM_USER[填你自己的]\# IAM 子账户密码 IAM_PASSWORD[填你自己的]\# 项目 ID PROJECT_ID[填你自己的]\# 服务器区域代号 SERVER_IDcn-north-4\# 保存 TOKEN 的文件路径 TOKEN_FILE_PATHtoken.txtdefget_token(): 功能: 获取 TOKEN 并保存到本地文件 \# 请求地址 request_urlfhttps://iam.{SERVER_ID}.myhuaweicloud.com/v3/auth/tokens\# 构造请求头 headers{Content-Type:application/json;charsetUTF-8}\# 构造请求体 payload{auth:{identity:{methods:[password],password:{user:{domain:{name:MAIN_USER},name:IAM_USER,password:IAM_PASSWORD}}},scope:{project:{name:SERVER_ID}}}}\# 发出 POST 请求try:responserequests.post(request_url,headersheaders,datajson.dumps(payload))\# 打印状态码print(f状态码:{response.status_code})ifresponse.status_code201:\# 读取 X-Subject-Token 响应头 tokenresponse.headers.get(X-Subject-Token)\# 打印返回的数据和 Tokenprint(f反馈的数据:{response.json()})print(fToken:{token})\# 保存 TOKEN 到本地文件iftoken:save_token_to_file(token)print(fTOKEN 已保存到{TOKEN_FILE_PATH})else:print(未能获取到 TOKEN)else:print(f获取 TOKEN 失败:{response.text})exceptExceptionase:print(f请求发生错误:{e})defsave_token_to_file(token): 保存 TOKEN 到本地文件 try:withopen(TOKEN_FILE_PATH,w)asfile:file.write(token)exceptExceptionase:print(f保存 TOKEN 时发生错误:{e})defmain():\# 获取 TOKEN get_token()if\__name_\___main__:main()代码说明**依赖库**使用requests库发起 HTTP 请求。 如果没有安装在运行代码前请参考步骤2.1安装依赖库。**主要逻辑**构造请求头和请求体。发起 POST 请求获取响应。从响应头中提取 X-Subject-Token 并保存到本地文件。TOKEN 保存TOKEN 被保存到 token.txt 文件中方便后续直接读取使用。**参数值填写**代码运行前请将参数代码中的参数值设置为真实的账号信息获取方式进入我的凭证页面参数“MAIN_USER”、“IAM_USER”、“PROJECT_ID”的值按下图所示进行获取参数“IAM_PASSWORD”的值为该账号的登录密码。**注意**本案例中使用“华北-北京四”对应的项目ID。3.2 调试运行获取Token代码按上述步骤编写好代码后在CodeArts IDE for Python中get_token.py文件页面点击右上角的绿色三角形按钮运行代码。 得到了Token然后保存到本地文件里。4 创建人脸库如果我们要做考勤系统、签到系统那么设计之前需要创建人脸库录入每个人员的人脸信息才可以设计后面的考勤签到的人脸对比识别功能。创建人脸库的API调用可参考创建人脸库。4.1 准备测试图片打开文件管理器在/home/developer目录下创建一个image文件夹。然后打开浏览器搜索图片。下载2张图片到/home/developer/image/路径下并将图片重命名为“1.jpeg”和“2.jpeg”。4.2 编写创建人脸库代码在CodeArts IDE for Python中重新新建一个face-set.py文件。用于编写创建人脸库代码。在face-set.py文件中输入如下代码复制文档中python代码时可能会导致格式错误可以点击下载获取face-set.py文件内容importrequests \# 项目ID和服务器区域代号 PROJECT_ID[填你自己的]SERVER_IDcn-north-4\# 从当前目录下的token.txt文件读取Tokenwithopen(token.txt,r)asfile:Tokenfile.read().strip()defcreate_face_database(face_lib_name):\# 设置请求地址 urlfhttps://face.{SERVER_ID}.myhuaweicloud.com/v2/{PROJECT_ID}/face-sets\# 构造请求头 headers{Content-Type:application/json,X-Auth-Token:Token}\# 构造请求体 payload{external_fields:{face_name:{type:string},face_phone:{type:string},face_class:{type:string}},face_set_name:face_lib_name}\# 发送POST请求 responserequests.post(url,jsonpayload,headersheaders)\# 输出响应状态码及内容print(fStatus Code:{response.status_code})print(fResponse:{response.json()})\# 调用函数创建人脸库 create_face_database(face_1)代码说明以上是用 Python 实现的创建人脸库代码使用 requests 库来发出 HTTP 请求。PROJECT_ID 替换为实际账号的项目ID可参考3.1。代码从本地文件token.txt中读取认证Token。face_1是创建的人脸库名称可自定义修改。4.3 终端运行调试按上述步骤编写好代码后在CodeArts IDE for Python中face-set.py文件页面点击右上角的绿色三角形按钮运行代码。face-set.py文件运行后接口返回的结果如下Response:{face_set_info:{face_number:0,face_set_id:tKzQuUW4,face_set_name:face_1,create_date:2024-11-28 08:41:49,face_set_capacity:100000,external_fields:{face_name:{type:string},face_phone:{type:string},face_class:{type:string}}}}根据返回的JSON响应数据以及华为云人脸识别服务FRS的文档说明下面是JSON数据信息的总结**face_set_info**包含了创建的人脸库的具体信息。**face_number**人脸库中已有的人脸特征数量。当前值为0表示刚刚创建的人脸库还没有添加任何人脸特征。**face_set_id**人脸库的唯一标识符随机生成的字符串。这里的ID是tKzQuUW4。**face_set_name**用户指定的人脸库名称。这里命名为face_1。**create_date**人脸库的创建时间。这里是2024-11-28 08:41:49UTC08:00。**face_set_capacity**人脸库的最大容量。默认情况下为100,000个人脸特征这里显示的也是100,000。**external_fields**用户自定义字段的信息。**face_name**类型为string用于存储人脸名称。**face_phone**类型为string用于存储电话号码。**face_class**类型为string用于存储人脸分类信息。JSON响应表明成功创建了一个名为face_1的人脸库该库的ID是tKzQuUW4创建于2024年11月28日08:41:49并且设置了三个自定义字段face_name、face_phone和face_class每个字段的类型都是string。目前该人脸库尚未添加任何人脸特征。5 向人脸库添加人脸添加人脸到人脸库中是将单张图片中的人脸添加至人脸库中支持添加最大人脸或所有人脸。添加人脸到人脸库中的API调用可参考添加人脸。5.1 编写添加人脸代码在CodeArts IDE for Python中重新新建一个face-sets_lib.py文件。用于编写添加人脸代码。在face-sets_lib.py文件中输入如下代码复制文档中python代码时可能会导致格式错误可以点击下载获取face-sets_lib.py文件内容importrequestsimportbase64importio \# 项目ID和服务器区域代号 PROJECT_ID[填你自己的]SERVER_IDcn-north-4\# 从当前目录下的token.txt文件读取Tokenwithopen(token.txt,r)asfile:Tokenfile.read().strip()defto_base64(image_path):将图片转换为Base64编码的字符串withopen(image_path,rb)asimage_file:returnbase64.b64encode(image_file.read()).decode(utf-8)defregister_face(image_path,face_lib,name):\# 读取图片并进行Base64编码 img_datato_base64(image_path)\# 设置请求地址 urlfhttps://face.{SERVER_ID}.myhuaweicloud.com/v2/{PROJECT_ID}/face-sets/{face_lib}/faces\# 构造请求头 headers{Content-Type:application/json,X-Auth-Token:Token}\# 构造请求体 payload{image_base64:img_data,external_fields:{face_name:name},single:True}\# 发送POST请求 responserequests.post(url,jsonpayload,headersheaders)\# 输出响应状态码及内容print(fStatus Code:{response.status_code})print(fResponse:{response.json()})\# 调用函数注册人脸 register_face(/home/developer/image/1.jpeg,face_1,xiaolong)代码说明运行代码时替换替换’/home/developer/image/1.jpeg’face_1和xiaolong为你实际的图片地址人脸库名称和自定义字段值。PROJECT_ID 替换为实际账号的项目ID可参考3.1。代码从本地文件token.txt中读取认证Token并从指定路径读取图片进行Base64编码。5.2 终端运行调试按上述步骤编写好代码后在CodeArts IDE for Python中face-sets_lib.py文件页面点击右上角的绿色三角形按钮运行代码。face-sets_lib.py文件运行后接口返回的结果如下Response:{face_set_id:tKzQuUW4,face_set_name:face_1,faces:[{face_id:1cOqkdyg,external_image_id:JAHIqXTA,bounding_box:{width:148,top_left_x:358,top_left_y:428,height:188},external_fields:{face_name:xiaolong}}]}根据返回的JSON响应数据以及华为云人脸识别服务FRS的文档以下是JSON数据信息的总结face_set_id人脸库的唯一标识符。这里的ID是tKzQuUW4。face_set_name人脸库的名称。这里是face_1。faces一个数组包含了成功添加到人脸库中的人脸信息。face_id系统生成的唯一标识符用于标识该人脸。这里的ID是1cOqkdyg。external_image_id用户指定的图片外部ID与当前图像绑定。这里的ID是JAHIqXTA。bounding_box描述了人脸在图像中的位置。width矩形框的宽度。这里是148像素。top_left_x矩形框左上角的横坐标。这里是358像素。top_left_y矩形框左上角的纵坐标。这里是428像素。height矩形框的高度。这里是188像素。external_fields用户自定义字段的信息。face_name自定义字段face_name的值这里是xiaolong。这个JSON响应表明成功将一张包含人脸的图片添加到了名为face_1的人脸库中。人脸库的ID是tKzQuUW4。添加的人脸具有以下特征人脸ID为1cOqkdyg。图片外部ID为JAHIqXTA。人脸在图片中的位置由矩形框表示宽度为148像素高度为188像素左上角坐标为(358, 428)。自定义字段face_name的值为xiaolong。6 从人脸库匹配人脸人脸搜索是指在已有的人脸库中查询与目标人脸相似的一张或者多张人脸并返回相应的置信度。如果图片中包含多个人脸选取图片中检测到的最大尺寸人脸作为检索的输入。 支持传入图片或者faceID进行人脸搜索。从人脸库匹配人脸的API调用可参考搜索人脸。6.1 编写匹配人脸代码在CodeArts IDE for Python中重新新建一个face-sets_search.py文件。用于编写匹配人脸代码。在face-sets_search.py文件中输入如下代码复制文档中python代码时可能会导致格式错误可以点击下载获取face-sets_search.py文件内容importbase64importrequestsimportio \# 项目ID PROJECT_ID[填你自己的]\# 服务器区域代号 SERVER_IDcn-north-4\# 从当前目录下的token.txt文件中读取Tokenwithopen(token.txt,r)asfile:TOKENfile.read().strip()defimage_to_base64(image_path): 将图片转换为 Base64 编码 try:withopen(image_path,rb)asimage_file:encoded_stringbase64.b64encode(image_file.read()).decode(utf-8)returnencoded_stringexceptExceptionase:print(f图片编码为 Base64 时发生错误:{e})returnNonedefto_base64(image):将图片转换为Base64编码bufferedio.BytesIO()image.save(buffered,formatJPEG)img_strbase64.b64encode(buffered.getvalue()).decode(utf-8)returnimg_strdeffind_face(image_path,face_lib,threshold0.93):\# 将图片转换为 Base64 编码 img_dataimage_to_base64(image_path)ifnotimg_data:print(图片无法转换为 Base64检测失败)return\# 设置请求地址 request_urlfhttps://face.{SERVER_ID}.myhuaweicloud.com/v2/{PROJECT_ID}/face-sets/{face_lib}/search\# 设置数据提交格式及请求头 headers{Content-Type:application/json,X-Auth-Token:TOKEN}\# 构造请求体 payload{image_base64:img_data,return_fields:[face_name],threshold:threshold}\# 发送POST请求 responserequests.post(request_url,jsonpayload,headersheaders)\# 检查响应状态码ifresponse.status_code200:print(人脸搜索成功:,response.json())else:print(人脸搜索失败:,response.status_code,response.text)\# 调用函数 find_face(/home/developer/image/1.jpeg,face_1)代码说明替换’/home/developer/image/1.jpeg’和’face_1’为实际的图片路径和人脸库名称。确保在调用此脚本之前已正确配置好token.txt文件并且该文件位于与脚本相同的目录下。PROJECT_ID 替换为实际账号的项目ID可参考3.1。6.2 终端运行调试按上述步骤编写好代码后在CodeArts IDE for Python中face-sets_search.py文件页面点击右上角的绿色三角形按钮运行代码。face-sets_search.py文件运行后接口返回的结果如下人脸搜索成功:{faces:[{face_id:1cOqkdyg,external_image_id:JAHIqXTA,bounding_box:{width:148,top_left_x:358,top_left_y:428,height:188},external_fields:{face_name:xiaolong},similarity:1.0}]}根据返回的JSON响应数据以及华为云人脸识别服务FRS的文档以下是JSON数据信息的总结faces一个数组包含了搜索到的人脸信息。face_id系统生成的唯一标识符用于标识该人脸。这里的ID是1cOqkdyg。external_image_id用户指定的图片外部ID与当前图像绑定。这里的ID是JAHIqXTA。bounding_box描述了人脸在图像中的位置。width矩形框的宽度。这里是148像素。top_left_x矩形框左上角的横坐标。这里是358像素。top_left_y矩形框左上角的纵坐标。这里是428像素。height矩形框的高度。这里是188像素。external_fields用户自定义字段的信息。face_name自定义字段face_name的值这里是xiaolong。similarity人脸搜索时的相似度分数。这里的值为1.0表示完全匹配。这个JSON响应表明成功搜索到了一张人脸并且该人脸与人脸库中的一张人脸完全匹配。人脸ID为1cOqkdyg。图片外部ID为JAHIqXTA。人脸在图片中的位置由矩形框表示宽度为148像素高度为188像素左上角坐标为(358, 428)。自定义字段face_name的值为xiaolong。相似度分数为1.0表示完全匹配。7 图形化项目开发为了更方便直观的展示项目的整体功能接下来进行图形化界面的开发。7.1 安装Tkinter和Pillow库说明Pillow 是 PILPython Imaging Library的一个分支它提供了广泛的文件格式支持、强大的图像处理能力,主要包括图像存储、图像显示、格式转换以及基本的图像处理操作等。在Python中 Tkinter用于创建图形用户界面GUI。这是Python的标准GUI库。在CodeArts IDE for Python中点击下方的“终端”输入以下命令后回车安装Tkintersudoapt-get-yinstallpython3-tk继续在“终端”中执行以下命令安装Pillow库pip3installPillow --target{package-path}其中{package-path}用安装包文件夹路径替换获取方式同步骤2.1安装requests的安装路径。7.2 图形化界面设计在CodeArts IDE for Python中重新新建一个face_detect_tkinter.py文件。用于编写人脸匹配图形化界面代码。在face_detect_tkinter.py文件中输入如下代码复制文档中python代码时可能会导致格式错误可以点击下载获取face_detect_tkinter.py文件内容importtkinterastkfromtkinterimportfiledialog,messageboxfromPILimportImage,ImageTk \# 全局变量保存当前载入的图片路径 current_image_pathNone\# 创建主窗口 windowtk.Tk()window.title(人脸识别服务工具)window.geometry(600x400)\# 增大窗口尺寸以显示图片 \# 图片显示标签 image_labeltk.Label(window,text图片显示区域,width50,height20,reliefsolid)image_label.pack(pady10)\# 定义功能函数defload_image():globalcurrent_image_path file_pathfiledialog.askopenfilename(title选择图片文件,filetypes[(图片文件,\*.jpg \*.jpeg \*.png \*.bmp)])iffile_path:current_image_pathfile_path display_image(file_path)defdisplay_image(file_path):try:imgImage.open(file_path)imgimg.resize((300,300))\# 调整图片尺寸 img_tkImageTk.PhotoImage(img)image_label.config(imageimg_tk,text)\# 显示图片清除文本 image_label.imageimg_tk \# 防止垃圾回收exceptExceptionase:messagebox.showerror(错误,f无法载入图片{e})defcreate_face_library():messagebox.showinfo(功能提示,创建人脸库功能待实现)defadd_face_to_library():ifnotcurrent_image_path:messagebox.showwarning(提示,请先载入图片)returnmessagebox.showinfo(功能提示,f向人脸库添加人脸功能待实现当前图片路径{current_image_path})defsearch_face():ifnotcurrent_image_path:messagebox.showwarning(提示,请先载入图片)returnmessagebox.showinfo(功能提示,f搜索匹配人脸功能待实现当前图片路径{current_image_path})\# 创建按钮 btn_load_imagetk.Button(window,text载入图片,commandload_image,width20)btn_create_librarytk.Button(window,text创建人脸库,commandcreate_face_library,width20)btn_add_facetk.Button(window,text添加人脸到库,commandadd_face_to_library,width20)btn_search_facetk.Button(window,text搜索匹配人脸,commandsearch_face,width20)\# 布局按钮 btn_load_image.pack(pady5)btn_create_library.pack(pady5)btn_add_face.pack(pady5)btn_search_face.pack(pady5)\# 运行主事件循环 window.mainloop()代码说明以上是用 Python 实现的人脸库创建、添加人脸到库及匹配人脸的图形化界面代码使用 tkinter 库来实现图形化界面。依赖库使用 tkinter 图形化界面。使用 PIL 实现图像显示、格式转换。确保安装了依赖库pip3 install Pillow --target{package-path}。确保安装了依赖库sudo apt-get -y install python3-tk。待实现代码点击“创建人脸”、“添加人脸到库”和“搜索匹配人脸”按钮会提示“XXX功能待实现”。开发者可结合步骤456中实现的对应功能来实现该功能案例中不再扩展。代码补齐后实现效果如下图所示按上述步骤编写好代码后在CodeArts IDE for Python中face_detect_tkinter.py文件页面点击右上角的绿色三角形按钮运行代码。运行效果如下图所示至此基于开发者空间通过FRS实现考勤系统人脸匹配功能实践全部完毕。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询