停车场车位识别park_test.py代码解读

代码:

from __future__ import division
import matplotlib.pyplot as plt
import cv2
import os, glob
import numpy as np
from PIL import Image
from keras.applications.imagenet_utils import preprocess_input
from keras.models import load_model
from keras.preprocessing import image
from Parking import Parking
import pickle
cwd = os.getcwd()

def img_process(test_images,park):
    white_yellow_images = list(map(park.select_rgb_white_yellow, test_images))
    park.show_images(white_yellow_images)
    
    gray_images = list(map(park.convert_gray_scale, white_yellow_images))
    park.show_images(gray_images)
    
    edge_images = list(map(lambda image: park.detect_edges(image), gray_images))
    park.show_images(edge_images)
    
    roi_images = list(map(park.select_region, edge_images))
    park.show_images(roi_images)
    
    list_of_lines = list(map(park.hough_lines, roi_images))
    
    line_images = []
    for image, lines in zip(test_images, list_of_lines):
        line_images.append(park.draw_lines(image, lines)) 
    park.show_images(line_images)
    
    rect_images = []
    rect_coords = []
    for image, lines in zip(test_images, list_of_lines):
        new_image, rects = park.identify_blocks(image, lines)
        rect_images.append(new_image)
        rect_coords.append(rects)
        
    park.show_images(rect_images)
    
    delineated = []
    spot_pos = []
    for image, rects in zip(test_images, rect_coords):
        new_image, spot_dict = park.draw_parking(image, rects)
        delineated.append(new_image)
        spot_pos.append(spot_dict)
        
    park.show_images(delineated)
    final_spot_dict = spot_pos[1]
    print(len(final_spot_dict))

    with open('spot_dict.pickle', 'wb') as handle:
        pickle.dump(final_spot_dict, handle, protocol=pickle.HIGHEST_PROTOCOL)
    
    park.save_images_for_cnn(test_images[0],final_spot_dict)
    
    return final_spot_dict
def keras_model(weights_path):    
    model = load_model(weights_path)
    return model
def img_test(test_images,final_spot_dict,model,class_dictionary):
    for i in range (len(test_images)):
        predicted_images = park.predict_on_image(test_images[i],final_spot_dict,model,class_dictionary)
def video_test(video_name,final_spot_dict,model,class_dictionary):
    name = video_name
    cap = cv2.VideoCapture(name)
    park.predict_on_video(name,final_spot_dict,model,class_dictionary,ret=True)
    
    
    
if __name__ == '__main__':
    test_images = [plt.imread(path) for path in glob.glob('test_images/*.jpg')]
    weights_path = 'car1.h5'
    video_name = 'parking_video.mp4'
    class_dictionary = {}
    class_dictionary[0] = 'empty'
    class_dictionary[1] = 'occupied'
    park = Parking()
    park.show_images(test_images)
    final_spot_dict = img_process(test_images,park)
    model = keras_model(weights_path)
    img_test(test_images,final_spot_dict,model,class_dictionary)
    video_test(video_name,final_spot_dict,model,class_dictionary)
   

代码解读:

这段代码中包含了一个主程序,用于运行停车场车位检测的相关功能。具体的解释如下:

1. 导入所需的库

- `from __future__ import division`:导入division功能,用于在除法运算时得到浮点数结果。

- `import matplotlib.pyplot as plt`:导入matplotlib库的pyplot模块,用于绘图。

- `import cv2`:导入OpenCV库,用于图像处理和计算机视觉任务。

- `import os, glob`:导入os和glob库,用于处理文件路径。

- `import numpy as np`:导入numpy库,用于进行数值计算。

- `from PIL import Image`:从PIL库中导入Image模块,用于图像处理。

- `from keras.applications.imagenet_utils import preprocess_input`:从Keras库中导入preprocess_input模块,用于图像预处理。

- `from keras.models import load_model`:从Keras库中导入load_model模块,用于加载已经训练好的模型。

- `from keras.preprocessing import image`:从Keras库中导入image模块,用于图像处理。

- `from Parking import Parking`:导入自定义的Parking类,用于停车场车位检测。

- `import pickle`:导入pickle库,用于读写Python对象序列化。

- `cwd = os.getcwd()`:获取当前工作目录。

2. 定义函数img_process(test_images,park)

- 该函数用于进行图像处理的整个流程,包括选取白色和黄色区域、转换为灰度图像、边缘检测、选取感兴趣区域、进行霍夫直线检测、识别车位区域等操作。

- 参数test_images为待处理的测试图像列表,参数park为Parking类的实例。

- 函数内部先对图像进行一系列处理,最后返回每个车位的坐标信息。

3.定义函数keras_model(weights_path)

- 该函数用于加载已经训练好的Keras模型。

- 参数weights_path为模型的权重文件路径。

4.定义函数img_test(test_images,final_spot_dict,model,class_dictionary)

- 该函数用于对测试图像进行车位状态预测。

- 参数test_images为待预测的测试图像列表,参数final_spot_dict为车位坐标信息字典,参数model为已经加载的Keras模型,参数class_dictionary为车位状态的类别字典。

5.定义函数video_test(video_name,final_spot_dict,model,class_dictionary)

- 该函数用于对视频进行车位状态预测。

- 参数video_name为待预测的视频文件名,参数final_spot_dict为车位坐标信息字典,参数model为已经加载的Keras模型,参数class_dictionary为车位状态的类别字典。

6.主程序部分

- 首先定义了一些参数,包括测试图像列表test_images、模型权重文件路径weights_path、视频文件名video_name和车位状态的类别字典class_dictionary。

- 实例化了一个Parking类的对象park。

- 调用函数img_process对测试图像进行处理,返回车位坐标信息final_spot_dict。

- 调用函数keras_model加载Keras模型,返回模型对象model。

- 调用函数img_test对测试图像进行车位状态预测。

- 调用函数video_test对视频进行车位状态预测。

注意:

- 代码中的Parking类和其他函数实现并未给出,因此无法对具体实现细节进行解释。

- 如果需要运行该程序,需要添加Parking类及其相关函数的实现,并且保证所需的测试图像和视频文件存在。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值