基于opencv和dlib的人脸识别定位
cv2
cv2是OpenCV库中的一个模块,OpenCV的Python绑定库。
图像处理功能,还集成了一些高级的计算机视觉算法。
cv2.rectangle
图像上绘制矩形,cv2.rectangle(Numpy图片, 左上坐标, 右下坐标, color, thickness粗度)
cv2.cvtColor(图像,颜色空间转换代码)
不同颜色空间之间转换图像
cv.CascadeClassifier
cv2.imwrite(
图像的保存路径(包括文件名),要保存的图像数据)
:保存图像到文件的函数
def paint_face_rectangle(image,faces):for face in faces:#遍历该张图片(帧)上所有人脸cv.rectangle(image, (face.left(), face.top()), (face.right(), face.bottom()), (0, 255, 0), 3)return image
'''
face.left()是一个方法需要加括号,不是一个属性
(0,255,0)是BGR颜色空间中的绿色
粗细宽度为三像素'''
capture = cv.VideoCapture(0)
'''
实例化一个capture(0表示打开内置摄像头)(还可以打开视频外部摄像头)
相当于一个视频流的集合,还可用作后续一系列操作capture.read()
视频流的逐帧读取,返回两个值(需要在循环里面,因为逐帧)
一个布尔值( True 或 False),表示帧是否被成功读取
一个图像数组(如果成功读取),当前帧的图像'''
人脸检测器
detector = dlib.get_frontal_face_detector()
detector_results = detector(gray_image, 1)
1 在这个上下文中是一个参数,它指定了人脸检测器在检测人脸时应该使用的“上采样次数”或“图像金字塔的层数”。这个参数允许您控制人脸检测器在检测不同大小的人脸时的灵敏度。通过增加这个参数的值,您可以让检测器在更大的图像范围内搜索人脸,从而能够检测到更小的人脸,但这也可能会增加计算成本并降低检测速度。如果这个参数设置为 0,那么检测器将只在原始图像大小上搜索人脸。
如果设置为 1,那么检测器将首先在原始图像大小上搜索,然后将图像大小增加一倍(或按照某种比例上采样),并在上采样后的图像上再次搜索。
如果设置为更高的值,那么检测器将在更多不同大小的图像上搜索人脸。
因此,在这个例子中,1 表示检测器将在原始图像大小和上采样一次后的图像大小上搜索人脸。
capture.release()
与视频捕获相关的资源被正确释放,避免资源泄露。
cv.destroyAllWindows()
关闭所有由OpenCV创建的窗口,释放与之相关的资源
imagePaths = [os.path.join(path, f) for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))][表达式 for 变量 in 可迭代对象 if 条件]表达式:os.path.join(path, f)
对于满足条件(即是一个文件)的每个文件名f,这个表达式将目录路径path和文件名f组合成完整的文件路径。变量:f
文件名可迭代对象:os.listdir(path)
这个函数返回指定目录(path)下所有文件和子目录的名称列表条件:os.path.isfile(os.path.join(path, f))
这是一个条件判断语句。对于每个文件名f,它首先使用os.path.join(path, f)将目录路径和文件名组合成完整的文件路径。
然后,os.path.isfile()函数检查这个完整路径是否指向一个文件(而不是目录)。如果是文件,条件判断为真(True)[表达式 for 变量 in 可迭代对象 if 条件]
在这个例子中,表达式是os.path.join(path, f),变量是f,可迭代对象是os.listdir(path)返回的文件名列表,条件是os.path.isfile(os.path.join(path, f))。
因此,整行代码的作用是:遍历指定目录path下的所有文件和子目录名称,对于每个名称,检查它是否指向一个文件。如果是,就将其完整路径添加到imagePaths列表中。最终,imagePaths将包含目录path下所有文件的完整路径。
cv2.CascadeClassifier()
加载一个预训练的Haar或LBP特征级联分类器。这些分类器用于对象检测,比如人脸、眼睛等。
recognizer = cv.face.LBPHFaceRecognizer_create()
recognizer.train(faces, np.array(ids))
基于局部二值模式直方图(LBPH)的人脸识别器实例。利用图像中局部纹理特征进行人脸识别的方法。
使用 train() 方法来训练它,提供一组已知人脸的图像和对应的标签(通常是人的身份标识)。
import cv2 as cv
import argparse
import re
import dlib
from PIL import Image
import numpy as np
import os# 人脸矩形框
def paint_face_rectangle(image,faces):for face in faces:#遍历该张图片(帧)上 所有 人脸cv.rectangle(image, (face.left(), face.top()), (face.right(), face.bottom()), (0, 255, 0), 3)return image# def getImageAndLabel(path):
# faceSamples = []
# ids = []
# imagePaths = [os.path.join(path, f) for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
# face_detector = cv.CascadeClassifier("E:/python_project_sumvac/python_practice/haarcascade_frontalface_alt2.xml")
# for imagePath in imagePaths:
# PIL_image = Image.open(imagePath).convert('L')
# numpy_image = np.array(PIL_image, 'uint8')
# faces = face_detector.detectMultiScale(numpy_image)
# id = int(os.path.split(imagePath)[1].split('.')[0])
# # 提取文件名中数字和字母组合
# # filename = os.path.split(imagePath)[1]
# # id_match = re.search(r'[\w]+', filename) # 匹配字母和数字的组合
# # if id_match:
# # id = id_match.group() # 提取匹配的部分
# # else:
# # print(f"Warning: No valid ID found in {filename}, skipping file.")
# # continue
# for x, y, w, h in faces:
# ids.append(id)
# faceSamples.append(numpy_image[y:y+h, x:x+w])
# print('id:', id)
# print('fs:', faceSamples)
# return faceSamples, ids# def main():
# num = 1
# #开摄像头,取视频
# capture = cv.VideoCapture(0)
# #摄像头是否正常
# if capture.isOpened() is False:
# print("Camera is not opened!")
#
# while capture.isOpened():
# ret, frame = capture.read()
# if ret:
# gray_frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)#灰度转换
# detector = dlib.get_frontal_face_detector()
# detector_results = detector(gray_frame, 1)
#
# new_image = paint_face_rectangle(frame, detector_results)
#
# #显示
# cv.imshow("face detection", new_image)# #人脸录入实现# if cv.waitKey(1) & 0xFF == ord('r'):# cv.imwrite("E:/python_project_sumvac/python_practice/facein/"+str(num)+"zzt"+".jpg",frame)# print("Success to save"+str(num)+".jpg")# print("------")# num += 1# elif cv.waitKey(1) == 27:# break# capture.release()# cv.destroyAllWindows()#
# if __name__ == '__main__':
# # # main()
# # path = 'E:/python_project_sumvac/python_practice/facein/'
# # faces,ids = getImageAndLabel(path)
# # recognizer = cv.face.LBPHFaceRecognizer_create()
# # recognizer.train(faces, np.array(ids))
# # recognizer.write("E:/python_project_sumvac/python_practice/trainer.yml")
#
# recognizer = cv.face.LBPHFaceRecognizer_create()
# recognizer.read("E:/python_project_sumvac/python_practice/facein/trainer.yml")
# names=[]
# warningtime = 0recognizer = cv.face.LBPHFaceRecognizer_create()
recognizer.read("E:/python_project_sumvac/python_practice/trainer.yml")
names = []
warningtime = 0def face_detect_demo(img):gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)face_detector = cv.CascadeClassifier("E:/python_project_sumvac/python_practice/haarcascade_frontalface_alt2.xml")face = face_detector.detectMultiScale(gray, 1.1, 5, cv.CASCADE_SCALE_IMAGE, (100, 100), (300, 300))for x, y, w, h in face:cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)cv.circle(img, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 255, 0), thickness=1)ids, confidence = recognizer.predict(gray[y:y + h, x:x + w])if confidence > 80:global warningtimewarningtime += 1if warningtime > 100:# warning()warningtime = 0cv.putText(img, 'unkonw', (x + 10, y - 10), cv.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)else:cv.putText(img, str(names[ids - 1]), (x + 10, y - 10), cv.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)cv.imshow('result', img)def name():path = 'E:/python_project_sumvac/python_practice/facein/'#names = []imagePaths = [os.path.join(path,f) for f in os.listdir(path)]for imagePath in imagePaths:name = str(os.path.split(imagePath)[1].split('.',2)[1])names.append(name)capture = cv.VideoCapture(0)
name()#摄像头是否正常
if capture.isOpened() is False:print("Camera is not opened!")while capture.isOpened():ret, frame = capture.read()if ret:gray_frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)#灰度转换detector = dlib.get_frontal_face_detector()detector_results = detector(gray_frame, 1)new_image = paint_face_rectangle(frame, detector_results)#显示cv.imshow("face detection", new_image)if not ret:breakface_detect_demo(frame)if ord(' ') == cv.waitKey(10):breakcv.destroyAllWindows()
capture.release()
import cv2 as cv
import argparse
import re
import dlib
from PIL import Image
import numpy as np
import os#---------------------------------------------------------------------------------#
# 人脸矩形框
def paint_face_rectangle(image,faces):for face in faces:#遍历该张图片(帧)上 所有 人脸cv.rectangle(image, (face.left(), face.top()), (face.right(), face.bottom()), (0, 255, 0), 3)return image
#---------------------------------------------------------------------------------#
#实现对应(人脸,名字,id),训练,并生成.yml文件
def rel_ImageAndLabel(path):faceSamples = []#存人脸ids = []#存IDnames = []#imagePaths将包含目录path下所有文件的完整路径imagePaths = [os.path.join(path, f) for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]# face_detector = cv.CascadeClassifier("E:/python_project_sumvac/python_practice/haarcascade_frontalface_alt2.xml")detector = dlib.get_frontal_face_detector()for imagePath in imagePaths:# print(imagePath)gray_image = Image.open(imagePath).convert('L')# gray_image = cv.cvtColor(_image, cv.COLOR_BGR2GRAY) # 灰度转换(BGR->GRAY)numpy_image = np.array(gray_image, 'uint8')faces = detector(numpy_image, 1) # 该张灰度图片上的人脸id = int(os.path.split(imagePath)[1].split('.')[0])#提出来那个序号name = str(os.path.split(imagePath)[1].split('.', 2)[1])# print(id)for face in faces:x, y, w, h = face.left(), face.top(), face.width(), face.height()ids.append(id)names.append(name)faceSamples.append(numpy_image[y:y+h, x:x+w])print('ids:', ids)print('names:', names)# print('fs:', faceSamples)recognizer = cv.face.LBPHFaceRecognizer_create()try:recognizer.train(faceSamples, np.array(ids))print("Training completed successfully.")except Exception as e:print(f"Error during training: {e}")# recognizer.train(faceSamples, np.array(ids))recognizer.write("E:/python_project_sumvac/python_practice/trainer1.yml")return recognizer, namesdef main(recognizer,names):num = 3#开摄像头,取视频流(实例化)capture = cv.VideoCapture(0)#摄像头是否正常if capture.isOpened() is False:print("Camera Error!")key=Truewhile capture.isOpened():bol, _image = capture.read()#逐帧读取(_image,该帧图像数据)if bol:gray_image = cv.cvtColor(_image, cv.COLOR_BGR2GRAY)#灰度转换(BGR->GRAY)#人脸检测器(实例化)detector = dlib.get_frontal_face_detector()detector_faces = detector(gray_image, 1)#该张灰度图片上的人脸if key:if detector_faces:for face in detector_faces:x, y, w, h = face.left(), face.top(), face.width(), face.height()cv.rectangle(_image, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)# cv.circle(_image, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 255, 0), thickness=1)# print(gray_image.shape)_image_height, _image_width = gray_image.shapeif y >= 0 and y + h <= _image_height and x >= 0 and x + w <= _image_width:ids, confidence = recognizer.predict(gray_image[y:y + h, x:x + w])if confidence > 85:cv.putText(_image, 'unkonw', (x + 10, y - 10), cv.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)else:cv.putText(_image, str(names[ids - 1]), (x + 10, y - 10), cv.FONT_HERSHEY_SIMPLEX, 0.75,(0, 255, 0), 1)else:print("Error: The face region to be predicted is out of the image boundaries.")continuecv.imshow('face detection', _image)else:new_image = _imagecv.putText(new_image, "No face detected!", (291, 291), cv.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255),3)cv.imshow("face detection", new_image)else:new_image = _image#显示cv.imshow("face detection", new_image)#退出,暂停,继续按键控制if cv.waitKey(1) == 27:#ESCbreakelif cv.waitKey(1) & 0xFF == ord('c'):key = Falseelif cv.waitKey(1) & 0xFF == ord('v'):key = True#人脸录入实现elif cv.waitKey(1) & 0xFF == ord('r'):cv.imwrite("E:/python_project_sumvac/python_practice/facein/"+str(num)+".hml"+".jpg", _image)print("Success to save"+str(num)+".jpg")print("------")num += 1capture.release()cv.destroyAllWindows()if __name__ == '__main__':path = 'E:/python_project_sumvac/python_practice/facein/'recognizer,names = rel_ImageAndLabel(path)main(recognizer,names)
相关文章:
基于opencv和dlib的人脸识别定位
cv2 cv2是OpenCV库中的一个模块,OpenCV的Python绑定库。 图像处理功能,还集成了一些高级的计算机视觉算法。 cv2.rectangle 图像上绘制矩形,cv2.rectangle(Numpy图片, 左上坐标, 右下坐标, color, thickness粗度) cv2.cvtColor…...
力扣-字符串
字符串不能被修改,所以如果有想修改字符串的行为,需要转换为StringBuilder StringBuilder里也有很多封装方法String没有,比如reverse() StringBuilder sb new StringBuilder();// 添加字符串 sb.append("Hello"); sb.append(&qu…...
Non-Homophilic Graph Pre-Training and Prompt Learning
Non-Homophilic Graph Pre-Training and Prompt Learning KDD25 #paper/⭐# 目的:对异配图进行prompt 方法 邻居节点的综合嵌入 s v 1 ∣ V ( S v ) ∣ ∑ u ∈ V ( S v ) h u ⋅ s i m ( h u , h v ) , \mathbf{s}_{v}\frac{1}{|V(S_{v})|}\su…...
利用golang embed特性嵌入前端资源问题解决
embed嵌入前端资源,配置前端路由的代码如下 func StartHttpService(port string, assetsFs embed.FS) error {//r : gin.Default()gin.SetMode(gin.ReleaseMode)r : gin.New()r.Use(CORSMiddleware())// 静态文件服务dist, err : fs.Sub(assetsFs, "assets/di…...
10分钟从零开始搭建机器人管理系统(飞算AI)
1. 安装插件 https://www.feisuanyz.com/ 2. Intellij IDEA中运行 创建一个BS架构的机器人远程操控系统,具备机器人状态及位置实时更新,可以实现机器人远程遥控,可以对机器人工作日志进行统计分析,以及其它管理系统的常用功能3…...
C# Enumerable类 之 数据(类型)转换
总目录 前言 在 C# 中,System.Linq.Enumerable 类是 LINQ(Language Integrated Query)的核心组成部分,它提供了一系列静态方法,用于操作实现了 IEnumerable 接口的集合。通过这些方法,我们可以轻松地对集合…...
MariaDB Galera 原理及用例说明
一、底层原理 MariaDB Galera 集群是一种基于同步多主架构的高可用数据库解决方案,适合需要高并发、低延迟和数据强一致性的场景。以下是部署和配置 MariaDB Galera 集群的简明步骤: 1. 环境准备 节点要求:至少 3 个节点(奇数节点…...
HMC7043和HMC7044芯片配置使用
一,HMC7043芯片 MC7043独特的特性是对14个通道分别进行独立灵活的相位管理。所有14个通道均支持频率和相位调整。这些输出还可针对50 Ω或100 Ω内部和外部端接选项进行编程。HMC7043器件具有RF SYNC功能,支持确定性同步多个HMC7043器件,即确保所有时钟输出从同一时钟沿开始…...
Spring Boot 3.0核心特性解读
1.1 JDK 17 LTS支持(实测性能提升) 记录类(Record)与Spring Data JPA完美适配模式匹配简化类型判断密封类(Sealed Class)增强DTO安全性 // 使用Record优化DTOpublic record UserDTO(NotBlank String usern…...
在Qt中使用QFont设置字体样式
在Qt中使用QFont设置字体样式的步骤如下: 1. 创建QFont对象 QFont font;2. 设置字体属性 字体家族:使用setFamily()方法,建议提供备选字体。 font.setFamily("Arial, sans-serif"); // 备选通用字体字体大小: 点大小&…...
Linux网络_应用层自定义协议与序列化_守护进程
一.协议 协议是一种 "约定". socket api 的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接 收的. 如果我们要传输一些 "结构化的数据" 怎么办呢? 其实,协议就是双方约定好的结构化的数据 像下面,两端都知道数据结构…...
c++领域展开第十五幕——STL(String类的模拟实现)超详细!!!!
文章目录 前言string类的模拟实现string类——迭代器的模拟string类——默认成员函数string类——常用函数接口string类——输入输出重载 总结 前言 上篇博客已经简单的介绍了string类的一些接口,并且做了一些了解 同时也刷了一些oj题目,熟练使用一些str…...
解锁Egg.js:从Node.js小白到Web开发高手的进阶之路
一、Egg.js 是什么 在当今的 Web 开发领域,Node.js 凭借其事件驱动、非阻塞 I/O 的模型,在构建高性能、可扩展的网络应用方面展现出独特的优势 ,受到了广大开发者的青睐。它让 JavaScript 不仅局限于前端,还能在服务器端大展身手&…...
2024华为OD机试真题-螺旋数字矩阵-(C++)-E卷D卷-100分
2024华为OD机试题库-(E卷+C卷+D卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 用例1 用例2 用例3 考点 解题思路 代码 c++ 题目描述 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法: 给出数字个数 n (0 < n ≤ 999)和行数 …...
记录若依分离版脚手架升级 springboot 3.X版本 中的报错 以及集成mybatis plus
问题一: Web application could not be started as there was no org.springframework.boot.web.servlet.server.ServletWebServerFactory bean defined in the context.移除父pom中的tomcat相关配置 子pom中增加 SpringBoot Web容器 <!-- SpringBoot Web容器 …...
Docker基础-常见命令与数据卷
(一)常见命令 一、Docker常见命令 使用 docker pull 用来拉取仓库的镜像文件到本地;docker images 用于查看镜像文件;docker rmi 用于删除镜像文件docker build 用于自定义镜像,将来自己写的java项目也是通过这种方式来构建和打包࿱…...
C++基础(16 智能指针)
目录 1. 智能指针的使用场景分析 2. RAII和智能指针的设计思路 3. C标准库智能指针的使用 4. 智能指针的原理 5. shared_ptr和weak_ptr 5.1 shared_ptr循环引用问题 5.2 weak_ptr 如何检测内存泄漏(了解) 1. 智能指针的使用场景分析 下⾯程序中我…...
蓝耘智算携手通义万相2.1:助力 AIGC 生成效率与性能的革新实践
欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创…...
嵌入式学习-EXTI外部中断
STM32 是一种基于 ARM Cortex-M 内核的微控制器系列,广泛应用于嵌入式系统开发。中断(Interrupt)是 STM32 中一个非常重要的功能,它允许微控制器在执行主程序的同时,响应外部事件或内部事件的请求,从而实现…...
git 中 commit 的修改
修改最新的commit 1. 通过文本编辑器修改 # 修改最后一次提交的提交信息 git commit --amend2. 通过命令行修改 git commit --amend -m "新的提交信息"3. 仅添加遗漏的文件 # 添加遗漏的文件到暂存区 git add 遗漏的文件路径 # 修改最后一次提交,将暂…...
视觉Transformer(ViT)解析:它们比CNN更好吗?
深入理解计算机视觉任务中突破性架构的工作原理 1. 引言 自从自注意力机制(Self-Attention Mechanism)被引入以来,Transformer模型一直是自然语言处理(NLP)任务的首选。基于自注意力的模型具有高度并行化的特性&…...
rustup-init.exe 安装缓慢的解决办法
首先在rust官网下载安装程序,官网下载的 rustup-init.exe 下载慢,安装慢,或者直接卡死。 下载安装程序在本地,使用国内镜像加速 Rust 更新与下载。 使用国内镜像源:在 rustup-init.exe 程序文件夹下使用 PowerShell 中…...
动规【力扣】72. 编辑距离
数组含义: dp[i][j]含义是word1的i长度字符串和word2的j长度字符串所需的最少编辑距离。 递推公式: 1.当word1.charAt(i-1)word2.charAt(j-1)时,不用做任何操作,所以dp[i][j] dp[i-1][j-1]; 2.当word1.charAt(i-1)&a…...
获取哔站评论
一、文章立论 哔哩哔哩(B站)是当前年轻人十分喜爱的视频分享平台,以其丰富多样的内容、互动性强的社区氛围以及独特的弹幕文化深受用户喜爱。在该平台上,用户不仅可以观看各种类型的视频,如动画、游戏、科技、生活、影…...
LeetCode 链表章节
简单 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2…...
JavaScript实现倒计时函数
函数代码 /*** 倒计时* param {function} callback 回调函数,参数为当前剩余时间(time)* param {number} count 倒计时开始时间(s)* param {number} interval 间隔时间(ms)*/ function countDown(callback, count 60, interval 1000) {callback(count);const sta…...
Spring Boot全局异常处理:“危机公关”团队
目录 一、全局异常处理的作用二、Spring Boot 实现全局异常处理(附上代码实例)三、总结: 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢…...
Vue 调用摄像头扫描条码
以下是一个基于 Vue.js 的页面代码示例,用于调用摄像头并扫描条码。我们将使用 jsQR 库来解析二维码(或条形码),这是一个轻量级的 JavaScript 库。 实现步骤: 安装依赖:需要引入 jsQR 库。调用摄像头&…...
springboot3.x下集成hsqldb数据库
springboot3.x下集成hsqldb数据库 本文使用目前最新的sringboot3.4.3 和HyperSQL 2.7.4演示 HSQLDB数据库简介 HSQLDB(HyperSQL DataBase)是一个开放源代码的JAVA数据库。 可以透过 jdbc driver 来存取, 支持 ANSI-92 标准的 SQL 语法, 而且他占的空…...
网络流算法: Edmonds-Karp算法
图论相关帖子 基本概念图的表示: 邻接矩阵和邻接表图的遍历: 深度优先与广度优先拓扑排序图的最短路径:Dijkstra算法和Bellman-Ford算法最小生成树二分图多源最短路径强连通分量欧拉回路和汉密尔顿回路网络流算法: Edmonds-Karp算法网络流算法: Dinic算法 环境要求 本文所用…...
ArcGIS Pro可见性分析:精通地形视线与视域分析
在地理信息系统(GIS)的广泛应用中,可见性分析作为一项关键技术,发挥着不可替代的作用。 无论是城市规划、环境监测,还是军事侦察、景观设计,可见性分析都能提供精确的数据支持,帮助我们更好地理…...
jenkens使用笔记
jenkens使用笔记 笔记使用版本是2.492.1 git仓库ssh证书配置 已开始配置一直不行,然后下载插件,多次重启等一些列操作, 后来配置就可以工作了,原因不祥,不知道哪个配置起效了。 等回来闹明白了,再补充笔记…...
解决跨域请求的问题(CORS)
目录 解决跨域请求问题的方法 1. 服务器端配置响应头 2. JSONP(JSON with Padding) 3. 代理服务器 场景示例 前端代码(使用 Fetch API) 后端代码(使用 Node.js Express 并设置 CORS 响应头) 跨域资…...
未来经济范式争夺战:AR眼镜为何成为下一代交互终端的制高点?
未来经济范式争夺战:AR眼镜为何成为下一代交互终端的制高点? 在蒸汽机轰鸣的工业革命时代,煤炭、铁路、电报构建了第一个现代经济范式;互联网时代,电力、光纤、物流网络重构了全球经济版图。当前,我们正站…...
CentOS 7 安装Nginx-1.26.3
无论安装啥工具、首先认准了就是官网。Nginx Nginx官网下载安装包 Windows下载: http://nginx.org/download/nginx-1.26.3.zipLinxu下载 wget http://nginx.org/download/nginx-1.26.3.tar.gzLinux安装Nginx-1.26.3 安装之前先安装Nginx依赖包、自行选择 yum -y i…...
基于opencv消除图片马赛克
以下是一个基于Python的图片马赛克消除函数实现,结合了图像处理和深度学习方法。由于马赛克消除涉及复杂的图像重建任务,建议根据实际需求选择合适的方法: import cv2 import numpy as np from PIL import Imagedef remove_mosaic(image_pat…...
MongoDB Compass中MONGOSH常用查询整理
MongoDB Compass中MONGOSH常用查询整理 选择数据库基本的查找指令find() 方法findOne() 方法 高级查询条件比较操作符逻辑操作符投影操作排序操作限制和跳过操作limit() 方法skip() 方法 正则表达式查询数组查询 MongoDB Compass 是一款可视化的 MongoDB 数据库管理工具&#x…...
SSM笔记
一、获取对象 Scop 单例在容器启动时就直接创建,如果不希望这样,那就使用Lazy懒加载,只能在单例模式下 3、4不常用 FactoryBean创建 对象 创建对象比较复杂时,可以实现创建一个类实现FactoryBean,实现3个方法来创建…...
5G学习笔记之BWP
我们只会经历一种人生,我们选择的人生。 参考:《5G NR标准》、《5G无线系统指南:如微见著,赋能数字化时代》 目录 1. 概述2. BWP频域位置3. 初始与专用BWP4. 默认BWP5. 切换BWP 1. 概述 在LTE的设计中,默认所有终端均能处理最大2…...
MongoDB Chunks核心概念与机制
1. 基础定义 Chunk(块):MongoDB分片集群中数据的逻辑存储单元,由一组连续的片键(Shard Key)范围数据组成,默认大小为64MB(可调整范围为1-1024MB)。数据分…...
el-table 手动选择展示列
需求: 由于表格的列过多,用滚动条进行滚动对比数据不方便,所以提出,手动选择展示列 实现思路: 表格默认展示所有字段,每个字段通过 v-if 属性来进行判断是否显示;点击设置按钮图标(表格右上角࿰…...
Netty笔记3:NIO编程
Netty笔记1:线程模型 Netty笔记2:零拷贝 Netty笔记3:NIO编程 Netty笔记4:Epoll Netty笔记5:Netty开发实例 Netty笔记6:Netty组件 Netty笔记7:ChannelPromise通知处理 Netty笔记8…...
LeetCode Hot 100
1.两数之和 暴力解法:时间/空间复杂度 O(N),O(1) class Solution {public int[] twoSum(int[] nums, int target) {for(int i0;i<nums.length;i){for(int ji1;j<nums.length;j){if(nums[i] nums[j] target){return new int[]{i,j};}}}return new int[0];}…...
Vue.js 学习笔记
文章目录 前言一、Vue.js 基础概念1.1 Vue.js 简介1.2 Vue.js 的特点1.3 Vue.js 基础示例 二、Vue.js 常用指令2.1 双向数据绑定(v-model)2.2 条件渲染(v-if 和 v-show)2.3 列表渲染(v-for)2.4 事件处理&am…...
MySQL表连接详解
MySQL表连接详解 在 MySQL 中,表连接(Join)用于将多个表中的数据组合在一起,基于它们之间的关系进行查询。常见的表连接类型包括内连接、左连接、右连接和全外连接。以下是这些连接类型的详细说明: 1. 内连接&#x…...
【JAVA】ThreadPoolTaskExecutor 线程池学习、后端异步、高并发处理
ThreadPoolTaskExecutor 是 Spring 框架提供的一个线程池实现类,基于 Java 原生的 ThreadPoolExecutor 进行了封装和扩展,支持更灵活的配置,并与 Spring 的依赖注入、生命周期管理等功能无缝集成。它常用于异步任务处理、定时任务调度和高并发…...
PPT 小黑第38套
对应大猫40 幻灯片母板-最后一页-重命名为奇数页 奇偶页-点中标题-形状格式-形状填充-青色 最后一页页码左对齐 更换幻灯片背景:设计-设置背景格式-图片填充 【开始】-段落居中,对齐文本-中部对齐,排列-对齐-底端,-再水平居中…...
安卓开发相机功能
相机功能 安卓中的相机调用功能也经历了很多的方案升级,目前可选的官方方案是CameraX、Camera2、Camera(废弃),还有一些第三方免费或者是付费的相机库。对于大多数开发者,建议使用 CameraX。 CameraX CameraX 是 An…...
宝塔找不到php扩展swoole,服务器编译安装
1. 在php7.4中安装swoole,但找不到这个扩展安装 2. 服务器下载源码解压安装 http://pecl.php.net/package/swoole 下载4.8.0版本 解压到/www/server/php/74/下 3. 发现报错问题; 更新一下依赖 yum update yum -y install gcc gcc-c autoconf libjpe…...
Spring Web MVC
前言 今天来复习 Spring Web MVC 框架。它提供了一套高效、便捷的方式来构建 Web 应用程序。今天,就让我们一同深入 Spring Web MVC,从基础概念到实际应用,好好补补. 一、Spring Web MVC 是什么? 官方定义解读 根据官方描述&…...