用USB把 android 手機的畫面 real time 傳到電腦給 openCV
研究了一下可能的方法
1. IP cam or RTSP
不限iOS或 Android, 但都是透過 WiFi, 會有延遲
https://medium.com/beesightsoft/opencv-python-connect-to-android-camera-via-rstp-9eb78e2903d5
2. Droidcam 可 USB, 但要用他們的app
http://www.skipser.com/p/2/p/android-as-webcam.html
(網頁下面有教怎麼做)
這是目前唯試成功,可以把畫面導到OpenCV的方法
(1) 手機上要下載他們的 APP, 並且打開 Android 的開發人員模式, 至於怎麼打開, 要看各家手機。
(2) 電腦要裝client,
Client 端的設定:
https://stackoverflow.com/questions/54060907/how-do-i-use-my-droidcam-video-feed-via-usb-in-python-for-image-processing-usi
(3) 在電腦上先run一次它們的app,停掉,再用opencv跑才抓得到,直接用OpenCV沒有用。問題是,defaul的畫質較低,可手動改到HD,但最多好像就只支援到HD
(目前測試是覺得用Full HD比較能在較遠處就偵測到號碼布)
3. Apower Mirror
https://www.azofreeware.com/2018/07/apowermirror.html
一個大陸的軟件,支援iOS和Android,手機端和電腦端都要下載,我目前只能做到螢幕鏡像,還沒成功讓OpenCV抓到影像。這篇提到用電腦去抓a power mirror的三個方式比較,但沒有說詳細怎麼做。
https://www.jishuwen.com/d/2xNR/zh-tw
還有一個小問題是,電腦裝大陸軟件後都會怕怕的。
下面的Code是我用來把手機當成WebCam,再即時用OpenCV的人臉偵測做測試。重點是VideoCapture那一行要改,才能讓電腦抓到手機。
cap = cv2.VideoCapture('http://127.0.0.1:4747/mjpegfeed') #o: 內建 1:外接
====== 我是分隔線 =========
# -*- coding: utf-8 -*-
"""
DroidCam 即時偵測人臉
Created on Wed Jul 3 08:17:45 2019
@author: andre
來源: 許境恩
"""
import numpy as np
import cv2
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
faceCascade.load('D:/Files/opencv-4.1.0/data/haarcascades/haarcascade_frontalface_default.xml')
#faceCascade = cv2.CascadeClassifier('C:\Emgu\emgucv-windesktop 4.1.0.3420\opencv\data\haarcascades\haarcascade_frontalface_default.xml')
#cap = cv2.VideoCapture('vtest.avi')C:\Emgu\emgucv-windesktop 4.1.0.3420\opencv\data\haarcascades
cap = cv2.VideoCapture('http://127.0.0.1:4747/mjpegfeed') #o: 內建 1:外接
# 取得影像的尺寸大小
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
print("Image Size: %d x %d" % (width, height))
print("Frame rate: %d fps" % (fps))
# 設定影像的尺寸大小
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
cap.set(cv2.CAP_PROP_FPS, 30)
# 取得影像的尺寸大小
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
print("Image Size: %d x %d" % (width, height))
print("Frame rate: %d fps" % (fps))
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
#fourcc = cv2.VideoWriter_fourcc('M','P','4','V')
#out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
out = cv2.VideoWriter('test.avi',fourcc, 30.0, (1280,720))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
#frame=cv2.flip(frame,1)
#gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces=faceCascade.detectMultiScale(frame)
for (x,y,w,h) in faces:
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
#cv2.imshow('frame',gray)
cv2.imshow('Streaming',frame)
out.write(frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
1. IP cam or RTSP
不限iOS或 Android, 但都是透過 WiFi, 會有延遲
https://medium.com/beesightsoft/opencv-python-connect-to-android-camera-via-rstp-9eb78e2903d5
2. Droidcam 可 USB, 但要用他們的app
http://www.skipser.com/p/2/p/android-as-webcam.html
(網頁下面有教怎麼做)
這是目前唯試成功,可以把畫面導到OpenCV的方法
(1) 手機上要下載他們的 APP, 並且打開 Android 的開發人員模式, 至於怎麼打開, 要看各家手機。
(2) 電腦要裝client,
Client 端的設定:
https://stackoverflow.com/questions/54060907/how-do-i-use-my-droidcam-video-feed-via-usb-in-python-for-image-processing-usi
(3) 在電腦上先run一次它們的app,停掉,再用opencv跑才抓得到,直接用OpenCV沒有用。問題是,defaul的畫質較低,可手動改到HD,但最多好像就只支援到HD
(目前測試是覺得用Full HD比較能在較遠處就偵測到號碼布)
3. Apower Mirror
https://www.azofreeware.com/2018/07/apowermirror.html
一個大陸的軟件,支援iOS和Android,手機端和電腦端都要下載,我目前只能做到螢幕鏡像,還沒成功讓OpenCV抓到影像。這篇提到用電腦去抓a power mirror的三個方式比較,但沒有說詳細怎麼做。
https://www.jishuwen.com/d/2xNR/zh-tw
還有一個小問題是,電腦裝大陸軟件後都會怕怕的。
下面的Code是我用來把手機當成WebCam,再即時用OpenCV的人臉偵測做測試。重點是VideoCapture那一行要改,才能讓電腦抓到手機。
cap = cv2.VideoCapture('http://127.0.0.1:4747/mjpegfeed') #o: 內建 1:外接
====== 我是分隔線 =========
# -*- coding: utf-8 -*-
"""
DroidCam 即時偵測人臉
Created on Wed Jul 3 08:17:45 2019
@author: andre
來源: 許境恩
"""
import numpy as np
import cv2
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
faceCascade.load('D:/Files/opencv-4.1.0/data/haarcascades/haarcascade_frontalface_default.xml')
#faceCascade = cv2.CascadeClassifier('C:\Emgu\emgucv-windesktop 4.1.0.3420\opencv\data\haarcascades\haarcascade_frontalface_default.xml')
#cap = cv2.VideoCapture('vtest.avi')C:\Emgu\emgucv-windesktop 4.1.0.3420\opencv\data\haarcascades
cap = cv2.VideoCapture('http://127.0.0.1:4747/mjpegfeed') #o: 內建 1:外接
# 取得影像的尺寸大小
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
print("Image Size: %d x %d" % (width, height))
print("Frame rate: %d fps" % (fps))
# 設定影像的尺寸大小
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
cap.set(cv2.CAP_PROP_FPS, 30)
# 取得影像的尺寸大小
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
print("Image Size: %d x %d" % (width, height))
print("Frame rate: %d fps" % (fps))
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
#fourcc = cv2.VideoWriter_fourcc('M','P','4','V')
#out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
out = cv2.VideoWriter('test.avi',fourcc, 30.0, (1280,720))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
#frame=cv2.flip(frame,1)
#gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces=faceCascade.detectMultiScale(frame)
for (x,y,w,h) in faces:
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
#cv2.imshow('frame',gray)
cv2.imshow('Streaming',frame)
out.write(frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
留言
張貼留言