AI智慧社区--人脸识别
前端
人脸的采集按钮:
首先对于选中未认证的居民记录,进行人脸采集
前端的按钮
<el-form-item><el-button v-has="'sys:person:info'" type="info" icon="el-icon-camera" :disabled="ids.length <= 0" @click="cameraHandle()">人脸采集</el-button></el-form-item>
对应的采集方法:
cameraHandle() {//选择多条数据的情况下if (this.ids.length > 1) {this.$message.error('人脸采集只能选择单条数据')return}//已经认证的情况下if (this.ids[0].state === 2) {this.$message.error('人脸识别已通过,不需要重复识别')return}this.faceVisible = truethis.$nextTick(() => {this.$refs.face.init(this.ids[0].personId)})},
跳转到人脸采集的弹窗
弹窗代码代码
<template><el-dialog:title="'采集人脸相片'":close-on-click-modal="false":visible.sync="visible"width="1100px"><el-form ref="dataForm" :model="dataForm" label-width="100px" style="width:95%;"><el-row><el-col :span="9"><el-form-item label="" style="margin: 0;"><video v-if="openSuccess" id="videoCamera" autoplay width="260" height="200" style="border: none;" /></el-form-item></el-col><el-col :span="3" style="height: 200px;display: flex; justify-content: center;align-items: center;flex-wrap: wrap;"><el-button v-if="openSuccess" size="small" type="primary" style="width: 80px; text-align: center;" @click="setImage()">拍照</el-button><el-uploadclass="upload-demo"action="#":show-file-list="false":http-request="fileUpload"><el-button size="small" type="primary">上传人脸</el-button></el-upload></el-col><el-col :span="8" style="display: flex; justify-content: center; align-items: center;"><canvas id="canvasCamera" style="display:none;" width="640" height="480" /><img v-if="imgSrc" :src="imgSrc" alt height="200"></el-col></el-row><hr><el-row><el-col :span="12"><el-card><div class="text item"><b><font color="red">常见问题:</font></b><br><br>1、不支持IE浏览器,建议使用火狐、谷歌、Edge浏览器进行考试<br><br>2、若浏览器弹出是否允许调用摄像头,请点击允许<br><br>3、<font color="red">必须使用https加密协议,摄像头方能正常使用</font><br><br>4、如果问题还存在,请按<ahref="https://examai.cn/pc/zhinan.pdf"target="_blank"><font color="red"><b>启用摄像头操作指南</b></font></a>进行操作><br><br>5、本模块仅供测试接口,具体使用请以实际情况为准</div></el-card></el-col><el-col :span="12"><img src="@/assets/images/cm.png" width="100%"></el-col></el-row></el-form></el-dialog>
</template>
<script>
import { addPerson } from '@/api/sys/person'
export default {data() {return {visible: false,dataForm: {personId: '',extName: '',fileBase64: ''},imgSrc: '',video: null,context: null,canvas: null,openSuccess: true}},watch: {visible(val) {if (val) {this.imgSrc = ''setTimeout(() => {this.getCamera()}, 1000)} else {if (this.openSuccess) {this.closeCamera()}}}},created() {setTimeout(() => {this.getCamera()}, 1000)this.init()},methods: {init(personId) {this.visible = truethis.dataForm.personId = personId},// 表单提交dataFormSubmit() {const _this = thisthis.$refs['dataForm'].validate((valid) => {if (valid) {const param = {//人员的ID'personId': this.dataForm.personId,//文件的后缀'extName': this.dataForm.extName,//文件的Base64编码'fileBase64': this.dataForm.fileBase64}addPerson(param).then(res => {if (res.code === 200) {_this.visible = false_this.$emit('refreshDataList')_this.$message.success(res.msg)} else {_this.$message.error(res.msg)}})}})},// 打开摄像头getCamera() {this.video = document.getElementById('videoCamera')this.canvas = document.getElementById('canvasCamera')this.context = this.canvas.getContext('2d')const errocb = () => {this.$message.error('摄像头打开失败!')this.openSuccess = false}if (navigator.webkitGetUserMedia) {navigator.webkitGetUserMedia({ audio: false, video: true }, (stream) => {// video.src=window.URL.createObjectURL(stream);this.video.srcObject = streamthis.video.play()}, errocb)} else if (navigator.mediaDevices.getUserMedia) {// var constraints = { audio: true, video: { width: 1280, height: 720 } };const constraints = { audio: false, video: true }navigator.mediaDevices.getUserMedia(constraints).then((stream) => {// var video = document.querySelector('video');this.video.srcObject = streamthis.video.onloadedmetadata = (e) => {this.video.play()}})} else if (navigator.getUserMedia) {navigator.getUserMedia({ audio: false, video: true }, (stream) => {this.video.src = window.webkitURL.createObjectURL(stream)this.video.srcObject = streamthis.video.play()}, errocb)} else {alert('你的浏览器不支持打开摄像头')}},// 绘制图片(拍照功能)setImage() {this.context.drawImage(this.video,0,0,this.video.videoWidth,this.video.videoHeight)this.imgSrc = this.canvas.toDataURL('image/png')this.dataForm.extName = this.imgSrc.substring(this.imgSrc.indexOf('/') + 1, this.imgSrc.indexOf(';'))this.dataForm.fileBase64 = this.imgSrc.substring(22)this.dataFormSubmit()},// 关闭摄像头closeCamera() {this.video.srcObject.getTracks()[0].stop()},// 关闭弹出层closeDialog() {this.visible = false},// 重写文件上传方法fileUpload(file) {this.fileToBase64(file.file).then(res => {// console.log(res)this.imgSrc = resthis.dataForm.extName = res.substring(res.indexOf('/') + 1, res.indexOf(';'))const len = 19 + this.dataForm.extName.lengththis.dataForm.fileBase64 = res.substring(len)// console.log(this.dataForm.fileBase64)this.dataFormSubmit()}).catch(err => {console.log(err)this.$message.error(err)})},// 转base64fileToBase64(file) {return new Promise((resolve, reject) => {const reader = new FileReader()let fileResult = ''if (file.size > 1024 * 1024) {reject('文件大小不能超过1M')}reader.readAsDataURL(file)// 开始转reader.onload = () => {fileResult = reader.result// data:image/jpeg;base64,}// 转 失败reader.onerror = function(error) {reject(error)}// 转 结束 咱就 resolve 出去reader.onloadend = function() {resolve(fileResult)}})}}
}
</script>
<style>.avatar-uploader .el-upload {border: 1px dashed #d9d9d9;border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;}.avatar-uploader .el-upload:hover {border-color: #409EFF;}.avatar-uploader-icon {font-size: 28px;color: #8c939d;width: 178px;height: 178px;line-height: 178px;text-align: center;}.avatar {width: 178px;height: 178px;display: block;}
</style>
调用后端接口
export function addPerson(data) {return request({//人脸录入url: '/sys/person/addPerson',method: 'post',data})
}
后端
后端代码
@LogAnnotation("人脸采集")@PostMapping("/addPerson")public Result addPerson(@RequestBody PersonFaceForm personFaceForm){//通过传入的表单信息中的ID 查询居民信息Person person = this.personService.getById(personFaceForm.getPersonId());//如果没有查询到相应的居民信息 则说明居民不存在if(person == null){return Result.error("居民不存在");}//数据库表中的state字段说明 人脸是否已经录入if(person.getState() == 2){return Result.error("人脸识别已通过,不需要重复识别");}//文件的Base64位编码是否已经存在 如果为空说明没有人脸图片if(personFaceForm.getFileBase64() == null || personFaceForm.getFileBase64().equals("")){return Result.error("请上传Base64编码的图片");}//如果相关的关于人脸上传的配置信息已经配置,则进行下面的内容if(apiConfiguration.isUsed()){// 方式二:调用腾讯API人脸识别//1.人脸认证账号创建//获取人脸识别的IDString faceId = newPerson(personFaceForm,person.getUserName());if(faceId == null){return Result.error("人脸识别失败");}if (faceId != null) {//生成头像访问路径String filename = faceId + "." + personFaceForm.getExtName();String faceUrl = urlPrefix + "community/upload/face/" + filename;person.setFaceUrl(faceUrl);person.setState(2);//更新人脸识别状态及图片地址this.personService.updateById(person);return Result.ok();}//方式一://模拟人脸识别//调用随机数的工具类 随机生成模拟id
// String faceId = RandomUtil.getBitRandom();
// //获取Base64编码的前60位
// String faceBase = personFaceForm.getFileBase64().substring(0, 60);
// //如果不是头像
// if(faceBase.equals("iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAAXNSR0IArs4c")) {
// return Result.error("人脸识别失败");
// }
// //存储头像
// //生成文件名 随机数+前端传入的文件首字母
// String filename = faceId + "." + personFaceForm.getExtName();
// //本地存储路径:D:/community/upload/face/+生成的文件名
// String savePath = face + filename;
// try {
// //将 Base64 编码的字符串解码,并将解码后的二进制数据写入到指定路径(savePath)的文件中
// Base64Util.decoderBase64File(personFaceForm.getFileBase64(), savePath);
// } catch (Exception e) {
// e.printStackTrace();
// }
// //生成头像访问路径 http://localhost:8181/community/upload/face/+生成的文件名
// String faceUrl = urlPrefix + "community/upload/face/" + filename;//文件协议
// //将更新的信息封装到实体类,从而更新数据库
// person.setFaceUrl(faceUrl);
// person.setState(2);
// person.setFaceBase(faceBase);
// //更新人脸识别状态及图片地址
// this.personService.updateById(person);
// return Result.ok();}return Result.error("未开启人脸识别");}
两种人脸识别的方式:
第一种:模拟人脸识别
基本思路:
1.通过传入的表单信息中的ID 查询居民信息
- 没有查询到相应的居民信息 则说明居民不存在
- 检查居民是否已经完成人脸认证
- 文件的Base64位编码是否已经存在 如果为空说明没有人脸图片
2.进行人脸认证
- 生成模拟的faceid 和 文件的Base64位编码
- 将人脸信息存储在本地
- 更新数据库中的信息
实现代码
package com.southwind.form;import lombok.Data;@Data
public class PersonFaceForm {//居民IDprivate Integer personId;//人脸图片的后缀private String extName;//文件的Base64编码private String fileBase64;
}
@LogAnnotation("人脸采集")@PostMapping("/addPerson")public Result addPerson(@RequestBody PersonFaceForm personFaceForm){//通过传入的表单信息中的ID 查询居民信息Person person = this.personService.getById(personFaceForm.getPersonId());//如果没有查询到相应的居民信息 则说明居民不存在if(person == null){return Result.error("居民不存在");}//数据库表中的state字段说明 人脸是否已经录入if(person.getState() == 2){return Result.error("人脸识别已通过,不需要重复识别");}//文件的Base64位编码是否已经存在 如果为空说明没有人脸图片if(personFaceForm.getFileBase64() == null || personFaceForm.getFileBase64().equals("")){return Result.error("请上传Base64编码的图片");}//如果相关的关于人脸上传的配置信息已经配置,则进行下面的内容if(apiConfiguration.isUsed()){//方式一://模拟人脸识别//调用随机数的工具类 随机生成模拟idString faceId = RandomUtil.getBitRandom();//获取Base64编码的前60位String faceBase = personFaceForm.getFileBase64().substring(0, 60);//如果不是头像if(faceBase.equals("iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAAXNSR0IArs4c")) {return Result.error("人脸识别失败");}//存储头像//生成文件名 随机数+前端传入的文件首字母String filename = faceId + "." + personFaceForm.getExtName();//本地存储路径:D:/community/upload/face/+生成的文件名String savePath = face + filename;try {//将 Base64 编码的字符串解码,并将解码后的二进制数据写入到指定路径(savePath)的文件中Base64Util.decoderBase64File(personFaceForm.getFileBase64(), savePath);} catch (Exception e) {e.printStackTrace();}//生成头像访问路径 http://localhost:8181/community/upload/face/+生成的文件名String faceUrl = urlPrefix + "community/upload/face/" + filename;//文件协议//将更新的信息封装到实体类,从而更新数据库person.setFaceUrl(faceUrl);person.setState(2);person.setFaceBase(faceBase);//更新人脸识别状态及图片地址this.personService.updateById(person);return Result.ok();}return Result.error("未开启人脸识别");}
第二种:利用腾讯云的人脸识别
人员库的创建
1.创建密钥
在控制台中,进入访问管理
API密钥管理---新建密钥 切记复制密钥
在项目的配置文件当中,配置密钥的信息
2.创建人员库
搜索人脸认证,创建人员库
配置相关的人员库信息
serverIp 和 area 不需要修改used 表示启用passPercent 表示识别率,比如 80 表示图片相似度 80即认为通过
基本思路
腾讯云的人脸识别:
- 创建人脸认证账号
- 将人脸信息保存到腾讯云
- 将人脸信息保存到本地
实现代码:
@LogAnnotation("人脸采集")@PostMapping("/addPerson")public Result addPerson(@RequestBody PersonFaceForm personFaceForm){//通过传入的表单信息中的ID 查询居民信息Person person = this.personService.getById(personFaceForm.getPersonId());//如果没有查询到相应的居民信息 则说明居民不存在if(person == null){return Result.error("居民不存在");}//数据库表中的state字段说明 人脸是否已经录入if(person.getState() == 2){return Result.error("人脸识别已通过,不需要重复识别");}//文件的Base64位编码是否已经存在 如果为空说明没有人脸图片if(personFaceForm.getFileBase64() == null || personFaceForm.getFileBase64().equals("")){return Result.error("请上传Base64编码的图片");}//如果相关的关于人脸上传的配置信息已经配置,则进行下面的内容if(apiConfiguration.isUsed()){// 方式二:调用腾讯API人脸识别
// 1.人脸认证账号创建
// 获取人脸识别的IDString faceId = newPerson(personFaceForm,person.getUserName());if(faceId == null){return Result.error("人脸识别失败");}if (faceId != null) {//生成头像访问路径String filename = faceId + "." + personFaceForm.getExtName();String faceUrl = urlPrefix + "community/upload/face/" + filename;person.setFaceUrl(faceUrl);person.setState(2);//更新人脸识别状态及图片地址this.personService.updateById(person);return Result.ok();}}return Result.error("未开启人脸识别");}
private String newPerson(PersonFaceForm vo,String personName) {String faceId = null;//获取PersonFaceForm中的属性值String faceBase64 = vo.getFileBase64();String extname = vo.getExtName();String personId = vo.getPersonId()+"";//保存路径为 D:/community/upload/face/String savePath = face;//if (faceBase64!=null && !faceBase64.equals("")) {FaceApi faceApi = new FaceApi();RootResp resp = faceApi.newperson(apiConfiguration, personId, personName, faceBase64);if(resp.getRet()==0) {JSONObject data = JSON.parseObject(resp.getData().toString());faceId = data.getString("FaceId");if(faceId!=null) {String filename = faceId + "." + extname;savePath += filename;try {Base64Util.decoderBase64File(faceBase64, savePath);} catch (Exception e) {e.printStackTrace();}}}else {return faceId;}}return faceId;}
调用的faceApi的newperson
public RootResp newperson(ApiConfiguration config, String personId, String personName, String image) {RootResp result = new RootResp();try{//使用配置对象中的 SecretId 和 SecretKey 创建一个 Credential 对象,用于身份验证Credential cred = new Credential(config.getSecretId(), config.getSecretKey());//用于配置HTTP请求HttpProfile httpProfile = new HttpProfile();//设置请求发送的目标服务器地址httpProfile.setEndpoint(config.getServerIp());//配置客户端的相关信息ClientProfile clientProfile = new ClientProfile();clientProfile.setHttpProfile(httpProfile);//与腾讯云真正进行交互的对象IaiClient client = new IaiClient(cred, config.getArea(), clientProfile);//创建一个 JSONObject 对象,用于存储请求参数JSONObject paramObj = new JSONObject();paramObj.put("GroupId", config.getGroupId());paramObj.put("PersonId", config.getPersonIdPre() + personId);paramObj.put("PersonName", personName);paramObj.put("Image", image);CreatePersonRequest req = CreatePersonRequest.fromJsonString(paramObj.toJSONString(), CreatePersonRequest.class);CreatePersonResponse resp = client.CreatePerson(req);result.setData(CreatePersonResponse.toJsonString(resp));} catch (TencentCloudSDKException e) {result.setRet(-1);result.setMsg(e.toString());logger.error(e.toString());}logger.info(result);return result;}
相关文章:
AI智慧社区--人脸识别
前端 人脸的采集按钮: 首先对于选中未认证的居民记录,进行人脸采集 前端的按钮 <el-form-item><el-button v-has"sys:person:info" type"info" icon"el-icon-camera" :disabled"ids.length < 0" …...
C++11—右值引用
目录 简介 左值和右值 左值 右值 右值引用 生命周期 引用折叠 实际应用 移动语义 移动构造函数 移动赋值运算符 完美转发 简介 之前我们曾学习过引用叫左值引用,但那是C98的,在C11中新增了一种引用叫右值引用。右值引用主要用于支持移动语…...
Workbench 中的热源仿真
探索使用自定义工具对移动热源进行建模及其在不同行业中的应用。 了解热源动力学 对移动热源进行建模为各种工业过程和应用提供了有价值的见解。激光加热和材料加工使用许多激光束来加热、焊接或切割材料。尽管在某些情况下,热源 (q) 不是通…...
Windows11 不依赖docker搭建 deepseek-R1 1.5B版本(附 Open WebUi搭建方式)
零、前言 过年这几天发现 DeepSeek 非常火,试用了一下发现确实不错。与豆包、kimi、perplexity 这些相比完全不是一个次元的存在,特别是用ta写文章的时候体验非常好。所以试着自己搭一个环境。 一、安装 Ollama和DeepSeek-R1 我的安装方式很简单…...
Error: Expected a mutable image
你的函数用了不支持的图片格式比如我的人脸检测,本来要RGB565我却用JPEG所以报错...
【4Day创客实践入门教程】Day2 探秘微控制器——单片机与MicroPython初步
Day2 探秘微控制器——单片机与MicroPython初步 目录 Day2 探秘微控制器——单片机与MicroPython初步MicroPython语言基础开始基础语法注释与输出变量模块与函数 单片机基础后记 Day0 创想启程——课程与项目预览Day1 工具箱构建——开发环境的构建Day2 探秘微控制器——单片机…...
代码随想录算法训练营Day51 | 101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿
文章目录 101.孤岛的总面积思路与重点 102.沉没孤岛思路与重点 103.水流问题思路与重点 104.建造最大岛屿思路与重点 101.孤岛的总面积 题目链接:101.孤岛的总面积讲解链接:代码随想录状态:直接看题解了。 思路与重点 nextx或者nexty越界了…...
网络基础
协议 协议就是约定 网络协议是协议中的一种 协议分层 协议本身也是软件,在设计上为了更好的模块化,解耦合,也是设计成为层状结构的 两个视角: 小白:同层协议,直接通信 工程师:同层协议&…...
利用Spring Batch简化企业级批处理应用开发
1. 引言 1.1 批处理的重要性 在现代企业系统中,批处理任务用于处理大量数据,如报表生成、数据迁移、日终结算等。这些任务通常不需要实时响应,但需要高效、可靠地完成。批处理可以显著提高系统性能,减少实时系统的负载,并确保数据的完整性和一致性。 1.2 Spring Batch简…...
Python - pyautogui库 模拟鼠标和键盘执行GUI任务
安装库: pip install pyautogui 导入库:import pyautogui 获取屏幕尺寸: s_width, s_height pyautogui.size() 获取鼠标当前位置: x, y pyautogui.position() 移动鼠标到指定位置(可以先使用用上一个函数调试获取当…...
UE求职Demo开发日志#19 给物品找图标,实现装备增加属性,背包栏UI显示装备
1 将用到的图标找好,放一起 DataTable里对应好图标 测试一下能正确获取: 2 装备增强属性思路 给FMyItemInfo添加一个枚举变量记录类型(物品,道具,装备,饰品,武器)--> 扩展DataT…...
【PyQt】lambda函数,实现动态传递参数
为什么需要 lambda? 在 PyQt5 中,clicked 信号默认会传递一个布尔值(表示按钮是否被选中)。如果我们希望将按钮的文本内容传递给槽函数,需要通过 lambda 函数显式传递参数。 这样可以实现将按钮内容传递给槽函数&…...
Unity 2D实战小游戏开发跳跳鸟 - 跳跳鸟碰撞障碍物逻辑
在有了之前创建的可移动障碍物之后,就可以开始进行跳跳鸟碰撞到障碍物后死亡的逻辑,死亡后会产生一个对应的效果。 跳跳鸟碰撞逻辑 创建Obstacle Tag 首先跳跳鸟在碰撞到障碍物时,我们需要判定碰撞到的是障碍物,可以给障碍物的Prefab预制体添加一个Tag为Obstacle,添加步…...
LeetCode:121.买卖股票的最佳时机1
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:121.买卖股票的最佳时机1 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票…...
DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力
论文链接: [2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 实在太长,自行扔到 Model 里,去翻译去提问吧。 工作原理: 主要技术,就是训练出一些专有用途小模型&…...
SQL索引优化_提高系统响应速度的秘诀
1. 引言 1.1 索引的重要性 在数据库管理系统中,索引是提升查询性能的关键工具。合理的索引设计可以显著减少查询时间,提高系统的响应速度,从而改善用户体验。然而,不恰当的索引使用可能会适得其反,增加写操作的开销并导致性能下降。 1.2 文章目标与结构 本文旨在介绍如…...
MoonBit 编译器(留档学习)
MoonBit 编译器 MoonBit 是一个用户友好,构建快,产出质量高的编程语言。 MoonBit | Documentation | Tour | Core This is the source code repository for MoonBit, a programming language that is user-friendly, builds fast, and produces high q…...
基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)
酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 (1)系统首页 ÿ…...
重生之我在异世界学编程之C语言:深入指针篇(上)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文(1)内置数…...
Unity Shader Graph 2D - 跳动的火焰
在游戏中,火焰是一种常见的特效。通常来讲火焰特效通过粒子系统的方式实现的相对较多,本文将通过Shader Graph的方式来实现一种不同的火焰效果。 那么怎么实现呢 首先创建一个名为Fire的Shader Graph文件,然后创建一个名为M_Fire的材质球。 …...
CoRAG 来自微软与人大的创新RAG框架技术
微软与人大合作开发的CoRAG(Chain-of-Retrieval Augmented Generation)是一种创新的检索增强生成(RAG)框架,旨在通过模拟人类思考方式来提升大语言模型(LLM)在复杂问题上的推理和回答能力。以下是对CoRAG的深度介绍: 1. CoRAG的核心理念 CoRAG的核心思想是通过动态调…...
MySQL的GROUP BY与COUNT()函数的使用问题
在MySQL中,GROUP BY和 COUNT()函数是数据聚合查询中非常重要的工具。正确使用它们可以有效地统计和分析数据。然而,不当的使用可能会导致查询结果不准确或性能低下。本文将详细讨论 GROUP BY和 COUNT()函数的使用方法及常见问题,并提供相应的…...
DS常识问答:人民币升值贬值是什么回事
好的!我用一个简单的比喻来解释,就像用苹果换橘子一样: 1. **汇率是什么?** 假设你有人民币,别人有美元。汇率就是你们交换的“价格”。比如今天1美元能换7块人民币,明天可能变成7.5块或者6.5块&…...
docker直接运行arm下的docker
运行环境是树莓派A 处理器是 arm32v6 安装了docker,运行lamp 编译安装php的时候发现要按天来算,于是用电脑vm下的Ubuntu系统运行arm的docker 然后打包到a直接导入运行就可以了 第一种方法 sudo apt install qemu-user-static 导入直接运行就可以了…...
机器学习--概览
一、机器学习基础概念 1. 定义 机器学习(Machine Learning, ML):通过算法让计算机从数据中自动学习规律,并利用学习到的模型进行预测或决策,而无需显式编程。 2. 与编程的区别 传统编程机器学习输入:规…...
人机交互系统实验三 多通道用户界面
实验目的和要求 1)了解常见的多通道用户界面 2)查找资料,熟悉一种多通道用户界面并写出综述 实验环境 Windows10 实验内容与过程 (一) 实验内容: 要求上网查找资料,熟悉一种多通道用户界面并写出综述,可以是眼动跟踪、手势识别、 三维…...
Python(Pandas)数据分析学习
1.Pandas基本构成 引入Pandas import pandas as pd 1.Series 行 对应Excel中的一行数据,一维数据 定义Series # 第一个参数是具体数据 # 第二个参数的对应的索引下标 # 第三个参数的行名称 data pd.Series([1,2,3,4,5], index[a,b,c,d,e], namedata) print(d…...
JavaScript系列(53)--内存管理与垃圾回收机制详解
JavaScript内存管理与垃圾回收机制详解 🧹 今天,让我们深入探讨JavaScript的内存管理与垃圾回收机制。理解这些机制对于编写高性能、无内存泄漏的JavaScript应用至关重要。 内存管理基础概念 🌟 💡 小知识:JavaScrip…...
每日一题——用两个栈实现队列
用两个栈实现队列 题目描述数据范围示例 代码实现1. 代码思路push 操作:pop 操作: 2. 代码实现3. 代码解析4. 时间复杂度与空间复杂度 总结 题目描述 用两个栈来实现一个队列,使用 n 个元素来完成 n 次在队列尾部插入整数(push)和 n 次在队列…...
DeepSeek与OpenAI:谁是AI领域的更优选择?
在人工智能领域,DeepSeek和OpenAI是两个备受瞩目的玩家。尽管OpenAI凭借其强大的GPT系列模型在全球范围内获得了广泛的认可,但DeepSeek凭借其独特的技术优势和创新理念,正在逐渐成为许多企业和开发者的新选择。本文将对DeepSeek和OpenAI进行详…...
【爬虫】JS逆向解决某药的商品价格加密
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…...
deepseek v3 搭建个人知识库
目录 deepseek-r1本地部署,这个比较好,推荐 Chatbox连接ollama服务 知乎教程,需要注册: deepseek-r1本地部署,这个比较好,推荐 公司数据不泄露,DeepSeek R1本地化部署web端访问个人知识库搭建…...
ETCD集群证书生成
安装cfssl工具配置CA证书请求文件创建CA证书创建CA证书策略配置etcd证书请求文件生成etcd证书 继续上一篇文章《负载均衡器高可用部署》下面介绍一下etcd证书生成配置。其中涉及到的ip地址和证书基本信息请替换成你自己的信息。 安装cfssl工具 下载cfssl安装包 https://github…...
【软件测试项目实战】淘宝网订单管理功能
一、测试功能模块分析 选择淘宝网订单管理功能进行测试,核心子功能包含: 订单创建(商品结算、地址选择)订单状态变更(待付款、已付款、已发货、已收货、退款中)订单修改(地址修改、商品数量修…...
扩散模型(一)
在生成领域,迄今为止有几个主流的模型,分别是 GAN, VAE,Flow 以及 Diffusion 模型。 GAN:GAN 的学习机制是对抗性学习,通过生成器和判别器的对抗博弈来进行学习,这种竞争机制促使生成器不断提升生成能力&a…...
EF Core与ASP.NET Core的集成
目录 分层项目中EF Core的用法 数据库的配置 数据库迁移 步骤汇总 注意: 批量注册上下文 分层项目中EF Core的用法 创建一个.NET类库项目BooksEFCore,放实体等类。NuGet:Microsoft.EntityFrameworkCore.RelationalBooksEFCore中增加实…...
深入解析“legit”的地道用法——从俚语到正式表达:Sam Altman用来形容DeepSeek: legit invigorating(真的令人振奋)
深入解析“legit”的地道用法——从俚语到正式表达 一、引言 在社交媒体、科技圈甚至日常对话中,我们经常会看到或听到“legit”这个词。比如最近 Sam Altman 在 X(原 Twitter)上发的一条帖子中写道: we will obviously deliver …...
玩转ChatGPT:DeepSeek测评(科研思路梳理)
一、写在前面 DeepSeek-R1出圈了,把OpenAI的o3-mini模型都提前逼上线了(还免费使用)。 都号称擅长深度推理,那么对于科研牛马的帮助有多大呢? 我连夜试一试。 二、科研思路梳理 有时候我们牛马们做了一堆结果以后&…...
实验9 JSP访问数据库(二)
实验9 JSP访问数据库(二) 目的: 1、熟悉JDBC的数据库访问模式。 2、掌握预处理语句的使用 实验要求: 1、使用Tomcat作为Web服务器 2、通过JDBC访问数据库,实现增删改查功能的实现 3、要求提交实验报告,将代…...
CMake项目编译与开源项目目录结构
Cmake 使用简单方便,可以跨平台构建项目编译环境,尤其比直接写makefile简单,可以通过简单的Cmake生成负责的Makefile文件。 如果没有使用cmake进行编译,需要如下命令:(以muduo库echo服务器为例)…...
PyCharm中使用Ollama安装和应用Deepseek R1模型:完整指南
引言 人工智能和大型语言模型正在改变我们与技术交互的方式。Deepseek R1是一个强大的AI模型,而Ollama则是一个让我们能够轻松在本地运行这些模型的工具。本文将指导您如何使用Ollama安装Deepseek R1模型,并在PyCharm中创建一个简单的聊天应用。 © ivwdcwso (ID: u0121…...
编程AI深度实战:大模型知识一文打尽
系列文章: 编程AI深度实战:私有模型deep seek r1,必会ollama-CSDN博客 编程AI深度实战:自己的AI,必会LangChain-CSDN博客 编程AI深度实战:给vim装上AI-CSDN博客 编程AI深度实战:火的编程AI&…...
012-51单片机CLD1602显示万年历+闹钟+农历+整点报时
1. 硬件设计 硬件是我自己设计的一个通用的51单片机开发平台,可以根据需要自行焊接模块,这是用立创EDA画的一个双层PCB板,所以模块都是插针式,不是表贴的。电路原理图在文末的链接里,PCB图暂时不选择开源。 B站上传的…...
基于springboot+vue的哈利波特书影音互动科普网站
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
MySQL5.5升级到MySQL5.7
【卸载原来的MySQL】 cmd打开命令提示符窗口(管理员身份)net stop mysql(先停止MySQL服务) 3.卸载 切换到原来5.5版本的bin目录,输入mysqld remove卸载服务 测试mysql -V查看Mysql版本还是5.5 查看了环境变量里的…...
列表标签(无序列表、有序列表)
无序列表 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><…...
【数据结构】_链表经典算法OJ:分割链表(力扣—中等)
目录 1. 题目描述及链接 2. 解题思路 2.1 思路1 2.2 思路2 2.3 思路3(本题采取该解法) 3. 题解程序 1. 题目描述及链接 题目链接:面试题 02.04. 分割链表 - 力扣(LeetCode) 题目描述: 给你一个链表…...
深入核心:一步步手撕Tomcat搭建自己的Web服务器
介绍: servlet:处理 http 请求 tomcat:服务器 Servlet servlet 接口: 定义 Servlet 声明周期初始化:init服务:service销毁:destory 继承链: Tomcat Tomcat 和 servlet 原理&#x…...
ASP.NET Core与配置系统的集成
目录 配置系统 默认添加的配置提供者 加载命令行中的配置。 运行环境 读取方法 User Secrets 注意事项 Zack.AnyDBConfigProvider 案例 配置系统 默认添加的配置提供者 加载现有的IConfiguration。加载项目根目录下的appsettings.json。加载项目根目录下的appsettin…...
在 Ubuntu 上安装 Node.js 23.x
在 Ubuntu 上安装 Node.js 23.x 前提条件安装步骤1. 下载设置脚本2. 运行设置脚本3. 安装 Node.js4. 验证安装 参考链接总结 在现代 web 开发中,Node.js 是一个不可或缺的工具。它提供了一个强大的 JavaScript 运行时环境,使得开发人员可以在服务器端使用…...