用于从网络摄像头获取图像的python库
camgrab的Python项目详细描述
从网络可访问的网络摄像头下载图像的python库。
功能
- 开箱即用,处理任何提供公共访问URL的网络摄像机 到他们当前图像的jpg快照。
- 很容易在不同的下载程序中交换,以处理暴露其 以更复杂的方式拍摄快照。
- 高度可配置。
- 为更高级的功能(如运动)提供简单的基础 检测、闭路电视系统、图像分析等
安装
pip install camgrab
快速启动
只需每隔2秒从网络摄像头中抓取图像并开始保存 默认的抓取图像目录:
fromcamgrabimportGrabbergrabber=Grabber('http://www.masconcable.ca/webcams/chase.jpg')grabber.begin()
示例
快速添加自定义结果处理程序
在这里,我们创建了一个自定义结果处理程序,它将简单地打印 抓取图像的尺寸。
默认结果处理程序(例如do_save_image())仍将使用。
fromcamgrabimportGrabberurl='http://www.masconcable.ca/webcams/chase.jpg'defprint_dimensions(result,grabber):ifnotresult.get('image',None):returnwidth,height=result['image'].sizeprint('{width} pixels wide, {height} pixels high!'.format(width=width,height=height))grabber=Grabber(url,every=5,extra_result_handlers=(print_dimensions,))grabber.begin()
更复杂的结果处理
在本例中,我们将完全控制结果处理,创建 结果处理程序链到:
- 将图像大小调整为320x200
- 将图像旋转90度
- 保存图像
- 将最终结果字典打印到终端
fromcamgrabimportGrabberfromcamgrab.camgrabimportdo_save_imageurl='http://www.masconcable.ca/webcams/chase.jpg'defresize_image(result,grabber):ifnotresult.get('image',None):returnresult['image']=result['image'].resize((320,200))defrotate_image(result,grabber):ifnotresult.get('image',None):returnresult['image']=result['image'].rotate(90)defprint_result(result,grabber):print(result)# Setting result_handlers attribute completely overrides any default result# handlers previously set. Hence making sure `do_save_image` (which is normally# a default handler) is in this tuple:result_handlers=(resize_image,rotate_image,do_save_image,print_result)grabber=Grabber(url,every=5)grabber.result_handlers=result_handlersgrabber.begin()
控制主回路
如果由begin()方法创建的主循环对于 需要,然后重写begin()方法,或者只调用tick()from 你自己的消费者。
在本例中,我们使用一个抓取器,但定义了自己的抓取器(不是非常有用) 在两个刻度之间等待随机时间的主循环:
fromrandomimportrandomfromtimeimportsleepfromcamgrabimportGrabberurl='http://www.masconcable.ca/webcams/chase.jpg'grabber=Grabber(url)whileTrue:grabber.tick()# Wait somewhere between 0 and 10 secondssleep(random()*10)
错误处理
从网络摄像头中获取图像是一件麻烦的事情…它们会离线加载、发送 损坏的图像,有时会随机发送服务器500个错误等。
正因为如此,camgrab的默认设置使得它能够容忍 抓取图像时发生的常见错误。但这可以配置 很容易。
当在导致崩溃的tick()期间引发未处理的异常时, 导致崩溃的异常可以在^{tt2}中找到$ 属性。
http错误
通过设置ignore_xxx属性,可以忽略或引发http错误。为了 示例…
默认情况下,不忽略http 404错误。所以当404错误 发生抓取器将崩溃,您可以以任何方式处理异常。 你想要的。
fromurllib.errorimportHTTPErrorfromcamgrabimportGrabbergrabber=Grabber('http://www.masconcable.ca/webcams/chase.jpg')try:grabber.begin()exceptHTTPErrorase:ife.code==404:print('Was it something I said?')
如果您希望http 404错误不会导致崩溃,那么设置ignore\u404 属性:
fromcamgrabimportGrabbergrabber=Grabber('http://www.masconcable.ca/webcams/chase.jpg')grabber.ignore_404=Truegrabber.begin()
现在,当发生404错误时,抓取器将:
- 将异常添加到结果字典中
- 将结果字典中的图像设置为none
然后继续正常的程序。
默认情况下,将忽略以下http状态代码:
- 307、400、408、409、429、444、451、499、500、502、503、504、507、599
网络错误
默认情况下,camgrab忽略网络错误。如果你愿意网络超时 导致崩溃,然后只需设置忽略超时属性:
fromsocketimporttimeoutfromurllib.errorimportURLErrorfromcamgrabimportGrabbergrabber=Grabber('http://www.masconcable.ca/webcams/chase.jpg')grabber.ignore_timeout=Falsetry:grabber.begin()exceptURLErrorase:ifisinstance(e.reason,timeout):print("It's me, not you")
许可证
camgrab是免费软件,在麻省理工学院的许可下发布。