- 博客(105)
- 收藏
- 关注
原创 OpenCV 形态学操作
参数/属性膨胀 (cv2.dilate腐蚀 (cv2.erode核心功能扩展图像中的白色区域(前景)缩小图像中的白色区域(前景)工作原理用核覆盖区域内的最大像素值替换中心像素值用核覆盖区域内的最小像素值替换中心像素值关键参数输入图像二值图像(如Canny边缘结果)同膨胀核 (kernel结构元素(核矩阵),支持形状:•(矩形)•(椭圆)•(十字形)同膨胀迭代次数 (iterations值越大,白色区域扩展越显著值越大,白色区域缩减越显著核尺寸影响核尺寸越大(如(7,7)
2025-08-14 18:04:59
340
原创 gunicorn + flask 处理高并发请求
Flask:局限于单线程 WSGI 应用框架,默认仅能顺序处理请求,无法直接并发。Gunicorn:多进程模型,通过预派生(pre-fork)机制启动多个 Worker 进程(-w参数),每个 Worker 独立处理请求,充分利用多核 CPU。
2025-08-13 11:50:27
384
原创 进程、线程、协程的概念
本文比较了进程、线程和协程三种执行单元的特性。进程是操作系统分配资源的最小单位,具有独立性和高稳定性;线程是CPU调度的最小单位,共享进程资源但开销较低;协程是用户态轻量级线程,由程序自身调度,适合高并发I/O任务。三者在资源分配、开销和适用场景上各有特点,可形成层级关系:一个进程包含多个线程,每个线程又可运行多个协程。
2025-08-12 15:06:24
179
原创 PaddlePaddle 模型训练技巧
损失函数中,针对不同类别使用不同的权重,可以有效解决数据类别不均衡的问题。语义分割常见的损失函数,比如 CrossEntropyLoss 和 DiceLoss,都支持设置权重。举例如下,如果背景和前景像素分别标注为 0 和 1,则可以在 CrossEntropyLoss 字段中设置 weight,分别表示对应下标类别的权重大小。注意,weight 的长度需要等于类别数。coef 是损失函数外部参数。
2025-08-12 14:53:10
202
原创 PaddleOCR 调参
det_db_unclip_ratio 为 文本框扩展比例:调整框大小(值越大框越宽松)。det_db_box_thresh 为文本框保留阈值,过滤低置信度检测框。det_db_thresh 为 二值化阈值,控制文本区域分割灵敏度。drop_score 为 识别结果过滤阈值,低于此值的结果丢弃。use_angle_cls 为是否膨胀二值图,连接断裂文本区域。
2025-08-08 15:18:52
165
原创 PaddleOCR 数据增强预处理
ocr 检测和识别模型训练完成之后,通过 api 脚本调用测试,发现文字识别的性能很差。但是用官方的 predict_system,py 脚本调用模型却没问题,准确率很高。立即想到是不是因为我在 api 调用过程中没有做数据增强预处理,于是决定对输入图像做图像增强。
2025-08-08 15:10:43
396
原创 Python 服务统一响应格式工具类
在开发 RESTful API 服务时,保持一致的响应格式是非常重要的。统一的响应格式不仅能让前端开发者更容易处理返回数据,还能提高 API 的可维护性和可读性。本文将介绍一个简单的 Python 工具类,帮助你在 Flask 应用中实现统一的响应格式。
2025-08-06 11:56:47
275
原创 计算机网络面经
幂等(Idempotence)是一个数学概念,用于描述某些操作的特性,即无论操作执行多少次,结果都是相同的。换句话说,幂等操作可以重复执行而不会改变系统状态。如果一个操作是幂等的,那么对同一资源执行该操作一次和执行该操作多次的效果相同。在正确实现下,GET、DELETE、PUT 和 HEAD 等方法都是幂等的,而 POST 方法不是。
2025-04-15 20:15:13
1334
原创 LeetCode 解题思路 38(前 K 个高频元素、数据流的中位数)
【代码】LeetCode 解题思路 38(前 K 个高频元素、数据流的中位数)
2025-04-13 13:06:22
327
原创 MySQL 面经
内连接用于返回两个表中有匹配关系的行。假设有两张表:用户表和订单表,想查询有订单的用户就可以使用内连接 users INNER JOIN orders,按照用户 ID 关联就行了。FROM users只有那些在两个表中都存在 user_id 的记录才会出现在查询结果中。和内连接不同,外连接不仅返回两个表中匹配的行,还返回没有匹配的行,用 null 来填充。外连接又分为左外连接 left join 和右外连接 right join。
2025-04-12 20:41:36
1296
原创 Java 集合框架面经
Java 中的队列主要通过 Queue 接口和并发包下的 BlockingQueue 两个接口来实现。优先级队列 PriorityQueue 实现了 Queue 接口,是一个无界队列,它的元素按照自然顺序排序或者 Comparator 比较器进行排序。双端队列 ArrayDeque 也实现了 Queue 接口,是一个基于数组的,可以在两端插入和删除元素的队列。采用安全失败机制的集合容器,在遍历时并不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。
2025-04-12 18:54:46
1148
原创 LeetCode 解题思路 37(柱状图中最大的矩形、数组中的第 K 个最大元素)
【代码】LeetCode 解题思路 37(柱状图中最大的矩形、数组中的第 K 个最大元素)
2025-04-12 17:37:00
342
原创 LeetCode 解题思路 34(寻找旋转排序数组中的最小值、寻找两个正序数组的中位数)
【代码】LeetCode 解题思路 34(寻找旋转排序数组中的最小值、寻找两个正序数组的中位数)
2025-04-08 12:03:44
326
原创 Redis 面经
字符串是最基础的数据类型,key 是字符串,value 是:字符串、数字、二进制。字符串的主要使用场景:缓存、计数、共享 Session、限速。哈希是键值对集合,key 是字符串,value 是 Map 集合,比如说 value = { name : ‘沉默王二’, age : 18 }。哈希的主要使用场景:缓存用户信息、缓存对象。List 是字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表的主要使用场景:消息队列、文章列表。
2025-04-07 17:39:21
1795
原创 LeetCode 解题思路 33(在排序数组中查找元素的第一个和最后一个位置、搜索旋转排序数组)
【代码】LeetCode 解题思路 34(在排序数组中查找元素的第一个和最后一个位置、搜索旋转排序数组)
2025-04-07 12:07:06
356
原创 MyBatis 面经
Mybatis 是一个半 ORM 框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
2025-04-06 15:30:36
874
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人