我已经安装了opencv-python和dlib。我感兴趣的领域是面部识别。因此,基本上尝试提取面部,我有一个ipcam或网络摄像头。尽管如此,我无法访问摄像头。我正在使用的代码是
import numpy as np
import cv2
cap = cv2.VideoCapture('http://192.168.43.1:8080/video')
#cap = cv2.VideoCapture('http://192.168.43.1:8080/onvif/device_service')
#cap = cv2.VideoCapture('rtsp://192.168.43.1:8080/h264_ulaw.sdp')
#cap = cv2.VideoCapture('rtsp://192.168.43.1:8080/h264_pcm.sdp')
print(cap.isOpened())
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
if ret is True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('frame',cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY))
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
但是我尝试打印语句总是假的 在我的本地Windows机器上它工作正常。使用colab.research.google.com的主要目的是我的机器不能正确支持clke用于dlib和face_recognition
答案 0 :(得分:0)
您正在通过Colab执行的python代码正在VM上执行;这个Python进程无法(安全地)直接与本地计算机上的网络摄像头进行通信。
答案 1 :(得分:0)
也许使用公共IP地址可以通过CV打开和捕获来自摄像机的视频。
答案 2 :(得分:0)
因为,每当您在colab上运行代码时,它都在其服务器上而不是您本地的服务器上运行 机。无论您粘贴的是本地IP。只能在您的网络内解决。
ipconfig
命令来获取公共ip 如果您想将机器暴露在外界中(有风险),仍然可以使用。您可以寻找NAT。 (网络地址解读)。
答案 3 :(得分:0)
正如人们所说,由于Google colab在虚拟机上运行,因此您无法直接访问IP网络摄像头。这是我访问笔记本电脑网络摄像头的操作。
def take_photo(filename='photo.jpg', quality=0.8):
js = Javascript('''
async function takePhoto(quality) {
const div = document.createElement('div');
const video = document.createElement('video');
video.style.display = 'block';
const stream = await navigator.mediaDevices.getUserMedia({video: true});
document.body.appendChild(div);
div.appendChild(video);
video.srcObject = stream;
await video.play();
// Resize the output to fit the video element.
google.colab.output.setIframeHeight(document.documentElement.scrollHeight, true);
const canvas = document.createElement('canvas');
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
canvas.getContext('2d').drawImage(video, 0, 0);
stream.getVideoTracks()[0].stop();
div.remove();
return canvas.toDataURL('image/jpeg', quality);
}
''')
display(js)
data = eval_js('takePhoto({})'.format(quality))
resp = urllib.request.urlopen(data)
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
# return the image
return image
# to capture an image
img = take_photo()
take_photo()函数使用javascript访问连接到系统的网络摄像头。希望它会有所帮助。 :)
答案 4 :(得分:0)
您可以使用ngrok将IP公开,然后可以通过ngrok IP访问摄像机。
它将生成ngrok IP,该IP可使用12小时。
您可以通过传入 cv2.VideoCapture(ngrok_ip)来使用它。