Created
June 21, 2018 16:38
-
-
Save dumebi/ec968fd5ab7dbbf0a5abe808bfbcfb92 to your computer and use it in GitHub Desktop.
my self driving car issues
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def find_cars(img, ystart, ystop, xstart, xstop, scale, svc, X_scaler, orient, pix_per_cell, cell_per_block, spatial_size, hist_bins): | |
draw_img = np.copy(img) | |
img = img.astype(np.float32)/255 | |
img_tosearch = img[ystart:ystop, xstart:xstop, :] | |
ctrans_tosearch = convert_color(img_tosearch, conv='RGB2YCrCb') | |
if scale != 1: | |
imshape = ctrans_tosearch.shape | |
ctrans_tosearch = cv2.resize(ctrans_tosearch, (np.int(imshape[1]/scale), np.int(imshape[0]/scale))) | |
ch1 = ctrans_tosearch[:,:,0] | |
ch2 = ctrans_tosearch[:,:,1] | |
ch3 = ctrans_tosearch[:,:,2] | |
# Define blocks and steps as above | |
nxblocks = (ch1.shape[1] // pix_per_cell) - cell_per_block + 1 | |
nyblocks = (ch1.shape[0] // pix_per_cell) - cell_per_block + 1 | |
nfeat_per_block = orient*cell_per_block**2 | |
# 64 was the orginal sampling rate, with 8 cells and 8 pix per cell | |
window = 64 | |
nblocks_per_window = (window // pix_per_cell) - cell_per_block + 1 | |
cells_per_step = 1 # Instead of overlap, define how many cells to step | |
nxsteps = (nxblocks - nblocks_per_window) // cells_per_step + 1 | |
nysteps = (nyblocks - nblocks_per_window) // cells_per_step + 1 | |
# Compute individual channel HOG features for the entire image | |
hog1 = get_hog_features(ch1, orient, pix_per_cell, cell_per_block, feature_vec=False) | |
hog2 = get_hog_features(ch2, orient, pix_per_cell, cell_per_block, feature_vec=False) | |
hog3 = get_hog_features(ch3, orient, pix_per_cell, cell_per_block, feature_vec=False) | |
window_list = [] | |
for xb in range(nxsteps): | |
for yb in range(nysteps): | |
ypos = yb*cells_per_step | |
xpos = xb*cells_per_step | |
# Extract HOG for this patch | |
hog_feat1 = hog1[ypos:ypos+nblocks_per_window, xpos:xpos+nblocks_per_window].ravel() | |
hog_feat2 = hog2[ypos:ypos+nblocks_per_window, xpos:xpos+nblocks_per_window].ravel() | |
hog_feat3 = hog3[ypos:ypos+nblocks_per_window, xpos:xpos+nblocks_per_window].ravel() | |
hog_features = np.hstack((hog_feat1, hog_feat2, hog_feat3)) | |
xleft = xpos*pix_per_cell | |
ytop = ypos*pix_per_cell | |
# Extract the image patch | |
subimg = cv2.resize(ctrans_tosearch[ytop:ytop+window, xleft:xleft+window], (64,64)) | |
# Get color features | |
spatial_features = bin_spatial(subimg, size=spatial_size) | |
hist_features = color_hist(subimg, nbins=hist_bins) | |
# Scale features and make a prediction | |
test_features = X_scaler.transform(np.hstack((spatial_features, hist_features, hog_features)).reshape(1, -1)) | |
#test_features = X_scaler.transform(np.hstack((shape_feat, hist_feat)).reshape(1, -1)) | |
test_prediction = svc.predict(test_features) | |
if test_prediction == 1: | |
xbox_left = np.int(xleft*scale) | |
ytop_draw = np.int(ytop*scale) | |
win_draw = np.int(window*scale) | |
cv2.rectangle(draw_img,(xbox_left, ytop_draw+ystart),(xbox_left+win_draw,ytop_draw+win_draw+ystart),(0,0,255),6) | |
window_list.append(((xbox_left, ytop_draw+ystart),(xbox_left+win_draw,ytop_draw+win_draw+ystart))) | |
return window_list | |
def display_heatmap_test_images(test_image): | |
ystart = 400 | |
ystop = 600 | |
xstart = 700 | |
xstop = 1280 | |
scales = [1] | |
window_list = [] | |
for scale in scales: | |
window_list += find_cars(test_image, ystart, ystop,xstart, xstop, scale, svc, X_scaler, orient, pix_per_cell, cell_per_block, spatial_size, hist_bins) | |
heat = np.zeros_like(test_image[:,:,0]).astype(np.float) | |
# Add heat to each box in box list | |
#heat = add_heat(heat,window_list) | |
# Add heat to each box in box list | |
heat = add_heat(heat,window_list) | |
heatmaps.append(heat) | |
combined = sum(heatmaps) | |
heat = apply_threshold(combined, 2) | |
# Apply threshold to help remove false positives | |
# heat = apply_threshold(heat,2) | |
# Visualize the heatmap when displaying | |
heatmap = np.clip(heat, 0, 255) | |
# Find final boxes from heatmap using label function | |
labels = label(heatmap) | |
draw_img = draw_labeled_bboxes(np.copy(test_image), labels) | |
fig = plt.figure() | |
plt.subplot(121) | |
plt.imshow(draw_img) | |
plt.title('Car Positions') | |
plt.subplot(122) | |
plt.imshow(heatmap, cmap='hot') | |
plt.title('Heat Map') | |
fig.tight_layout() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment