我想从图像中提取HOG功能,以便可以将它们通过分类器(AdaBoost.SAMME尤其是使用scikit-learn:scikit-learn集合中的multiclass Adaboost)。
为此,我需要将图像转换为类似数组的 shape = [n_samples, n_features]
但是从图像中提取HOG特征的输出是一维数组。这是我的代码的相关部分:
tree = io.imread('C:\\Users\\app\\Pictures\\treephoto1.jpg')
type(tree)
print tree.shape, tree.dtype
graytree = color.rgb2gray(tree)
ge = filter.canny(graytree)
fd, hog_image = hog(ge, orientations=8, pixels_per_cell=(16, 16),
cells_per_block=(1, 1), visualise=True)
Run Code Online (Sandbox Code Playgroud)
当我检查时fd,它是一个像这样的数组:

让我们以前9行为例,并假设这是hog函数的完整输出,并且从中获得HOG功能的这张图像是训练数据集中的第一张图像。
然后,假设我有一千张训练图像,那么如何将HOG信息表示为X = [n_samples, n_features]?
下面的行X是我可以用作分类器输入的第一行吗?
[1, [0.162, 0.168, 0.250, 0.114, 0.106, 0.044, 0.035, 0.059, 0.200, 0.149]]
Run Code Online (Sandbox Code Playgroud)
将整行HOG值都视为一个功能吗?还是这是错误的?据我了解,培训样本应符合以下格式:
[sample_index, feature_1, feature_2, feature_3, ..., feature_x]
Run Code Online (Sandbox Code Playgroud) numpy training-data scikit-learn anaconda cascade-classifier
我需要使用 OpenCV Cascades 实时检测人员。目前我正在使用 OpenCV 附带的经过训练的级联文件,但稍后我将训练我自己的 LBP 级联以实现更高的速度。我有一个问题。
有什么方法可以加快级联检测的速度?例如,看看这个视频。它真的很快,使用 Haar 级联并且很好。我可以做些什么来达到这种速度,特别是对于实时应用程序?任何技巧和窍门?
我正在为电源插座创建分类器(特别是在标准插座面板上出现两次的三个开孔,而不是整个面板本身)。
我的问题是,正图像的理想特征是什么,我应该将什么宽度和高度传递给 train_cascade 以使我的对象检测器能够检测到尽可能小的出口?即从尽可能远的距离检测它们?我也关心准确性,并且对需要数周时间训练的分类器很好(假设它实际上正在取得进展)。
还有一个问题来增加我对此的理解:我传递给train_cascade搜索框的尺寸的宽度和高度是否会传递到每个图像上?如果是这样,我希望我的探测器检测到非常小的物体,而不是我应该通过一个小的宽度和高度,对吗?
我希望能够检测非常大和非常小的插座实例。从非常近的地方(相机实际上距离插座 3 英寸)到至少几英尺远。
OpenCV-Python 版本 3.4.1
我正在尝试通过相机检测多个物体。对象是脸、眼睛、勺子、笔。Spoon 和 Pen 是特别的,即它应该只检测我用它训练过的 Pen 和 Spoon。但是它可以检测所有类型的面部和眼睛,因为我使用了 OpenCV-Python 附带的“.xml”文件进行面部和眼睛检测。
我的问题是关于代码。下面我的代码中有一行写着detectMultiScale(gray, 1.3, 10)。现在,我使用了文档,仍然无法清楚地理解括号的最后两个参数。
我的代码:
# with camera feed
import cv2
import numpy as np
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
spoon_cascade = cv2.CascadeClassifier('SpoonCascade.xml')
pen_cascade = cv2.CascadeClassifier('PenCascade.xml')
cap = cv2.VideoCapture('link')
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
spoons = spoon_cascade.detectMultiScale(gray, 1.3, 10)
pens = pen_cascade.detectMultiScale(gray, 1.3, 10)
for (x, y, w, h) in spoons:
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'Spoon', (x-w, y-h), …Run Code Online (Sandbox Code Playgroud) opencv object-detection cascade-classifier opencv3.0 opencv-python