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

python学opencv|读取图像(七十五)人脸识别:Fisherfaces算法和LBPH算法

【1】引言

前序学习进程中,已经掌握了使用Eigenfaces算法进行的人脸识别。相关文章链接为:

python学opencv|读取图像(七十四)人脸识别:EigenFaces算法-CSDN博客

在此基础上,学习剩余两种人脸识别算法:Fisherfaces算法和LBPH算法。

【2】官网教程

实际上,点击下述链接,可以直达三种算法的官网教程:

OpenCV: Face Recognition with OpenCV

对于Fisherfaces算法和LBPH算法,具体的应用流程和Eigenfaces算法一致:先确定用哪种算法后,就建立识别器,然后把样本放入训练器进行训练,最后输出识别效果。

【2.1】Fisherfaces算法

点击下方链接,直达Fisherfaces算法的官网教程:

OpenCV: cv::face::FisherFaceRecognizer Class Reference

在官网,可以看到Fisherfaces算法识别器相关的说明:

图1  cv.face.FisherFaceRecognizer.create算法识别器

具体的,cv.face.FisherFaceRecognizer.create识别器有两个参数:

    cv.face.FisherFaceRecognizer.create(    

    num_components              #可选参数,PCA(主成分分析)中保留分量的个数

    threshold  )                        #可选参数,人脸识别的阈值

【2.2】LBPH算法

点击下方链接,直达LBPH算法的官网教程:

OpenCV: cv::face::LBPHFaceRecognizer Class Reference

在官网,可以看到LBPH算法识别器相关的说明:

图2  cv.face.LBPHFaceRecognizer.create算法识别器 

具体的,cv.face.LBPHFaceRecognizer.create识别器有五个参数:

cv.face.LBPHFaceRecognizer.create(    

radius                            #可选参数,圆形局部二进制模式的半径

neighbors                      #可选参数,圆形局部二进制模式的采样数目

grid_x                            #可选参数,水平方向上的单元格数

grid_y                            #可选参数,竖直方向上的单元格数

threshold    )                  #可选参数,识别用的阈值

【3】代码测试

【3.1】Fisherfaces算法

对使用Fisherfaces算法的人脸识别,和使用Eigenfaces算法的人脸识别在代码上一样,所以可以直接使用先前的代码,只需要改一行旧代码即可:

# 创建人脸识别器
recognizer = cv.face.EigenFaceRecognizer.create()

改后代码为:

# 创建人脸识别器
recognizer = cv.face.FisherFaceRecognizer.create()

不过为了增强对比,这次用了两组图片,所以存储地址的列表变长了:

# 定义图片路径字典,键为标签,值为该标签对应的图片路径列表
image_paths_dict = {0: [r"D:\python\pythonworkspace\pythonProject3\0\01.jpg",r"D:\python\pythonworkspace\pythonProject3\0\02.jpg",r"D:\python\pythonworkspace\pythonProject3\0\03.jpg"],1: [r"D:\python\pythonworkspace\pythonProject3\1\01.jpg",r"D:\python\pythonworkspace\pythonProject3\1\02.jpg",r"D:\python\pythonworkspace\pythonProject3\1\03.jpg"]
}

这里的两组图片分别用了标签0和1。

待测试的图片也变成了两组:

# 定义测试图片路径列表
test_image_paths = [r"D:\python\pythonworkspace\pythonProject3\zyz\11.jpg",r"D:\python\pythonworkspace\pythonProject3\s01\05.jpg"
]

使用Fisherfaces算法的人脸识别和使用Eigenfaces算法的人脸识别在判断原理上也很类似,以5000为置信度标准,小于5000为图像识别成功,对比结果为0时表明两个图像完全一样,而超出为不能识别。

实际用的图像0有:

图3  训练样本0

图4  训练样本1 

图5  待测图像1  

图6  待测图像2

代码运行后,获得的识别效果为:

图7  待测图像1识别效果

图8  待测图像2识别效果

这个效果其实出乎预料,待测图像2本应被识别,但却未被认出。

不过用于训练的的样本的确太少,所以这样的识别效果也算正常。

此时的完整代码为:

import cv2 as cv
import numpy as np# 定义图片路径字典,键为标签,值为该标签对应的图片路径列表
image_paths_dict = {0: [r"D:\python\pythonworkspace\pythonProject3\0\01.jpg",r"D:\python\pythonworkspace\pythonProject3\0\02.jpg",r"D:\python\pythonworkspace\pythonProject3\0\03.jpg"],1: [r"D:\python\pythonworkspace\pythonProject3\1\01.jpg",r"D:\python\pythonworkspace\pythonProject3\1\02.jpg",r"D:\python\pythonworkspace\pythonProject3\1\03.jpg"]
}photos = []  # 定义photo空列表,用来存储图像
labels = []  # 定义lables空列表,用来存储图像对应的标签# 定义图像尺寸信息
width = 600  # 定义一个初始宽度量
height = 600  # 定义一个初始高度量
target_size = (width, height)  # 定义一个元组,存储宽度量和高度量# 读取图片并调整尺寸
for label, paths in image_paths_dict.items():for path in paths:# 以彩色模式读取图像img = cv.imread(path)if img is not None:# 调整图像尺寸为与目标尺寸相同img = cv.resize(img, target_size)# 将彩色图像转换为灰度图像用于训练gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)photos.append(gray_img)labels.append(label)else:print(f"无法读取图片: {path}")# 定义标签映射
names = {0: "su",1: "other_person"
}# 创建人脸识别器
recognizer = cv.face.FisherFaceRecognizer.create()# 训练人脸识别器
if photos and labels:recognizer.train(photos, np.array(labels))  # 训练器读入人脸样本和对应标签# 定义测试图片路径列表test_image_paths = [r"D:\python\pythonworkspace\pythonProject3\zyz\11.jpg",r"D:\python\pythonworkspace\pythonProject3\s01\05.jpg"]for test_image_path in test_image_paths:# 读取测试图片,以彩色模式读取test_img = cv.imread(test_image_path)if test_img is not None:# 调整测试图像尺寸与目标尺寸一致test_img = cv.resize(test_img, target_size)# 将彩色图像转换为灰度图像用于识别gray_test_img = cv.cvtColor(test_img, cv.COLOR_BGR2GRAY)label, confidence = recognizer.predict(gray_test_img)# 设定识别阈值threshold = 5000  # 可根据实际情况调整if confidence > threshold:# 添加未识别标记cv.putText(test_img, "Unrecognized", (10, 30), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)else:print(f'confidence={confidence}')print(names[label])# 添加识别结果标记text = names[label]cv.putText(test_img, text, (10, 30), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 输出图像cv.imshow('Result Image', test_img)cv.waitKey(0)cv.destroyAllWindows()else:print(f"无法读取测试图片: {test_image_path}")

【3.2】LBPH算法

对使用Fisherfaces算法、Eigenfaces算法的人脸识别,和使用LBPH算法的人脸识别在代码上的设计也一样,只是调用的参数不同,并且使用LBPH算法时的参数均可以由算法自动选择。

所以依然可以直接使用Fisherfaces算法的代码,只需将创建识别器的代码修改即可:

# 创建人脸识别器
recognizer = cv.face.LBPHFaceRecognizer.create()

其余代码均无需修改,代码运行后获得的人脸识别效果为:

图9 待测图像1人脸识别效果  

图10 待测图像2人脸识别效果

使用LBPH算法的人脸识别效果稍好,因为它正确识别了待测图像2。

【4】细节说明

所有识别器均在对灰度图像进行识别时更高效,因此实际的识别过程大都是对灰度图像进行。

【5】总结

掌握了使用python+opencv实现了使用Fisherfaces算法和LBPH算法进行人脸识别的技巧。

 

 

相关文章:

python学opencv|读取图像(七十五)人脸识别:Fisherfaces算法和LBPH算法

【1】引言 前序学习进程中,已经掌握了使用Eigenfaces算法进行的人脸识别。相关文章链接为: python学opencv|读取图像(七十四)人脸识别:EigenFaces算法-CSDN博客 在此基础上,学习剩余两种人脸识别算法&am…...

UMLS数据下载及访问

UMLS数据申请 这个直接在官网上申请即可,记得把地址填全,基本都会拿到lisence。 UMLS数据访问 UMLS的数据访问分为网页访问,API访问以及数据下载后的本地访问,网页访问,API访问按照官网的指示即可,这里主…...

UE_C++ —— Container TArray

目录 一,TArray 二,Creating and Filling an Array 三,Iteration 四,Sorting 五,Queries 六,Removal 七,Operators 八,Heap 九,Slack 十,Raw Memor…...

第435场周赛:奇偶频次间的最大差值 Ⅰ、K 次修改后的最大曼哈顿距离、使数组包含目标值倍数的最少增量、奇偶频次间的最大差值 Ⅱ

Q1、奇偶频次间的最大差值 Ⅰ 1、题目描述 给你一个由小写英文字母组成的字符串 s 。请你找出字符串中两个字符的出现频次之间的 最大 差值,这两个字符需要满足: 一个字符在字符串中出现 偶数次 。另一个字符在字符串中出现 奇数次 。 返回 最大 差值…...

模拟解决哈希表冲突

目录 解决哈希表冲突原理: 模拟解决哈希表冲突代码: 负载因子: 动态扩容: 总结: HashMap和HashSet的总结: 解决哈希表冲突原理: 黑色代表一个数组,当 出现哈希冲突时&#xff0…...

UIView 与 CALayer 的联系和区别

今天说一下UIView 与 CALayer 一、UIView 和 CALayer 的关系 在 iOS 开发中,UIView 是用户界面的基础,它负责处理用户交互和绘制内容,而 CALayer 是 UIView 内部用于显示内容的核心图层(Layer)。每个 UIView 内部都有…...

Android 10.0 移除wifi功能及相关菜单

介绍 客户的机器没有wifi功能,所以需要删除wifi相关的菜单,主要有设置-网络和互联网-WLAN,长按桌面设置弹出的WALN快捷方式,长按桌面-微件-设置-WLAN。 修改 Android10 上直接将config_show_wifi_settings改为false,这样wifi菜单的入口就隐…...

电力与能源杂志电力与能源杂志社电力与能源编辑部2024年第6期目录

研究与探索 含电动汽车虚拟电厂的优化调度策略综述 黄灿;曹晓满;邬楠; 643-645663 含换电站的虚拟电厂优化调度策略综述 张杰;曹晓满;邬楠;杨小龙; 646-649667 考虑虚拟负荷研判的V2G储能充电桩设计研究 徐颖;张伟阳;陈豪; 650-654 基于状态估计的电能质量监测…...

简站主题:简洁、实用、SEO友好、安全性高和后期易于维护的wordpress主题

简站主题以其简洁的设计风格、实用的功能、优化的SEO性能和高安全性而受到广泛好评。 简洁:简站主题采用扁平化设计风格,界面简洁明了,提供多种布局和颜色方案,适合各种类型的网站,如个人博客和企业网站。 实用&…...

Redis(高阶篇)03章——缓存双写一致性之更新策略探讨

一、反馈回来的面试题 一图你只要用缓存,就可能会涉及到redis缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性的问题双写一致性,你先动缓存redis还是数据库mysql哪一个&#x…...

【Git】说说Git中开发测试的使用Git分支Git标签的使用场景

一、环境介绍 dev环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定。pre环境:灰度环…...

Spring Boot中使用Server-Sent Events (SSE) 实现实时数据推送教程

一、简介 Server-Sent Events (SSE) 是HTML5引入的一种轻量级的服务器向浏览器客户端单向推送实时数据的技术。在Spring Boot框架中,我们可以很容易地集成并利用SSE来实现实时通信。 二、依赖添加 在Spring Boot项目中,无需额外引入特定的依赖&#x…...

【Golang学习之旅】Go 语言微服务架构实践(gRPC、Kafka、Docker、K8s)

文章目录 1. 前言:为什么选择Go语言构建微服务架构1.1 微服务架构的兴趣与挑战1.2 为什么选择Go语言构建微服务架构 2. Go语言简介2.1 Go 语言的特点与应用2.2 Go 语言的生态系统 3. 微服务架构中的 gRPC 实践3.1 什么是 gRPC?3.2 gRPC 在 Go 语言中的实…...

数据结构:栈(Stack)及其实现

栈(Stack)是计算机科学中常用的一种数据结构,它遵循先进后出(Last In, First Out,LIFO)的原则。也就是说,栈中的元素只能从栈顶进行访问,最后放入栈中的元素最先被取出。栈在很多应用…...

DeepSeek在linux下的安装部署与应用测试

结合上一篇文章,本篇文章主要讲述在Redhat linux环境下如何部署和使用DeepSeek大模型,主要包括ollama的安装配置、大模型的加载和应用测试。关于Open WebUI在docker的安装部署,Open WebUI官网也提供了完整的docker部署说明,大家可…...

Next.js【详解】获取数据(访问接口)

Next.js 中分为 服务端组件 和 客户端组件&#xff0c;内置的获取数据各不相同 服务端组件 方式1 – 使用 fetch export default async function Page() {const data await fetch(https://api.vercel.app/blog)const posts await data.json()return (<ul>{posts.map((…...

pnpm, eslint, vue-router4, element-plus, pinia

利用 pnpm 创建 vue3 项目 pnpm 包管理器 - 创建项目 Eslint 配置代码风格(Eslint用于规范纠错&#xff0c;prettier用于美观&#xff09; 在 设置 中配置保存时自动修复 提交前做代码检查 husky是一个 git hooks工具&#xff08;git的钩子工具&#xff0c;可以在特定实际执行特…...

将jar安装到Maven本地仓库中

将jar安装到Maven本地仓库中 1. 使用 mvn install:install-file 命令模版示例 2.项目中添加依赖 将一个 .jar 文件安装到 Maven 本地仓库中是一个常见的操作&#xff0c;尤其是在你想要在本地测试一个尚未发布到中央仓库的库时。以下是如何将 .jar 文件安装到 Maven 本地仓库的…...

Spring 和 Spring MVC 的关系是什么?

Spring和Spring MVC的关系就像是“大家庭和家里的小书房”一样。 Spring是一个大家庭&#xff0c;提供了各种各样的功能和服务&#xff0c;比如管理Bean的生命周期、事务管理、安全性等&#xff0c;它是企业级应用开发的全方位解决方案。这个大家庭里有很多房间&#xff0c;每个…...

Ollama ModelFile(模型文件)

1. 什么是 Modelfile&#xff1f; Modelfile 是 Ollama 的配置文件&#xff0c;用于定义和自定义模型的行为。通过它&#xff0c;你可以&#xff1a; 基于现有模型&#xff08;如 llama2、mistral&#xff09;创建自定义版本 调整生成参数&#xff08;如温度、重复惩罚&#…...

基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…...

(蓝桥杯——10. 小郑做志愿者)洛斯里克城志愿者问题详解

题目背景 小郑是一名大学生,她决定通过做志愿者来增加自己的综合分。她的任务是帮助游客解决交通困难的问题。洛斯里克城是一个六朝古都,拥有 N 个区域和古老的地铁系统。地铁线路覆盖了树形结构上的某些路径,游客会询问两个区域是否可以通过某条地铁线路直达,以及有多少条…...

基于 Ollama 工具的 LLM 大语言模型如何部署,以 DeepSeek 14B 本地部署为例

简简单单 Online zuozuo :本心、输入输出、结果 文章目录 基于 Ollama 工具的 LLM 大语言模型如何部署,以 DeepSeek 14B 本地部署为例前言下载 Ollama实际部署所需的硬件要求设置 LLM 使用 GPU ,发挥 100% GPU 性能Ollama 大模型管理命令大模型的实际运行资源消耗基于 Ollam…...

大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何选择?

简介&#xff1a;在人工智能飞速发展的今天&#xff0c;大模型已经成为推动技术革新的核心力量。无论是智能客服、内容创作&#xff0c;还是科研辅助、代码生成&#xff0c;大模型的身影无处不在。然而&#xff0c;面对市场上琳琅满目的工具&#xff0c;如何挑选最适合自己的那…...

【05】密码学与隐私保护

5-1 零知识证明 零知识证明介绍 零知识证明的概念 设P&#xff08;Prover&#xff09;表示掌握某些信息&#xff0c;并希望证实这一事实的实体&#xff0c;V(Verifier&#xff09;是验证这一事实的实体。 零知识证明是指P试图使V相信某一个论断是正确的&#xff0c;但却不向…...

Flink SQL与Doris实时数仓Join实战教程(理论+实例保姆级教程)

目录 第一章:Regular Joins 深度解析 1.1 核心原理与适用场景 1.2 电商订单 - 商品实时关联案例 1.2.1 数据流设计 1.2.2 Doris 表设计优化 1.2.3 性能调优要点 第二章:Interval Joins 实战应用 2.1 时间区间关联原理 2.2 优惠券使用有效性验证 2.2.1 业务场景说明 …...

DeepSeek 助力 Vue 开发:打造丝滑的范围选择器(Range Picker)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

68页PDF | 数据安全总体解决方案:从数据管理方法论到落地实践的全方位指南(附下载)

一、前言 这份报告旨在应对数字化转型过程中数据安全面临的挑战&#xff0c;并提供全面的管理与技术体系建设框架。报告首先分析了数字化社会的发展背景&#xff0c;强调了数据安全在国家安全层面的重要性&#xff0c;并指出数据安全风险的来源和防护措施。接着&#xff0c;报…...

【Github每日推荐】-- 2024 年项目汇总

1、AI 技术 项目简述OmniParser一款基于纯视觉的 GUI 智能体&#xff0c;能够准确识别界面上可交互图标以及理解截图中各元素语义&#xff0c;实现自动化界面交互场景&#xff0c;如自动化测试、自动化操作等。ChatTTS一款专门为对话场景设计的语音生成模型&#xff0c;主要用…...

【Spring详解一】Spring整体架构和环境搭建

一、Spring整体架构和环境搭建 1.1 Spring的整体架构 Spring框架是一个分层架构&#xff0c;包含一系列功能要素&#xff0c;被分为大约20个模块 Spring核心容器&#xff1a;包含Core、Bean、Context、Expression Language模块 Core &#xff1a;其他组件的基本核心&#xff…...

Spring Boot(8)深入理解 @Autowired 注解:使用场景与实战示例

搞个引言 在 Spring 框架的开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是它的一个核心特性&#xff0c;它能够让代码更加模块化、可测试&#xff0c;并且易于维护。而 Autowired 注解作为 Spring 实现依赖注入的关键工具&…...

Machine Learning:Optimization

文章目录 局部最小值与鞍点 (Local Minimum & Saddle Point)临界点及其种类判断临界值种类 批量与动量(Batch & Momentum)批量大小对梯度下降的影响动量法 自适应学习率AdaGradRMSPropAdam 学习率调度优化总结 局部最小值与鞍点 (Local Minimum & Saddle Point) 我…...

wordpress get_footer();与wp_footer();的区别的关系

在WordPress中&#xff0c;get_footer() 和 wp_footer() 是两个不同的函数&#xff0c;它们在主题开发中扮演着不同的角色&#xff0c;但都与页面的“页脚”部分有关。以下是它们的区别和关系&#xff1a; 1. get_footer() get_footer() 是一个用于加载页脚模板的函数。它的主…...

Windows Docker运行Implicit-SVSDF-Planner

Windows Docker运行GitHub - ZJU-FAST-Lab/Implicit-SVSDF-Planner: [SIGGRAPH 2024 & TOG] 1. 设置环境 我将项目git clone在D:/Github目录中。 下载ubuntu20.04 noetic镜像 docker pull osrf/ros:noetic-desktop-full-focal 启动容器&#xff0c;挂载主机的D:/Github文…...

设计模式14:职责链模式

系列总链接&#xff1a;《大话设计模式》学习记录_net 大话设计-CSDN博客 1.概述 职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许将请求沿着处理者链传递&#xff0c;直到有一个处理者能够处理该请求。这种模式通过…...

Golang GORM系列:GORM并发与连接池

GORM 是一个流行的 Go 语言 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;用于简化数据库操作。它支持连接池和并发访问功能&#xff0c;这些功能对于高性能、高并发的应用场景非常重要。本文结合示例详细介绍gorm的并发处理能力&#xff0c;以及如何是哟个连接池提升…...

linux笔记:shell中的while、if、for语句

在Udig软件的启动脚本中使用了while循环、if语句、for循环&#xff0c;其他内容基本都是变量的定义&#xff0c;所以尝试弄懂脚本中这三部分内容&#xff0c;了解脚本执行过程。 &#xff08;1&#xff09;while循环 while do循环内容如下所示&#xff0c;在循环中还用了expr…...

【Java】逻辑运算符详解:、|| 与、 | 的区别及应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 &#x1f4af;前言&#x1f4af;一、基本概念与运算符介绍&#x1f4af;二、短路与与非短路与&#xff1a;&& 与 & 的区别1. &&&#xff1a;短路与&#xff08;AND&#xff09;2. …...

Java 设计模式之解释器模式

文章目录 Java 设计模式之解释器模式概述UML代码实现 Java 设计模式之解释器模式 概述 解释器模式(interpreter)&#xff1a;给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;这个解释器使用该表示来解释语言中的句子。如果一种特定…...

关于前后端分离跨域问题——使用DeepSeek分析查错

我前端使用ant design vue pro框架&#xff0c;后端使用kratos框架开发。因为之前也解决过跨域问题&#xff0c;正常是在后端的http请求中加入中间件&#xff0c;设置跨域需要通过的字段即可&#xff0c;代码如下所示&#xff1a; func NewHTTPServer(c *conf.Server, s *conf…...

Linux下ioctl的应用

文章目录 1、ioctl简介2、示例程序编写2.1、应用程序编写2.2、驱动程序编写 3、ioctl命令的构成4、测试 1、ioctl简介 ioctl&#xff08;input/output control&#xff09;是Linux中的一个系统调用&#xff0c;主要用于设备驱动程序与用户空间应用程序之间进行设备特定的输入/…...

Windows 环境下 Grafana 安装指南

目录 下载 Grafana 安装 Grafana 方法 1&#xff1a;使用 .msi 安装程序&#xff08;推荐&#xff09; 方法 2&#xff1a;使用 .zip 压缩包 启动 Grafana 访问 Grafana 配置 Grafana&#xff08;可选&#xff09; 卸载 Grafana&#xff08;如果需要&#xff09; 下载 G…...

【操作系统】操作系统概述

操作系统概述 1.1 操作系统的概念1.1.1 操作系统定义——什么是OS&#xff1f;1.1.2 操作系统作用——OS有什么用&#xff1f;1.1.3 操作系统地位——计算机系统中&#xff0c;OS处于什么地位&#xff1f;1.1.4 为什么学操作系统&#xff1f; 1.2 操作系统的历史1.2.1 操作系统…...

基于SSM+uniapp的鲜花销售小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、商户功能模块&#xff1a;用户管理、商户管理、鲜花分类管理、鲜花管理、订单管理、收藏管理、购物车、充值、下单等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试环境&#x…...

第3章 .NETCore核心基础组件:3.1 .NET Core依赖注入

3.1.1 什么是控制反转、依赖注入 杨老师在书中进行了一系列的文字阐述&#xff0c;总结一下就是&#xff1a;软件设计模式中有一种叫做【控制反转】的设计模式&#xff0c;而依赖注入是实现这种设计模式的一个很重要的方式。也就是说学习依赖注入&#xff0c;是学习怎样实现控…...

排序与算法:插入排序

执行效果 插入排序的执行效果是这样的&#xff1a; 呃……看不懂吗&#xff1f;没关系&#xff0c;接着往下看介绍 算法介绍 插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c…...

uniapp 打包安卓 集成高德地图

接入高德地图 let vm this;uni.chooseLocation({success: function (res) {// console.log(位置名称&#xff1a; res.name);// console.log(详细地址&#xff1a; res.address);// console.log(纬度&#xff1a; res.latitude);// console.log(经度&#xff1a; res.long…...

python爬虫系列课程2:如何下载Xpath Helper

python爬虫系列课程2:如何下载Xpath Helper 一、访问极简插件官网二、点击搜索按钮三、输入xpath并点击搜索四、点击推荐下载五、将下载下来的文件解压缩六、打开扩展程序界面七、将xpath.crx文件拖入扩展程序界面一、访问极简插件官网 极简插件官网地址:https://chrome.zzz…...

win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统&#xff0c;报错&#xff1a;Operating System not found 二、原因分析 国产系统&#xff0c;需要注意的点&#xff1a; 需要看你的系统类…...

基于微信小程序的宿舍报修管理系统设计与实现,SpringBoot(15500字)+Vue+毕业论文+指导搭建视频

运行环境 jdkmysqlIntelliJ IDEAmaven3微信开发者工具 项目技术SpringBoothtmlcssjsjqueryvue2uni-app 宿舍报修小程序是一个集中管理宿舍维修请求的在线平台&#xff0c;为学生、维修人员和管理员提供了一个便捷、高效的交互界面。以下是关于这些功能的简单介绍&#xff1a; …...