以加快影像工程和研究发展为目标的数据管道和便利库

imagepypelines的Python项目详细描述




;imagepypelines

![构建](https://www.travis-ci.com/jmaggio14/imagepypelines.svg?branch=master"主构建成功")
[![codecov](https://codecov.io/gh/jmaggio14/imagepypelines/branch/master/graph/badge.svg)](https://codecov.io/gh/jmaggio14/imagepypelines)



"imagepypelines"包由高级工具组成,简化了复杂图像处理、计算机视觉和机器的构建学习框架。在罗切斯特理工学院(rochester institute of technology)的本科成像科学项目期间,我们发现自己在编写和重写代码,这些代码非常简单,例如数据类型转换和调试时显示图像,比数学或逻辑错误本身带来的麻烦还多!我们希望"imagepypelines"的即插即用、易于定制的特性将允许所有数据驱动的科学家快速构建复杂的框架,用于原型应用程序,并成为那些对学习传统难题感兴趣的人的有价值的教育工具。在友好的环境中!

为了实现这一目标,我们的开发团队始终遵循以下5个核心原则:

1。乐高玩具很有趣。编码应该很有趣
3。因此编码应该像玩乐高玩具一样。图像是有趣的,因此这将始终是我们的焦点
5。我们必须受苦,以免我们的用户受苦

**u此项目目前处于alpha椆

谮installation椆br/>(确保您看到**依赖项**部分)椆

python兼容性:3.4-3.6(python 2.7向后)64位

**通过pip**:
``````
pip安装imagepypelines--用户
```
**从源**:
``控制台
git克隆https://github.com/jmaggio14/imagepypelines.git
cd imagepypelines
python setup.py install
````
中国的Tensorflow
`` console
pip安装Tensorflow GPU的Tensorflow GPU的Tensorflow GPU用户
````(或仅限CPU使用)console
``` console
`` console
pip安装Tensorflow的Tensorflow用户
````
````
`` opencv opencv opencv
我们强烈建议您[从源代码构建opencv opencv](https://docs://docs://docs/docs/docs.opencv.org/3.4/df/d65/tutorial_表格内容简介.html)。***但是,可以使用
``控制台
pip install opencv python--user
```
(虽然这些非官方绑定没有遇到很多问题,
我们不保证支持)



`ImagePypelines`,包括示例和教程,可以在我们的网站上找到:www.imagePypelines.org



\您可以将此代码用于研究或商业用途,只要它符合本回购协议中包含的许可条款以及"imagepypelines"依赖项的许可条款。

e="ImagePypelines-成像科学加速库",
author="Hartzell,Dileas,Maggio",
year="2018",
HowPublished="\url{https://github.com/jmaggio14/ImagePypelines}",
}
`````



设置并不总是很容易适应新的用途,因此常常被降级到概念验证应用程序。许多自定义管道可能也不提供分步错误检查,这会使调试成为一个挑战。
![xkcd](https://imgs.xkcd.com/comics/data_pipeline.png"破裂的管道")

(来源:[xkcd](https://www.xkcd.com/2054/))



`imagepypelines'的"管道"对象允许快速构建和原型制作,确保工作流每一层的端到端兼容性,并利用有用的内部调试实用程序,用于以图像为中心或高维数据例程。




[管道](https://raw.githubusercontent.com/jmaggio14/imagepypelines/91b5f297632df16c2c246492782e37ea0a263b45/docs/images/pipeline-example.png"管道示例")


每个"块"都接受一个数据列表并返回一个数据列表,将其传递到下一个块或从管道中传出。该系统确保块与成批或单独处理数据的算法兼容。块还支持标签处理,因此**与受监督的机器学习系统或其他需要培训的算法兼容**


广义上说,每个框都可以看作是一个黑框,只需对输入数据应用操作即可![块](https://raw.githubusercontent.com/jmaggio14/imagepypelines/91b5f297632df16c2c246492782e37ea0a263b45/docs/images/block.png"块示例")


a"u datum"可以是任何类型:图像数组、文件名、标签——几乎是pythonic类型。



SS基准比它们接收的数据要多,因此能够用于筛选或向管道中注入数据。

所有模块是否相互兼容?
并非全部,每个块都有预定义的可接受输入和输出。然而,"pipeline"对象将在处理任何数据之前验证管道完整性



splay')
pipeline.add(ip.imageloader())其中每个元素都是"blocks"
pipeline.add(ip.resizer())
pipeline.add(ip.blockviewer())


pipeline.process(ip.standard_image_filenames())
````
我们刚刚制作了一个处理管道,可以读取图像、调整图像大小并显示它们!但我们可以做更复杂的操作。


wer(暂停时间=1)

pipeline=ip.pipeline(块=[加载、调整大小、fft、低通、ifft、显示])


ons
"imagepypelines"的一个更强大的应用是它易于在
机器学习和功能工程应用中使用。
我们可以轻松地定制一个管道来执行图像分类e超参数为**ip.simpleImageClassifier**
`` python
导入图像像素为ip


features=ip.pretrainednetwork();图像特征块
pca=ip.pca(256);主成分分析块
神经网络=ip.multilayerperceptron(neurs=512,num掼hidden=2)`neural网络块

classifier=ip.pipeline([特征,pca,神经网络])

r/>classifier.train(train_u data,train_u labels)train the classifier
predictions=classifier.process(test_data)test the classifier

打印精度
精度=IP.精度(预测,地面真实)*100
打印('管道分类精度为{}%!'.format(accurity))
```


我们刚刚训练了一个完整的神经网络分类器!


_

i/o操作
-图像显示
-摄像机捕捉
-图像加载器
-图像写入

机器学习
-线性支持向量机
-rbf支持向量机
-多支持向量机
-乙状结肠支持向量机
-可训练neural网络
-8预训练神经网络(用于特征提取)
-主成分分析

调整大小



将ImagePypeLines排序为IP

创建用于处理图像的函数
def normalize\u image(img):
返回img/img.max()

e,none,3]):ip.arrayType([none,none,3])}



block=ip.quick_block(normalize_image,io_map)
````


此示例不包括培训或标签处理"python
将ImagePypeLines导入为IP


Class normalizeBlock(IP.simpleBlock):
"将块规格化为0和最大计数(包括0和最大计数)"
def初始计数(self,max计数=1):
self.max计数=max计数
使用灰度和彩色图像的块
io-map={ip.arraytype([none,none]):ip.arraytype([none,none]),
ip.arraytype([none,none,3]):ip.arraytype([none,none,3])}

super(normalizeblock,self)。\uu-init(io-map)

def process(self,img):
"重载进程"sing function for this block"
返回img.astype(np.float32)/img.max()*self.max\count
````

计算机视觉
任务



_ gradient=ip.linear()
```
可以使用"ip.list_standard_images()`


检索标准图像的完整列表对于在RIT的成像科学项目中的人来说,有一对复活节彩蛋给你们;)
``python
将imagepypelines导入为ip
ip.quick_image_view(ip.carlenna())
ip.quick_image_view(ip.roger())
ip.quick_image_view(ip.pig())
````



` imagepypelines`包含用于此目的的帮助函数和对象

=ip.lenna()

/>#显示标准化为255的lenna
ip.quick_image_view(lenna,normalize_and_bin=true)
````

r/>``python
import imagepypelines as ip
import time




对于标准图像中的img:
viewer.view(img)
time.sleep(.1)
````


随机模式=np.random.rand(512512).astype(np.float32)

成像科学家经常默认打印出数据的形状或大小。` imagepypelines`包含
一个helper类,用于以格式化字符串快速汇总图像
``python
将imagepypelines导入为ip
lenna=ip.lenna()

summary=ip.summary er(lenna)
print(summary)
```
生成以下内容12,512,3)大小:786432最大:255最小:3平均:128.228数据类型:uint8]'
````


ly errors
`` python
将图像像素导入为ip
lenna=ip.lenna()

=IP.维度(lenna)
```

` imagepypelines包括一些简单的工具来计时进程或函数


导入时间




time.sleep(5)
print(t.time(),"seconds")或t.time(ms)为毫秒
` `
``

time.sleep(1)
打印(t.lap(),"seconds"或t.lap.ms(),持续毫秒
```


t=timer()
t.计数道n=n
当t.倒计时时:
做某事(
```



要从ImagePypelines运行
``python
。util import function\u timer
from ImagePypelines.util import function\u timer
import time

秒使用"@function\u timer\u ms"
@function\u timer\u ms
def或illiseconds():
time.sleep(1)

在1000.118ms的"或以毫秒为单位"上
```


``imagepypelines`
**u中的开发工具这一部分是为"imagepypelines"的开发人员或希望"imagepypelines"与他们的项目紧密结合的人设计的。???
如果是这样,那么您可能会使用数百万个print语句来调试代码。(别担心,我们都有罪)

`imagepypelines`通过使用一个名为**`printer`**的对象鼓励代码跟踪。打印机是简单地打印出正在发生的事情的对象,这种打印方式易于读取、用颜色编码并可追踪到正在执行当前操作的对象。**打印机的开销极低,不会比打印语句更影响代码的速度。**

d使用"get printer"函数
``python
import imagepypelines as ip
printer=ip.getprinter('name your printer here')
```

在"imagepypelines"中,打印机级别也是彩色编码的,因此可以在控制台中轻松读取它们
``python
import imagepypelines as ip

example\printer=ip.get_printer('example!')
示例"printer.debug('message')"在级别10打印"message"-蓝色文本
示例"printer.info('message')"在级别20打印"message"-白色文本
示例"printer.warning('message')"在级别30打印"message"-黄色文本
示例"printer.comment('message')"打印"messa"ge'在级别30-绿色文本
示例打印机。错误('message')在级别40打印'message'-红色文本
示例打印机。critical('message')在级别50打印'message'-粗体红色文本
````
任何低于当前"全局日志"级别的级别都将**不打印。这样可以很容易地筛选出可能有错误或太多无法理解的语句。

l现在不打印
```
本地打印机级别可以用"printer.set_logu level`
``python
import imagepypelines as ip
printer=ip.get_printer('example printer')
printer.set_logu level('error')只打印错误和关键函数xactly与python的[`logging`](https://docs.python.org/3.7/library/logging.html)模块中的logu levels相同)

您可以使用"白名单打印机"、"黑名单打印机"或"禁用所有打印机"功能来执行此操作


-->;(imagepypelines)[debug]调试消息
ip.info('info message')\level=20-->;(imagepypelines)[info]调试消息
ip.warning('warning message')\level=30-->;(imagepypelines)[warning]警告消息
ip.error('error message')#level=40-->;(imagepypelines)[error]错误消息
ip.critical('critical message')\level=50-->;(imagepypelines)[critical]关键消息
ip.comment('comment message')\level=30-->;(imagepypelines)[comment]注释消息
```

`````类打印机
定义初始化(self,*args,**kwargs):


self.do_something()

def do_something(self):
self.printer.warning("做了什么!")

exampleclass()
```
生成以下实例化的
````
(exampleclass)[info]对象!
(exampleclass)[警告]做了什么!
```
这样就可以很容易地跟踪代码所在管道的哪个阶段,因为每个对象都有自己的打印机,并且可以在终端中区分!

development decorators
`imagepypelines`包含四个decorator,由后端的开发人员使用

"d_函数"已重命名为"new_函数"。引用将在以后的版本中删除!)
def old廑function():
pass廑real code将执行一些操作


old廑function()
````

生成以下结果(imagepypelines)[警告]折旧警告:"old廑function"已重命名为"new廑function"。引用将在以后的版本中删除!
```
/>new_feature()
```
````
(imagepypelines)[warning]实验警告:"new_feature"是一个实验功能
```

\human_u test
这是一个为需要人工验证功能的单元测试而设计的装饰器。(例如:显示图像的函数)

**警告:与大多数decorator不同,这不会返回包装函数的输出,而是返回true或false。
这是因为它用于单元测试,而不是在管道中实际使用**
``python
import imagepypelines as ip
@ip.util.human嫒test
def unit嫒u test嫒u for嫒quick嫒u image嫒view():
ip.quick嫒u image嫒view(ip.lenna())

print('测试成功:unit嫒u test嫒u for嫒quick嫒image嫒view())
````
u lenna将显示嫒br/>
生成以下终端供用户回答或者"单元测试"成功?对?不?
```



与这里描述的其他装饰器不同,我们鼓励您在开发期间经常在代码中使用此装饰器,以避免出现愚蠢的错误
``python
import imagepypelines as ip
@ip.util.print_args
def func_with_lots_args(a,b,c=3,d=4):
pass
func_with lots_of_args(1,b=2,c='not 3')
```
在终端中产生以下结果默认d:4
```



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java什么是VMObject?   java将数据插入H2数据库表   java如何修改保存在一个卡夫卡主题中的Twitter API消息并将其发送到另一个卡夫卡主题   对象Java变量别名解决方法   java返回数组在try/catch中初始化   java DateTimeFormat shortDate无年份   java我如何在recycle应用程序的首次发布中突出显示项目   java使文本区域包含大量文本,其帧响应更快   类抛出的java ClassCircularyError。forName在转换TwoStacksPlainDatagramSocketImpl类时   swing如何在GroupLayout Java中设置Jframe背景图像   sip无法在独立java应用程序上运行PJSIPJNI包装   java Android internet连接问题   java当单击按钮VerEstoque时,应用程序停止。代码上有Logcat错误,请输入h3lp   java如何在JFrame上设置图像图标动画图像将加载但不会更改   与socket一起使用时,java错误的currentTimeMillis()   Java内部字符串表示:是UTF16吗?