用于从网络摄像头获取图像的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是免费软件,在麻省理工学院的许可下发布。

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

推荐PyPI第三方库


热门话题
java如何显示因用户而异的SQLite存储数据?   转换java。sql。将映射传递给Jackon的valueToTree方法时StringNode的时间戳   从java中的列表json获取值   unicode Java字符存储在什么编码中?   java如何让Spring数据存储库中的默认方法命中缓存?   java使用readClassDescriptor()和resolveClass()来允许序列化版本控制   数组通过另一个矩阵的一部分填充矩阵   如果包含使用正则表达式的字符串,则替换父XML标记的java   java清除SharedReference中的单个变量   java将变量值从一个jsp页面传输到另一个jsp页面   java JDBC+SQLite:DriveManager不加载所需的驱动程序   相同源代码的java Kotlin构建生成不同的二进制文件   Java中的元组枚举