2012-12-18 33 views
6

Tôi đang tìm cách tìm cách tích hợp webcam vào chương trình python của mình.Tùy chọn đọc webcam bằng Python/Linux

Tôi đang chạy trên mô hình Raspberry Pi A OC'd đến 900mHz, vì vậy giải pháp sẽ cần phải tương thích với ARM và (hy vọng) nhẹ.

Hầu hết các bài đăng tôi đã thấy khuyên bạn nên sử dụng mô-đun OpenCV để đọc webcam, nhưng tôi không thể nhận được gì ngoài khung màu đen xuất hiện từ webcam của mình. Tôi cho rằng OpenCV không tương thích với webcam của tôi. Tuy nhiên, mọi ứng dụng webcam khác có sẵn cho linux đều có thể phát hiện và hiển thị nguồn cấp dữ liệu từ webcam của tôi.

Tôi tự hỏi nếu có bất kỳ phương pháp nhẹ hoặc đơn giản nào khác để chụp từ webcam của tôi bằng python. Có lẽ một cách mà tôi có thể trực tiếp giao tiếp với thiết bị video0 đi kèm dưới/dev/cho webcam của tôi? Tôi mở cho bất kỳ đề xuất nào; bởi vì những gì tôi đang làm bây giờ, không hoạt động.

Cảm ơn

(theo yêu cầu):

Sản lượng v4l2-ctl --all:

Driver Info (not using libv4l2): 
    Driver name : uvcvideo 
    Card type  : UVC Camera (046d:081b) 
    Bus info  : usb-bcm2708_usb-1.2 
    Driver version: 3.2.27 
    Capabilities : 0x04000001 
     Video Capture 
     Streaming 
Format Video Capture: 
    Width/Height : 640/480 
    Pixel Format : 'YUYV' 
    Field   : None 
    Bytes per Line: 1280 
    Size Image : 614400 
    Colorspace : SRGB 
Crop Capability Video Capture: 
    Bounds  : Left 0, Top 0, Width 640, Height 480 
    Default  : Left 0, Top 0, Width 640, Height 480 
    Pixel Aspect: 1/1 
Video input : 0 (Camera 1: ok) 
Streaming Parameters Video Capture: 
    Capabilities  : timeperframe 
    Frames per second: 30.000 (30/1) 
    Read buffers  : 0 

Và đây là đoạn mã Tôi đang sử dụng:

import cv 

cv.NamedWindow("camera", 1) 
capture = cv.CaptureFromCAM(0) 

while True: 
    img = cv.QueryFrame(capture) 
    cv.ShowImage("camera", img) 
    if cv.WaitKey(10) == 27: 
     break 

cv.DestroyWindow("camera") 

Cám ơn bạn Cứu giúp!

+0

Xin vui lòng gửi 'v4l2-ctl --all' và một số mã bạn đang sử dụng bây giờ. – gertvdijk

+0

Tôi đã thêm nó vào bài viết mở đầu của mình. Cảm ơn! –

Trả lời

3

Bạn có thể sử dụng gstreamer-0.10.

  1. Làm cho nó hoạt động trên dòng lệnh. ví dụ: gst-launch -v v4l2src! decodebin! ffmpegcolorspace! pngenc! filesink location = out.png

  2. Sử dụng hàm parse_launch để nhận lối tắt tới đường ống đang hoạt động trong mã python của bạn.

    import gst 
    
    pipeline = gst.parse_launch(""" 
    v4l2src ! decodebin ! ffmpegcolorspace ! pngenc ! filesink location="%s" 
    """ % sys.argv[-1]) 
    
    pipeline.set_state(gst.STATE_PLAYING) 
    
1

Tôi đã thử một số phương pháp để nắm bắt khung hình duy nhất từ ​​một webcam:

uvccapture là một lựa chọn và đây là một lệnh:

uvccapture -d /dev/video0 -o outfile.jpg 

streamer là một và lệnh trông về như thế này:

streamer -c /dev/video0 -o outfile.jpeg 

Có tôi nhận ra rằng đây không phải là hiệu suất cao nhất vì bạn phải sử dụng mô-đun "lệnh" của Python để thực thi lệnh này và nhận kết quả, và t hen mở tập tin kết quả trong OpenCV để xử lý.

NHƯNG nó hoạt động. Tôi đã sử dụng nó trong sản xuất trên một số dự án tự động hóa khá thành công. Độ trễ tôi trải nghiệm là tất cả dựa trên phần mềm xử lý hình ảnh của tôi, hình ảnh thô có thể được hiển thị RẤT nhanh chóng.

+0

Lưu nó vào RAMDisk, '/ run/shm' và tốc độ sẽ còn nhanh hơn nữa. – Mustafa

Các vấn đề liên quan