
Python
ZONG_XP
这个作者很懒,什么都没留下…
-
原创 Python之pipreqs自动生成requirements.txt
0 背景当我们要把我们的 python 项目发布,或打包给别人使用时,需要指定各个软件的版本,即生成 requirements.txt,这个过程可以自动生成,不需要手写。有人会说,直接使用 pip freeze 工具也可以生成 requirements.txt,但这种方式有以下三个局限:pip freeze 只保存通过 pip install 安装的软件包; pip freeze 会保存当前用户下所有的 python 软件包,实际上有很多软件是其它项目中应用的(除非是在 virtualenv2021-03-25 16:01:2850
1
-
原创 NVIDIA Jetson之修改默认python/pip版本方法
参考:https://www.cnblogs.com/Jeb15/p/6080331.html给TX2刷机之后,运行python默认是python2,而我们用python3多一些,因此用以下方法更改一下首先运行以下代码sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100sudo...2019-01-24 09:32:522848
4
-
转载 Python之命令行参数解析
Python 做为一个脚本语言,可以很方便地写各种工具。当你在服务端要运行一个工具或服务时,输入参数似乎是一种硬需(当然你也可以通过配置文件来实现)。如果要以命令行执行,那你需要解析一个命令行参数解析的模块来帮你做这个苦力活。Python 本身就提供了三个命令行参数解析模块,我这里罗列一下它们的大致情况供你了解。getopt,只能简单的处理命令行参数 optparse,功能强大,易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。 argparse,使其更加容易的编写2020-08-24 14:17:50378
0
-
转载 Python之pdb代码调试
调试程序对于开发人员是一项非常重要的技能,它使得我们能够查看程序的运行过程,帮助我们准确的定位程序中的错误。然而,令人意外的是,无数的Python工程师居然不知道如何对Python代码进行单步调试,遇到问题的时候只能通过print函数打印变量中间值这种低效的方式。究其原因,还是因为这类Python工程师没有意识到Python的强大,仅仅用Python来解决一些很简单的事情,如果总是写非常短小的Python代码,可能确实不需要调试器。但是,如果代码量大,逻辑复杂以后,还是用print函数打印变量中间值的方2020-07-11 20:10:07681
0
-
转载 一行代码简化Python异常信息:错误清晰指出,排版简洁美观
即使是Python,报错时也令人头大。看着这一堆乱麻,不知道是该怀疑人生,还是怀疑自己手残。那么,Python异常输出美化工具PrettyErrors了解一下?只需一个import,报错也能整齐划一,错误代码位置、错误原因清晰明了,一眼就能看清。debug仿佛都没有那么痛苦了。一行代码简化报错先来试试一个简单的错误。def foo(): 1/0foo()...2019-12-31 09:39:06749
0
-
原创 Linux之systemd服务配置及自动重启
0 背景在linux上开发时,往往需要将自己的程序做成服务,并且实现服务开机自动重启,以及服务崩溃后自动重启功能,本文就对该功能的实现做简单介绍,实现方法很简单,使用linux系统的systemd即可实现1 systemd介绍历史上,linux的启动一直采用init进程,比如$ sudo /etc/init.d/apache2 start# 或者$ service apach...2019-10-28 11:21:187669
0
-
原创 TX2之pyinstaller打包python脚本并自动运行
参考:https://www.cnblogs.com/mywolrd/p/4756005.html0 背景在TX2嵌入式上用python开发时,为了隐藏python源码,或者说交付客户时减少操作,避免重复安装一堆依赖库,需要将源码打包为可执行文件,查看了好几种方式,用得比较广的是pyinstaller。PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文...2019-03-21 14:34:561020
0
-
原创 Python之pytest单元测试方法
参考:https://zhuanlan.zhihu.com/p/299689201 单元测试单元测试(又称为模块测试, Unit Testing)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。为什...2019-03-21 18:08:572654
0
-
原创 Ubuntu(x86)安装OpenCV(源码)的方法
参考:https://www.cnblogs.com/arkenstone/p/6490017.html1 安装依赖$ sudo apt-get install build-essential$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscal...2018-09-30 10:56:52486
0
-
转载 OpenCV之图像变换(仿射变换与透视变换)
仿射变换(affine transform)与透视变换(perspective transform)在图像还原、图像局部变化处理方面有重要意义。通常,在2D平面中,仿射变换的应用较多,而在3D平面中,透视变换又有了自己的一席之地。两种变换原理相似,结果也类似,可针对不同的场合使用适当的变换。仿射变换和透视变换的数学原理不需深究,其计算方法为坐标向量和变换矩阵的乘积,换言之就是矩阵运算。在应用层...2018-07-23 16:19:201105
0
-
原创 Ubuntu下OpenCV视频转图片的方法
参考:https://www.cnblogs.com/miaojinmin799/p/6845462.html在做深度学习相关项目时,需要对图片进行标注,但原数据是.h264格式的视频,需要读入视频并按帧提取保存图片,方法如下#include<opencv2/highgui/highgui.hpp>#include<iostream>#include <...2018-05-21 17:12:17839
0
-
转载 Python编程代码规范(Google Style)
原文:https://www.jianshu.com/p/8b6c425b65a6在编程过程中,要遵循一定的规则,包括函数命名、变量命名、代码注释等,虽然不遵循也能使代码运行成功,但优秀的、整洁的代码必定是遵循潜移默化的一些规则,这样别人阅读起来也会很轻松,否则将来甚至自己也看不懂。为了能及时发现问题,可使用python的IDLE来编写,如pycharm等工具遵循PEP 8规则,会自动发现并提...2018-07-23 10:01:561843
0
-
原创 TX2之多线程读取视频及深度学习推理
参考:https://jkjung-avt.github.io/camera-caffe-threaded/1 背景一般在TX2上部署深度学习模型时,都是读取摄像头视频或传入视频文件进行推理,从视频中抽取帧进行目标检测等任务。对于大点的模型,推理的速度是赶不上摄像头或视频的帧率的,如果我们使用单线程进行处理,即读取一帧检测一帧,推理会堵塞视频的正常传输,表现出来就是摄像头视频有很大的延迟,...2019-01-31 16:54:172481
4
-
原创 Python之pyc文件作用及生成方法
参考:https://www.zhihu.com/question/302966171 什么是pyc首先了解下python的运行机制及特性:当我们运行python文件程序的时候,Python解释器将源码转换为字节码,然后再由解释器来执行这些字节码,整体执行流程如下:完成模块的加载和链接; 将源代码翻译为PyCodeObject对象(字节码),并将其写入内存当中(方便CPU读取,起到加...2019-02-15 10:03:143899
0
-
原创 Python之调用MAG14热成像仪C++接口SDK
机器人上使用某型号的热成像仪,厂家提供了C++接口的SDK,而我们的主程序是python,因此参考《Python调用C++程序的几种方法》,利用boost的方式实现调用(该博文不具有通用性,目的是记录过程)在TX2上完成热成像仪的采集工作,因此首先给厂家提供TX2的交叉编译工具《NVIDIA TX2交叉编译工具》,如图所示,第一个表示交叉编译工具,第二个表示厂家返回的SDK解压后, 在...2019-02-14 20:42:071418
0
-
原创 keras之多GPU训练方法
在上一篇博客中,我们利用keras框架训练yolov3,训练脚本默认采用的是一块GPU,由于我们有多块GPU,因此可以设置多块GPU训练来加快训练速度。实现方法很简单,首先在头文件中添加以下内容from keras.utils import multi_gpu_model然后找到自己构建网络的地方,在我这里,第一次构建model是以下的语句if is_tiny_version:...2019-01-15 16:34:035584
17
-
原创 pip升级后Import Error:cannot import name main解决方案
在Ubuntu上安装软件,不小心升级了pip,导致使用时报错如下后来发现是因为将pip更新为10.0.0后库里面的函数有所变动造成这个问题。 解决方法如下:方法一:sudo gedit /usr/bin/pip将原来的from pip import main改为from pip._internal import main方法二:sudo gedit ...2018-05-22 19:29:0596326
27
-
原创 OpenCV之七段数码管识别(含代码)
1 背景利用opencv识别数码管,采用传统的穿线法,前提是利用深度学习目标检测的方法,在机柜中将数码管区域切割出来,然后再对切割出来的区域进行识别,判断数字是多少。切割出来的形状如图所示:数码管各段表示为2 识别思路先对数码管进行灰度化和二值化,将数字变为255,背景变为0,然后利用穿线法,对abcdefg7个区域依次穿线,判断是否有255的值,有则表示该区域高亮,最后结...2018-12-19 15:46:106707
15
-
转载 TX2+FFmpeg+OpenCV读取显示网络摄像头
作者:JasonDing链接:https://www.jianshu.com/p/6ef3c18d61b0來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。引子OpenCV中有自己的用于处理图片和视频的类VideoCapture,可以很方便的读入文件和显示。现在视频数据流是ffmpeg解码h264文件得到的,由于要依赖该数据源进行相应的后续处理,...2018-05-11 14:06:222459
1
-
原创 OpenCV之阈值化操作总结
参考:https://blog.csdn.net/sinat_21258931/article/details/61418681在做图像处理时,阈值化(二值化)是一个非常常见的操作,其中最关键的是阈值的选择,会直接影响到阈值化效果,本文对opencv常见的阈值化操作进行总结。1 固定阈值如果说图像质量较好,目标和背景容易区分,可以选择固定阈值来进行二值化,用到的函数是threshold...2019-03-27 21:18:26858
0
-
原创 OpenCV之使用滑动条动态调整阈值
在做图像处理时,二值化是一个常规操作,阈值的选取很关键,为了调试方便,可以使用滑动条来动态调整阈值,观察二值化效果,用到的函数为cv2.createTrackbar和cv2.getTrackbarPos,1 cv2.createTrackbarint createTrackbar(const string& trackbarname,const string&winna...2019-04-01 21:50:442990
2
-
原创 Python之kafka消息队列操作入门
1 kafka简介1.1 什么是kafkakafka是一个分布式、高吞吐量、高扩展性的消息队列系统。kafka最初是由Linkedin公司开发的,后来在2010年贡献给了Apache基金会,成为了一个开源项目。主要应用在日志收集系统和消息系统,相信大家之前也听说过其他的消息队列中间件,比如RabbitMQ、AcitveMQ,其实kafka就是这么一个东西,也可以叫做KafkaMQ。总之,K...2019-10-10 11:49:472659
0
-
原创 Python之代码性能分析工具(时间+内存)
0 背景在运行复杂的Python程序时,执行时间会很长,这时也许想提高程序的执行效率。但该怎么做呢?首先,要有个工具能够检测代码中的瓶颈,例如,找到哪一部分执行时间比较长。接着,就针对这一部分进行优化。同时,还需要控制内存和CPU的使用,这样可以在另一方面优化代码。本文主要介绍两种最常用的监控工具。1. 时间分析line_profiler模块可以给出执行每行代码所需占用的CPU时间,首...2019-10-09 09:52:202935
0
-
原创 Python之jinja2模板引擎生成HTML
0 背景在之前的文章中,我介绍过《Python之生成HTML文件》以及《HTML零基础入门教程(详细)》,手动生成了html文件,在实际使用的时候,我们完全可以套用模板文件来生成,免去了一条一条手写的麻烦。关于python的模板引擎有很多种类,本文选择的是比较常用的一种jinja2,接下来对该引擎的使用做一个介绍。1 jinja2介绍Jinja2 是一个现代的,设计者友好的,仿照 Dj...2019-09-03 17:13:459086
2
-
转载 Python之多进程与多线程
前言:为什么有人说 Python 的多线程是鸡肋,不是真正意义上的多线程?看到这里,也许你会疑惑。这很正常,所以让我们带着问题来阅读本文章吧。问题:1、Python多线程为什么耗时更长?2、为什么在Python里面推荐使用多进程而不是多线程?1 基础知识现在的PC都是多核的,使用多线程能充分利用CPU来提供程序的执行效率。1.1 线程线程是一个基本的CPU执行单元。...2019-10-14 09:49:30182
0
-
原创 深度学习之选择GPU或CPU方法
1 指定GPU法1import osos.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"os.environ["CUDA_VISIBLE_DEVICES"] = "1"上边表示使用第二块GPU运行程序,如果要使用多块,如第一块和第三块,可使用如下方法指定os.environ["CUDA_VISIBLE_DEVICES"] = "0...2018-10-23 09:55:132371
0
-
转载 Python之debug神器PySnooper使用方法
0 前言使用python开发过程中,总是避免不了debug。传统的debug过程大致分为两种:a)断点+单步调试。断点+单步调试估计是用的最多的了,对于较大型项目来说,其流程大致为:先在关键的代码位置加上print语句,通过分析print的值将范围缩小,这个过程可能需要重复多次,使用print的方法,一般可以将范围缩小到一个比较完整的功能模块中;然后在可能出现bug的模块中的关键部分打...2019-08-14 18:45:49982
0
-
原创 TX2之YOLOV3环境部署
参考:https://jkjung-avt.github.io/yolov3/0 背景YOLOV3作为目标检测现阶段性能最好的算法之一,具有很强的实用性,在TX2上部署YOLOV3可以解决很多现实的目标检测问题。环境依赖:opencv3.4.0 + cuda9.0 + cudnn7.1.51 opencv3.4.0网上介绍说opencv3.4.1运行yolo会有问题,因此先卸载...2019-08-06 14:26:265051
4
-
转载 Python之子进程subprocess模块
参考:https://www.cnblogs.com/breezey/p/6673901.html1 背景在用python编程时,我们经常会需要调用外部命令,比如用ffmpeg将rtsp码流保存为mp4视频,我们可以在终端使用如下指令ffmpeg -rtsp_transport tcp -i rtsp://***/h264/ch1/main/av_stream -c copy -f ...2019-06-24 10:57:43463
0
-
原创 python-onvif实现客户端控制相机云台
参考:https://github.com/quatanium/python-onvif在《海康相机之onvif测试工具使用》这篇文章中,介绍了利用onvif测试工具来调试海康相机,并且介绍了如何配置海康相机。本文将介绍如何调用onvif协议的接口,来实现代码控制海康相机云台转动,查询的大多数代码是使用C++来实现,感觉有点复杂,本文直接采用python接口来实现。C版本的请查看《ONVI...2019-04-28 20:11:0310086
38
-
原创 Python之OpenCV截取视频段
一个很简单的小栗子,在原视频中截取某一段的视频并保存,有了OpenCV工具之后,就不需要用到什么视频软件了(还是程序员比较爽哈哈哈哈哈哈)直接上代码,应该都能看懂,有问题可以留言import cv2print(cv2.__version__)videoCapture = cv2.VideoCapture('IMG_2789.MOV')fps = 120 #保存视频的帧率size...2018-11-26 09:10:2811542
16
-
原创 Python之代码规范管理工具(pylint、black)
参考链接在之前《使代码整洁的几种规范》文章中,介绍了比较常用的变量、函数等定义方法,本文专门针对python的代码风格进行介绍,主要用到两个超牛的工具pylink和black,可以对代码风格进行规范检测和自动优化。python界被广泛认同的代码风格是PEP8,这种规则对行长度、缩进、多行表达式、变量命名等内容进行了统一约定,但要注意的是,PEP8中有一些规范是为了方便阅读,而有一些规范实实...2018-11-19 15:42:443646
2
-
转载 Python之ConfigParser读取配置文件信息
参考:http://www.cnblogs.com/victorwu/p/5762931.html在项目过程中,需要设置各种IP和端口号信息等,如果每次都在源程序中更改会很麻烦,因此将需要修改的参数写在配置文件中,每次只需修改配置文件,就可以实现同样的目的。Python 标准库的 ConfigParser 模块提供一套 API 来读取和操作配置文件。因此在程序开始位置要导入该模块,注意区分是p...2018-07-09 15:43:041736
0
-
原创 Python读取解析JSON数据
什么是JSONJSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Pyth...2018-06-26 17:33:582766
0
-
转载 Python异常捕获与处理
转载自:JmilkFan:http://blog.csdn.net/jmilk异常异常即非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处理。如果异常对象没有被处理或捕捉,程序就会执行回溯(Traceback)来终止程序。异常类型通用异常类型表异常 描述 BaseExcep...2017-10-09 10:43:2039448
0
-
转载 Python之Socket自动重连
问题描述现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳定等)需要自动重连。测试服务器示例代码:https://github.com/mike-zhang/pyExamples/blob/master/socketRelate/tcpServer1_multithread.py解决方案'''tcp client with reconnectE-Mail...2017-12-15 11:16:016449
0
-
原创 Python之TCP Socket网络编程
0 背景Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页、QQ 聊天、收发 email 等等。要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过IP地址、协议、端口号三元组来标识进程的,解决了进程标识问...2017-12-14 11:52:012487
0
-
转载 Linux UDEV规则写串口别名
串口设置别名的方法2017-11-20 10:44:313674
0
-
原创 Python初级教程:入门详解
Python入门学习2017-10-26 10:39:14813
0
-
原创 《莫烦Python3基础教程》学习笔记
Python自调用、可变参数、关键字参数等2017-10-12 17:13:047829
0