![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python
文章平均质量分 67
kuokay
这个作者很懒,什么都没留下…
展开
-
grpc-python介绍及使用
gRPC是什么所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。如下图所示就是一个典型的RPC结构图。gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C原创 2022-05-09 10:29:54 · 1323 阅读 · 4 评论 -
PyQT5 之 Qt Designer 介绍
PyQT5简介pyqt5是一套Python绑定Digia QT5应用的框架。它可用于Python 2和3。本教程使用Python 3。Qt库是最强大的GUI库之一。pyqt5的官方网站http://www.riverbankcomputing.co.uk/newspyqt5做为Python的一个模块,它有620多个类和6000个函数和方法。这是一个跨平台的工具包,它可以运行在所有主要的操作系统,包括UNIX,Windows,Mac OS。pyqt5是双重许可。开发者可以在GPL和商业许可之间进行选择。原创 2021-08-03 22:11:39 · 9165 阅读 · 0 评论 -
PyQt5实现图片缩放、旋转
下面讲述PyQt5实现图片缩放、旋转的两种方式第一种基于鼠标滚轮缩放,左右键移动pyqt5实现过程如下# -*- coding: utf-8 -*-"""Created on Sun May 5 21:37:54 2019@author: Tiny"""# =============================================================================''' 鼠标左键移动图片,中键缩放图片,右键还原图片''' ''' 参考:原创 2021-08-11 10:55:37 · 9467 阅读 · 19 评论 -
三行解决PyQt5——Qlabel自适应文字的大小,自动换行
PyQt5——Qlabel自适应文字的大小,自动换行self.label.setGeometry(QRect(328, 240, 329, 27*4))self.label.setWordWrap(True)self.label.setAlignment(QtCore.Qt.AlignTop)原创 2021-10-11 14:00:34 · 5473 阅读 · 1 评论 -
OpenCV图像处理
图像处理几何变换图像缩放缩放是对图像的大小进行调整,即使图像放大或缩小。cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)参数:src : 输入图像dsize: 绝对尺寸,直接指定调整后图像的大小fx,fy: 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可interpolation:插值方法import cv2 as cv# 1. 读取图片img1 = cv.i原创 2021-08-03 17:13:49 · 3297 阅读 · 0 评论 -
python opencv 实现 图片文本倾斜校正
代码比较简单就不解释了:# -*- coding: UTF-8 -*- import numpy as npimport cv2 ## 图片旋转def rotate_bound(image, angle): #获取宽高 (h, w) = image.shape[:2] (cX, cY) = (w // 2, h // 2) # 提取旋转矩阵 sin cos M = cv2.getRotationMatrix2D((cX, cY), -angle,原创 2022-01-12 10:01:44 · 1045 阅读 · 0 评论 -
基于OpenCV人脸识别案例
原理我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用,就像我们的卷积核,每一个特征是一 个值,这个值等于黑色矩形中的像素值之后减去白色矩形中的像素值之和。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。Haar特征可用于于图像任意位置,大小也可以任意改变,所以矩形特征值是矩形原创 2021-08-03 17:39:01 · 919 阅读 · 2 评论 -
OpenCV视频处理操作
视频处理从文件中读取视频并播放在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件:创建读取视频的对象 cap = cv.VideoCapture(filepath)参数:filepath: 视频文件路径视频的属性信息2.1 获取视频的某些属性: retval = cap.get(propId)参数:propId: 从0到18的数字,每个数字表示视频的属性常用属性有:2.2 修改视频的属性信息cap.set(原创 2021-08-03 17:31:59 · 8886 阅读 · 4 评论 -
PythonOpenCV基于鼠标事件实现图片移动缩放
import cv2# 全局变量g_window_name = "img" # 窗口名g_window_wh = [800, 600] # 窗口宽高g_location_win = [0, 0] # 相对于大图,窗口在图片中的位置location_win = [0, 0] # 鼠标左键点击时,暂存g_location_wing_location_click, g_location_release = [0, 0], [0, 0] # 相对于窗口,鼠标左键点击和释放的位置g_zo原创 2021-08-15 22:33:51 · 967 阅读 · 1 评论 -
python opencv影像拼接
垂直影像拼接 vconcat#!/usr/bin/env python3# -*- coding: utf-8 -*-import cv2image = cv2.imread("lena.jpg")image_v = cv2.vconcat([image, image])cv2.imshow("Result", image_v)cv2.waitKey(0)样式水平影像拼接 hconcat#!/usr/bin/env python3# -*- coding: utf-8 -*-原创 2021-08-12 14:46:14 · 349 阅读 · 1 评论 -
超详细OpenCV之python操作
图像处理是什么图像是人类视觉的基础,是自然景物的客观反映,是人类认识世界和人类本身的重要源泉。“图”是物体反射或透射光的分布,“像“是人的视觉系统所接受的图在人脑中所形版的印象或认识,照片、绘画、剪贴画、地图、书法作品、手写汉学、传真、卫星云图、影视画面、X光片、脑电图、心电图等都是图像。模拟图像和数字图像图像起源于1826年前后法国科学家Joseph Nicéphore Niépce发明的第一张可永久保存的照片,属于模拟图像。模拟图像又称连续图像,它通过某种物理量(如光、电等)的强弱变化来记录图像亮原创 2021-08-03 09:28:15 · 86900 阅读 · 10 评论 -
使用celery实现订单超时取消
Celery官方文档中关于定时任务使用的说明:项目目录结构我们需要新增一个任务目录,例如order: celey_tasks/ ├── config.py ├── __init__.py ├── main.py ├── order/ ├── __init__.py └── tasks.py在main.py中,注册任务目录【注意,接下来后面我们使用django的模型处理,所以必须对django的配置进行引入】im原创 2021-03-07 22:17:18 · 525 阅读 · 0 评论 -
一文搞懂Celery
一.Celery简介Celery是一个功能完备即插即用的异步任务队列系统。它适用于异步处理问题,当发送邮件、或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用户体验。文档:http://docs.jinkan.org/docs/celery/getting-started/index.htmlCelery的特点是:简单,易于使用和维护,有丰富的文档。高效,单个celery进程每分钟可以处理数百万个任务。灵活,celery中几乎每个部分都可以自定义原创 2020-11-08 20:19:42 · 874 阅读 · 3 评论 -
CPython学习
前言Python有时候太慢,如果手动编译C或者是C++来写#include<Python.h>的文件也比较麻烦。CPython无疑是一个比较好的选择。简介CPython是特指C语言实现的Python,就是原汁原味的Python。之所以使用CPython这个词,是因为Python还有一些其它的实现,比如Jython,就是Java版的Python,还有烧脑的PyPy,使用Python再把Python实现了一遍。如下是官方对CPython的说明:CPython is Guido van原创 2022-04-07 14:54:33 · 4716 阅读 · 0 评论 -
基于tornado实现聊天室
使用tornado和websocket实现简单的聊天室模拟场景server端代码from tornado import web,ioloop,httpserver,optionsimport datetimefrom tornado.web import RequestHandlerfrom tornado.websocket import WebSocketHandlerclass Index(RequestHandler): def get(self): sel原创 2021-01-20 22:29:58 · 184 阅读 · 0 评论 -
Tornado的WebSocket
WebSocket简介WebSocket是HTML5规范中新提出的客户端-服务器通信协议,协议本身使用新的ws://URL格式。WebSocket 是独立的、创建在 TCP 上的协议,和 HTTP 的唯一关联是使用 HTTP 协议的101状态码进行协议升级,使用的 TCP 端口是80,可以用于绕过大多数防火墙的限制。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端直接向客户端主动推送数据而不需要客户端进行再次请求,两者之间可以创建持久性连接,并允许数据进行双向通信。Tor原创 2021-01-20 22:27:16 · 1144 阅读 · 0 评论 -
tornado异步协程
Tornado的协程Tornado的异步编程也主要体现在网络IO的异步上,即异步Web请求。异步Web请求客户端Tornado提供了一个异步Web请求客户端tornado.httpclient.AsyncHTTPClient用来进行异步Web请求。fetch(request)用于执行一个web请求request,并异步返回一个tornado.httpclient.HTTPResponse响应。request可以是一个url,也可以是一个tornado.httpclient.HTTPRequest原创 2021-01-20 22:25:05 · 494 阅读 · 0 评论 -
tornado入门必看2
请求与响应请求tornado.httputil.HTTPServerRequest from tornado import ioloop from tornado import web from tornado import autoreload from tornado.options import define,options,parse_command_line settings = { 'debug' : True, } define("port", defa原创 2021-01-19 23:00:00 · 365 阅读 · 0 评论 -
Tornado入门必看1
一.Tornado简介官网GitHub介绍Tornado是使用Python开发的全栈式(full-stack)Web框架和异步网络库,最早由4名Google前软件工程师(布雷特·泰勒)2007创办的Friendfeed(一个社交聚合网站)开发而来的。通过使用非阻塞IO,Tornado可以处理数以万计的开放连接,是long polling、WebSockets和其他需要为用户维护长连接应用的理想选择。目前最新版本6.1, 我们实际项目开发是使用的不可能是最新版本,所以在此我们在tornado基础阶段原创 2021-01-18 22:37:46 · 448 阅读 · 0 评论 -
Flask入门到精通
Flask简介Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoS原创 2021-03-06 20:46:13 · 689 阅读 · 0 评论 -
python读取json数据还原表格并批量转换为html
背景由于需要对ocr识别系统的表格识别结果做验证,通过返回的json文件结果对比比较麻烦,故需要将json文件里面的识别结果还原为表格做验证。文件部分内容如下:{"row":"6","col","5""start_row": 0, "start_column": 0, "end_row": 0, "end_column": 0, "data": "称", "position": [51, 71, 168, 93], "org_position": [50, 60, 167, 62, 166, 84,原创 2022-03-04 10:43:14 · 1167 阅读 · 0 评论 -
使用Gunicorn部署项目 自定义 配置文件
使用gunicorn 启动flask项目时可以定义一个文件来定义启动参数:在项目目录下新建一个文件 xx.py文件import loggingimport logging.handlersfrom logging.handlers import WatchedFileHandlerimport osimport multiprocessingimport gevent.monkeygevent.monkey.patch_all()BASE_DIR = os.path.abspath(o原创 2021-12-30 13:53:52 · 811 阅读 · 3 评论 -
superset 可视化平台搭建
什么是 supersetSuperset 是一款由 Airbnb 开源的“现代化的企业级 BI(商业智能) Web 应用程序”,其通过创建和分享 dashboard,为数据分析提供了轻量级的数据查询和可视化方案。Superset 的前端主要用到了 React 和 NVD3/D3,而后端则基于 Python 的 Flask 框架和 Pandas、SQLAlchemy 等依赖库,主要提供了这几方面的功能:集成数据查询功能,支持多种数据库,包括 MySQL、PostgresSQL、Oracle、SQL S原创 2021-11-13 20:57:39 · 6440 阅读 · 0 评论 -
Django分表的设计与实现
需求背景由于数据量快速增长,导致接口性能问题,而分表是一个比较有效的解决方式。这里主要探讨以下几个问题哪些model需要分表。分表的方式。如何动态创建表。如何动态地对相应表进行增删查改。分表后ForeignKey及ManyToManyField如何处理。分表后migration问题。哪些model需要分表首先是从接口性能出发,用jmeter测试一遍接口,找出存在性能问题的接口,然后添加打点日志,找到影响性能的相关model。基本上是一些数据量大的、关联关系多、存在多个textfield原创 2021-09-28 11:18:18 · 1118 阅读 · 4 评论 -
pyqt5判断鼠标移入移出某个指定的label或button
话不多说,直接上代码import sysfrom PyQt5 import QtCorefrom PyQt5.QtWidgets import *class EventFilterWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) widget = QWidget() label=QLabel() label.setText("这是标签"原创 2021-08-26 15:14:14 · 1536 阅读 · 0 评论 -
python海象运算符
简介Python 海象运算符是在 PEP 572 中提出,并在 Python3.8 版本并入发布。海象运算符的英文原名叫 Assignment Expresions ,即 赋值表达式。海象表达式由一个 : 和 一个 = 组成,即::= 。我们一般称作 walrus operator(海象运算符),因为它看起来就是一个海象旋转 90° 而成。语法海象运算符的语法格式是:(variable_name := expression or value)即一个变量名后跟一个表达式或者一个值,这个和赋值运算原创 2021-07-26 17:11:25 · 4688 阅读 · 0 评论 -
Python轻量级ORM之peewee
简介Peewee是一个轻量级Python``ORM库。最主要是和Django的ORM 操作很像,如果你学过Django那么很容易上手。peewee支持三种数据库安装推荐使用pip命令:pip install peewee使用连接连接Mysql库如下:from peewee import *db = MySQLDatabase("test", host="127.0.0.1", port=3306, user="root", passwd="123456")db.connect()原创 2021-07-13 11:10:16 · 494 阅读 · 0 评论 -
python执行周期任务
如果你想要周期性的执行某个python脚本,最出名的就是选择Crontab脚本,但是Crontab不支持秒级任务而且执行任务过多时不好管理。其次就是celery,但celery使用比较麻烦,而且不够轻。那么Schedule就出现了:1.安装:pip install schedule2.示例:import scheduleimport timedef work(): print("我在工作")schedule.every(5).minutes.do(work)while True:原创 2021-07-07 17:36:33 · 1079 阅读 · 0 评论 -
Celery实际使用与内存泄漏问题
原因: worker执行任务以后不会自动释放内存解决: 在配置文件中限制worker的并发数CELERYD_CONCURRENCY = 2 # celery worker并发数CELERYD_MAX_TASKS_PER_CHILD = 5 # 每个worker最大执行任务数原创 2021-07-07 17:18:32 · 702 阅读 · 1 评论 -
Python的类型注解
Python的类型注解typing模块自python3.5开始,PEP484为python引入了类型注解(type hints)类型检查,防止运行时出现参数和返回值类型、变量类型不符合。作为开发文档附加说明,方便使用者调用时传入和返回参数类型。该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒。pycharm目前支持typing检查,参数类型错误会黄色提示。常用类型int,long,float: 整型,长整形,浮点型bool,str: 布尔型,字符串类型List, Tup原创 2021-04-14 11:41:51 · 317 阅读 · 0 评论 -
python异步之asyncio
一.简介asyncio 是用来编写 并发 代码的库,使用 async/await 语法。asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。asyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择。二.asyncio1.用asyncio实现Hello world代码如下:import asyncio@asyncio.coroutinedef hello(): print("Hello worl原创 2021-04-08 15:14:09 · 2138 阅读 · 2 评论 -
python面试题总结
网络篇一.介绍一下Http协议:超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。现今广泛使用的一个版本为–HTTP 1.1HTTP是一个客户端(用户)和服务端(网站)请求和应答的标准(TCP)。客户端向服务端发送一个请求报文,请求报文包含请求的方法、URL、协议版本、求情头部和请求数据。服务器已一个状态行作为响应,响应的内容包括协议的版本、成功或错误代码、服务器信息、响应头部和相应数据。HTTP 协议特点无状态保存HTTP是一种不保存状态的协议,即无状态协原创 2021-03-12 23:08:05 · 898 阅读 · 2 评论 -
python实现图书管理系统
系统环境:python 3.6 ,django 1.11.9 ,mysql 5.7运行截图项目目录实现代码Models部分代码:from django.db import models# Create your models here.class Publisher(models.Model): name=models.CharField(max_length=32)class Book(models.Model): name=models.CharFiel原创 2021-03-10 16:13:28 · 2447 阅读 · 5 评论 -
hash文件校验
import hashlibimport os"""mode => r read(数字->字符个数)mode => rb read(数字->字节个数)字节的个数 <=> 文件的大小"""(1) 针对于小文件进行内容校验def check_md5(filename): hs = hashlib.md5() with open(filename,mode="rb") as fp: hs.update(fp.read()) return hs原创 2021-01-20 10:16:15 · 872 阅读 · 1 评论 -
最全,最简明的图文算法总结
一.时间复杂度时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)二.空间复杂度空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。常数:o(1)一维数组:o(n)二维数组:o(n+m)三.递归def h(n): if n>0:原创 2020-12-27 20:40:30 · 558 阅读 · 0 评论 -
Python opencv调用笔记本电脑摄像头
import cv2import numpy as npdef video_demo(): capture = cv2.VideoCapture(0) # 0为电脑内置摄像头 while (True): ret, frame = capture.read() # 摄像头读取,ret为是否成功打开摄像头,true,false。 frame为视频的每一帧图像 frame = cv2.flip(frame, 1) # 摄像头是和人对立的,将图像左右调.原创 2020-12-22 15:28:00 · 1635 阅读 · 0 评论 -
DRF之自动生成接口文档
一. 自动生成接口文档REST framework可以自动帮助我们生成接口文档。接口文档以网页的方式呈现。自动接口文档能生成的是继承自APIView及其子类的视图。安装依赖REST framewrok生成接口文档需要coreapi库的支持。pip install coreapi设置接口文档访问路径在总路由中添加接口文档路径。文档路由对应的视图配置为rest_framework.documentation.include_docs_urls,参数title为接口文档网站的标题。from原创 2020-11-08 16:35:52 · 691 阅读 · 0 评论 -
DRF之异常处理组件
一. 异常处理 Exceptions看一个简单的示例class APIError(Exception): passclass Student2APIView(APIView): def get(self,request,pk): try: instance = Student.objects.get(pk=pk) except Student.DoesNotExist: raise APIError('自原创 2020-11-08 16:34:08 · 330 阅读 · 0 评论 -
DRF之分页组件
一. 分页PaginationREST framework提供了分页的支持。我们可以在配置文件中设置全局的分页方式,如:REST_FRAMEWORK = { # 全局分页,一旦设置了全局分页,那么我们drf中的视图扩展类里面的list方法提供的列表页都会产生分页的效果。所以一般不用全局分页 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 100原创 2020-11-08 16:32:55 · 276 阅读 · 0 评论 -
DRF之过滤排序组件
一. 过滤Filtering对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。pip install django-filter 在配置文件中增加过滤后端的设置:INSTALLED_APPS = [ ... 'django_filters', # 需要注册应用,]REST_FRAMEWORK = { ... 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_fr原创 2020-11-08 16:31:44 · 346 阅读 · 0 评论