自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 python开发PC端桌面应用

python开发PC端桌面应用项目场景: 很多情况下需要用很短的时间开发一款在windows上离线运行的小工具,以便解决一些现实问题。比如公司近期有个紧急项目,需要根据算法需求人工标注海量的地址信息,开发周期和工具易用性上都是有些挑战的,此时选择python开发是个明智的选择。 下面对python开发桌面应用工具的步骤做下总结。开发环境准备python开发我选择在Pycharm 上进行,新建工程,配置解释器及venv,这些跟普通的python项目开发一样。安装PyQt5及PyQt5-too

2020-09-09 11:46:32 17244 3

原创 多个gradio服务实现负载均衡

于是,增加了一块GPU,单个服务用两块GPU,测试后发现仅仅是显存分在两块卡上了,速度并未提升。要实现直接跳转到被分发到的服务的 IP 地址,你可以修改 Nginx 配置,使其将被分发到的服务的 IP 地址包含在 HTTP 响应头中。然后,在客户端收到响应后,可以从响应头中提取被分发到的服务的 IP 地址,并将用户重定向到该地址。最后,用户访问入口,在已有的一个前端页面上建个图标,点击图标触发nginx服务地址请求,用fetch API获取到响应头中被分发到的服务的地址,跳转过去即可。

2024-04-15 09:41:33 447

原创 Vue和FastAPI实现前后端分离

一个是它的异步处理性能比较好,二是它可以类似java swagger的API交互文档,这个对应前后端分离多人开发非常友好。之前总结过Vue和Flask实现前后端分离,这次同样借个小项目实践、并总结下Vue和FastAPI实现前后端分离。

2024-04-03 15:18:34 1398 1

原创 将算法推理函数封装成Restful API

如果要快速构建一个算法应用,便于用户在线体验算法推理效果,采用gradio是个不错的选择。然而,要集成到业务程序中,比如要支持java等语言去调用(发送请求,获取到推理结果),此时便需要将算法推理函数封装成Restful API。这里,简单总结下快速封装Restful API的步骤。业务端要做一个演示程序,里面包含一个目标检测算法,算法人员如何将自己跑在GPU服务器上的算法程序交付给业务人员呢?将算法推理函数封装成Restful API;

2024-02-27 16:21:24 407

原创 docker使用总结

在平时的工作中,部署软件服务或者多人用一台GPU服务器开发算法模型,为了互不影响,而且便于环境迁移,用docker是很好的选择。这里简单总结下,分享给大家。

2024-02-04 16:04:48 614

原创 ElasticSearch基础用法

Elasticsearch是一个开源的、分布式的、实时的搜索和分析引擎。它允许用户近乎实时地存储、检索大量数据,并能够高效地对其进行全文搜索、聚合和分析。

2024-01-26 11:40:54 719

原创 网络爬虫实践小结

目前只能通过搜寻url规律,发现里面的pageId是9位数字字符,大概确定了范围,进行暴力遍历。第一步:向确定的url发送请求,接收服务器的响应信息;近期工作中要解决两个问题,一个是数据组需要网爬一些图片数据,另外一个是要批量爬取公司用于文档协同的一个网站上的附件。这里附上代码,供参考。python在网络爬虫方面提供了一些框架,Scrapy、Pyspider等,由于我们要实现的都是小功能,用一些现成的库即可。第二步:对接收到的信息进行解析,找到需要的标签内容(通常是我们需要的图片或文件的url);

2023-10-11 17:00:46 1044

原创 gradio初体验

当设置成多线程后,当多个用户并发请求,出现了检测结果和输入的检测项不对应的情况,将concurrency_count设置成1,也就是单线程后问题得到解决。这里遇到一个问题,对于输入的图片点击“检测”后,创建一条记录,当算法结果出来后,用户根据结果进行评价反馈,这些反馈信息要保存到这条记录中。将前端部件、后端业务和算法推理进行了封装,简单清洗,几行代码就可以搭建一个AI算法的应用,在浏览器上检验算法效果,直观高效,消除了算法到应用之间的鸿沟。后续有时可以对gradio框架源码研究下,进行二次开发。

2023-07-25 19:03:05 1515 4

原创 浅谈大模型的出现

ChatGPT的惊人效果让我们不得不重新审视人工智能。对于AI我们需要客观看待,不可过渡夸大,觉得马上机器就可以具备人的情绪和一切思考力,对人类带来威胁之类的;但也不可轻视,要以开放的心态去拥抱新技术,去实现新的可能。

2023-07-13 15:22:29 284

原创 windows上的中文文件名上传到linux上乱码问题解决

至此,两种方法结合,问题基本搞定。部分文件夹中文名无法用convmv转码的原因,初步分析应该是来源和其它的不一样,但用python可以获取到原来的中文名,进行重命名即可解决。附上python批量转码的代码。convmv -r 应该是递归子文件夹,但仍存在部分子文件夹下文件名未进行转码,因此编写bash 脚本批量转码。windows上中文默认编码格式是gbk,而linux默认编码格式是utf-8,因此需要将文件名转码。./gbk2utf8.sh .(文件路径)

2023-02-28 10:26:35 1961

原创 模型评价标准

为了了解模型的泛化能力,即判断模型的好坏,我们需要用某个指标来衡量,有了评价指标,就可以对比不同模型的优劣,对模型进行针对性地调参优化。随着机器学习在不同领域中的应用,其评价方式需要和实际业务相结合,通过确定目标来定量设计评价标准。以下总结出不同类别模型的通用评价指标。

2023-01-18 14:00:37 1580

原创 PyQt5 多线程实例

前言PyQt的所有窗口都在UI主线程中,也就是main函数中执行了QApplication.exec_()的线程中,在该线程中执行耗时较长的操作时,会导致当前窗口停止响应。为了避免上述情况发生,需要用QThread开启一个子线程去完成耗时的操作。问题描述在实现数据清洗工具时,数据量通常很大,清洗过程会比较耗时,当点击执行后,当前窗口会卡住,有个圈不停再转,直到清洗任务执行完成,用户体验非常不好。问题解决通过QThread为清洗操作创建一个线程,在主线程中触发该线程执行。子线程创建:from

2022-03-11 14:53:21 2046

原创 图片数据清洗

前言数据对于深度学习算法模型的效果至关重要。通常,在对采集到的大量数据进行标注前需要做一些数据清洗工作。对于大量的数据,人工进行直接清洗速度会很慢,因此开发一些自动化清洗工具对批量数据首先进行自动清洗,然后再进行人工审核并清洗,可以很大程度上提高效率。工具功能根据收集到的需求,工具主要实现了以下功能:统计数据信息(总占用空间、数量、损坏图片数);去除已损坏图片,去除模糊图片,去除相似图片,机动车车色分类,昼夜分类统计数据信息# 获取数据集存储大小、图片数量、破损图片数量def g

2022-03-10 19:17:44 13496 15

原创 数据结构之哈希表

概念哈希表是一种数据结构,通过哈希函数来组织数据,以支持快速插入和搜索。哈希表的关键思想是使用哈希函数将键映射到存储桶。更确切地说,当我们插入一个新的键时,哈希函数将决定该键应该分配到哪个桶中,并将该键存储在相应的桶中; 当我们想要搜索一个键时,哈希表将使用相同的哈希函数来查找对应的桶,并只在特定的桶中进行搜索。哈希冲突理想情况下,我们设计的哈希表可以将键和桶一一映射,然而很难实现。那要解决哈希冲突,我们可以将桶的结构设计成数组或者链表,如此就可以将冲突的键(或键值对)有组织地

2021-11-10 10:06:12 411

原创 数据结构之链表

和顺序表相对应,有个链式存储的数据结构,命名曰链表。单链表节点中只存储后项节点指针的链表,称为单链表。# 定义节点class LinkNode(object): def __init__(self, data=None): self.data = data self.next = None关于单链表的创建、遍历、插入和删除代码示例如下:# 2021.11.8# 链表# 定义节点class LinkNode(object): d

2021-11-08 12:53:08 238

原创 三个基础排序算法

排序在计算机算法中非常常见也非常基础,不管是准备面试还是纯属兴趣,掌握它都很有必要。选择排序基本思想:预置list[i]为最小,逐个比较range(i,len(list))里的元素,找到最小元素的下标,和刚开始预置的list[i]交换;前部分作为有序区,后面部分作为无序区,知道遍历完所有无序区。冒泡排序基本思想:逐个比较相邻的元素,后者小,则进行交换,最终将最大的数(无序区局部最大值)推送到列表最后端(有序区)。插入排序基本思想:从第2个元素开始,将该元素插入到已排好的有序区内,

2021-11-04 11:52:30 143

原创 python之闭包

前言闭包作为python高级特性中的一个,初学总觉其披着一层神秘的面纱,这里我们来一起揭开这层面纱吧。那什么是闭包呢?闭包,又称闭包函数,和普通的嵌套函数类似,闭包中包含外部函数和内部函数,不同之处是闭包中外部函数返回的不是一个值,而是内部函数,即闭包对象;通常,该返回的函数会被赋值给一个变量,继而被调用执行。为何要是用闭包比如,已知三条直线上某一个点的横坐标x,求其纵坐标y。如果不使用闭包,实现如下:def line1(x): return 2 * x + 1​def..

2021-10-27 14:41:51 705

原创 初识Redis

什么是RedisRemote Dictionary Server,即远程字典服务,是一款开源的、可基于内存也支持持久化的key-value数据库,提供多种语言API。通常应用于需要处理大规模数据读写的场景中。和其它关系型数据相比,其有以下优势: 基于内存,读写操作性能优越,可以支持每秒十几万次的读写操作; 支持集群、分布式、主动同步等配置; 具备事务能力,保证了高并发场景下数据的安全和一致性。 数据结构Redis支持五种数据结构: 字符串(string)

2021-10-26 17:09:08 343

原创 docker容器中程序退出异常,GPU未释放

1、问题描述近期在docker容器中对一批数据通过算法进行清洗时,当数据处理完成后发现进程未正常退出,GPU内存未正常释放。[root@ai66 ~]# nvidia-smiSun Sep 26 09:10:45 2021+-----------------------------------------------------------------------------+| NVIDIA-SMI 455.38 Driver Version: 455.38 CUDA V

2021-09-26 13:40:32 781

原创 python之装饰器

引言软件开发中,当需要创建高度重复的代码时,需要寻求一种优雅的解决方案。python中的元编程即解决这类问题,通过创建函数和类来修改、生成或包装已有的代码。装饰器就是python中用来包装函数的一种机制。内建装饰器python提供了一些内建装饰器,比如我们常用的@staticmethod、@classmethod、@property。装饰器内部的代码一般会涉及创建一个新的函数,利用*args,**kwargs接收任意参数,在该函数内部会调用被包装的函数,并返回被包装函数的结果;最后这个新创建的函

2021-09-24 16:55:40 104

原创 python中大数据文件读取

python中大数据文件读取python中经常会遇到读取大文件的场景。文件较小时,我通常采用下面方法,readlines(),该方法会一次性读取文件的所有行,并将其放入list中,最后存入内存中。可想而知,当文件较大是,内存占用会非常高,甚至造成内存溢出,进程被系统kill掉。# 读取方式一with open(file_path, 'r+', encoding='utf-8') as f: count = 0 for line in f.readlines(): cou

2021-09-16 16:50:38 3554 1

原创 jupyter-notebook二次开发

背景公司内部提供给算法人员用于模型训练的平台开发需求中提出了嵌入Jupyter Notebook模块,而Jupyter Notebook是开源的,方便后续对部分细节进行功能定制和优化,需要对其进行调研,并梳理出二次开发的环境搭建、版本编译、生产环境部署流程,此文档对以上工作内容进行总结。jupyter-notebook简介2.1 功能简介Jupyter Notebook官方介绍是:基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。优点举例如下:1

2021-09-08 17:19:02 3172 6

原创 MySql之索引

通常小型项目涉及数量辆比较小,数据查询频率不高,索引通常会被忽略。但当数据量较大,涉及多个表,查询较为频繁时,我们需要对查询性能进行优化,此时,建立合适的索引确是主要的方法之一。通常,mysql数据库查询有两种方式:一种是:全表扫描;另外一种是:利用数据表中建立的索引进行扫描。索引可以提高查询效率,下面我们来举例说明如何做到的。例如:有三个表,table1,table2, table3,分别只含有一列c1、c2、c3,每个表中分别含有N行记录,现要查询对应值相等的行。SQL查

2021-09-08 16:09:53 632

原创 MySql安装相关

windows安装mysql:1、获取并解压安装包:mysql-8.0.20-winx64.zip2、配置环境变量:3、管理员权限打开cmd,进入安装目录:H:\>cd H:\tools\mysql-8.0.20-winx64\bin4、生成data文件,或者手动创建data空目录(执行mysqld --initialize):mysqld --initialize-insecure --user=mysql5、如果没有生成my.ini,需要手动创建,指定data路

2021-09-08 11:03:32 108

原创 C/S架构的应用程序开发实战(二)

后端服务后端用python实现,采用flask web框架。可从github上获取flasky源码,在此基础上进行业务逻辑的实现。程序结构如下:├── app # 业务逻辑实现代码│ ├── common # 公共函数实现,这里主要是数据库相关的增删改查接口实现,以及算法模型的推断功能实现│ ├── init.py│ ├── main # 视图函数实现,即供前端调用的API实现│ └── pycache├── config.py # 工程配置文件├── log.

2021-09-06 16:27:16 705

原创 Nginx服务安全漏洞修复

1、安全漏洞说明使用Nginx提供服务的产品,经过安全扫描工具扫描后报出三个高风险、三个中风险安全漏洞2、nginx版本过低自带安全漏洞升级nginx版本到1.21.1后,三个高风险漏洞消失。3、HTTP 信息头公开下载源码:http://nginx.org/en/download.html修改源码:修改Server头需要修改的源码位置有三个:src/core目录下的nginx.h文件src/http目录下的ngx_http_header_filter_modul

2021-08-10 10:36:24 4206

原创 C/S架构的应用程序开发实战(一)

项目背景近期需要开发一个对巨量的图片数据进行车辆品牌信息标注的工具,为了提高标注效率,准备先通过现有车辆品牌识别的算法模型进行下预标注,标注人员在此基础上进行审核和修改即可。另外,需要统计出各个品牌数据的数量等信息。软件架构确定用户是分散的,待标注数据量大而且通常存在用户PC机的磁盘上,软件做成一款即开即用的桌面应用是非常合适的。但考虑到要用算法进行预标注,算法模型运行要用到性能较好的GPU资源,为每个用户提供具有这样硬件资源的是不切合实际的,所以可以采用部署后端服务的方法。是采用C/S架构呢,还是B

2020-11-16 10:17:40 4746 1

原创 Vue和Flask实现前后端分离

引言近期了解了下目前比较热门的前端框架Vue.js,新技能嘛,只有实践了用起来了,才能有比较直观的体验。因此考虑写个小dmeo练练手,后端采用Flask提供几个Restfull风格的API,前端放弃惯用的flasky常用的Jinja模板引擎,采用灵活的Vue.js框架,顺便实践一把前后端分离。既然前后端分离,那么就需要在开发环境独立创建两个项目。下面逐一介绍。前端环境准备开发是在windows10系统上进行。安装node.jsnode.js自带npm,换源npm install -g

2020-09-16 10:54:54 7038 1

原创 写在前面

作为一名不算优秀的程序媛,在职场也“混迹”了7年有余。鉴于以下三点原因,开始着手写些东西。第一,自从2013年硕士毕业后,做过白盒测试、自动化测试、桌面应用开发、web开发等,到目前为止除了寥寥无几的几篇总结文档留存外,其它没留下任何东西,很多东西在头脑中也只留下少许印象。所以,第一是为了自己的技术积累有个系统的记录。第二,解决问题或完成项目后也因为懒惰很少去总结深入分析,这些导致知识点掌握模棱两可不够深入,无法形成自己的知识体系;加之近期发现自己的思维、逻辑能力有所下降,不知是否和年岁渐长有关。因

2020-07-06 10:38:21 140

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除