1

下面是我从 github 获取并根据需要进行修改的代码,当我尝试从视频中将字符作为变量中的字符串并插入它们时,它在 print(characters) 行显示错误在数据库中。它在图像上工作正常,但在视频上却不行。

import numpy as np
from skimage.transform import resize
from skimage import measure
from skimage.measure import regionprops
import matplotlib.patches as patches
import matplotlib.pyplot as plt
import DetectPlate
import cx_Oracle
import datetime

# The invert was done so as to convert the black pixel to white pixel and vice versa
license_plate = np.invert(DetectPlate.plate_like_objects[0])

labelled_plate = measure.label(license_plate)

fig, ax1 = plt.subplots(1)
ax1.imshow(license_plate, cmap="gray")
# the next two lines is based on the assumptions that the width of
# a license plate should be between 5% and 15% of the license plate,
# and height should be between 35% and 60%
# this will eliminate some
character_dimensions = (0.35*license_plate.shape[0], 0.60*license_plate.shape[0], 0.05*license_plate.shape[1], 0.15*license_plate.shape[1])
min_height, max_height, min_width, max_width = character_dimensions

characters = []

counter=0
column_list = []
for regions in regionprops(labelled_plate):
    y0, x0, y1, x1 = regions.bbox
    region_height = y1 - y0
    region_width = x1 - x0

    if region_height > min_height and region_height < max_height and region_width > min_width and region_width < max_width:
        roi = license_plate[y0:y1, x0:x1]

        # draw a red bordered rectangle over the character.
        rect_border = patches.Rectangle((x0, y0), x1 - x0, y1 - y0, edgecolor="red",
                                       linewidth=2, fill=False)
        ax1.add_patch(rect_border)

        # resize the characters to 20X20 and then append each character into the characters list
        resized_char = resize(roi, (20, 20))
        characters.append(resized_char)

        # this is just to keep track of the arrangement of the characters
        column_list.append(x0)
print(characters)

connection = cx_Oracle.connect('nabeel/1234@localhost/xe')
cursor = connection.cursor()
dtime=datetime.datetime.now()
cursor.execute("insert into number_plate(reg_no,tstamp) values(:licPlate,:ts)",licPlate=characters)
cursor.setinputsizes(ts=cx_Oracle.TIMESTAMP)
cursor.execute(None, {'ts':dtime})
connection.commit()
connection.close()

plt.show()

我希望它会在表格中插入车牌号和时间戳。谢谢

4

0 回答 0