使用OpenCV Python从Android智能手机捕获视频

Moh*_*hit 9 python video opencv

我刚开始使用Python学习OpenCV,第一个教程开始于使用内置笔记本电脑摄像头或外部网络摄像头捕获视频.正如它会发生的那样,我没有.所以我想如果可以使用我的Android智能手机的相机,然后使用IP捕获该视频进行进一步处理.

我的智能手机:Moto E.

操作系统:Windows 7

语言:Python

Android应用程序:IP Webcam

我已广泛搜索网络但无法找到任何有效的解决方案,所以任何人都可以指导我如何使用IP网络摄像头从我的智能手机捕获视频.

很抱歉没有发布任何代码,因为我只是倾向于进入这个领域,所以我完全无能为力.

谢谢.

gon*_*opp 8

由于各种原因,这可能比你期望的要困难得多.

第一个是带宽.适度的原始视频流(640x480像素,每通道8位,每秒30帧),需要200mbps的带宽.虽然USB(2)很容易达到这些速度,但您很难找到可靠的无线连接.

现在你可能在想

为什么我可以在手机上观看1080p互联网视频,没有任何问题呢?

实际上,通过网络传输的所有视频都使用专门的算法进行压缩,例如MPEG4,H.264和VP8.这些算法大大减少了传输视频所需的带宽.

大!然后我可以直接压缩手机中的视频并将其传输到我的电脑

没那么快!这有两个主要问题.

首先,为了实现视频数据量的大幅减少,视频压缩(编码器)需要花费大量处理能力来处理视频.您可能会发现您的手机没有足够的CPU功率(或专用硬件)来以可用于您的任务的分辨率和帧速率对视频进行编码.

如果你设法解决这个问题找到一个能够完成工作的应用程序,那么第二个问题是,为了在OpenCV中获取(编码的)视频数据,你需要对其进行解码!您可以找到现成的软件来解码视频文件,但是为了解码实时视频流,您需要对软件进行编程以执行解码(最好使用库或OpenCV本身).

在这一点上,你会诅咒和后悔你没有花15美元在网络摄像头上(但你会在这个过程中学到很多有趣的东西:)


小智 7

使用urllib和numpy将Android'IP Webcam'应用视频流导入Python OpenCV;)

import urllib
import cv2
import numpy as np
import time

# Replace the URL with your own IPwebcam shot.jpg IP:port
url='http://192.168.2.35:8080/shot.jpg'

while True:

    # Use urllib to get the image and convert into a cv2 usable format
    imgResp=urllib.urlopen(url)
    imgNp=np.array(bytearray(imgResp.read()),dtype=np.uint8)
    img=cv2.imdecode(imgNp,-1)

    # put the image on screen
    cv2.imshow('IPWebcam',img)

    #To give the processor some less stress
    #time.sleep(0.1) 

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
Run Code Online (Sandbox Code Playgroud)