- 博客(64)
- 收藏
- 关注
原创 工业相机 + 声光报警器联调实录:从「能出图」到「能报警」
项目背景:做一个工业部件外观合格检测的小系统。相机负责看,算法负责判,报警器负责"喊"。真正动手时才发现,难的不是算法,而是相机取流和串口通讯这些"胶水"环节。这篇记录把我踩过的坑按「现象 → 原因 → 对策」整理出来,给同样在做产线视觉的朋友少走点弯路。测试环境:Windows + Python 3.11 + 海康 MVS SDK + OpenCV + pyserial,相机为千兆网口工业相机,报警器为串口声光报警器(Modbus RTU)。
2026-11-04 15:48:17
220
原创 亚博 DOFBOT SE 机械臂(二):接入通义千问 API 实现物块、颜色与手势识别
篇主题核心内容第一篇基础介绍与使用硬件结构、环境搭建、连接方式、Python SDK 控制舵机、OpenCV 基础视觉第二篇大模型视觉识别DashScope API Key 申请、通义千问视觉模型调用、物块/颜色/手势识别、完整应用技术路线传统 CV(HSV)→ 快速上手,但光照敏感│▼大模型视觉(通义千问 VL)→ 零样本、泛化强,但有延迟和费用│▼混合方案 → 简单任务本地 CV,复杂任务大模型,兼顾速度和智能。
2026-11-03 19:23:31
126
原创 亚博 DOFBOT SE 机械臂(一):产品介绍与基础使用
6 自由度:5 个关节 + 1 个夹爪,可完成抓取、搬运、堆叠等动作;虚拟机驱动:PC 端跑虚拟机,无需额外嵌入式开发板,降低门槛;ROS 支持:内置 ROS 机器人操作系统,支持运动学规划;AI 大模型:可接入通义千问,实现语音、视觉、语言交互;丰富玩法:颜色识别、手势识别、垃圾分拣、色块归位等。
2026-11-03 19:22:30
108
原创 道路巡检系统检测案例:YOLOv5 + Flask + PyQt 全栈实现
类别 ID名称说明0crack裂缝(纵向/横向/网状)1pothole坑槽2标线磨损3rutting车辙4patch修补痕迹把人工巡检变成 AI 辅助检测,效率提升数倍;病害位置、类型、置信度结构化输出,便于统计和追溯;前后端解耦,模型和界面独立迭代。
2026-11-02 20:15:30
155
原创 YOLOv5 原理与框架使用详解
从 YOLO1 到 YOLO2,再到 YOLOv3/v4,目标检测的一阶段方法不断迭代。2020 年 Ultralytics 团队推出的 YOLOv5 虽然论文之外,但凭借简洁的工程实现、出色的精度速度平衡和完善的部署工具链,成为工业界最流行的 YOLO 版本。本篇从原理和框架使用两条线,把 YOLOv5 讲透。
2026-11-02 20:14:15
216
原创 Doris 学习(二):底层架构与三种数据模型深入解析
上一篇从全局视角介绍了 Doris 的定位、安装和性能对比,知道了它是"FE + BE 两个进程、亚秒级查询、支持实时写入"的分析数据库。,以及。
2026-10-28 21:04:16
216
原创 Doris 学习:从原理到安装与性能对比
Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库(MPP Analytical Database),主打"亚秒级查询 + 高并发导入 + 运维简单"。它融合了 Google Mesa 的数据模型、Apache Impala 的 MPP 查询引擎和 Apache ORC/Parquet 的列式存储,近年来在实时数仓、用户画像、广告报表等场景广泛落地。本篇从原理、安装、性能对比三条线讲清楚 Doris。
2026-10-28 10:53:45
199
原创 Spark MLlib 机器学习库:分布式机器学习实战
Day1 讲了 Spark Core 的分布式计算底座,Day2 讲了 Spark SQL 的结构化数据处理。今天讲构建在两者之上的:Spark 的分布式机器学习库。它把特征工程、模型训练、评估、调优都封装好,让你用 DataFrame 就能跑机器学习,无需自己写分布式训练。
2026-10-26 20:39:17
129
原创 Spark SQL 原理与实战:结构化数据处理
Day1 讲了 Spark Core 的 RDD。RDD 灵活但缺乏结构信息,优化全靠开发者自己。Spark SQL 在 RDD 之上引入了结构化数据抽象(DataFrame/Dataset),通过和自动优化,让写 SQL 就能跑出接近手写 RDD 的性能。本篇把 Spark SQL 的原理和常用操作讲透。
2026-10-26 20:38:26
292
原创 Spark Core 核心原理:从 RDD 到分布式计算
Spark Core 是整个 Spark 生态的基石,SQL、Streaming、MLlib、GraphX 都构建在它之上。本篇把 Spark Core 的核心概念串成一条线:为什么需要 Spark → RDD 是什么 → 怎么算 → 怎么容错 → 集群怎么跑起来。一天搞定核心原理。
2026-10-26 20:37:30
295
原创 PyTorch 版 YOLOv3 源码逐段详解:从配置文件到训练、评估、检测(定制自己的数据集)
这是一个基于 二次改造的目标检测项目。它在保持 YOLOv3 经典结构不动的前提下,把「通用 80 类(COCO)」改造成了「自己的数据集」——在这个副本里,数据集是 dog / cat 共 2 类。你可以把它理解成一份「能直接上手训练自己数据」的 YOLOv3 教学代码:结构清晰、注释多、代码量不大(核心逻辑全部集中在 4 个文件里),非常适合拿来逐行啃。读完这份博客,你可以搞清楚下面这些事:说明:本文引用的代码全部来自本项目的真实文件,按「文件 → 函数/代码块 → 逐段讲解」的顺序展开。为方便你对照
2026-10-16 20:04:54
192
原创 YOLOv3 原理详解:从 Darknet-53 到三尺度检测头
YOLOv3 发布于 2018 年,论年纪早就算"老前辈"了。但直到今天,它依然是目标检测入门最好的教材:结构不复杂、代码量不大、论文写得像博客一样口语化,而且几乎所有后续的 YOLO 变体(v4/v5/v7/v8…)都能在它身上找到影子——多尺度检测、Anchor 机制、特征拼接、损失构成,这些概念都是从这一版开始定型并被反复沿用的。YOLOv3 是怎么把一张图片,变成"一堆带类别的方框"的?
2026-10-15 20:52:52
213
原创 数仓分层到底在分什么:从 DWD 到 ADS,最后落到 ClickHouse
上一篇我们解决了「数据怎么进来」——用 DataX 把业务库的刷卡主数据和用户信息表搬到了 Hive 的 ODS 层。。这时候如果直接拿 ODS 去做报表,会发生什么?ifcase when[图1:数仓分层数据流转图]
2026-10-14 09:51:38
195
原创 从一次刷卡数据采集说起:DataX 到底是怎么把数据「搬」到 Hive 的
离线同步工具其实不少:Sqoop、Flume、Kettle、DataX……对比项SqoopFlumeDataX定位关系库 ↔ Hadoop日志流式采集异构数据源离线同步数据源以 RDBMS 为主以文件/日志为主插件化,几十种同步粒度任务级事件级单机多线程,任务级学习成本中中低(一个 JSON 搞定)换数据源只需要换插件、改 JSON,不用改代码。业务库里是 MySQL、Oracle、SQLServer,目标端是 HDFS、Hive、HBase、ES,写法几乎一样。
2026-10-14 09:47:29
156
原创 PyQt5 从入门到人脸检测:一套控件、信号槽与多媒体实战学习路径
现象原因对策1改了ui.py,重新pyuic5后改动没了pyuic5每次重新生成会覆盖永远不要手改ui.py,逻辑全写在继承子类里2运行报Designer 里连了,子类没实现同名方法子类必须定义名字完全一致的槽方法3摄像头画面人脸发蓝、嘴唇发黄OpenCV 是 BGR,QImage 按 RGB 解释4点了"打开摄像头"界面直接卡死read()阻塞主线程用QTimer定时读帧,别在槽里死循环5定时器间隔设 1ms 后窗口卡死、CPU 飙满间隔小于实际帧处理耗时,事件堆积。
2026-10-12 21:18:00
196
原创 YOLO1 与 YOLO2 原理详解:从“一阶段检测“到“精度飞跃“
把检测从两阶段回归到一阶段,开创了实时检测的先河。代价是精度不如两阶段方法,尤其在小目标和密集目标上吃亏。用 anchor + 多尺度 + BN + 聚类 + passthrough 这套组合,把一阶段方法的精度拉到接近两阶段水平,同时保留速度优势。它为后续 YOLO3/4/5 甚至 YOLOX 奠定了基本范式。预测范式:从"网格直接回归 5 值"到"网格 + anchor + 偏移";网络结构:从 GoogLeNet 风格到 Darknet-19,从 FC 回归到全卷积;精度补丁。
2026-10-12 19:01:29
120
原创 OpenCV 摄像头年龄性别识别 + 疲劳检测
两个程序的骨架都不复杂:年龄性别识别是"检测定位 → 裁图 → 分类查表",疲劳检测是"定位 → 计算比值 → 阈值判断 → 连续帧确认"。决定能否举一反三的是中间的细节——blob 如何构造、检测结果四维结构如何解读、EAR 为何采用比值、为何需要帧数确认。掌握这些内容后,可尝试将疲劳检测改造为"张嘴检测"或"点头检测",完成这一改造即说明两种思路均已理解到位。
2026-10-09 21:16:09
337
原创 Hive 学习第三天:HQL 查询精讲与内置函数实战
内置函数满足不了时,可以自己开发。UDF:一进一出,最常见;UDAF:自定义聚合,多进一出;UDTF:一进多出。新建 Maven 工程,引入 hive-exec 依赖;继承GenericUDF,实现初始化(校验参数类型)和evaluate(核心逻辑)方法;打包成 jar,在 Beeline 中注册使用:ADD JAR /路径/my_udf.jar;TEMPORARY表示仅当前会话有效;需要长期共享可放到 HDFS 并使用注册为永久函数。
2026-10-08 19:49:01
242
原创 Hive 学习第二天:数据类型、建表设计与数据导入导出
Hive 学习第二天:数据类型、建表设计与数据导入导出学习环境:Hive 3.x(Beeline + HiveServer2)学习目标:掌握 Hive 的基本类型与复杂类型;能根据场景正确选择内部表/外部表/分区表/分桶表;熟练使用 LOAD、INSERT 完成数据导入导出;理解 SerDe 的作用。
2026-10-08 19:48:21
339
原创 Hive 学习第一天:搞懂它是什么,并搭好可用的环境
Hive 学习第一天:搞懂它是什么,并搭好可用的环境学习环境:CentOS 7 + JDK 8 + Hadoop 3.x + Hive 3.x + MySQL 5.7前置条件:Hadoop 伪分布式集群已能正常启动(参考 Hadoop 两天笔记)。学习目标:理解 Hive 的本质和架构,知道它和 MySQL 这类传统数据库的区别;完成生产常用的 MySQL 元数据部署,并用 Beeline 跑通第一个查询。
2026-10-08 19:46:58
230
原创 Hadoop 学习第二天:HDFS 常用操作与 WordCount 分布式计算实战
现象:任务提交后长时间没有进度,日志里有内存不足或 Container 被 kill 的信息。原因:伪分布式机器内存紧张,YARN 默认给每个 Container 分配的内存超出了机器实际可用量。对策:在中调小(NodeManager 可用总内存)和(单个 Container 上限),比如都调成 1024~2048 MB,重启 YARN 后重新提交。第一天:理解 HDFS / YARN / MapReduce 三组件分工,搭好伪分布式集群;
2026-10-08 19:36:11
260
原创 Hadoop 学习第一天:从“是什么”到跑通伪分布式集群
学习环境:CentOS 7 + JDK 8 + Hadoop 3.x学习目标:搞懂 Hadoop 解决什么问题、由哪些核心组件构成,并在一台机器上把伪分布式集群启动起来。
2026-10-08 19:35:30
257
原创 TextRNN 做微博情绪四分类
模型输出的是 4 个原始分数(logits)因为,softmax 已经包含在损失函数内部。如果自己在模型末尾再加一层 Softmax,不会报错,但等于做了两次 softmax,损失数值和梯度都会异常——新手高频坑,记住"logits 进 cross_entropy"即可。
2026-09-22 20:49:25
335
原创 基于 dlib 与 OpenCV 的人脸换脸术实现:原理与逐段代码解析
dlib 的 68 点模型把一张人脸划分为多个语义区域,每个区域对应一段连续的关键点索引。下面这段代码就是把这些索引区间整理成具名常量,方便后续按区域取点。区域索引范围说明JAW_POINTS0-16下巴轮廓17-21右眉22-26左眉27-34鼻梁与鼻翼36-41右眼42-47左眼48-60嘴唇外轮廓17-67除下巴外的脸部区域接下来把参与换脸的几个区域合并成一个总列表,并转换为元组。这里选取了左右眉、双眼、鼻子和嘴巴,这些区域基本覆盖了人脸正面的主要特征。注意这里。
2026-09-20 21:10:04
303
原创 基于 dlib 与 OpenCV 的疲劳驾驶检测:眼睛纵横比(EAR)原理与代码逐段解析
使用 dlib 的正面人脸检测器定位画面中的人脸。使用 dlib 的 68 点人脸关键点模型,获取每只眼睛周围的 6 个关键点坐标。根据眼睛 6 个关键点的几何关系,计算眼睛纵横比(EAR)。当 EAR 持续低于阈值(本文取 0.3)达到一定帧数时,判定为疲劳闭眼,触发警报。在画面中实时绘制眼睛轮廓和 EAR 数值,便于观察。其中,眼睛纵横比(EAR)是核心指标。它利用眼睛关键点之间的欧氏距离比值,刻画眼睛睁开程度,具有尺度不变性,即人脸离摄像头远近变化时,该比值仍然稳定。
2026-09-20 21:02:05
241
原创 用 Flask 部署 PyTorch 图像分类模型:原理与逐段代码讲解
在深度学习项目中,训练好一个模型只是第一步,如何把模型部署成可供外部调用的服务,是工程落地中非常关键的一环。本文以一段完整的 Flask 代码为例,讲解如何将 PyTorch 训练好的 ResNet18 图像分类模型封装成 HTTP 接口,并逐段剖析每一行代码背后的原理。在深入代码之前,先梳理一下整个服务的运行流程,这有助于理解每一段代码在整体中的位置。除了核心的预测接口,代码还提供了三个辅助接口,用于演示 Flask 的基本用法。,因为 Flask 默认只响应 GET 请求,效果与显式声明一致。
2026-09-20 20:19:30
148
原创 从零实现 CBOW 词向量模型:PyTorch 逐段代码详解
嵌入层,本质是一个 vocab_size × embedding_dim 的查找表。每个单词的索引对应表中的一行,这一行就是该单词的词向量。在训练过程中,这个矩阵会不断更新,最终学到的就是词向量本身。:第一个全连接层,把词向量映射到 128 维的隐藏空间,并经过 ReLU 激活函数引入非线性。:输出层,把隐藏层映射回词表大小,得到每个单词的得分。:对输出做对数 Softmax,把得分转换为概率分布的对数形式,方便与 nn.NLLLoss 配合使用。
2026-09-15 20:16:04
112
原创 从手搭CNN到迁移学习:食物图像分类完整实战(含逐行代码讲解)
self.imgs.append(img_path) # 存图片路径self.labels.append(label) # 存标签(此时是字符串)原理:PyTorch 要求自定义数据集继承Dataset,并重写三个方法。这里__init__读取一个 txt 文件,每行格式为图片路径 标签,把路径和标签分别存进列表。return len(self.imgs) # 返回数据集大小__len__让能返回样本总数。image = Image.open(self.imgs[idx]) # 按路径读图片。
2026-09-14 19:55:15
88
原创 基于 dlib 的人脸关键点检测实战:从静态图像到实时视频
将指定的点连接起来pts = shape[start:end] # 获取点集该函数接收起始索引start和结束索引end,用于将指定范围内的关键点依次连接成线段。首先,通过切片操作获取从start到end-1的关键点坐标子集。然后,使用 for 循环遍历这些点,每次取相邻的两个点pts[l-1]和pts[l],将其转换为元组形式,作为线段的起点和终点。最后,调用cv2.line在图像上绘制一条绿色线段,线宽为 2 个像素。# 将指定的点构成一个凸包,绘制成轮廓,一般眼睛、嘴使用凸包用来绘制。
2026-09-14 19:36:20
149
原创 PyTorch 食物图像分类实战:从数据准备到 CNN 训练全流程解析
让对象支持下标访问(p[1]),__len__让对象支持 len() 调用。这是 PyTorch Dataset 的核心协议——DataLoader 正是通过这两个方法按索引取样本并统计长度。self.labels.append(int(label)) # 直接转int,不再存字符串image = Image.open(self.imgs[idx]).convert("RGB") # 统一转RGB,解决灰度图通道报错__init__:读取 txt 文件,按空格拆分每行,分别存入图片路径列表和标签列表。
2026-09-10 19:34:20
241
原创 HDFS 与 MapReduce 核心原理详解
MapReduce 是 Hadoop 的分布式计算框架,核心思想是「分而治之」:把大规模数据集拆分成多个小任务并行处理,再汇总结果。客户端写入一个文件时,数据会经过 NameNode 的元数据管理和 DataNode 的流水线复制,最终形成多副本冗余。库时,需要确保 NameNode 开启了 WebHDFS 服务(默认端口 9870)。HDFS Shell 命令是操作 Hadoop 分布式文件系统最基础、最常用的方式。这类命令用于查看、创建、删除和移动 HDFS 中的文件与目录。下面给出常用操作示例。
2026-09-09 21:09:39
156
原创 大数据入门:Hadoop 与 MapReduce 学习路线
大数据是指无法用传统工具处理的海量数据集合,其核心特征通常概括为 4V:Volume(数据量大)、Velocity(处理速度快)、Variety(数据类型多样)、Value(价值密度低)。学习大数据技术,首先需要理解分布式存储和分布式计算的基本思想。大数据并不是一个绝对的概念,而是相对于传统数据处理能力而言的。当数据量达到 TB、PB 甚至 EB 级别,传统的关系型数据库和单机处理工具已经无法在可接受的时间内完成存储、计算和分析时,我们就称之为大数据。
2026-09-09 21:02:07
361
原创 从“找到脸“到“认出人“:我用 OpenCV 把人脸检测与识别完整跑通了一遍
这些轴在图像空间里还原出来,就是一张张"特征脸"(Eigenface)——它们看起来像模糊的人脸轮廓,但每一张都对应一种独立的明暗变化模式。训练时,把每张训练脸都表示成"若干特征脸的加权组合",权重向量就是这张脸的"指纹"。Eigenfaces 用 PCA 找"方差最大的方向",但方差大不代表能区分人——光照变化造成的方差往往比人脸差异还大。要做的,就是从这 10000 维里找出少数几个"最能代表整张脸变化方向"的轴,把脸投影到这些轴上,实现降维。到这里,OpenCV 内置的三种人脸识别方法就全部讲完了。
2026-09-06 21:01:47
339
原创 从矿物分类到手写数字识别:CNN与KNN实战代码全解析
return x原理讲解:这是一个三层一维卷积网络。输入数据原本是形状为的二维张量,通过增加一个通道维度,变为,以符合Conv1d的输入要求。三个卷积层逐步提取特征,通道数从16增加到64。每个卷积层后接ReLU激活函数引入非线性。最后通过对特征维度做全局平均池化,将每个样本压缩为64维向量,再经过全连接层输出4个类别的得分。CNN和KNN代表了深度学习和传统机器学习的两条技术路线。CNN通过多层卷积自动学习数据的层次化特征,适合处理具有局部相关性的数据(如图像、序列),但需要大量数据和较长的训练时间。
2026-09-04 21:18:23
232
原创 PyTorch CNN 手写数字识别:MNIST 实战代码逐行详解
本节的 CNN 模型由三个卷积模块和一个全连接输出层组成。每个卷积模块内部使用 nn.Sequential 把多个层组合在一起,使前向传播过程更加清晰。nn.Conv2d(stride=1,padding=2),nn.ReLU(),nn.ReLU(),nn.ReLU(),nn.ReLU()下面逐层分析网络结构。本文逐行解析了基于 PyTorch 的 MNIST 手写数字识别代码,覆盖了数据加载、批量处理、设备选择、CNN 结构设计、训练与测试流程以及交叉熵损失函数的原理。
2026-09-03 19:28:35
347
原创 SQL 语言分类详解:DML、DDL 与 DCL
DDL(Data Definition Language,数据定义语言)主要用于定义和管理数据库对象的结构,包括数据库、表、索引、视图、存储过程等。DDL 语句通常会自动提交事务,执行后立即生效,且一般无法回滚。DDL负责搭建和维护数据库的结构骨架,DML负责对结构中的数据进行日常操作,DCL则负责控制谁能访问和操作这些数据。理解这三类语言的区别,有助于在实际开发中写出更规范、更安全的 SQL,也能帮助初学者更快地建立对关系型数据库的整体认知。
2026-09-02 21:14:05
352
原创 OpenCV 实战:四段代码逐行详解
这里定义了一个简单的辅助函数cv_show,用于显示图像并等待 1 毫秒。使用waitKey(1)而不是waitKey(0),是为了让窗口在视频循环中能够持续刷新,而不会阻塞主循环的执行。# 一共4个坐标点# 按顺序找到对应坐标0123分别是 左上,右上,右下,左下s = pts.sum(axis=1) # 对pts矩阵的每一行进行求和操作。(x+y)diff = np.diff(pts, axis=1) # 对pts矩阵的每一行进行求差操作。(y-x)
2026-08-30 20:34:19
334
原创 PyTorch 手写数字识别实战:从数据加载到模型训练(零基础详解版)
张量:PyTorch 中的基本数据结构,可以理解为多维数组。图片、标签、模型参数都以张量的形式存在。数据集与数据加载器:数据集负责存储和管理样本,数据加载器负责按批次把数据送入模型。神经网络:由多个线性层和非线性激活函数堆叠而成的函数逼近器,通过调整参数来拟合输入到输出的映射关系。前向传播与反向传播:前向传播计算预测结果和损失,反向传播通过链式法则计算每个参数的梯度。损失函数:衡量预测与真实标签的差距,是模型优化的目标函数。优化器:根据梯度更新参数,常用的有 SGD、Adam 等。
2026-08-28 20:02:59
358
原创 线性回归算法实现训练数据集、测试数据集的缺失值填充
train_data_X = train_data_all.drop('矿物类型', axis=1)这段代码完成函数定义和初始数据准备。第一行定义函数train_data是特征数据,是标签数据。接下来,pd.concat把特征和标签按列方向拼接成一张完整的表,重置行索引,避免拼接后索引错乱。最后用drop去掉标签列矿物类型,得到纯特征数据,后续所有填充操作都在这个特征表上进行。train_data_X = train_data_all.drop('矿物类型', axis=1)
2026-08-27 20:57:05
349
原创 OpenCV 答题卡识别判卷实战:从图像预处理到自动评分
本文通过一个完整的 OpenCV 案例,详细讲解了答题卡识别判卷的实现流程。图像预处理:灰度化、高斯模糊、Canny 边缘检测的组合应用。轮廓检测与筛选:通过面积排序和多边形逼近定位目标区域。透视变换:校正倾斜图像,得到标准化视角。掩膜统计:利用掩膜和像素统计判断填涂状态。支持多页答题卡批量识别,提高处理效率。引入 OCR 技术识别考生信息和准考证号。优化填涂检测算法,支持铅笔和钢笔等多种填涂方式。结合深度学习模型,提升复杂场景下的鲁棒性。
2026-08-25 21:09:14
352
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅