精华内容
下载资源
问答
  • python标注,@decorators

    千次阅读 2011-11-21 13:40:03
    看了篇python标注的文章,很想写篇文章做个笔记,既非转载,也非翻译,原文如下: http://stackoverflow.com/questions/739654/understanding-python-decorators/1594484#1594484    1 def makebold(fn):  ...
      
    

    看了篇python标注的文章,很想写篇文章做个笔记,既非转载,也非翻译,原文如下:

    http://stackoverflow.com/questions/739654/understanding-python-decorators/1594484#1594484

     


      1 def makebold(fn):
      2     def wrapped():
      3         return "<b>" + fn() + "</b>"
      4     return wrapped
      5
      6 def makeitalic(fn):
      7     def wrapped():
      8         return '<i>' + fn() + '</i>'
      9     return wrapped
     10
     11 @makebold
     12 @makeitalic
     13 def say():
     14     return "Hello"
     15
     16 print say()

     @makeitalic
     def say():

    其实就等于把say这个函数作为makeitalic函数的参数。


     @makebold
      @makeitalic

    这个makeitalic又作为makebold函数的参数。

     

    想要更多的了解请看原文

    展开全文
  • Python 标注(annotation)

    千次阅读 2019-05-20 23:19:56
    Python函数标注(function annotation)是关于用户自定义函数中使用的类型的完全可选元数据信息。 函数标注Python字典的形式存放在函数的 annotations 属性中,并且不会影响函数的任何其他部分。 形参标注的定义...

    函数标注(function annotation)

    PEP 484
    https://docs.python.org/zh-cn/3/tutorial/controlflow.html?highlight=annotations
    Python函数标注(function annotation)是关于用户自定义函数中使用的类型的完全可选元数据信息。

    函数标注 以Python字典的形式存放在函数的 __annotations__ 属性中,并且不会影响函数的任何其他部分。
    形参标注的定义方式是在形参名称后加上冒号:,后面跟一个表达式,该表达式会被求值为标注的值。
    返回值标注的定义方式是加上一个组合符号 ->,后面跟一个表达式,该标注位于形参列表和表示 def 语句结束的冒号之间。 下面的示例有一个位置参数,一个关键字参数以及返回值带有相应标注:

    >>> def f(ham: str, eggs: str = 'eggs') -> str:
    ...     print("Annotations:", f.__annotations__)
    ...     print("Arguments:", ham, eggs)
    ...     return ham + ' and ' + eggs
    ...
    >>> f('spam')
    Annotations: {'ham': <class 'str'>, 'return': <class 'str'>, 'eggs': <class 'str'>}
    Arguments: spam eggs
    'spam and eggs'
    

    变量标注(variable annotation)

    Python 3.6 PEP 526
    对变量或类属性的 annotation。
    在标注变量或类属性时,还可选择为其赋值:

    class C:
        field: 'annotation'
    

    变量标注通常被用作 类型提示:例如以下变量预期接受 int 类型的值:

    count: int = 0
    
    展开全文
  • annotation – 标注 关联到某个变量、类属性、函数形参或返回值的标签,被约定作为 type hint 来使用。 局部变量的标注在运行时不可访问,但全局变量、类属性和函数的标注会分别存放模块、类和函数的 ...

    annotation – 标注

    • 关联到某个变量、类属性、函数形参或返回值的标签,被约定作为 type hint 来使用。

    • 局部变量的标注在运行时不可访问,但全局变量、类属性和函数的标注会分别存放模块、类和函数的 annotations 特殊属性中。

    variable annotation – 变量标注

    • 对变量或类属性的 annotation。

    • 在标注变量或类属性时,还可选择为其赋值:

      class C:
            field: 'annotation'
      
    • 变量标注通常被用作 类型提示:例如以下变量预期接受 int 类型的值:

      count: int = 0
      

    带标注的赋值语句

    • 标注赋值 在单个语句中将变量或属性标注和可选的赋值语句合为一体
    annotated_assignment_stmt ::=  augtarget ":" expression ["=" expression]
    

    与普通 赋值语句 的差别在于仅有单个目标且仅有单个右手边的值才被允许
    对于将表达式作为赋值目标的情况,如果是在类或模块作用域中,标注会被求值,但不会保存。
    如果一个名称在函数作用域内被标注,则该名称为该作用域的局部变量。 标注绝不会在函数作用域内被求值和保存。

    function annotation – 函数标注

    • 即针对函数形参或返回值的 annotation
    • 函数标注通常用于 类型提示:
    • 例如以下函数预期接受两个 int 参数并预期返回一个 int 值
    def sum_two_numbers(a: int, b: int) -> int:
       return a + b
    

    函数定义

    • 函数定义就是对用户自定义函数的定义

    funcdef ::= [decorators] “def” funcname “(” [parameter_list] “)”
    ["->" expression] “:” suite
    decorators ::= decorator+
    decorator ::= “@” dotted_name ["(" [argument_list [","]] “)”] NEWLINE
    dotted_name ::= identifier ("." identifier)*
    parameter_list ::= defparameter ("," defparameter)* ["," [parameter_list_starargs]]
    | parameter_list_starargs
    parameter_list_starargs ::= “" [parameter] ("," defparameter) [”," ["" parameter [","]]]
    | "
    " parameter [","]
    parameter ::= identifier [":" expression]
    defparameter ::= parameter ["=" expression]
    funcname ::= identifier

    函数定义是一条可执行语句。 它执行时会在当前局部命名空间中将函数名称绑定到一个函数对象(函数可执行代码的包装器)。 这个函数对象包含对当前全局命名空间的引用,作为函数被调用时所使用的全局命名空间。

    函数定义并不会执行函数体;只有当函数被调用时才会执行此操作。

    一个函数定义可以被一个或多个 decorator 表达式所包装。 当函数被定义时将在包含该函数定义的作用域中对装饰器表达式求值。 求值结果必须是一个可调用对象,它会以该函数对象作为唯一参数被发起调用。 其返回值将被绑定到函数名称而非函数对象。 多个装饰器会以嵌套方式被应用。

    展开全文
  • # python GUI from tkinter . messagebox import askyesno WINDOW_NAME = 'simple Bounding Box Labeling Tool' # 默认窗口名 FPS = 24 # 画面帧率 SUPPOTED_FORMATS = [ 'jpg' , 'jpeg' , '...

    一、获取图像并展示

    # 获取 picture_dir 下文件的所有图片,并以24帧率显示
    
    import os
    from itertools import cycle
    
    filenames = os.listdir("picture_dir")
    img_iter = cycle([cv2.imread(os.sep.join(["picture_dir",x])) for x in filenames])
    key = 0
    while key!=27:
        cv2.imshow('picture_windows',next(img_iter))
        key = cv2.waitKey(42)
    

    二、标注小工具(代码有问题)

    """
        标注信息格式如下:
        ('file_name',(121,232),(656,675)) # 依次:文件名,左上角坐标,右下角坐标
    """
    
    import os
    import cv2
    from tkinter.filedialog import askdirectory        # python GUI
    from tkinter.messagebox import askyesno
    
    WINDOW_NAME = 'simple Bounding Box Labeling Tool'  # 默认窗口名
    FPS = 24                                           # 画面帧率
    SUPPOTED_FORMATS = ['jpg','jpeg','png']            # 支持图像格式
    DEFAULT_COLOR = {"Object":(255,0,0)}               # 物体框颜色
    COLOR_GRAY = (192,192,192)                         # 信息显示背景和未定义物体框显示
    BAR_HEIGHT  = 16
    
    # 上下左右,ESC,Delete键的cv2.waitKey() 函数返回值
    KEY_UP = 65362
    KEY_DOWN = 65364
    KEY_LEFT = 65361
    KEY_RIGHT = 65363
    KEY_ESC = 27
    KEY_DELETE = 65535
    KEY_EMPTY = 0    # 用于默认循环
    
    get_bbox_name = '{}.bbox'.format
    
    # 定义物体框标注工具类
    class SimpleBBoxLabeling:
        def __init__(self,data_dir,fps=FPS,window_name=None):
            self._data_dir=  data_dir
            self.fps = fps
            self.window_name = window_name if window_name else WINDOW_NAME
            self._pt0 = None         # 正在画的左上角坐标
            self._pt1 = None         # 鼠标所在坐标
            self._drawing = False    # 当前画框状态
            self._cur_label = None   # 当前标注物体名称
            self._bboxes = []        # 当前图像对应的所有已标注框
    
            # 如果有用户自定义的标注信息则读取,否则使用默认物体和颜色
            label_path = '{}.labels'.format(self._data_dir)
            self.label_colors = DEFAULT_COLOR if not os.path.exists(label_path) else self.load_labels(label_path)
    
            # 获取已标注的文件列表和还未标注的文件列表(统一后缀名为小写)
            imagefiles = [x for x in os.listdir(self._data_dir) if x[x.rfind(".")+1:].lower() in SUPPOTED_FORMATS]
            labeled = [x for x in imagefiles if os.path.exists(get_bbox_name(x))]
            to_be_labeled = [x for x in imagefiles if x not in labeled]
    
            # 每次打开一个文件夹,自动从未标注的第一张开始
            self._filelist = labeled+to_be_labeled
            self._index = len(labeled)
            if self._index > len(self._filelist)-1:
                self._index = len(self._filelist)-1
    
        # 鼠标回调函数
        def __mouse_ops(self,event,x,y,flags,param):
            if event == cv2.EVENT_LBUTTONDOWN:   # 按下左键,左上角坐标开始画框,drawing状态为True
                self._drawing = True
                self._pt0 = (x,y)
            elif event == cv2.EVENT_LBUTTONUP:   # 松开左键,标记右下角坐标并保存,drawing状态为False
                self._drawing = False
                self._pt1 = (x,y)
                self._bboxes.append((self._cur_label,self._pt0,self._pt1))  #添加标注信息tuple
            elif event == cv2.EVENT_MOUSEMOVE:  # 实时更新右下角坐标
                self._pt1 = (x,y)
            elif event == cv2.EVENT_RBUTTONUP:  # 右击删除画好的框
                if self._bboxes:
                    self._bboxes.pop()
    
        # 清除所有标注框和当前状态
        def _clean_bbox(self):
            self._pt0 = None
            self._pt1=  None
            self._drawing = False
            self._bboxes = []
    
    	# 定义标注框和当前信息函数:在图像下方多出 BAR_HEIGHT区域用于显示文件名和标注信息
    	def _draw_bbox(self,img):
    		h,w = img.shape[:2]
    		canvas = cv2.copyMakeBorder(img,0,BAR_HEIGHT,0,0,cv2.BORDER_CONSTANT,value=COLOR_GRAY)
    
    		# 正在标注物体的信息,若左键按下,则显示两个点坐标,否则显示当前待标注物体的名称
    		label_msg = '{}:{},{}'.format(self._cur_label,self._pt0,self._pt1) if self._drawing else 'Current label:{}'.format(self._cur_label)
    
    		# 显示当前文件名,文件个数信息
    		msg = '{}/{},{} | {}'.format(self._index+1,len(self._filelist),self._filelist[self._index],label_msg)
    		cv2.putText(canvas,msg,(1,h+12),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,0),1)
    
    		# 画出已经标好的框和对应名字
    		for label,(bpt0,bpt1) in self._bboxes:
    			label_color = self.label_colors[label] if label in self.label_colors else COLOR_GRAY
    			cv2.rectangle(canvas,bpt0,bpt1,label_color,thickness=2)
    			cv2.putText(canvas,label,(bpt0[0]+3,bpt1[1]+15),0.5,label_color,2)
    
    		# 画正在标注的框和对应名字
    		if self._drawing:
    			label_color = self.label_colors[self._cur_label] if self._cur_label in self.label_colors else COLOR_GRAY
    			if self._pt1[0] >= self._pt0[0] and self._pt1[1] >= self._pt0[1]:
    				cv2.rectangle(canvas,self._pt0,self._pt1,label_color,thickness=2)
    			cv2.putText(canvas,self._cur_label,(self._pt0[0]+3,self._pt0[1]+15),0.5,cv2.FONT_HERSHEY_SIMPLEX,0.5,label_color,2)
    		return canvas
    	
    	# 利用repr() 函数导出标注框数据文件
    	@staticmethod
    	def export_bbox(filepath,bboxes):
    		if bboxes:
    			with open (filepath,'w') as file:
    				for bbox in bboxes:
    					line = repr(bbox)+"\n"
    					file.write(line)
    		elif os.path.exists(filepath):
    			os.remove(filepath)
    
    	# 利用eval() 函数读取标注框字符串数据
    	@staticmethod
    	def load_bbox(filepath):
    		bboxes = []
    		with open(filepath ,"r") as file:
    			line = file.readline().rstrip()
    			while line:
    				bboxes.append(eval(line))
    				line = file.readline().rstrip()
    		return bboxes
    
    	# 利用eval() 函数读取物体及颜色信息到数据
    	@staticmethod
    	def load_labels(filepath):
    		label_colors = []
    		with open(filepath ,"r") as file:
    			line = file.readline().rstrip()
    			while line:
    				label,color = eval(line)
    				label_colors[label] = color
    				line = file.readline().rstrip()
    		return label_colors
    
    	# 读取图像文件和对应标注框信息(如果有的话)
    	@staticmethod
    	def load_sample(filepath):
    		img = cv2.imread(filepath)
    		bbox_filepath = get_bbox_name(filepath)
    		bboxes = []
    		if os.path.exists(bbox_filepath):
    			bboxes = SimpleBBoxLabeling.load_bbox(bbox_filepath)
    		return img,bboxes
    
    	# 导出当前标注框信息并清空
    	def _export_n_clean_bbox(self):
    		bbox_filepath = os.sep.join([self._data_dir,get_bbox_name(self._filelist[self._index])])
    		self.export_bbox(bbox_filepath,self._bboxes)
    		self._clean_bbox()
    	# 删除当前样本和对应的标注信息
    	def __delete_current_sample(self):
    		filename = self._filelist[self._index]
    		filepath = os.sep.join([self._data_dir,filename])
    		if os.path.exists(filepath):
    			os.remove(filepath)
    		filepath = get_bbox_name(filepath)
    		if os.path.exists(filepath):
    			os.remove(filepath)
    		self._filelist.pop(self._index)
    		print("{} is deleted!".format(filename))
    
    	# OpenCV 循环窗口:主程序
    	def start(self):
    		last_filename = ''                   # 最近标注文件名,判断是否执行图像读取
    		label_index = 0                      # 标注物体索引
    		labels = self.label_colors.keys()    # 所有标注物体名称的列表
    		n_labels = len(labels)               # 待标注物体种类数
    
    		# 定义窗口和鼠标回调
    		cv2.namedWindow(self.window_name)
    		cv2.setMouseCallback(self.window_name,self.__mouse_ops)
    		key = KEY_EMPTY                      # 默认0
    		delay = int(1000/FPS)                # 每次循环的持续时间
    		while key!=KEY_ESC:                  # 没按下ESC,则持续循环
    			# 上下方向键用于选择当前标注物体
    			if key == KEY_UP:
    				if label_index == 0:
    					pass
    				else:
    					label_index -=1
    			elif key ==KEY_DOWN:
    				if label_index == n_labels-1:
    					pass
    				else:
    					label_index += 1
    			# 左右方向键用于选择当前标注物体:
    			elif key == KEY_LEFT:
    				if self._index > 0:          # 首张图片无需清空上一张
    					self._export_n_clean_bbox()
    				self._index -=1
    				if self._index < 0:
    					self._index = 0
    			elif key ==KEY_RIGHT:            # 末张图片无需清空上一张
    				if self._index < len(self._filelist)-1:
    					self._export_n_clean_bbox()
    				self._index +=1
    				if self._index > len(self._filelist) - 1:
    					self._index = len(self._filelist) -1
    			# 删除当前图片和对应的标注信息
    			elif key == KEY_DELETE:
    				if askyesno("Delete Sample","Are you Sure?"):
    					self.__delete_current_sample()
    					key = KEY_EMPTY
    					continue
    
    			# 如果键盘操作执行了换图片,则重新读取,更新图片
    			filename = self._filelist[self._index]
    			if filename != last_filename:
    				filepath = os.sep.join([self._data_dir,filename])
    				img,self._bboxes = self.load_sample(filepath)
    
    			# 更新当前标注物体名称
    			self._cur_label = labels[label_index]
    
    			# 把标注和相关信息画在图片上并显示指定时间
    			canvas = self._draw_bbox(img)
    			cv2.imshow(self.window_name,canvas)
    			key = cv2.waitKey(delay)
    
    			# 当前文件名就是下次循环的老文件名
    			last_filename = filename
    		print("finished!")
    		cv2.destroyAllWindows()
    
    		# 如果推出程序,需要对当前文件进行保存
    		self.export_bbox(os.sep.join([self._data_dir,get_bbox_name(filename)]),self._bboxes)
    		print("labels updatad!")
    if __name__ == "__main__":
    	dir_with_images = askdirectory(title="where are the images?")
    	labeling_task = SimpleBBoxLabeling(dir_with_images)
    	labeling_task.start()
    

    参考:
    https://blog.csdn.net/hax001/article/details/78315294

    展开全文
  • Python类型标注

    2020-07-20 13:55:03
    机器学习越来越火,大量的机器...自从Python3.5以来,发布了typing包,推荐标注类型,并且IDE会检查类型,让Python看起来有点静态语言的感觉了。本文主要参考Python3.7.5的官方文档 1 关注我的Python专栏 常用的类型
  • python标注

    2019-02-25 15:58:04
    # annotate():标注 import matplotlib.pyplot as plt plt.figure(1,figsize=(5,5)) # frameon:是否绘制坐标轴的边框 plt.subplot(111,frameon=False) # bbox:边框属性 # boxstyle:标注框样式(round、square、...
  • Python 词性标注

    千次阅读 2018-04-29 23:57:16
    1. DefaultTagger标注器DefaultTagger可以将所有token标记为同一个标签(tag)。sent = "Thanks for your reading!" tokens = nltk.word_tokenize(sent) default_tagger = nltk.DefaultTagger('NN') ...
  • Python函数的函数标注

    2020-11-21 01:07:08
    Python函数的函数标注概述 概述 函数标注的含义就是对自定义函数的参数,返回值类型明确指示出数据类型。 给函数的参数标注数据类型的方式是:在形参名后跟一个冒号":",在冒号后指明形参的类型 给函数的返回值标注...
  • 主要为大家详细介绍了python实现简单图片物体标注工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Python-函数标注

    2019-07-24 19:30:58
    1.使用函数参数标注,能提示程序员应该怎样正确使用这个函数 2.以字典的形式存放在函数的 __annotations__ 属性中,并且不会影响函数的任何其他部分 3.形参标注的定义方式是在形参名称后加上冒号,后面跟一个...
  • 批量修改文件名:我这里用于对图片数据集标注 注意:输入目录与输出目录相同才行 """ import os input_dir = "../SandBox/label_pictures" output_dir = "../SandBox/label_...
  • 这是之前写过的一个python标注简单工具,就是将txt文件转为XML文件,代码比较简单, 本人就没有进行注释,供大家参考#!/usr/bin/env python # -*- coding: utf8 -*- #import _init_path import sys import os from ...
  • postag.zip
  • tkinter是Python下面向tk的图形界面接口库,可以方便地进行图形界面设计和交互操作编程,本文通过实例代码给大家介绍的Python tkinter实现图片标注功能,感兴趣的朋友一起看看吧
  • 训练数据前要进行图片标注,labelimg标注后会生成xml文件,数据很多的话,手动统计标注的标签名太麻烦了,所以写了一个小程序,其实很简单,初次接触python记录下。 总体思路:定义一个list用来存放类名,打开存放...
  • python实现labelme样本自动标注

    千次阅读 2020-08-15 20:23:34
    python实现labelme样本自动标注 1、 json文件的结构简介; 2、 图片的I/O操作及相应的类型转换; 3、 基础的图像处理技术,能实现图像突出特征点或区域的检测; 4、 python基础
  • Python 分类和标注词汇

    2019-04-10 21:45:45
    词性标注(part-of-speech tagging ,POS tagging):将词汇按照词性分类并相应地对他们进行分类 词性也称你为词类,词范畴。用于特定任务标记的集合被称为一个标记集。 1.1 使用词性标注器 使用词性标注器处理...
  • Opencv + Python 图像标注矩形框

    千次阅读 2018-12-20 21:40:07
    import cv2 fname = 'D:\**\**\***.jpg'' img = cv2.imread(fname) # 画矩形框 pt1 = (257,200) pt2 = (291,222) cv2.rectangle(img, pt1, pt2, (255,0,0), 2) cv2.imwrite('***.jpg', img) ...注:1....
  • 使用Python实现简易的数据标注工具

    千次阅读 2018-11-28 22:07:15
    使用Python实现简易的数据标注工具 以增加工作效率为目的,最近一直在着手构建一个AI ToolBox 这两天,我为其中的预处理工具目录添加了数据标注模块,本文所介绍内容的代码见这里 该数据标注模块包含以下几个demo ...
  • Python:图像标注工具

    千次阅读 2019-09-26 18:36:44
    目录./imgs存放图像,./... 类IMG作为传给鼠标回调函数的参数,它的成员data代表图像,name代表标注结果的路径,click_count代表一幅图像上的点数,points代表一幅图像上点的坐标。 #encoding=utf-8 import...
  • 今天小编就为大家分享一篇Python 给定的经纬度标注在地图上的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python中给散点添加标注

    千次阅读 2020-01-13 10:55:10
    ##python中给散点添加标注 import numpy as np import matplotlib.pyplot as plt x=[1,2,3,4,5]#散点坐标 y=[6,7,8,9,10] c=[11,12,13,14,15]#散点标注 plt.scatter(x,y) for i in range(0,len(x)): plt.annotate(c...
  • Python3-类型标注支持

    千次阅读 2019-04-09 10:37:02
    typing为Python的一个标注库,此默认支持PEP 484和PEP 526指定的类型提示。最基本的支持由Any、Union、Tuple、Callable、TypeVar和Generic类型组成。有关完整的规范,请参阅PEP 484,有关任何类型提示的简单介绍,请...
  • 用于标注目标检测的工具,python写成,linux下,很方便使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,758
精华内容 25,903
关键字:

python的标注

python 订阅