python - 有没有办法在 pygame 中控制网络摄像头的焦点?

标签 python webcam pygame

我有两个网络摄像头,我想用来拍照。以下代码实现了这一点:

import pygame
import pygame.camera
from datetime import datetime
import Image
import threading
import time

class Camera (threading.Thread):
    def __init__(self, camera):
        self.camera = pygame.camera.Camera(camera,(2304,1536))
        self.stop = False
        threading.Thread.__init__(self)

    def run(self):
        self.camera.start()
        srf = self.camera.get_image()
        img = pygame.image.tostring(srf, 'RGB')
        img = Image.fromstring('RGB', srf.get_size(), img)

        img.save('%s.png'%datetime.now(), 'PNG')

s = datetime.now()

pygame.init()
pygame.camera.init()

cam1 = Camera("/dev/video0")
cam2 = Camera("/dev/video1")

cam1.start()
cam2.start()

cam1.join()
cam2.join()

print datetime.now() - s

但我需要设置焦点。

我找到了这些命令行:

apt-get install uvcdynctrl
uvcdynctrl --device=/dev/video1 --clist
uvcdynctrl --device=/dev/video1 --get='Focus, Auto'
uvcdynctrl --device=/dev/video1 --set='Focus, Auto' 0
uvcdynctrl --device=/dev/video1 --set='Focus (absolute)' 20

虽然我可以使用以下内容:

import os
os.system('command to set the focus')

但是在我的 (Logitech) 相机上它不起作用,我从命令行(Ubuntu 12.04,python 2.7)得到这个输出:

uvcdynctrl --device=/dev/video1 --set='Focus, Auto' 0

[libwebcam] Unsupported V4L2_CID_EXPOSURE_AUTO control with a non-contiguous 
  range of choice IDs found
[libwebcam] Invalid or unsupported V4L2 control encountered: ctrl_id = 0x009A0901, name = 'Exposure, Auto'
[libwebcam] Unsupported V4L2_CID_EXPOSURE_AUTO control with a non-contiguous 
  range of choice IDs found
[libwebcam] Invalid or unsupported V4L2 control encountered: ctrl_id = 0x009A0901, name = 'Exposure, Auto'

编辑:

摄像头是 Logitech HD Pro Webcam C920 并且正在运行:

uvcdynctrl --device=/dev/video1 --clist

给出输出:

[libwebcam] Unsupported V4L2_CID_EXPOSURE_AUTO control with a non-contiguous 
  range of choice IDs found
[libwebcam] Invalid or unsupported V4L2 control encountered: ctrl_id = 0x009A0901, name = 'Exposure, Auto'
[libwebcam] Unsupported V4L2_CID_EXPOSURE_AUTO control with a non-contiguous 
  range of choice IDs found
[libwebcam] Invalid or unsupported V4L2 control encountered: ctrl_id = 0x009A0901, name = 'Exposure, Auto'
Listing available controls for device /dev/video1:
  Brightness
  Contrast
  Saturation
  White Balance Temperature, Auto
  Gain
  Power Line Frequency
  White Balance Temperature
  Sharpness
  Backlight Compensation
  Exposure (Absolute)
  Exposure, Auto Priority
  Pan (Absolute)
  Tilt (Absolute)
  Focus (absolute)
  Focus, Auto
  Zoom, Absolute

最佳答案

执行这个

sudo apt-get install v4l-utils

在 python 中

os.system('v4l2-ctl -d 0 -c focus_auto=0')
os.system('v4l2-ctl -d 0 -c focus_absolute=250')

关于python - 有没有办法在 pygame 中控制网络摄像头的焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13407859/

相关文章:

python - Numpy 八倍精度 float 和 128 位整数。为什么以及如何?

python - SimpleCV Webcam getImage() 错误(无属性 'threaded' )

python - 网络摄像头在 opencv-python 和 opencv-contrib-python 的 pip 版本中不起作用

Python程序直到键盘中断才会响应

python - 如何有效地掩盖pygame中的表面

python - pygame key.set_repeat 不工作

python - 当 DEBUG 为 false 时,Flask app.teardown_appcontext 不会被调用

python - Python、Tkinter 中的旋转线

python - 在 Pandas 中导入 csv 数据时如何删除空格 "before"列名

ruby-on-rails - Youtube网络摄像头小部件-抓取VideoID