【保姆级教程】基于OpenCV+Python的人脸识别上课签到系统

【保姆级教程】基于OpenCV+Python的人脸识别上课签到系统

  • 一、软件安装及环境配置
    • 1. 安装IDE:PyCharm
    • 2. 搭建Python的环境
    • 3. 新建项目、安装插件、库
  • 二、源文件编写
    • 1. 采集人脸.py
    • 2. 训练模型.py
    • 3. 生成表格.py
    • 4. 识别签到.py
    • 5. 创建图形界面.py
  • 三、相关函数分析
    • 1.采集人脸
    • 2.训练模型
    • 3.识别签到
    • 4.创建图形界面

一、软件安装及环境配置

1. 安装IDE:PyCharm

  • 进入PyCharm官网:https://www.jetbrains.com/pycharm/ ,点击Download.
    请添加图片描述

  • 选择系统版本windows,选择Community版本(因为免费),点击Downlad。
    在这里插入图片描述

  • 下载完成后双击开始安装,点击Next.
    在这里插入图片描述

  • 选择合适路径(建议除了C以外的其他盘),点击Next。

  • 勾选所有选项,点击Next.
    在这里插入图片描述

  • 点击Install,选择JetBrains.
    在这里插入图片描述

  • 等待安装结束,Rboot nowI want manually reboot later随便选一个即可,点击finish.
    在这里插入图片描述

  • 双击打开Pycharm,首次打开会出现如下弹窗,勾选方框,点击Continue。勾选Don’t send
    在这里插入图片描述
    在这里插入图片描述
    至此pyCharm软件安装完毕.

2. 搭建Python的环境

  • 打开Python官方网站:https://www.Python.org,点击Downlads.
    在这里插入图片描述

  • 进入Python下载界面,选择Windows.
    在这里插入图片描述

  • 选择下面红框框住的版本:Download Windows x86-64 executable installer
    在这里插入图片描述
    这可能会下载的非常慢,推荐Internat Download Manager下载器(简称IDM),可以加速外网资源的下载,几个线程同时下载提高下载速度(官方说的最多五倍,个人觉得不止),官方地址https://www.internetdownloadmanager.com/download.html.
    在这里插入图片描述
    鼠标移到安装包上,按右键复制地址,打开IDM后,新建任务,把下载资源地址复制进去即可.
    在这里插入图片描述

  • 下载完成后,双击Python-3.6.5rc1-amd64文件进行安装,切记在选项Add Python 3.6 to PATH的框中打钩,然后点击Install Now进入下一步.
    在这里插入图片描述
    注:安装时一定要自定义安装解释器,因为后续库的安装地址同解释器的安装位置。项目小还好,项目大会把C盘“撑爆”.

  • 耐心等待,安装完成后会弹出一个界面,点击close.
    在这里插入图片描述

  • 检查Python环境是否搭建成功,在Windows窗口中按 win+R,打开命令窗口,输入cmd,点击“确定”按钮,在新弹出的命令窗口中输入“Python” (或“py”)回车,显示如下界面说明安装成功。
    在这里插入图片描述
    在这里插入图片描述

3. 新建项目、安装插件、库

  • 打开pyCharm,点击新建项目,为新项目命名并选择路径,点击Create.
    在这里插入图片描述
  • 安装中文插件,在搜索框中输入Chinese,安装中文简体语言包.
    在这里插入图片描述
    在这里插入图片描述
    安装成功后,点击Restart IDE重启软件,即可换为中文模式.
  • 安装项目所需要的库,本项目用到的第三方库:opencv-python、opencv-contrib-python、pillow、
    numpy、tk、xlrd、xlwt、xlutils、DateTime。
    由于外网网速原因,大概率会面临安装失败的问题,此时可以采用国内镜像源,利用pip加速安装.
    在这里插入图片描述
    以opencv-python库为例,打开终端,输入下述命令:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

在这里插入图片描述
终端pip安装完后,再打开python解释器安装软件包,速度快如飞雷神.
在这里插入图片描述
其余库安装流程类似,此处不做演示.

二、源文件编写

整体架构:
在这里插入图片描述

注意:把代码中涉及到的路径换为自己电脑下,否则编译器找不见报错

1. 采集人脸.py

演示:学号为:1111111111;姓名为:iu
在这里插入图片描述

首先,下载haarcascade_frontalface_default.xml,并把该xml文件移动到该项目下。下载地址https://gitcode.com/opencv/opencv/tree/master/data/haarcascades?utm_source=csdn_github_accelerator&isLogin=1

import cv2
import os

# 定义变量
classifier = cv2.CascadeClassifier(r'D:\hello_world\pythonProject\haarcascade_frontalface_default.xml')
font = cv2.FONT_HERSHEY_SIMPLEX
stu_id = input('请输入你的学号: \n')
stu_name = input('请输入你的姓名: \n')
count = 0

# 建立人脸数据文件夹
if not os.path.exists('data'):
    os.mkdir('data')

# 打开摄像头
capture = cv2.VideoCapture(0)

while capture.isOpened():
    kk = cv2.waitKey(1)
    _,farme = capture.read()

    gray = cv2.cvtColor(farme, cv2.COLOR_BGR2GRAY)
    faces = classifier.detectMultiScale(gray, 1.2, 5)

    if len(faces) != 0:
        for x, y, w, h in faces:
            cv2.rectangle(farme, (x, y), (x + w, y + h), (200, 0, 250), 2)
            # center = (x + w // 2, y + h // 2)
            # r = w // 2
            # cv2.circle(farme, center, r, (0, 250, 0), 2)
            cv2.putText(farme, 'Press "s" to save' , (x + w, y + h), font, 1, (200, 0, 250), 2)

            if kk == ord('s'):
                cv2.imwrite('data/'+str(stu_name)+'.'+str(stu_id)+'.'+str(count)+'.jpg', gray[y:y+h,x:x+w])
                count += 1
                print('采集了'+str(count)+'张图片。')

    cv2.putText(farme, 'Press "q" to quit', (30, 60), font, 1, (200, 0, 250), 2)
    cv2.imshow('Picture from capture',farme)

    if kk == ord('q'):
        print('共采集了学号为'+str(stu_id)+'姓名为'+str(stu_name)+'的同学的'+str(count)+'张图片')
        break

# 释放摄像头
capture.release()
cv2.destroyAllWindows()

操作流程:右键运行’采集人脸’,输入自己的ID号(笔者是10位学号),输入姓名首字母(例:张三,输入zs),Enter。按s保存采集到的图像,一般采集20张,按q退出(注意:按s和q时必须切换至英文输入法模式)

2. 训练模型.py

import cv2
import numpy as np
from PIL import Image
import os

create = cv2.face.LBPHFaceRecognizer_create()

def data_translate(path):
    face_data = []
    id_data = []
    file_list = [os.path.join(path, f) for f in os.listdir(path)]
    # print(file_list)
    # print(len(file_list))
    for file in file_list:
        PIL_image = Image.open(file).convert('L')
        np_image = np.array(PIL_image, "uint8")
        # print(file)
        # print(file.split('.'))
        # print(file.split('.')[1])
        id = int(file.split('.')[1])
        # print(file.split('.')[0])
        face_data.append(np_image)
        id_data.append(id)
    return face_data, id_data

print('开始训练模型')

# data_translate(r'data\data')
Faces,Ids = data_translate(r'D:\hello_world\pythonProject\data')

create.train(Faces,np.array((Ids)))

create.save('trainer.yml')
print('模型保存成功')

操作流程:右键运行’训练模型’,运行成功后,会生成一个trainer.yml文件.

3. 生成表格.py

# 引入库
import xlrd
import xlwt
from xlutils.copy import copy

# 创建工作簿
nwb = xlwt.Workbook()

cjb = nwb.add_sheet('成绩表')
cjb.write_merge(0, 0, 0, 3, '成绩表')
a = ['序号', '学号', '姓名', '成绩', '签名', '签到时间']
for i in range(6):
    cjb.write(1, i, a[i])
name = ["iu", "张三", "李四", "王五"]
id = ['1111111111', '2020001111', '2020002222', '2020003333']
b = 0
for a in range(2, 6):
    # 写入学号
    cjb.write(a, 1, id[b])
    # 写入姓名
    cjb.write(a, 2, name[b])
    cjb.write(a, 0, b+1)
    b = b+1
# 保存文件
nwb.save('人脸识别excel.xls')

操作流程:右键运行’生成表格’,可根据自己需求增加name和id个数.

4. 识别签到.py

在这里插入图片描述
在这里插入图片描述

# 导入库
import cv2
import time
import xlrd
import xlwt
from xlutils.copy import copy
from datetime import datetime

# 创建签名子函数
def sign_in(idx, name):
    style0 =xlwt.easyxf('font:height 300,bold on,color_index black', num_format_str= 'MM:DD HH:MM')
    style1 = xlwt.easyxf('font:height 300,bold on,color_index blue', num_format_str ='MM:DD HH:MM')
    wb = xlrd.open_workbook('人脸识别excel.xls')
    nwb = copy(wb)
    nbs=nwb.get_sheet(0)
    # 签名
    nbs.write(idx, 3, name, style1)
    # 签时间
    nbs.write(idx, 4, datetime.now(), style0)
    nbs.col(4).width=256*20
    nwb.save('人脸识别excel.xls')


# 加载模型
classfier = cv2.CascadeClassifier('D:\hello_world\pythonProject\haarcascade_frontalface_default.xml')
create = cv2.face_LBPHFaceRecognizer.create()
create.read('trainer.yml')

# 定义变量
font = cv2.FONT_ITALIC
starttime = time.time()
ID = ('UNKNOW')
name = ('UNKNOW')
count = 0

# 从表格中获取学号、姓名,与识别结果比对
workbook = xlrd.open_workbook('人脸识别excel.xls')
worksheet = workbook.sheet_by_index(0)
stu_id = worksheet.col_values(1)
stu_name = worksheet.col_values(2)
print(stu_id)
print(stu_name)

# 打开摄像头
capture = cv2.VideoCapture(0)
while capture.isOpened():
    kk = cv2.waitKey(1)
    _, farme = capture.read()
    gray = cv2.cvtColor(farme, cv2.COLOR_BGR2GRAY)
    faces = classfier.detectMultiScale(gray,1.2,5)
    if len(faces) != 0:
        for x, y, w, h in faces:
            cv2.rectangle(farme, (x,y), (x+w, y+h), (180, 120, 220), 2)
            gray1 = gray[y:y+h, x:x+w]
            label, conf = create.predict(gray1)
            print(label, conf)
            if conf < 50:
                index = [list for list, i in enumerate(stu_id)if i==str(label)]
                print(index)
                ID = (str(label))
                name = stu_name[index[0]]
                print(ID, name)
                count = count + 1
            else:
                ID = ('UNKOWN')
            cv2.putText(farme, str(ID), (x+w//2-50, y+h+30), font, 1.2, (200, 0, 250), 2)

    cv2.putText(farme, 'Press "q" to quit', (30, 60), font, 1.2, (200, 0, 250), 2)
    cv2.imshow('picture from capture.', farme)
    if kk == ord('q'):
        break

    if count > 30:
        sign_in(index[0], name)
        print('学号为:'+str(label)+',姓名为:'+str(name))
        break

    if time.time()-starttime>30:
        print('超时未识别')
        break

# 关闭所有窗口,释放摄像头
capture.release()
cv2.destroyAllWindows()

操作流程:右键运行’识别人脸’,运行成功后,打开人脸识别签到表.xls查看签到信息.

5. 创建图形界面.py

把上述功能做一个GUI界面,集成显示.
在这里插入图片描述

# 导入库
import tkinter as tk
import os
from PIL import Image, ImageTk


#创建采集人脸子函数
def CJRL():
    os.system('python 采集人脸.py')

#创建训练模型子函数
def XL():
    os.system('python 训练模型.py')

#创建识别签到子函数
def SBQD():
    os.system('python 识别签到.py')

#创建签到表
def QDB():
    os.startfile('人脸识别excel.xls')

#关闭窗口
def GB():
    win.destroy()

# 创建窗口
win = tk.Tk()
win.title('人脸识别签到系统')
win.geometry('310x500+800+50')
win.configure(bg='#FF8247')
# tk.Label(win, text="自动化人脸识别", font=('黑体', 20, 'bold'), bg='#00BFFF', fg='white').place(x=10,y=10)

# 设置图片以便使用
img = Image.open('D:\hello_world\pythonProject\cat.jpg')
photo = ImageTk.PhotoImage(img)

# 大标题
lab1 = tk.Label(win, text="自动化人脸识别", font=('黑体', 20, 'bold'), bg='#00BFFF', fg='white').grid(padx=20, pady=10, sticky=tk.W+tk.E)
# 显示图片
# lab2 = tk.Label(win, image=photo).grid(padx=20, pady=10, sticky=tk.W+tk.E)

# 按钮
but1 = tk.Button(win, text='采 集 人 脸 图 片', activebackground='yellow',command=CJRL, font=('黑体', 10, 'bold'), bg='#00BFFF', fg='white').grid(padx=20, pady=10, sticky=tk.W+tk.E)

but2 = tk.Button(win, text='训 练 模 型',activebackground='yellow', command=XL, font=('黑体', 10, 'bold'), bg='#00BFFF', fg='white').grid(padx=20, pady=10, sticky=tk.W+tk.E)

but3 = tk.Button(win, text='识 别 签 到',activebackground='yellow', command=SBQD, font=('黑体', 10, 'bold'), bg='#00BFFF', fg='white').grid(padx=20, pady=10, sticky=tk.W+tk.E)

but4 = tk.Button(win, text='签 到 表', activebackground='yellow',command=QDB, font=('黑体', 10, 'bold'), bg='#00BFFF', fg='white').grid(padx=20, pady=10, sticky=tk.W+tk.E)

but5 = tk.Button(win, text='关 闭 窗 口',activebackground='yellow', command=GB, font=('黑体', 10, 'bold'), bg='#00BFFF', fg='white').grid(padx=20, pady=10, sticky=tk.W+tk.E)

tk.Label(win, text='学号:1111111111 姓名:iu', bg='white', fg='black',font=('楷体',12)).grid(padx=20, pady=10, sticky=tk.W+tk.E)

# tk.Label(win, text='字图一体', image=photo ,compound='bottom', bg='white', fg='black',font=('楷体',12)).grid(padx=20, pady=10, sticky=tk.W+tk.E)


win.mainloop()

三、相关函数分析

1.采集人脸

classifier = cv2.CascadeClassifier(r'D:\py-project\pythonProject1\haarcascade_frontalface_default.xml')
  • CascadeClassifier:是OpenCV中的一个类,用于创建和管理级联分类器对象,允许加载一个预先训练好的分类器模型.
  • r’D:\pyproject\pythonProject1\haarcascade_frontalface_default.xml’:绝对路径。
  • haarcascade_frontalface_default.xml:该XML文件包含了用于Haar级联分类器的预训练模型,它是基于Haar特征和AdaBoost算法训练得到的,用于检测人脸
faces = classifier.detectMultiScale(gray, 1.2, 5)
  • detectMultiScale() :用于在给定的灰度图像 gray 中检测对象。它会返回一个包含检测到的对象边界框的列表。每个边界框由 (x, y, width, height) 组成,其中 (x, y) 是矩形左上角的坐标,width 和 height 分别是矩形的宽度和高度.
  • gray:这是输入的灰度图像。级联分类器通常在灰度图像上工作,因为颜色信息对于基于Haar特征的分类器不是必需的.
  • 1.2:scaleFactor 参数,用于构建图像金字塔。图像金字塔是一系列逐渐缩小的图像,用于在不同的尺度上检测对象。scaleFactor 指定了相邻图像之间的缩放比例。较小的 scaleFactor 值意味着金字塔中的图像尺寸减小得更慢,这有助于在不同尺度上更细致地检测对象。
  • 5:这是 minNeighbors 参数,它 指定了在声明找到对象之前,必须在同一个位置重叠检测到的对象的最小数量。较大的 minNeighbors 值可以减少误检,但可能会降低检测的灵敏度。

2.训练模型

create = cv2.face.LBPHFaceRecognizer_create()
  • LBPHFaceRecognizer_create() :OpenCV face 模块中的一个函数,它初始化一个LBPH人脸识别器对象。LBPH是一种基于图像纹理的识别方法,它通过计算局部二值模式的直方图来提取特征,这些特征随后用于人脸的识别.
  • 函数返回一个 LBPHFaceRecognizer 对象,这个对象包含了LBPH算法所需的所有参数和模型。
  • 与 create.train(faces, labels) 结合使用,其中, faces 和 labels 是已经准备好的训练数据和对应的标签
def data_translate(path):
    # 初始化用于存储面部图像数据的列表
    face_data = []
    # 初始化用于存储与面部图像对应的ID的列表(学号)
    id_data = []
    # 使用os.path.join(path, f)将路径和文件名组合成完整的文件路径
    # 列表推导式用于创建包含所有文件完整路径的列表
    file_list = [os.path.join(path, f) for f in os.listdir(path)]

    # 遍历file_list中的每个文件路径
    for file in file_list:
        # 打开图像文件,并将其转换为灰度图像'L'模式
        PIL_image = Image.open(file).convert('L')
        # 转换为NumPy数组,数据类型为"uint8"
        np_image = np.array(PIL_image, "uint8")
        # 提取文件名中的ID部分,文件名中第一个'.'之后,第二个'.'之前的部分
        id = int(file.split('.')[1])
        # 将转换后的图像数组添加到face_data列表
        face_data.append(np_image)
        # 将提取的ID添加到id_data列表
        id_data.append(id)
    
    # 返回包含面部图像数据和对应ID的两个列表
    return face_data, id_data

3.识别签到

style0 =xlwt.easyxf('font:height 300,bold on,color_index black', num_format_str= 'MM:DD HH:MM')
  • xlwt.easyxf():函数用于创建一个Excel单元格样式对象,这个对象包含了一系列的格式化设置,可以应用于一个或多个单元格.
  • font:height 300 :设置字体大小为300,这通常对应于Excel中的11号字体.
  • bold on: 表示文本加粗.
  • color_index black :设置文本颜色为黑色。color_index是一个索引,用于指定Excel调色板中的颜色
  • num_format_str= ‘MM:DD HH:MM’:指定日期和时间应该以月-日 时:分的格式显示.
for x, y, w, h in faces:
    # 在图像farme上绘制矩形框,框住检测到的人脸区域
    # 参数(x, y)是矩形左上角的坐标,(x+w, y+h)是矩形右下角的坐标(注:坐标系在左上角)
    # (180, 120, 220)是矩形的颜色(BGR格式),2是线条的粗细
    cv2.rectangle(farme, (x, y), (x+w, y+h), (180, 120, 220), 2)
    
    # 从灰度图像gray中截取人脸区域,坐标(x, y)是人脸左上角,宽高为w和h
    gray1 = gray[y:y+h, x:x+w]
    
    # 使用人脸识别器create预测截取的人脸区域gray1的身份和置信度,前面create已经read过训练好的yml文件
    label, conf = create.predict(gray1)
    
    # 打印预测的标签(身份ID)和置信度
    print(label, conf)
    
    # 如果置信度小于50,认为识别结果比较可信
    if conf < 50:
        # 尝试找到与预测标签(create检测出的label)匹配的学生ID(excel表格中的stu_id),二者本质上都是学号.
        index = [list for list, i in enumerate(stu_id) if i == str(label)]
        print(index)
        
        # 假设index列表中有匹配的ID,把其转化为字符串格式,取出对应的学生姓名,生成表格.py生成excel默认是字符串格式(如不是,在单元格前+‘按回车)
        ID = (str(label))
        name = stu_name[index[0]]
        print(ID, name)
        
        # 对识别成功的人脸数量进行计数
        count = count + 1
    else:
        # 如果置信度大于或等于50,认为识别结果不可信,标记为未知
        ID = ('UNKNOWN')

4.创建图形界面

lab1 = tk.Label(win, text="自动化人脸识别", font=('黑体', 20, 'bold'), bg='#00BFFF', fg='white').grid(padx=20, pady=10, sticky=tk.W+tk.E)
  • tk.Label :是 tkinter 模块中的一个函数,用于创建一个标签(Label)组件,用于显示文本或图像,但不能包含用户交互元素,如按钮或输入框.
  • win:GUI窗口
  • text=“自动化人脸识别”:添加文本信息.
  • font=(‘黑体’, 20, ‘bold’):这个参数定义了标签文本的字体样式,包括字体(黑体),大小(20),以及加粗(bold).
  • bg=‘#00BFFF’:这个参数设置了标签的背景颜色,这里使用了十六进制颜色代码,表示浅蓝色.
    fg=‘white’:这个参数设置了标签文本的前景颜色(其实就是字体颜色),这里是白色.
  • .grid(…):这是 Label 组件的 grid 方法,用于将标签放置在父容器win窗口的网格布局中。
    (1)padx=20:这个参数设置了组件在窗口水平方向上的填充(外边距),这里是 20 像素。
    (2)pady=10:这个参数设置了组件在窗口垂直方向上的填充(外边距),这里是 10 像素。
    (3)sticky=tk.W+tk.E:这个参数定义了组件如何 “粘附” 到其网格单元格的边缘。这里 tk.W 表示西(左),tk.E 表示东(右),所以标签将填充整个单元格的宽度,从左到右。
but1 = tk.Button(win, text='采 集 人 脸 图 片', activebackground='yellow',command=CJRL, font=('黑体', 10, 'bold'), bg='#00BFFF', fg='white').grid(padx=20, pady=10, sticky=tk.W+tk.E)

but1参数大体上与lab1相同,此处仅简要说明activebackground=‘yellow’,其用于设置组件在被激活(active)状态下的背景颜色,即当组件获得焦点或者用户与之交互时(例如,鼠标悬停或点击),组件会进入激活状态。此处为点击按钮变黄.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/638977.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈分布式系统

目录 一、单机架构二、分布式架构1、应用服务与数据库分离2、负载均衡3、数据库读写分离4、引入缓存5、数据库分库分表6、引入微服务 一、单机架构 单机架构&#xff0c;只有一台服务器&#xff0c;这个服务器负责所有工作。 绝大多数公司的产品&#xff0c;都是这种单机架构。…

思科模拟器--06.单臂路由升级版--多端路由互连实验--24.5.20

实验图纸如下: 第0步: 先放置六台个人电脑,一台交换机和一台2911路由器(千兆路由器(G0开头的)) 接着,用直通线将 PC0的F0,PC1的F0分别和交换机的F0/0, F0/1连接 交换机的F0/3和路由器的G0/0连接 PC2的F0,PC3的F0分别和交换机的F0/4, F0/5连接 交换机的F0/6和路由器的G0/1…

【施磊】C++语言基础提高:深入学习C++语言先要练好的内功

课程总目录 文章目录 一、进程的虚拟地址空间内存划分和布局二、函数的调用堆栈详细过程三、程序编译链接原理1. 编译过程2. 链接过程 一、进程的虚拟地址空间内存划分和布局 任何的编程语言 → \to → 产生两种东西&#xff1a;指令和数据 编译链接完成之后会产生一个可执行…

【传知代码】Modnet 人像抠图-论文复现

文章目录 概述原理介绍核心逻辑ModNet 的结构 环境配置WebUI 小结 论文地址 论文GitHub 本文涉及的源码可从Modnet 人像抠图该文章下方附件获取 概述 人像抠图技术在多个领域有着广泛的应用场景&#xff0c;包括但不限于&#xff1a; 展馆互动拍照&#xff1a;展馆中使用的抠…

K8S认证|CKA题库+答案| 11. 创建PVC

11、创建PVC 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node ok8s master …

玩转OpenHarmony智能家居:如何实现开发版“碰一碰”设备控制

一、简介 “碰一碰”设备控制&#xff0c;依托NFC短距通信协议&#xff0c;通过碰一碰的交互方式&#xff0c;将OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;标准系统设备和全场景设备连接起来&#xff0c;解决了应用与设备之间接续慢、传输难的问题&…

Java web应用性能分析之【高并发之缓存-多级缓存】

说到缓存&#xff0c;作为java开发第一时间想到的是不是上图所示的Redis&#xff0c;又或者是Guava Cache、Caffeine、EhCache这些&#xff1b;Redis作为分布式缓存、其他的可以作为本地缓存。但是作为一名资深开发人员&#xff0c;着眼的层面应该再提升一个级别&#xff0c;从…

LLM多模态——GPT-4o改变人机交互的多模式 AI 模型应用

1. 概述 OpenAI 发布了迄今为止最新、最先进的语言模型 – GPT-4o也称为“全“ 模型。这一革命性的人工智能系统代表了一次巨大的飞跃&#xff0c;其能力模糊了人类和人工智能之间的界限。 GPT-4o 的核心在于其原生的多模式特性&#xff0c;使其能够无缝处理和生成文本、音频…

微信小程序开发环境的搭建

一、注册微信小程序账号 二、安装微信开发者工具 1.下载微信开发者工具。 官网下载地址&#xff1a;https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/downloads.html 2、选择稳定版Window64下载安装 3、下载完毕后&#xff0c;点击下一步安装 三、使用微信开发者工具…

slam14讲(第8讲、前端里程计)LK光流、直接法

直接法的引出 因为第7讲大部分都是讲特征点法&#xff0c;通过提取orb特征点和点的描述子&#xff0c;来构建两帧图像之间的特征点对应关系。这种方法会有缺点&#xff1a; 关键点和描述子提取计算耗时&#xff0c;如果相机的频率高&#xff0c;则slam算法大部分耗时被占。特…

2种方法将集合数据List构建成树形结构

文章目录 递归循环构建树结构hutool.TreeUtil.build构建树结构 递归循环构建树结构 先查最外层树节点数据&#xff0c;再递归遍历每一层子节点数据 public ApiResultDto<List<LocationDto>> getTreeByParams(LocationSearchDto searchDto, SecurityUser user) {// …

代码随想录算法训练营第三十六天|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

860.柠檬水找零 文档讲解&#xff1a;代码随想录 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 注意看提示&#xff1a; bills[i] 不是 5 就是 10 或是 20 场景较为固定 遇到了20&#xff0c;优先消耗10 class Solution:def lemonadeChange(self, bills: …

秋招突击——算法——模板题——区间DP——合并石子

文章目录 题目内容思路分析实现代码分析与总结 题目内容 思路分析 基本思路&#xff0c;先是遍历区间长度&#xff0c;然后再是遍历左端点&#xff0c;最后是遍历中间的划分点&#xff0c;将阶乘问题变成n三次方的问题 实现代码 // 组合数问题 #include <iostream> #in…

宝塔Linux下安装EMQX服务并设置匿名访问

简述 之前有在Windows和Linux下搭建过EMQX服务并且使用方面都没问题,但那都是使用的用户和密码方式访问,且前提都是通过浏览器进入EMQX的配置页面设置的属性; 但这次使用的是腾讯云租用的宝塔Liniux,由于没有浏览器只能通过命令行方式修改EMQX配置以达到目的;由于事先没看…

使用 CapSolver API 服务解决 Arkose Labs FunCaptcha 验证码

使用 CapSolver API 服务解决 Arkose Labs FunCaptcha 验证码 FunCaptcha 以其复杂的图像验证而闻名&#xff0c;对自动化系统构成了巨大的挑战。CapSolver 的 API 服务利用先进的 AI 技术轻松应对和解决 FunCaptcha 挑战。本指南探讨了 CapSolver 如何实现无缝自动化&#xff…

汇聚荣科技有限公司优点有哪些?

在当今快速发展的科技时代&#xff0c;企业之间的竞争愈发激烈。作为一家专注于科技创新与研发的公司&#xff0c;汇聚荣科技有限公司凭借其卓越的技术实力和创新能力&#xff0c;在业界树立了良好的口碑。那么&#xff0c;汇聚荣科技有限公司究竟有哪些优点呢?接下来&#xf…

XX数字中台技术栈及能力

XX数字中台技术栈及能力 1 概述 XX数字中台面向数据开发者、数据管理者和数据应用者&#xff0c;提供数据汇聚、融合、治理、开发、挖掘、共享、可视化、智能化等能力&#xff0c;实现数据端到端的全生命周期管理&#xff0c;以共筑数字基础底座&#xff0c;共享数据服务能力…

The Missing Semester of Your CS Education(计算机教育中缺失的一课)

Shell 工具和脚本(Shell Tools and Scripting) 一、shell脚本 1.1、变量赋值 在bash中为变量赋值的语法是foobar&#xff0c;访问变量中存储的数值&#xff0c;其语法为 $foo。 需要注意的是&#xff0c;foo bar &#xff08;使用空格隔开&#xff09;是不能正确工作的&…

llama-factory学习个人记录

框架、模型、数据集准备 1.llama-factory部署 # 克隆仓库 git clone https://github.com/hiyouga/LLaMA-Factory.git # 创建虚拟环境 conda create --name llama_factory python3.10 # 激活虚拟环境 conda activate llama_factory # 安装依赖 cd LLaMA-Factory pip install -…

Java 使用继承和重写父类方法写一个商品入库案例

package 练习.商品入库;import java.util.Scanner; // 抽象手机类 public abstract class Phone {//测试方法public static void main(String[] args){// 华为手机huawei h new huawei();h.setName("华为P40");h.setPrice(1999.99);h.setConfiguration("8128GB…