EST-100身份证社保卡签批屏按捺终端PC版web版本http协议接口文档,支持web网页开发对接使用
<!DOCTYPE html> | |
<html lang="zh-CN"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width,initial-scale=1.0"> | |
<title>演示DEMO</title> | |
<script type="text/javascript" src="jquery-1.12.4.js"></script> | |
<style type="text/css"> | |
.mdiv div { | |
text-align: center; | |
} | |
.mdiv>div { | |
display: inline-block; | |
box-sizing: border-box; | |
/*height: 8rem;*/ | |
vertical-align: top; | |
} | |
.mdiv>div>div:first-child, | |
.dtitle { | |
background-color: #DDDDDD; | |
padding: 5px 0px; | |
margin: 0px 0px 15px 0px; | |
text-align: center; | |
} | |
mdiv img { | |
border: 1px solid gray; | |
} | |
button, | |
select, | |
input { | |
box-sizing: border-box; | |
width: 145px; | |
font-size: 16px; | |
padding: 5px; | |
margin-left: 15px; | |
margin-bottom: 25px; | |
} | |
</style> | |
</head> | |
<body> | |
<div class="dtitle" style="margin-bottom: 0px;border-bottom: 1px solid gray;">展示区</div> | |
<div class='mdiv'> | |
<div> | |
<div>设备屏幕监控</div> | |
<div> | |
<img style="width: 320px;height:200px;" id="imgDeviceScreen" οnerrοr="monitorDeviceFail(this)"> | |
</div> | |
</div> | |
<div> | |
<div>摄像头画面</div> | |
<div> | |
<img style="width: 320px;height:180px;" id="imgCameraVideo" οnerrοr="openCameraFail(this)"> | |
</div> | |
</div> | |
<div> | |
<div>拍照内容</div> | |
<div> | |
<img style="width: 320px;height:180px;" id="imgCameraPhoto"> | |
</div> | |
</div> | |
<div> | |
<div>签名图片</div> | |
<div> | |
<img style="width: 320px;height:180px;" id="imgSignPic"> | |
</div> | |
</div> | |
<div style="width: 120px;"> | |
<div style="padding-right: 20px;">身份证照片</div> | |
<div> | |
<img style="width: 100px;height:126px;margin-right: 20px;" id="imgIDCard"> | |
</div> | |
</div> | |
<div style="width: 150px;"> | |
<div>指纹图片</div> | |
<div> | |
<img style="width: 128px;height:180px;" id="imgFingerPic"> | |
</div> | |
</div> | |
</div> | |
<div id="dmsg" style="margin-top: 10px; margin-bottom: 30px;font-weight: bold;">返回消息:</div> | |
<div class="dtitle">操作区</div> | |
<div> | |
<button οnclick="monitorDevice()">打开设备屏幕监控</button> | |
<button οnclick="stopMonitor()">关闭设备屏幕监控</button> | |
<br> | |
<button οnclick="getCamera()">获取摄像头</button> | |
<select id="cameraSelect"></select> | |
<button οnclick="openCamera()">打开摄像头</button> | |
<button οnclick="takePhoto()">拍照</button> | |
<button οnclick="closeCamera()">关闭摄像头</button> | |
<button οnclick="openFaceVerify()">开始人证比对</button> | |
<button οnclick="stopFaceVerify()">取消人证比对</button> | |
<br> | |
<button οnclick="openSign()">打开签字窗口</button> | |
<button οnclick="stopSign()">关闭签字窗口</button> | |
<button οnclick="openFinger()">开始指纹采集</button> | |
<button οnclick="stopFinger()">取消指纹采集</button> | |
<button οnclick="openWeb()">打开网页</button> | |
<button οnclick="closeWeb()">关闭网页</button> | |
<button οnclick="evaluation()">服务评价</button> | |
<br> | |
<button οnclick="openReadChinaIdCard()">开始读取身份证</button> | |
<button οnclick="stopReadChinaIdCard()">取消读取身份证</button> | |
<button οnclick="openReadBankCard()">读取银行卡</button> | |
<br> | |
<button οnclick="readDeviceData()">读取数据</button> | |
<input type="text" name="DeviceNo" id="DeviceNo" placeholder="写入内容" disabled> | |
<button οnclick="initDeviceData(DeviceNo.value)" disabled>写入数据</button> | |
<br> | |
</div> | |
<script type="text/javascript"> | |
jQuery.support.cors = true | |
var selectElement = document.getElementById('cameraSelect') | |
/** | |
To 秋博君: | |
1、使用http服务,注意看每个函数里面的地址和参数,要做的和这个网页一样 | |
2、他们返回时用的 {code: int, message: string} 的形式,有时code=0表示成功,有时候code=1表示成功,你注意看ajax的success回调里面的判断 | |
**/ | |
function showMsg(msg) { | |
$("#dmsg").text("返回消息:" + msg) | |
} | |
function openCameraFail(obj) { | |
if (obj.src == null || obj.src.length == 0) return | |
alert("打开摄像头失败0308") | |
} | |
function monitorDeviceFail(obj) { | |
if (obj.src == null || obj.src.length == 0) return | |
alert("获取屏幕监控失败,可能是服务器未启动") | |
} | |
//开启设备屏幕监控 | |
function monitorDevice() { | |
$("#imgDeviceScreen").attr("src", "http://127.0.0.1:38089/sign=stream&time=" + new Date().getTime()) | |
} | |
//关闭设备屏幕监控 | |
function stopMonitor() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38089/closewebontablet", | |
dataType: "json", | |
success: function (data) { | |
/** {code:int , message:string} **/ | |
showMsg(data.code == 1 ? "成功关闭设备屏幕监控" : "当前并没有展示设备屏幕监控") | |
$("#imgDeviceScreen").attr('src', "") | |
$("#imgDeviceScreen").removeAttr('src') | |
} | |
}) | |
} | |
//打开签字窗口 设备有:取消、重签、确定 按个按钮 | |
function openSign() { | |
$("#imgSignPic").attr("src", "") | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/sign=start", | |
dataType: "json", | |
data: "{\"pos\": {\"top\":\"400\",\"left\":\"420\",\"width\":\"640\",\"height\":\"400\"}}", | |
// header: { //这一段是上一个版本有,我感觉是没必要了 | |
// 'Access-Control-Allow-Private-Network': 'true', | |
// 'Access-Control-Request-Method': 'GET, POST', | |
// 'Access-Control-Request-Headers': 'Content-Type' | |
// }, | |
success: function (data) { | |
/** {code:int , message:string, status:int[1-取消了签名 2-完成签名 ], image:string[图片base64] } **/ | |
if (data.code != 0) | |
return showMsg("打开签字窗口失败, 返回代码 = " + data.code + ", 返回信息 = " + data.message) | |
if (data.status != 2) | |
return showMsg("签名被取消了") | |
showMsg("签名成功") | |
$("#imgSignPic").attr("src", "data:image/png;base64," + data.image) | |
} | |
}) | |
} | |
//关闭签字窗口 | |
function stopSign() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/sign=stop", | |
dataType: "json", | |
success: function (data) { | |
/** 这里原来的DEMO就没有判断 **/ | |
} | |
}) | |
} | |
//开始指纹采集 | |
function openFinger() { | |
$("#imgFingerPic").attr("src", "") | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/finger=record", | |
dataType: "json", | |
//data: params, | |
success: function (data) { | |
/** {code:int, message:string, status:int[1-取消了采集 2-完成了采集], FigPic:string[图片base64] } **/ | |
if (data.code != 0) | |
return showMsg("采集指纹失败, 返回代码 = " + data.code + ", 返回信息 = " + data.message) | |
if (data.status != 2) | |
return showMsg("指纹采集被取消了") | |
showMsg("采集指纹成功") | |
$("#imgFingerPic").attr("src", "data:image/jpeg;base64," + data.FigPic) | |
} | |
}) | |
} | |
//取消指纹采集 | |
function stopFinger() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/finger=stop", | |
dataType: "json", | |
success: function (data) { | |
/** 这个是仿照关闭签字窗口添加的 **/ | |
} | |
}) | |
} | |
//在设备上打开网页 -这里是打开的测试页,要求在设备上从测试页打开签名要能用调用到签名、指纹也要能正常使用 | |
// [前面的SDK有这个破问题,我感觉新版不会有这个问题,还是测试一下放心些] | |
function openWeb() { | |
var url = location.href | |
myWindow = window.open(url, '_blank', 'height=800px, width=1280px, top=0, left=0, toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no') | |
myWindow.focus() | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/openwebontablet", | |
dataType: "json", | |
data: "{\"url\": \"" + url + "\"}", | |
success: function (data) { | |
/** {code:int , message:string} **/ | |
showMsg(data.message) | |
} | |
}) | |
} | |
//关闭网页 | |
function closeWeb() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/sign=closebrowser", | |
dataType: "json", | |
//data: params, | |
success: function (data) { | |
/** {code:int , message:string} **/ | |
showMsg(data.code == 1 ? "成功关闭网页" : "当前并没有展示网页") | |
} | |
}) | |
} | |
var cameraInfo = [] | |
//获取摄像头 | |
function getCamera() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/camera=get", | |
dataType: "json", | |
// contentType: "application/json", | |
success: function (data) { | |
/** {code:int , message:string, camera:[{index:int, name:string, resolution:[{width:int, height:int},{width:int, height:int,....}]}, ...]} **/ | |
//返回的resolution中摄像头支持的分辨率 | |
console.log(JSON.stringify(data)) | |
if (data.code != 0) | |
return showMsg(data.message) | |
showMsg(JSON.stringify(data)) | |
cameraInfo = data.camera | |
selectElement.innerHTML = '<span></span>' | |
for (var i = 0; i < cameraInfo.length; i++) { | |
var option = document.createElement('option') | |
option.value = cameraInfo[i].index | |
option.label = cameraInfo[i].name | |
selectElement.appendChild(option) | |
} | |
} | |
}) | |
} | |
//打开摄像头 | |
function openCamera() { | |
if (cameraInfo == null || cameraInfo.length == 0) | |
return showMsg("未调用获取摄像头或未查找到摄像头信息") | |
//直接以最小的分辨率打开摄像头 | |
var index = selectElement.value | |
var camera | |
for (var i = 0; i < cameraInfo.length; i++) { | |
if (i == index) { | |
camera = cameraInfo[i] | |
var width = camera.resolution[camera.resolution.length - 1].width | |
var height = camera.resolution[camera.resolution.length - 1].height | |
break | |
} | |
} | |
//这里应该的img标签,可以用onerror事件来得到打开摄像头失败的事件 | |
$("#imgCameraVideo").attr("src", "http://127.0.0.1:38088/camera=stream&index=" + index + "&width=" + width + "&height=" + height + "?" + new Date().getTime()) | |
} | |
//拍照 | |
function takePhoto() { | |
if (cameraInfo == null || cameraInfo.length == 0) { | |
return showMsg("未调用获取摄像头或未查找到摄像头信息") | |
} | |
var index = selectElement.value | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/camera=photo&index=" + index, | |
dataType: "json", | |
success: function (data) { | |
/** {code:int , message:string, picture:string[图像base64,jpg格式]} **/ | |
//返回的resolution中摄像头支持的分辨率 | |
// console.log(JSON.stringify(data)) | |
if (data.code != 0) { | |
return showMsg(data.message) | |
} | |
$("#imgCameraPhoto").attr("src", "") | |
$("#imgCameraPhoto").attr("src", "data:image/jpeg;base64," + data.picture) | |
} | |
}) | |
} | |
//关闭摄像头 | |
function closeCamera() { | |
if (cameraInfo == null || cameraInfo.length == 0) { | |
return showMsg("未调用获取摄像头或未查找到摄像头信息") | |
} | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/camera=close&index=" + selectElement.value, | |
dataType: "json", | |
success: function (data) { | |
/** {code:int , message:string} **/ | |
if (data.code != 0) { | |
return showMsg(data.message) | |
} else { | |
$("#imgCameraVideo").attr('src', "") | |
$("#imgCameraVideo").removeAttr('src') | |
return showMsg('摄像头已关闭') | |
} | |
} | |
}) | |
} | |
//开始人证比对 | |
function openFaceVerify() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/method=startPersonVerify", | |
dataType: "json", | |
success: function (data) { | |
/** {code:int , message:string, retData:{score:int[相似度], photo:string[base64拍照图], pic:string[base64身份证照片], ...其他身份证内容}} **/ | |
showMsg(data.message) | |
if (data.code != 0) return | |
$("#imgCameraPhoto").attr("src", "data:image/jpeg;base64," + data.retData.photo) | |
$("#imgIDCard").attr("src", "data:image/jpeg;base64," + data.retData.pic) | |
} | |
}) | |
} | |
//取消人证比对 | |
function stopFaceVerify() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/method=cancelPersonVerify", | |
dataType: "json", | |
success: function (data) { | |
/** {code:int , message:string} **/ | |
console.log(JSON.stringify(data)) | |
//showMsg(JSON.stringify(data)); | |
return showMsg(data.message) | |
} | |
}) | |
} | |
//开始读取身份证 提供一个界面提示,然后循环读取,读取到,或者网页上取消了,就返回 | |
function openReadChinaIdCard() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/method=startReadChinaIdCard", | |
dataType: "json", | |
success: function (data) { | |
console.log(JSON.stringify(data)) | |
/** {code:int , message:string, retData:{pic:string[base64身份证照片], ...其他身份证内容}} **/ | |
if (data.code != 0) return showMsg(data.message) | |
$("#imgIDCard").attr("src", "data:image/jpeg;base64," + data.retData.pic) | |
retdata = data.retData | |
delete retdata.pic | |
showMsg(JSON.stringify(retdata)) | |
} | |
}) | |
} | |
//取消读取身份证 | |
function stopReadChinaIdCard() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/method=cancelReadChinaIdCard", | |
dataType: "json", | |
success: function (data) { | |
console.log(JSON.stringify(data)) | |
/** {code:int , message:string} **/ | |
showMsg(JSON.stringify(data)) | |
} | |
}) | |
} | |
// 开始读取银行卡 | |
function openReadBankCard() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/method=startReadBankCard", | |
dataType: "json", | |
success: function (data) { | |
console.log(JSON.stringify(data)) | |
/** {code:int , message:string, data:string} **/ | |
if (data.code != 0) return showMsg(data.message) | |
showMsg(JSON.stringify(data)) | |
} | |
}) | |
} | |
//写数据 | |
function initDeviceData(data) { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/deviceDataInit" + data, | |
dataType: "json", | |
success: function (data) { | |
/** {code:int , message:string]} **/ | |
//返回的resolution中摄像头支持的分辨率 | |
console.log(JSON.stringify(data)) | |
if (data.code != 0) | |
return showMsg(data.message) | |
showMsg(JSON.stringify(data)) | |
} | |
}) | |
} | |
//读数据 | |
function readDeviceData() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/readDeviceData", | |
dataType: "json", | |
success: function (data) { | |
/** {code:int , message:string, data:string ]} **/ | |
//返回的resolution中摄像头支持的分辨率 | |
console.log(JSON.stringify(data)) | |
if (data.code != 0) | |
return showMsg(data.message) | |
showMsg(JSON.stringify(data)) | |
} | |
}) | |
} | |
function evaluation() { | |
$.ajax({ | |
type: "post", | |
url: "http://127.0.0.1:38088/evaluation", | |
dataType: "json", | |
success: function (data) { | |
/** {code:int , message:string, data:string ]} **/ | |
//评价信息 | |
console.log(JSON.stringify(data)) | |
if (data.code != 0) | |
return showMsg(data.message) | |
showMsg(JSON.stringify(data)) | |
} | |
}) | |
} | |
</script> | |
</body> | |
</html> | |
相关文章:
EST-100身份证社保卡签批屏按捺终端PC版web版本http协议接口文档,支持web网页开发对接使用
<!DOCTYPE html><html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,initial-scale1.0"><title>演示DEMO</title><script type"text/…...
基于SpringBoot的毕业论文管理系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的毕业论文管理系统,java…...
iToF人脸识别
iToF(间接飞行时间)是一种测量光飞行时间的技术,主要应用于人脸识别。 iToF人脸识别技术在哪些场景下会用到 iToF人脸识别技术可以应用于许多场景,以下是一些常见的应用场景: 平安城市:在城市监控系统中,iToF人脸识别技术可以用于实时监控、目标检测和识别,以及异常行为…...
Django开发3
Django开发3 Django开发编辑用户9.靓号管理9.1 表结构9.2 靓号列表9.3 新建靓号9.4 编辑靓号9.5 搜索手机号9.6 分页 10.时间插件11.ModelForm和BootStrap操作 各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料! Django开发 部门管…...
MS2358:96KHz、24bit 音频 ADC
产品简述 MS2358 是带有采样速率 8kHz-96kHz 的立体声音频模数 转换器,适合于面向消费者的专业音频系统。 MS2358 通过使用增强型双位 Δ - ∑ 技术来实现其高精度 的特点。 MS2358 支持单端的模拟输入,所以不需要外部器 件,非常适…...
【Android12】Android Framework系列---tombstone墓碑生成机制
tombstone墓碑生成机制 Android中程序在运行时会遇到各种各样的问题,相应的就会产生各种异常信号,比如常见的异常信号 Singal 11:Segmentation fault表示无效的地址进行了操作,比如内存越界、空指针调用等。 Android中在进程(主要…...
中间件系列 - Redis入门到实战(原理篇)
前言 学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记,如有侵扰,联系删除 学习目标 Redis数据结构Redis网…...
P2249 【深基13.例1】查找
P2249 【深基13.例1】查找 P2249 【深基13.例1】查找 题意 输入n 个不超过10的9次方的单调不减的(就是后面的数字不小于前面的数字)非负整数a1,a2,a3…然后进行 m 次询问。对于每次询问,给出一个整数q,要…...
linux常用shell脚本
查看系统当前进程连接数 netstat -an | grep ESTABLISHED | wc -l 如何在/usr目录下找出大小超过10MB的文件? find /usr -type f -size 10240k 添加一条到192.168.3.0/24的路由,网关为192.168.1.254? route add -net 192.168.3.0/24 netmask 255.2…...
Rust学习笔记005:结构体 struct
在 Rust 中,struct 是一种用于创建自定义数据类型的关键字,它允许你定义和组织数据的结构。struct 可以包含多个不同类型的字段(fields),每个字段都有一个名称和一个类型。 定义结构体 下面是一个简单的例子ÿ…...
maven中dependencyManagement标签
简介 dependencyManagement正如其名,用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后,子项目(module)中引用相同的依赖时可以不指定version标签自动引入…...
SparkStreaming与Kafka整合
1.3 SparkStreaming与Kafka整合 1.3.1 整合简述 kafka是做消息的缓存,数据和业务隔离操作的消息队列,而sparkstreaming是一款准实时流式计算框架,所以二者的整合,是大势所趋。 二者的整合,有主要的两大版本。 kaf…...
openwrt源码编译
下载openwrt源码 git clone https://github.com/openwrt/chaos_calmer.git // 官方下载地址 当前我们基于15.05版本开发,如果开发者想用最新的OpenWRT系统,可以下载 https://github.com/openwrt/openwrt.git git clone https://github.com/Ying-Yun/o…...
【Leetcode Sheet】Weekly Practice 22
Leetcode Test 1349 参加考试的最大学生数(12.26) 给你一个 m * n 的矩阵 seats 表示教室中的座位分布。如果座位是坏的(不可用),就用 # 表示;否则,用 . 表示。 学生可以看到左侧、右侧、左上、右上这四个方向上紧邻…...
ROS TF坐标变换 - 静态坐标变换
目录 一、静态坐标变换(C实现)二、静态坐标变换(Python实现) 如前文所属,ROS通过广播的形式告知各模块的位姿关系,接下来详述这一机制的代码实现。 模块间的位置关系有两种类型,一种是相对固定…...
香橙派5plus从ssd启动Ubuntu
官方接口图 我实际会用到的就几个接口,背面的话就一个M.2固态的位置: 其中WIFI模块的接口应该也可以插2230的固态,不过是pcie2.0的速度,背面的接口则是pcie3.0*4的速度,差距还是挺大的。 开始安装系统 准备工作 一张…...
JWT+Redis 实现接口 Token 校验
1、业务逻辑 有一些接口,需要用户登录以后才能访问,用户没有登录则无法访问。 因此,对于一些限制用户访问的接口,可以在请求头中增加一个校验参数,用于判断接口对应的用户是否登录。 而对于一些不需要登录即可访问的接…...
C语言 linux文件操作(二)
文章目录 一、获取文件长度二、追加写入三、覆盖写入四、文件创建函数creat 一、获取文件长度 通过lseek函数,除了操作定位文件指针,还可以获取到文件大小,注意这里是文件大小,单位是字节。例如在file1文件中事先写入"你好世…...
机器学习分类
1. 监督学习 监督学习指的是人们给机器一大堆标记好的数据,比如: 一大堆照片,标记出哪些是猫的照片,哪些是狗的照片 让机器自己学习归纳出算法或模型 使用该算法或模型判断出其他没有标记的照片是否是猫或狗 上述流程如下图所…...
CSS之元素转换
我想大家在写代码时有一个疑问,块级元素可以转换成其他元素吗? 让我为大家介绍一下元素转换 1.display:block(转换成块元素) display:block可以把我们的行内元素或者行内块元素转换成块元素 接下来让我为大家演示一下: <!DO…...
自激振荡电路笔记 电弧打火机
三极管相关 三极管的形象描述 二极管 简单求解(理想) 优先导通(理想) 恒压降 稳压管(二极管plus) 基础工作模块 理想稳压管的工作特性 晶体管之三极管(“两个二极管的组合” ) 电弧打火机电路 1.闭合开…...
Linux su 命令
Linux su(英文全拼:switch user)命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。 使用权限:所有使用者。 语法 su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USE…...
论文阅读: AAAI 2022行人重识别方向论文-PFD_Net
本篇博客用于记录一篇行人重识别方向的论文所提出的优化方法《Pose-Guided Feature Disentangling for Occluded Person Re-identification Based on Transformer》,论文中提出的PDF_Net模型的backbone是采用《TransReID: Transformer-based Object Re-Identificati…...
蓝牙物联网灯控设计方案
蓝牙技术是当前应用最广泛的无线通信技术之一,工作在全球通用的 2.4GHZ 的ISM 频段。蓝牙的工作距离约为 100 米,具有一定的穿透性,没有方向限制。具有低成本、抗干扰能力强、传输质量高、低功耗等特点。蓝牙技术组网比较简单,无需…...
Codeforces Round 900 (Div. 3)(A-F)
比赛链接 : Dashboard - Codeforces Round 900 (Div. 3) - Codeforces A. How Much Does Daytona Cost? 题面 : 思路 : 在序列中只要找到k,就返回true ; 代码 : #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)…...
vue大屏-列表自动滚动vue-seamless-scroll
vue大屏-列表自动滚动vue-seamless-scroll vue-seamless-scroll的官方文档地址:https://chenxuan0000.github.io/vue-seamless-scroll/zh/guide/ 具体效果可到官方文档那里查看。 1、下载依赖 npm install vue-seamless-scroll --save2、使用例子 <template…...
easyx的窗口函数
文章目录 前言一、EasyX的颜色二、EasyX的坐标和设备1,EasyX的坐标2,EasyX的设备 三、窗口函数1,初始化窗口函数2,关闭绘图窗口3,设置窗口背景板颜色4,清空绘图设备 前言 easyx是针对c的图形库,…...
【记录】开始学习网络安全
本文持续更新学习进度 背景 在私企干了5年虚拟化、云原生相关的运维,学到了很多,但不成体系。老板是清华毕业法国留学在德勤干过,最后回国创业的野路子。我工作是为了更好的生活,我挺担心老板因为家庭变故或者炒个原油宝&#x…...
【Java EE初阶三 】线程的状态与安全(下)
3. 线程安全 线程安全:某个代码,不管它是单个线程执行,还是多个线程执行,都不会产生bug,这个情况就成为“线程安全”。 线程不安全:某个代码,它单个线程执行,不会产生bug,…...
MD5算法
一、引言 MD5(Message-Digest Algorithm 5)是一种广泛应用的密码散列算法,由Ronald L. Rivest于1991年提出。MD5算法主要用于对任意长度的消息进行加密,将消息压缩成固定长度的摘要(通常为128位)。在密码学…...
Postman使用
Postman使用 Pre-request Script 参考: Scripting in Postman 可以请求、集合或文件夹中添加Pre-request Script,在请求运行之前执行JavaScript 如设置变量值、参数、Header和正文数据,也可以使用Pre-request Script来调试代码࿰…...
【python 的各种模块】(8) 在python使用matplotlib和wordcloud库来画wordcloud词云图
目录 目标:用python画出,网上流行的wordcloud词云图 1 准备工作 1.1环境准备 1.1.1安装步骤 1.2 资源准备 1.2.1 文本文件内容如下 1.2.2 图片资源 2 代码测试 2.1 第一版代码和效果 2.1.1 代码和效果 2.1.2 一般plt里解决中文乱码问题 2.1…...
MFC随对话框大小改变同时改变控件大小
先看一下效果; 初始; 窗口变大,控件也变大; 二个也可以; 窗口变大,控件变大; 默认生成的对话框没有WM_SIZE消息的处理程序;打开类向导,选中WM_SIZE消息,对CxxxDlg类添加该消息的处理程序;默认生成的函数名是OnSize; 添加了以后代码中会有三处变化; 在对话框类的…...
MK米客方德品牌 SD NAND在对讲机领域的引领作用
SD NAND在对讲机上的应用 SD NAND在对讲机上广泛应用,为其提供了高效可靠的存储解决方案。 这种存储技术不仅能容纳大量语音和数据文件,而且具有高速读取的特点,保障了实时通信的质量。SD NAND还注重安全性,通过数据加密和访问控…...
软件测试/测试开发丨Python 封装 学习笔记
封装的概念 封装(Encapsulation) 隐藏:属性和实现细节,不允许外部直接访问暴露:公开方法,实现对内部信息的操作和访问 封装的作用 限制安全的访问和操作,提高数据安全性可进行数据检查&#x…...
Vue: 事件修饰符, 键盘事件, 鼠标事件,计算属性
目录 事件修饰符 阻止默认事件 阻止冒泡 允许触发一次 捕获模式 self passive 键盘事件 keyup & keydown 按键别名 注意tab 注意系统按键 自定义按键 鼠标事件 简介 鼠标焦点事件 计算属性 差值语法实现 methods实现 computed实现 get() set() 总…...
【ROS2】MOMO的鱼香ROS2(四)ROS2入门篇——ROS2节点通信之话题与服务
ROS2节点通信之话题与服务点 引言1 理解从通信开始1.1 TCP(传输控制协议)1.2 UDP(用户数据报协议)1.3 基于共享内存的IPC方式 2 ROS2话题2.1 ROS2话题指令2.2 话题之RCLPY实现2.2.1 编写发布者2.2 2 编写订阅者2.2.3 运行测试 3 R…...
2022年山东省职业院校技能大赛高职组云计算赛项试卷第三场-公有云
2022年山东省职业院校技能大赛高职组云计算赛项试卷 目录 2022年职业院校技能大赛高职组云计算赛项试卷 【赛程名称】云计算赛项第三场-公有云 【任务1】公有云服务搭建[10分] 【适用平台】华为云 【题目1】私有网络管理[0.5分] 【题目2】云实例管理[0.5分] 【题目3】数…...
现代 NLP:详细概述,第 1 部分:transformer
阿比吉特罗伊 一、说明...
记一次Mac端mysql重置密码
在执行mysql命令的时候,报如下的错误,表示不支持mysql命令: zsh: command not found: mysql 1. 先查看mysql服务是否存在 在系统偏好设置中查看: 2. 发现mysql服务已经在运行,可能因为/usr/local/bin目录下缺失mysq…...
【开题报告】基于java的流浪之家动物领养网站的设计与开发
1.选题背景 流浪之家动物领养网站的设计与开发背景主要源于对流浪动物保护和宠物领养问题的关注。随着城市化进程加快,越来越多的流浪动物出现在城市中,它们面临着食物、住所和医疗资源的缺乏。同时,许多爱心人士希望能够给流浪动物一个温暖…...
训狗技术从初级到高级,专业有效的训狗训犬教程
一、教程描述 现在大部分人家里都会养些宠物,比如狗狗,虽然狗狗的一些行为习惯跟遗传有关,但是主人后天的影响也会给狗狗带来改变,本套教程教你纠正狗狗的不良行为,可以让你与狗愉快地玩耍。本套训狗教程,…...
如何让机器人具备实时、多模态的触觉感知能力?
人类能够直观地感知和理解复杂的触觉信息,是因为分布在指尖皮肤的皮肤感受器同时接收到不同的触觉刺激,并将触觉信号立即传输到大脑。尽管许多研究小组试图模仿人类皮肤的结构和功能,但在一个系统内实现类似人类的触觉感知过程仍然是一个挑战…...
datax
DataX DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。 https://github.com/alibaba/DataX Features DataX本身作为数据同…...
【Java】SpringBoot快速整合WebSocket实现客户端服务端相互推送信息
目录 什么是webSocket? webSocket可以用来做什么? WebSocket操作类 一:测试客户端向服务端推送消息 1.启动SpringBoot项目 2.打开网站 3.进行测试消息推送 4.后端进行查看测试结果 二:测试服务端向客户端推送消息 1.接口代码 2.使…...
C语言 linux文件操作(一)
文章目录 一、linux文件权限1.1文件描述符1.2文件描述符的范围和默认值1.3打开文件和文件描述符1.4标准文件描述符1.5文件描述符的重定向和关闭1.6I/O 操作1.7使用文件描述符进行进程通信1.8资源限制 二、C语言文件读写2.1open 函数2.2 flags参数详解2.3 lseek 函数 一、linux文…...
007、控制流
先看下本篇学习内容: 通过条件来执行 或 重复执行某些代码 是大部分编程语言的基础组成部分。在Rust中用来控制程序执行流的结构主要就是 if表达式 与 循环表达式。 1. if表达式 if表达式允许我们根据条件执行不同的代码分支。我们提供一个条件,并且做出…...
将学习自动化测试时的医药管理信息系统项目用idea运行
将学习自动化测试时的医药管理信息系统项目用idea运行 背景 学习自动化测试的时候老师的运行方式是把医药管理信息系统项目打包成war包后再放到tomcat的webapp中去运行,于是我想着用idea运行会方便点,现在记录下步骤方便以后查找最开始没有查阅资料&am…...
k8s 的YAML文件详解
一、yaml文件简介 Kubernetes只支持YAML和JSON格式创建资源对象,JSON格式用于接口之间消息的传递,适用于开发;YAML格式用于配置和管理,适用于云平台管理,YAML是一种简洁的非标记性语言。 1)yaml的语法规则&…...
【Pytorch】Pytorch或者CUDA版本不符合问题解决与分析
NVIDIA CUDA Toolkit Release Notes Package installation issues INSTALL PYTORCH 先声毒人:最好资料就是上面三份资料,可以通过官网明确的获取一手信息,你所遇到的99%的问题都可以找到,明确的解决方案,建议最好看…...