(十)性能分析工具的使用(上)

2023-05-16

性能分析工具的使用

  • 1. 数据库服务器的优化步骤
  • 2. 查看系统性能参数
  • 3. 统计SQL的查询成本:last_query_cost
  • 4. 定位执行慢的 SQL:慢查询日志
    • 4.1 开启慢查询日志参数
      • 1. 开启slow_query_log
      • 2. 修改long_query_time阈值
    • 4.2 查看慢查询数目
    • 4.3 案例演示
    • 4.4 测试及分析
    • 4.5 慢查询日志分析工具:mysqldumpslow
    • 4.6 关闭慢查询日志
    • 4.7 删除慢查询日志
  • 5. 查看 SQL 执行成本:SHOW PROFILE

在数据库调优中,我们的目标就是 响应时间更快,吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。


1. 数据库服务器的优化步骤

当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。

整个流程划分成了 观察(Show status)行动(Action) 两个部分。字母 S 的部分代表观察(会使用相应的分析工具),字母 A 代表的部分是行动(对应分析可以采取的行动)。

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

我们可以通过观察了解数据库整体的运行状态,通过性能分析工具可以让我们了解执行慢的SQL都有哪些,查看具体的SQL执行计划,甚至是SQL执行中的每一步的成本代价,这样才能定位问题所在,找到了问题,再采取相应的行动。

详细解释一下这张图:

首先在S1部分,我们需要观察服务器的状态是否存在周期性的波动。如果存在周期性波动,有可能是周期性节点的原因,比如双十一、促销活动等。这样的话,我们可以通过A1这一步骤解决,也就是加缓存或者更改缓存失效策略。

如果缓存策略没有解决,或者不是周期性波动的原因,我们就需要进一步分析查询延迟和卡顿的原因。接下来进入S2这一步,我们需要开启慢查询。慢查询可以帮我们定位执行慢的sQL语句。我们可以通过设置long_query_time参数定义“慢”的阈值,如果SQL执行时间超过了long_query_time,则会认为是慢查询。当收集上来这些慢查询之后,我们就可以通过分析工具对慢查询日志进行分析。

在S3这一步骤中,我们就知道了执行慢的SQL,这样就可以针对性地用EXPLAIN查看对应SQL语句的执行计划,或者使用show profile查看sQL中每一个步骤的时间成本。这样我们就可以了解SQL查询慢是因为执行时间长,还是等待时间长。

如果是SQL等待时间长,我们进入A2步骤。在这一步骤中,我们可以调优服务器的参数,比如适当增加数据库缓冲池等。如果是SQL执行时间长,就进入A3步骤,这一步中我们需要考虑是索引设计的问题?还是查询关联的数据表过多?还是因为数据表的字段设计问题导致了这一现象。然后在这些维度上进行对应的调整。

如果A2和A3都不能解决问题,我们需要考虑数据库自身的SQL查询性能是否已经达到了瓶颈,如果确认没有达到性能瓶颈,就需要重新检查,重复以上的步骤。如果已经达到了性能瓶颈,进入A4阶段,需要考虑增加服务器,采用读写分离的架构,或者考虑对数据库进行分库分表,比如垂直分库垂直分表水平分表等。

以上就是数据库调优的流程思路。如果我们发现执行SQL时存在不规则延迟或卡顿的时候,就可以采用分析工具帮我们定位有问题的SQL,这三种分析工具你可以理解是SQL调优的三个步骤:慢查询EXPLAINSHOWPROFILING

小结:

在这里插入图片描述

2. 查看系统性能参数

在MySQL中,可以使用 SHOW STATUS 语句查询一些MySQL数据库服务器的 性能参数 、 执行频率 。 SHOW STATUS语句语法如下:

SHOW [GLOBAL|SESSION] STATUS LIKE '参数';

一些常用的性能参数如下:
• Connections:连接MySQL服务器的次数。
• Uptime:MySQL服务器的上线时间。
• Slow_queries:慢查询的次数。
• Innodb_rows_read:Select查询返回的行数
• Innodb_rows_inserted:执行INSERT操作插入的行数
• Innodb_rows_updated:执行UPDATE操作更新的行数
• Innodb_rows_deleted:执行DELETE操作删除的行数
• Com_select:查询操作的次数。
• Com_insert:插入操作的次数。对于批量插入的 INSERT 操作,只累加一次。
• Com_update:更新操作的次数。
• Com_delete:删除操作的次数。

3. 统计SQL的查询成本:last_query_cost

一条SQL查询语句在执行前需要确定查询执行计划,如果存在多种执行计划的话,MySQL会计算每个执行计划所需要的成本,从中选择成本最小的一个作为最终执行的执行计划。

如果我们想要查看某条SQL语句的查询成本,可以在执行完这条SQL语句之后,通过查看当前会话中的last_query_cost变量值来得到当前查询的成本。它通常也是我们评价一个查询的执行效率的一个常用指标。这个查询成本对应的是 SQL语句所需要读取的页的数量。

我们依然使用 student_info 表为例:

CREATE TABLE `student_info` ( 
`id` INT(11) NOT NULL AUTO_INCREMENT, 
`student_id` INT NOT NULL , 
`name` VARCHAR(20) DEFAULT NULL, 
`course_id` INT NOT NULL , 
`class_id` INT(11) DEFAULT NULL, 
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

如果我们想要查询 id=900001 的记录,然后看下查询成本,我们可以直接在聚簇索引上进行查找:

SELECT student_id, class_id, NAME, create_time FROM student_info
WHERE id = 900001;

运行结果(1 条记录,运行时间为0.042s

然后再看下查询优化器的成本,实际上我们只需要检索一个页即可:

mysql> SHOW STATUS LIKE 'last_query_cost'; 
+-----------------+----------+
| Variable_name | Value | 
+-----------------+----------+
| Last_query_cost | 1.000000 | 
+-----------------+----------+

如果我们想要查询 id 在 900001 到 9000100 之间的学生记录呢?

SELECT student_id, class_id, NAME, create_time FROM student_info
WHERE id BETWEEN 900001 AND 900100;

运行结果(100 条记录,运行时间为 0.046s ):

然后再看下查询优化器的成本,这时我们大概需要进行 20 个页的查询

mysql> SHOW STATUS LIKE 'last_query_cost'; 
+-----------------+-----------+
| Variable_name | Value | 
+-----------------+-----------+
| Last_query_cost | 21.134453 | 
+-----------------+-----------+

你能看到页的数量是刚才的 20 倍,但是查询的效率并没有明显的变化,实际上这两个 SQL 查询的时间基本上一样,就是因为采用了顺序读取的方式将页面一次性加载到缓冲池中,然后再进行查找。虽然 页数量(last_query_cost)增加了不少 ,但是通过缓冲池的机制,并 没有增加多少查询时间

使用场景:它对于比较开销是非常有用的,特别是我们有好几种查询方式可选的时候

SQL查询是一个动态的过程,从页加载的角度来看,我们可以得到以下两点结论:
1.位置决定效率。如果页就在数据库缓冲池中,那么效率是最高的,否则还需要从内存或者磁盘读取,当然针对单个页的读取来说,如果页存在于内存中,会比在磁盘中读取效率高很多。
2.批量决定效率。如果我们从磁盘中对单一页进行随机读,那么效率是很低的(差不多10ms),而采用顺序读取的方式,批量对页进行读取,平均一页的读取效率就会提升很多,甚至要快于单个页面在内存中的随机读取。
所以说,遇到I/O并不用担心,方法找对了,效率还是很高的。我们首先要考虑数据存放的位置,如果是经常使用的数据就要尽量放到缓冲池中,其次我们可以充分利用磁盘的吞吐能力,一次性批量读取数据,这样单个页的读取效率也就得到了提升。

4. 定位执行慢的 SQL:慢查询日志

MySQL的慢查询日志,用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上(不含10秒)的语句,认为是超出了我们的最大忍耐时间值。

它的主要作用是,帮助我们发现那些执行时间特别长的SQL查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。比如一条sql执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql,结合explain进行全面分析。

默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响

慢查询日志支持将日志记录写入文件。

4.1 开启慢查询日志参数

1. 开启slow_query_log

在使用前,我们需要先看下慢查询是否已经开启,使用下面这条命令即可:

mysql > show variables like '%slow_query_log';

在这里插入图片描述
我们能看到slow_query_log=OFF,我们可以把慢查询日志打开,注意设置变量值的时候需要使用global,否则会报错:

mysql > set global slow_query_log='ON';

然后我们再来查看下慢查询日志是否开启,以及慢查询日志文件的位置:
在这里插入图片描述
你能看到这时慢查询分析已经开启,同时文件保存在 /var/lib/mysql/Feng-slow.log 文件中。
在这里插入图片描述

2. 修改long_query_time阈值

接下来我们来看下慢查询的时间阈值设置,使用如下命令:

mysql > show variables like '%long_query_time%';

在这里插入图片描述
这里如果我们想把时间缩短,比如设置为 1 秒,可以这样设置:

#测试发现:设置global的方式对当前session的long_query_time失效。对新连接的客户端有效。所以可以一并 执行下述语句 
mysql > set global long_query_time = 1; 
mysql> show global variables like '%long_query_time%'; 

mysql> set long_query_time=1; 
mysql> show variables like '%long_query_time%';

在这里插入图片描述

补充 :配置文件中一并设置参数

如下的方式相较于前面的命令行方式,可以看作是永久设置的方式。

修改my .cnf文件,[mysqld]下增加或修改参数long_query_timeslow_query_logslow_query_log_file后,然后重启MySQL服务器。

[mysqld]
slow_query_log=ON#开启慢查询日志的开关
slow_query_log_file=/var/lib/mysql/feng-slow.log #慢查询日志的目录和文件名信息
long_query_time=3#设置慢查询的阈值为3秒,超出此设定值的SQL即被记录到慢查询日志
log_output=FILE

如果不指定存储路径,慢查询日志将默认存储到MySQL数据库的数据文件夹下。如果不指定文件名默认文件名为hostname-slow.log

4.2 查看慢查询数目

查询当前系统中有多少条慢查询记录

SHOW GLOBAL STATUS LIKE '%Slow_queries%';

在这里插入图片描述

4.3 案例演示

步骤1. 建表

CREATE TABLE `student` ( 
`id` INT(11) NOT NULL AUTO_INCREMENT, 
`stuno` INT NOT NULL , 
`name` VARCHAR(20) DEFAULT NULL, 
`age` INT(3) DEFAULT NULL, 
`classId` INT(11) DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

步骤2:设置参数 log_bin_trust_function_creators

创建函数,假如报错:

This function has none of DETERMINISTIC......

命令开启:允许创建函数设置:

set global log_bin_trust_function_creators=1; # 不加global只是当前窗口有效。

步骤3:创建函数

随机产生字符串:(同上一章)

DELIMITER // 
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255) #该函数会返回一个字符串 
BEGIN
	DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'; 
	DECLARE return_str VARCHAR(255) DEFAULT ''; 
	DECLARE i INT DEFAULT 0; 
	WHILE i < n 
	DO 
		SET return_str =CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1)); 
		SET i = i + 1; 
	END WHILE; RETURN return_str; 
END // 
DELIMITER ; 
#测试 
SELECT rand_string(10);

产生随机数值:(同上一章)

DELIMITER // 
CREATE FUNCTION rand_num (from_num INT ,to_num INT) RETURNS INT(11) 
BEGIN 
	DECLARE i INT DEFAULT 0; 
	SET i = FLOOR(from_num +RAND()*(to_num - from_num+1)) ; 
	RETURN i; 
END // 
DELIMITER ; 
#测试: 
SELECT rand_num(10,100);

步骤4:创建存储过程

DELIMITER // 
CREATE PROCEDURE insert_stu1( START INT , max_num INT ) 
BEGIN 
	DECLARE i INT DEFAULT 0; 
	SET autocommit = 0; #设置手动提交事务 
	REPEAT #循环 
	SET i = i + 1; #赋值 
	INSERT INTO student (stuno, NAME ,age ,classId ) VALUES ((START+i),rand_string(6),rand_num(10,100),rand_num(10,1000)); UNTIL i = max_num 
	END REPEAT; 
	COMMIT; #提交事务 
	END // 
DELIMITER ;

步骤5:调用存储过程

#调用刚刚写好的函数, 4000000条记录,从100001号开始 
CALL insert_stu1(100001,4000000);

4.4 测试及分析

  1. 测试

在这里插入图片描述
从上面的结果可以看出来,查询学生编号为“3455655”的学生信息花费时间为2.09秒。查询学生姓名为“oQmLUr”的学生信息花费时间为2.39秒。已经达到了秒的数量级,说明目前查询效率是比较低的,下面的小节我们分析一下原因

  1. 分析
show status like 'slow_queries';

补充说明:
除了上述变量,控制慢查询日志的还有一个系统变量: min_examined_row_limit。这个变量的意思是,查询扫描过的最少记录数。这个变量和查询执行时间,共同组成了判别一个查询是否是慢查询的条件。如果查询扫描过的记录数大于等于这个变量的值,并且查询执行时间超过long_query_time的值,那么,这个查询就被记录到慢查询日志中;反之,则不被记录到慢查询日志中。
在这里插入图片描述
这个值默认是0。与long_query_time=10合在一起,表示只要查询的执行时间超过10秒钟,哪怕一个记录也没有扫描过,都要被记录到慢查询日志中。你也可以根据需要,通过修改“my.ini"”文件,来修改查询时长,或者通过SET 指令,用SQL语句修改“min_examined_row_limit”的值。

4.5 慢查询日志分析工具:mysqldumpslow

在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow

查看mysqldumpslow的帮助信息

mysqldumpslow --help

在这里插入图片描述

mysqldumpslow 命令的具体参数如下:

  • -a: 不将数字抽象成N,字符串抽象成S

  • -s: 是表示按照何种方式排序

    • c: 访问次数
    • l: 锁定时间
    • r: 返回记录
    • t: 查询时间
    • al:平均锁定时间
    • ar:平均返回记录数
    • at:平均查询时间 (默认方式)
    • ac:平均查询次数
  • -t: 即为返回前面多少条的数据

  • -g: 后边搭配一个正则匹配模式,大小写不敏感的

举例:我们想要按照查询时间排序,查看前五条 SQL 语句,这样写即可:

mysqldumpslow -s t -t 5 /var/lib/mysql/feng-slow.log

在这里插入图片描述

工作常用参考:

#得到返回记录集最多的10个SQL 
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log 

#得到访问次数最多的10个SQL 
mysqldumpslow -s c -t 10 /var/lib/mysql/atguigu-slow.log 

#得到按照时间排序的前10条里面含有左连接的查询语句 
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/atguigu-slow.log 

#另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现爆屏情况 
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log | more

4.6 关闭慢查询日志

MySQL服务器停止慢查询日志功能有两种方法:

方式1:永久性方式

[mysqld] 
slow_query_log=OFF

或者,把slow_query_log一项注释掉 或 删除

[mysqld] 
#slow_query_log =OFF

重启MySQL服务,执行如下语句查询慢日志功能。

SHOW VARIABLES LIKE '%slow%'; #查询慢查询日志所在目录 
	SHOW VARIABLES LIKE '%long_query_time%'; #查询超时时长

方式2:临时性方式

使用SET语句来设置。

(1)停止MySQL慢查询日志功能,具体SQL语句如下

SET GLOBAL slow_query_log=off;

(2)重启MySQL服务,使用SHOW语句查询慢查询日志功能信息,具体SQL语句如下

SHOW VARIABLES LIKE '%slow%'; 
#以及 
SHOW VARIABLES LIKE '%long_query_time%';

4.7 删除慢查询日志

使用SHOW语句显示慢查询日志信息,具体SQL语句如下。

SHOW VARIABLES LIKE 'slow_query_log% ';

在这里插入图片描述

从执行结果可以看出,慢查询日志的目录默认为MySQL的数据目录,在该目录下手动删除慢查询日志文件即可
使用命令mysqladmin flush-logs来重新生成查询日志文件,具体命令如下,执行完毕会在数据目录下重新生成慢查询日志文件。

mysqladmin -uroot -p flush-logs slow

提示
慢查询日志都是使用mysqladmin flush-logs命令来删除重建的。使用时一定要注意,一旦执行了这个命令,慢查询日志都只存在新的日志文件中,如果需要旧的查询日志,就必须事先备份。

5. 查看 SQL 执行成本:SHOW PROFILE

Show Profile是MySQL提供的可以用来分析当前会话中sQL都做了什么、执行的资源消耗情况的工具,可用于sql调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果

我们可以在会话级别开启这个功能

mysql > show variables like 'profiling';

在这里插入图片描述
通过设置 profiling='ON’ 来开启 show profile:

mysql > set profiling = 'ON';

在这里插入图片描述
然后执行相关的查询语句。接着看下当前会话都有哪些 profiles,使用下面这条命令

mysql > show profiles;

在这里插入图片描述

你能看到当前会话一共有 2 个查询。如果我们想要查看最近一次查询的开销,可以使用:

mysql > show profile;

在这里插入图片描述

mysql> show profile cpu,block io for query 2;

在这里插入图片描述

show profile的常用查询参数:

① ALL:显示所有的开销信息。
② BLOCK IO:显示块IO开销。
③ CONTEXT SWITCHES:上下文切换开
销。
④ CPU:显示CPU开销信息。
⑤ IPC:显示发送和接收开销信息。
⑥ MEMORY:显示内存开销信
息。
⑦ PAGE FAULTS:显示页面错误开销信息。
⑧ SOURCE:显示和Source_function,Source_file, Source_line相关的开销信息。
⑨ SWAPS:显示交换次数开销信息。

日常开发需注意的结论:

  • converting HEAP to MyISAM:查询结果太大,内存不够,数据往磁盘上搬了。-
  • Creating tmp table:创建临时表。先拷贝数据到临时表,用完后再删除临时表。
  • Copying to tmp table on disk:把内存中临时表复制到磁盘上,警惕!
  • locked

如果在show profile诊断结果中出现了以上4条结果中的任何一条,则sql语句需要优化。

注意:不过SHOW PROFILE 命令将被弃用,我们可以从 information_schema中的profiling数据表进行查看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(十)性能分析工具的使用(上) 的相关文章

  • PowerShell知识整理

    文章目录 前言一 快捷键二 符号2 1 常用符号2 2 条件运算符 三 常用辅助命令四 信息的筛选4 1 正则表达式4 2 管道4 2 1 基本概念4 2 2 Get Member4 2 3 Where Object4 2 4 Select
  • 树莓派登入ssh很慢和开机启动tightvncserver及其他问题

    树莓派登入ssh 很慢 关闭 ssh的gssapi认证 执行命令 xff1a sudo vim etc ssh ssh config 在该文件的末尾找到这两行设置并注释掉 span class token macro property GS
  • 光波长与RGB数值的转换

    最近做毕业设计时 xff0c 需要Matlab仿真计算彩色物体的散射图像 计算中需要用到彩色图片 xff08 RGB色彩模式 xff09 对应的光波长数值 查找资料发现可以实现 xff1a 由光波长求对应RGB数值 正在做尝试 xff0c
  • 【原创】Git删除暂存区或版本库中的文件

    0 基础 我们知道Git有三大区 xff08 工作区 暂存区 版本库 xff09 以及几个状态 xff08 untracked unstaged uncommited xff09 xff0c 下面只是简述下Git的大概工作流程 xff08
  • Ubuntu20.04和Ubuntu18.04更换清华镜像源

    1 备份Ubuntu默认的源地址 在终端输入 xff1a sudo cp etc apt sources list etc apt sources list backup 2 xff1a 更新源服务器列表 span class token
  • keil5安装后续 错误解决

    嵌入式 keil5安装 软件安装 STM32 有个博主讲的很好 xff0c 可以参考 xff0c 也有资源提供下载 点这里 xff0c 电梯直达 第一个错误解决 Fatal error cannot open the source file
  • gcc常用参数

    今晚看了些有关gcc的编译选项的内容 xff0c 记录下来以备查用 1 gcc c 只编译不链接 xff0c 生成 o文件 例如 xff0c gcc c hello c xff0c 将由hello c得到hello o 2 gcc o 直接
  • String类型的详解

    文章目录 一 字符串的定义方式二 String注意问题三 内存分布 xff08 注意问题详解 xff09 1 分布方式12 分布方式23 分布方式3常量池 四 练习问题问题一 xff1a 问题二 xff1a 五 字符串不可变更改String
  • 调整图片大小和像素

    在很多官方的系统中 xff0c 要求限制上传文件的大小 xff0c 有时候照片的大小太大 xff0c 怎么调整大小呢 xff1f 对于windows用户来说 xff0c 调整的方法很简单 xff0c 只需要利用Windows系统自带的工具就
  • python期末考试

    python期末考试 文章目录 python期末考试前言一 选择题二 多选题三 函数题四 xff0c 编程题 前言 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a 记录本学期python期末考试 提示 xff1a 以下是本篇
  • R-CNN论文解读

    背景 R CNN Regions with CNN features 这篇论文是在2014年CVPR的论文 xff0c 在此之前目标检测并未使用基于深度学习的方法 xff0c 主流的目标检测思路还是基于传统的目标检测方法 SIFT HOG等
  • 嵌入式软件工程师面试题(七)

    作者简介 xff1a 大家好我是 xff1a 嵌入式基地 xff0c 是一名嵌入式工程师 xff0c 希望一起努力 xff0c 一起进步 xff01 x1f4c3 个人主页 xff1a 嵌入式基地 x1f525 系列专栏 xff1a 嵌入式
  • 十,FreeRTOS之——信号量

    声明 xff1a 本专栏参考韦东山 xff0c 野火 xff0c 正点原子以及其他博主的FreeRTOS教程 xff0c 如若侵权请告知 xff0c 马上删帖致歉 xff0c 个人总结 xff0c 如有不对 xff0c 欢迎指正 信号量理论
  • 树莓派安装opencv

    OpenCV 开源的计算机视觉库 是基于BSD协议 因此它可免费用于学术和商业用途 其提供C 43 43 C Python和Java接口 支持Windows Linux Mac OS iOS和Android OpenCV致力于高效运算和即时
  • 树莓派安装ubuntu mate记录

    文章目录 1 系统下载1 ubuntu下载2 ubuntu mate下载 2 系统安装3 系统使用1 ubuntu系统2 ubuntu mate系统 这个算个失败的记录贴吧 xff0c 这个系统安装过程不太流畅 xff0c 使用起来也有很多
  • opencv C++图像风格迁移 深度神经网络模型的使用

    文章目录 1 代码示例 2 网络模型文件 及源代码下载 风格迁移的也是深度学习中的一个小的计算机视觉任务 目的是将A图像的风格迁移到B图像 风格的定义在在深度学习中可以认为是一些底层的特征 比如纹理特征等 1 代码示例 事先准备好 5种风格
  • opencv C++ 人脸识别+性别判断 网络模型

    文章目录 1 代码实现 2 网络模型和代码下载 1 代码实现 首先将整幅图输入到人脸检测网络 进行人脸识别 找到图像中的人脸区域 然后 检测并扩充后的人脸作为 性别判断网络的输入 进行性别判断 下面是人脸检测模型和性别判断模型 span c
  • 嵌入式linux杂记

    边看书边做笔记 xff0c 主要是为了查阅方便 1 readelf工具用来从可执行文件得到有用信息 譬如 xff0c readelf h hello 可以从hello得到elf header信息 readelf s hello可以查看hel
  • 【Halcon】计算机视觉(CV)与机器视觉(MV)

随机推荐

  • 【Halcon】 Halcon 22.11 安装详细教程

    文章目录 1安装 2 获取许可证 license 2 1 license下载 2 2 激活 license放置在相应文件夹下 3 DLT 安装 1安装 1 解压安装包 2 打开运行 exe 程序 跳转至页面 点击 可获得的 并安装 选择 A
  • 【Halcon】 Halcon 22.11 常用设置及界面介绍

    文章目录 1 设置语言 2 自带示例 3 示例文件 图片 等路径 4 工具栏设置 1 设置语言 第一次打开 默认繁体字 2 自带示例 3 示例文件 图片 等路径 先随便打开一个示例程序 然后 点打开程序 就可以看到示例文件路径了 C spa
  • 【Halcon】新建程序 读取图片 路径设置

    文章目录 1 新建程序 2 读取一张图片 3 图片路径 4 图片格式读取报错 5 快速添加 绝对路径 1 新建程序 点击新程序图标 即可新建 程序另存为 会弹出保存路径 2 读取一张图片 span class token function
  • 机器视觉 与 人眼错觉

  • 【Halcon】重置程序执行

    程序执行完毕后 xff0c 光标会停止在程序最后一行 xff08 没有设置stop xff09 的情况下 xff09 此时再点运行 xff0c 是没反应的 点一下 工具栏的 重置 xff0c 此时光标会回到第一行 xff0c 再次点击运行
  • 【Halcon】找到设备上的 标识牌

    如图 找到设备上的 标识牌 标识牌最明显的特征是比其他区域亮 二值化选择出亮区域 再通过面积选择出目标区域 先显示图片 span class token operator span 获取图片的大小 span class token func
  • Halcon 检测电路板上焊盘圆点 并显示焊盘的直径

    文章目录 1 问题描述 2 代码实现 3 halcon示例 1 问题描述 如图 检测电路板上焊盘圆点 并显示焊盘的直径 效果 2 代码实现 思路 焊盘颜色比较黑 可以用二值化 找到对应区域 但是可以观察原图上边缘部分颜色和焊盘接近 二值化减
  • Halcon 亚像素检测指定区域 瑕疵 轮廓

    如图 找到下图中铭牌上 面积最大的瑕疵快 认为黑点是瑕疵 span class token operator span 读取图片 并获取尺寸 span class token function read image span span cl
  • Halcon 阈值分割(全局阈值threshold、binary_threshold、动态阈值 dyn_threshold)、直方图

    文章目录 1 图像直方图 2 全局阈值 threshold 3 binary threshold 4 动态阈值mean image dyn threshold 5 代码和原图 1 图像直方图 图像直方图 Image Histogram 是用
  • uboot开篇 — arm-linux-gcc安装及编译uboot

    最近由于工作的原因需要研究下uboot在2440上的移植 xff0c 于是乎今天开始着手 首先下载了uboot的源码 xff08 源码下载官网http www icdev com cn batch viewlink php itemid 6
  • Halcon 找到产品上 圆圈中的7个点

    文章目录 1 关键实现环节演示 2 完整代码 及 原图 文章目录 1 关键实现环节演示 2 完整代码 及 原图 找到下图 圆圈中的7个点 思路 先找到圆圈外面的矩形 再找到里面的圆圈 最后找到圆圈里面的 圆点 1 关键实现环节演示 二值化
  • 安装endnote 之后打开word出现乱码

    文章目录 1 安装endnote 之后打开word出现乱码3 EndNote X9 插入参考文献常见问题总结4 EndNote X9 快速上手教程 xff08 毕业论文参考文献管理器 xff09 1 安装endnote 之后打开word出现
  • EndNote X9 引用参考 单击文献编号,不能跳转到文尾文献列表处,咋解决?文献编号 不能跳转 ,怎么办?

    文章目录 1 正常情况下 引用文献编号 是可以跳转的2 问题分析3 解决方法4 EndNote X9 插入参考文献常见问题总结5 EndNote X9 快速上手教程 xff08 毕业论文参考文献管理器 xff09 1 正常情况下 引用文献编
  • EndNote X9 参考文献附录列表 格式调整

    文章目录 1 参考文献附录列表 格式调整2 EndNote X9 插入参考文献常见问题总结3 EndNote X9 快速上手教程 xff08 毕业论文参考文献管理器 xff09 1 参考文献附录列表 格式调整 注意 xff1a 这里讲的是对
  • EndNote X9 导入知网文献 插入引用文献 方法

    文章目录 1 EndNote X9 导入知网文献2 EndNote X9 插入参考文献常见问题总结3 EndNote X9 快速上手教程 xff08 毕业论文参考文献管理器 xff09 1 EndNote X9 导入知网文献 下载知网参考文
  • endNote X9 导入英文文献(谷歌学术、web of science 等)

    文章目录 1 导入英文文献 xff08 谷歌学术 web of science 等 xff09 2 EndNote X9 插入参考文献常见问题总结3 EndNote X9 快速上手教程 xff08 毕业论文参考文献管理器 xff09 1 导
  • endNote X9 增加 / 删除参考文献 文献编号自动更新

    文章目录 1 增插参考文献2 删减参考文献3 EndNote X9 插入参考文献常见问题总结4 EndNote X9 快速上手教程 xff08 毕业论文参考文献管理器 xff09 1 增插参考文献 61 61 61 61 61 61 61
  • windows10 通过vnc方式远程连接服务器

    以下摘抄至腾讯云文档 xff0c 记录一下 腾讯云 文档中心 轻量应用服务器 最佳实践 搭建Ubuntu可视化界面 VNC xff08 Virtual Network Console xff09 是虚拟网络控制台的缩写 它是一款优秀的远程控
  • UART串口接收设计

    一 设计思路 1 端口设置 为实现UART串口接收 xff0c 所设计的模块应具有如下端口 xff1a 时钟 复位 波特率设置 串行数据输入 并行数据输出 一次数据接收完成标志 如图 xff1a module span class toke
  • (十)性能分析工具的使用(上)

    性能分析工具的使用 1 数据库服务器的优化步骤2 查看系统性能参数3 统计SQL的查询成本 xff1a last query cost4 定位执行慢的 SQL xff1a 慢查询日志4 1 开启慢查询日志参数1 开启slow query l