人工智能
基于多信息融合的疲劳驾驶检测系统
1.眨眼检测原理基于dlib人脸识别68特征点检测、分别获取左右眼面部标志的索引,通过opencv对视频流进行灰度化处理,检测出人眼的位置信息。人脸特征点检测用到了dlib,dlib有两个关键函数:dlib.get_frontal_face_detector()和dlib.shape_predictor(predictor_path)。
前者是内置的人脸检测算法,检测人脸区域的界限后者是用来检测一个区域内的特征点,并输出这些特征点的坐标,它需要一个预先训练好的模型(通过文件路径的方法传入),才能正常工作。使用开源模型shape_predictor_68_face_landmarks.dat,可以得到68个特征点位置的坐标
点我下载开源数据集
基本原理:计算 眼睛长宽比EAR.当人眼在正常状态下时,EAR在某个值上下波动,当人眼闭合时,EAR迅速下降。所以我们认为当EAR低于某个阈值时,眼睛处于闭合状态。为检测眨眼次数,我们设置了阈值为0.2,如果当前帧两双眼睛宽高比的平均值小于0.2,则加1,如果连续3次都小于阈值,则表示进行了一次眨眼活动。
(68点landmark中可以看到37- ...
Python
Numpy详解
视频教程
1.什么是numpy一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算
==为什么学习numpy?==
1.快速
2.方便
3.科学计算的基础库
2.numpy基础2.1numpy创建数组(矩阵)
2.2numpy中常见的更多数据类型
2.3数据类型的操作
==代码示例==
123456789101112131415161718192021222324252627282930313233343536373839404142# coding=utf-8import numpy as npimport random#使用numpy生成数组,得到ndarray的类型t1 = np.array([1,2,3,])print(t1)print(type(t1))t2 = np.array(range(10))print(t2)print(type(t2))t3 = np.arange(4,10,2)print(t3)print ...
Python
Matplotlib详解
视频教程
1.什么是matplotlibmatplotlib: 最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建
2.样例2.1折线图eg:假设一天中每隔两个小时(range(2,26,2))的气温(℃)分别是[15,13,14.5,17,20,25,26,26,27,22,18,15]
==matplotlib基本要点==
==设置图片大小==
==调整X或者Y轴上的刻度==
那么问题来了:
如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?
a= [random.randint(20,35) for i in range(120)]
==设置中文显示==
==给图像添加描述信息==
==最终代码展示==
1234567891011 ...
Qt
Qt5.15.2中编译报错:“invalid use of incomplete type 'class Ui::xxx'”的解决方法
今天新建项目,用Qt连接数据库时,发现如下报错:
在网上找了很多解决方法,但是发现好像都不行,还是会报错,最后认真重新检查了一下文件,发现竟然是没有加头文件,然后把头文件
**#include “ui_mainwindow.h”**加上,如下图所示
然后再重新编译,成功运行
浪费了很多时间,特此记录
C++
do{...}while(0)的妙用
原文地址
第一次见到 do{…}while(0)是在学习libevent的时候,看到里面有很多类似
1234567#define TT_URI(want) do { \ char *ret = evhttp_uri_join(uri, url_tmp, sizeof(url_tmp)); \ tt_want(ret != NULL); \ tt_want(ret == url_tmp); \ if (strcmp(ret,want) != 0) \ TT_FAIL(("\"%s\" != \"%s\"",ret,want)); \ } while(0)
当时特别疑惑,do{…}while()不是做循环的吗,类似for,while的语法,不过现实开发中,用for和while的比较多,do{…}while()比较少了,算是比较不常用的语法。但是在这里,这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?特别疑惑的goog ...
Linux
GCC详解
视频教程
前言:
GCC 编译器支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HSAIL)等程序;
Linux 开发C/C++ 一定要熟悉 GCC
VSCode是通过调用GCC编译器来实现C/C++的编译工作的;
实际使用中:
使用 gcc 指令编译 C 代码
使用 g++指令编译 C++ 代码
1. 编译过程
预处理-Pre-Processing //.i文件
12# -E 选项指示编译器仅对输入文件进行预处理g++ -E test.cpp -o test.i //.i文件
编译-Compiling // .s文件
123# -S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言文件后停止编译# g++ 产生的汇编语言文件的缺省扩展名是 .s g++ -S test.i -o test.s
汇编-Assembling // ...
Linux
CMake详解
视频教程
1.前言:
CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程)。
CMake可以说已经成为大部分C++开源项目标配
2. 语法特性介绍
基本语法格式:指令(参数 1 参数 2…)
参数使用括弧括起
参数之间使用空格或分号分开
指令是大小写无关的,参数和变量是大小写相关的
123set(HELLO hello.cpp)add_executable(hello main.cpp hello.cpp)ADD_EXECUTABLE(hello main.cpp ${HELLO})
变量使用${}方式取值,但是在 IF 控制语句中是直接使用变量名
3. 重要指令和CMake常用变量3.1 重要指令
==cmake_minimum_required== - 指定CMake的最小版本要求
语法:cmake_minimum_required(VERSION versionNumber [FATAL_ERROR])
12# CMake最小版本要求为2.8.3cmake_mini ...
Json
Json+Shell联合使用
json文件
12345678910111213141516171819202122232425262728293031323334{ "version": "2.0.0", "options": { "cwd": "${fileDirname}/build" }, "tasks": [ { "type": "shell", "label": "cmake", "command": "cmake", "args": [ ".." ] }, ...
VScode
VScode 调试教程 tasks.json和launch.json的设置
运行环境:
VSCode 1.68.1
wsl:ubuntu子系统
废话不多说,直接开整,首先选择左侧任务栏的第四个选项==运行和调试==,点击创建launch.json
创建好的界面如上图所示。点击右下角的添加配置
此时如上图所示,选择第一个==c/c++(gdb)启动==
此时会生成如上图所示代码,注意我画箭头的这两个地方,那个cwd是我们当前文件所在的工作目录,把画箭头的这两个地方改成一样的
改完后如上图所示,后面的a.out是我们一会儿要调试的可执行文件名称,这里用系统生成的也行,改成自己的也行,接下来我们开始配置tasks.json
首先回到main.cpp,然后点击上方菜单栏的终端,选择最后一个==配置默认生成任务==
此时如上如所示,再选择第二个==c/c++:g++生成活动文件==
此时如上图所示,生成tasks.json,接着我们打开launch.json做一个比较,我们先在l ...
C++
C++ mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++ 中的const)是反义词。
在C++ 中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。
下面是一个小例子:
123456789101112131415class ClxTest{public : void Output() const ;};void ClxTest::Output() const{ cout << " Output for test! " << endl;}void OutputTest( const ClxTest & lx){ lx.Output( ...