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

时间:2015-07-17 14:25:45

标签: python opencv video

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

我的智能手机:Moto E

操作系统:Windows 7

语言:Python

Android应用程序:IP网络摄像头

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

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

感谢。

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

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

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

现在你可能在想

  

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

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

  

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

不是那么快!这有两个主要问题。

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

如果您设法解决了找到执行该作业的应用程序,第二个问题是,为了在OpenCV中获取(编码的)视频数据,您需要解码它!您可以找到现成的软件来解码视频文件,但是为了解码实时视频流,您需要对软件进行编程以执行解码(最好使用库或OpenCV itself)。

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

答案 2 :(得分:4)

您可以简单地使用cv2的{​​{1}}方法,向其传递流URL,如IP Webcam应用程序所示。 这是示例代码:

注意:对于IP Webcam应用程序,URL的后缀VideoCapture是必需的。我已经通过检查浏览器中的原始url页面来解决这个问题。

/video

答案 3 :(得分:2)

答案 4 :(得分:1)

该线程似乎很旧,但只想添加我的答案。因此,这就是我如何在python 3.5,OpenCV 3.2和android应用“ IP WEB CAM”中完成任务的方式。获取功能中的URL http://192.168.0.103:8080是ip web cam应用程序提供的流媒体地址。

import requests
import numpy as np
import cv2
while True:
    img_res = requests.get("http://192.168.0.103:8080/shot.jpg")
    img_arr = np.array(bytearray(img_res.content), dtype = np.uint8)
    img = cv2.imdecode(img_arr,-1)

    cv2.imshow('frame', img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

答案 5 :(得分:0)

在2020年使用IP网络摄像头和OpenCV

import requests
import cv2
import numpy as np


URL = "http://192.168.68.126:8080/shot.jpg"
while True:
    img_resp = requests.get(URL)
    img_arr = np.array(bytearray(img_resp.content), dtype=np.uint8)
    img = cv2.imdecode(img_arr, -1)
    cv2.imshow('IPWebcam', ing)
    height, width, channels = img.shape
    print(height, width, channels)

    if cv2.waitKey(1) == 27:
        break

在这里,如果您需要捕获视频流

import requests
import cv2
import numpy as np


URL = "http://192.168.68.126:8080/video"
cam = cv2.VideoCapture(URL)

while True:
    check, img = cam.read()
    cv2.imshow('IPWebcam', ing)
    height, width, channels = img.shape
    print(height, width, channels)
    if cv2.waitKey(1) == 27:
      break