问题描述
我已经使用 Tensorflow 使用 python/OpenCV 训练了我的 CNN 模型,并且我用它成功地测试了图像。 我现在正在尝试使用外部 IP 摄像机测试我的程序。 我想我可以使用相机的 IP 地址来做到这一点,但我不知道如何在我的代码中修改它。 任何帮助都会有用 这是我的程序:
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.preprocessing import image
from tensorflow.keras.optimizers import RMSprop
import matplotlib.pyplot as plt
import tensorflow as tf
import cv2
import os
import numpy as np
img = image.load_img("computer vision/train/NOK/1.BMP")
plt.imshow(img)
train = ImageDataGenerator(rescale=1/255)
validation = ImageDataGenerator(rescale=1/255)
train_dataset = train.flow_from_directory("computer vision/train/",target_size = (200,200),batch_size = 3,class_mode = 'binary')
validation_dataset = train.flow_from_directory("computer vision/valid/",class_mode = 'binary')
model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(16,(3,3),activation = 'relu',input_shape = (200,200,3)),tf.keras.layers.MaxPool2D(2,2),tf.keras.layers.Conv2D(32,activation = 'relu'),tf.keras.layers.Conv2D(64,tf.keras.layers.Flatten(),tf.keras.layers.Dense(512,activation= 'relu'),tf.keras.layers.Dense(1,activation = 'sigmoid')
])
model.compile(loss = 'binary_crossentropy',optimizer = RMSprop(lr=0.001),metrics = ['accuracy']
)
model_fit = model.fit(train_dataset,steps_per_epoch=3,epochs=10,validation_data=validation_dataset)
dir_path = "C:/Users/Dell/OneDrive/Bureau/Nouveau dossier (2)"
for i in os.listdir(dir_path):
img = image.load_img(dir_path + '//' + i,target_size=(200,200))
plt.imshow(img)
plt.show()
X = image.img_to_array(img)
X = np.expand_dims(X,axis=0)
images = np.vstack([X])
val = model.predict(images)
if val == 0:
print("NOK")
else:
print("OK")
解决方法
TLDR;您可以查看 OpenCV 的 VideoCapture(filename,apiPreference) 函数。
根据documentation,这可用于打开视频文件或图像文件序列或捕获设备或用于视频捕获的 IP 视频流。
至于将其集成到您的代码中,大致的概念可以总结如下: 1)接收输入视频信号(例如使用VideoCapture()), 2)根据您的模型的输入要求修改它(例如,如果您的模型要对 224x224 的灰度图像进行分类,您应该以自定义频率从视频流中发送图像,将它们转换为灰度并重新调整它们以适应您的模型,将它们转换为张量等。)
一般来说,由于您已经训练了您的模型,您只需使用您的预训练模型开发/修改您的推理代码,并以相同的形式处理和格式化您的输入信号您首先输入了训练数据..
,我想你想说,你想用你的网络摄像头流式传输吗?
试试这个
cap = cv2.VideoCamera(1)
cap.open('https://yourip:port')
也许这会奏效!
如果你想把你的手机用作网络摄像机,有一个叫做网络摄像机的应用程序
只需安装它并启动您的服务器
您就可以通过这个网址访问它-cap.open('https://yourip:port/video')