opencv中使用神经网络的方式
step 1: 加载网络模型(以及网络参数配置信息)
prototxtPath = os.path.sep.join([args["face"], "deploy.prototxt"])
weightsPath = os.path.sep.join([args["face"],
"res10_300x300_ssd_iter_140000.caffemodel"])
faceNet = cv2.dnn.readNet(prototxtPath, weightsPath)
tensorflow的加载:
maskNet = load_model("maskDetect.model")
step 2: 构造一个适合这个网络模型的输入
一般包含图片,图片分辨率(有些网络是固定,有些可容许多种规格选择),要不要裁剪crop,swapRB是指RGB还是BGR
blob = cv2.dnn.blobFromImage(frame, 1 / 255.0, (416, 416),swapRB=True,crop=False)
net.setInput(blob)
tensorflow:
face = frame[startY:endY, startX:endX]
face = cv2.cvtColor(face, cv2.COLOR_BGR2RGB)
face = cv2.resize(face, (224, 224))
face = img_to_array(face)
face = preprocess_input(face)
step 3: 推理, 即计算出结果(检测种类以及概率), 有些还会有位置坐标参数
detections = faceNet.forward()
tensorflow的推理预测:
preds = maskNet.predict(faces, batch_size=32)