Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于opencv、tensorflow和python的人体检测_Python_Opencv_Image Processing_Tensorflow - Fatal编程技术网

基于opencv、tensorflow和python的人体检测

基于opencv、tensorflow和python的人体检测,python,opencv,image-processing,tensorflow,Python,Opencv,Image Processing,Tensorflow,我正在从事一个机器人项目,该项目涉及对人体的检测,我正在使用张量流和预定义的数据集创建一个训练模型。由于我是机器学习新手,我无法正确地从分类器获得输出。我只需要人的检测,并希望避免球,笔记本电脑或其他物体的检测。 现在,我的网络摄像头可以检测到所有物体,如球、球棒、笔记本电脑、电视等。我需要的输出仅限于得分在80%及以上的人 我用于使用创建的模型的代码是 import numpy as np import os import six.moves.urllib as urllib import s

我正在从事一个机器人项目,该项目涉及对人体的检测,我正在使用张量流和预定义的数据集创建一个训练模型。由于我是机器学习新手,我无法正确地从分类器获得输出。我只需要人的检测,并希望避免球,笔记本电脑或其他物体的检测。 现在,我的网络摄像头可以检测到所有物体,如球、球棒、笔记本电脑、电视等。我需要的输出仅限于得分在80%及以上的人

我用于使用创建的模型的代码是

import numpy as np
import os
import six.moves.urllib as urllib
import sys
import tarfile
import tensorflow as tf
import zipfile

from collections import defaultdict
from io import StringIO
from matplotlib import pyplot as plt
from PIL import Image


from utils import label_map_util

from utils import visualization_utils as vis_util

MODEL_NAME = 'ssd_mobilenet_v1_coco_11_06_2017'
MODEL_FILE = MODEL_NAME + '.tar.gz'
DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/'


PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'
PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt')

NUM_CLASSES = 90

if not os.path.exists(MODEL_NAME + '/frozen_inference_graph.pb'):
    print ('Downloading the model')
    opener = urllib.request.URLopener()
    opener.retrieve(DOWNLOAD_BASE + MODEL_FILE, MODEL_FILE)
    tar_file = tarfile.open(MODEL_FILE)
    for file in tar_file.getmembers():
      file_name = os.path.basename(file.name)
      if 'frozen_inference_graph.pb' in file_name:
        tar_file.extract(file, os.getcwd())
    print ('Download complete')
else:
    print ('Model already exists')

detection_graph = tf.Graph()
with detection_graph.as_default():
  od_graph_def = tf.GraphDef()
  with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
    serialized_graph = fid.read()
    od_graph_def.ParseFromString(serialized_graph)
    tf.import_graph_def(od_graph_def, name='')

label_map = label_map_util.load_labelmap(PATH_TO_LABELS)
categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True)
category_index = label_map_util.create_category_index(categories)

import cv2
cap = cv2.VideoCapture(1)


with detection_graph.as_default():
  with tf.Session(graph=detection_graph) as sess:
   ret = True
   while (ret):
      ret,image_np = cap.read()
      image_np_expanded = np.expand_dims(image_np, axis=0)
      image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
      boxes = detection_graph.get_tensor_by_name('detection_boxes:0')      
      scores = detection_graph.get_tensor_by_name('detection_scores:0')
      classes = detection_graph.get_tensor_by_name('detection_classes:0')
      num_detections = detection_graph.get_tensor_by_name('num_detections:0')

      (boxes, scores, classes, num_detections) = sess.run(
          [boxes, scores, classes, num_detections],
          feed_dict={image_tensor: image_np_expanded})
      vis_util.visualize_boxes_and_labels_on_image_array(image_np,np.squeeze(boxes),np.squeeze(classes).astype(np.int32),np.squeeze(scores),category_index,use_normalized_coordinates=True,line_thickness=8)
      cv2.imshow('image',cv2.resize(image_np,(1280,960)))
      if cv2.waitKey(27) & 0xFF == ord('q'):
          cv2.destroyAllWindows()
          cap.release()
          break

请任何人解释一下,我如何才能只检测出准确率得分大于80%的人。

正如我从文档中看到的那样,您只需检查person类。现在
vis_util
检查所有类。您必须仅为person类添加
if
条件。下面给出了相应的标识符(取自文档)。

项目{
名称:“/m/01g317”
身份证号码:1
显示名称:“个人”

}

正如我从文档中看到的,您只需要检查person类。现在
vis_util
检查所有类。您必须仅为person类添加
if
条件。下面给出了相应的标识符(取自文档)。

项目{
名称:“/m/01g317”
身份证号码:1
显示名称:“个人”

}

可以在数据文件夹中找到标识符,此任务有90个不同的标识符。创建一个新的文本文件,比如“new.txt”,现在只需复制需要显示的标识符,比如需要显示人员, 抄袭

然后在最后的代码中将类的数量从90更改为1

NUM_CLASSES = 1

标识符可以在数据文件夹中找到,此任务有90个不同的标识符。创建一个新的文本文件,比如“new.txt”,现在只需复制需要显示的标识符,比如需要显示人员, 抄袭

然后在最后的代码中将类的数量从90更改为1

NUM_CLASSES = 1