def __init__(self, win): ttk.Frame.__init__(self, win) frame_left = ttk.Frame(self) frame_right1 = ttk.Frame(self) frame_right2 = ttk.Frame(self) win.title("车牌识别") win.state("zoomed") self.pack(fill=tk.BOTH, expand=tk.YES, padx="5", pady="5") frame_left.pack(side=LEFT, expand=1, fill=BOTH) frame_right1.pack(side=TOP, expand=1, fill=tk.Y) frame_right2.pack(side=RIGHT, expand=0) ttk.Label(frame_left, text='原图:').pack(anchor="nw") ttk.Label(frame_right1, text='车牌位置:').grid(column=0, row=0, sticky=tk.W) from_pic_ctl = ttk.Button(frame_right2, text="来自图片", width=20, command=self.from_pic) self.image_ctl = ttk.Label(frame_left) self.image_ctl.pack(anchor="nw") self.roi_ctl = ttk.Label(frame_right1) self.roi_ctl.grid(column=0, row=1, sticky=tk.W) ttk.Label(frame_right1, text='识别结果:').grid(column=0, row=2, sticky=tk.W) self.r_ctl = ttk.Label(frame_right1, text="") self.r_ctl.grid(column=0, row=3, sticky=tk.W) self.color_ctl = ttk.Label(frame_right1, text="", width="20") self.color_ctl.grid(column=0, row=4, sticky=tk.W) from_pic_ctl.pack(anchor="se", pady="5") self.predictor = predict.CardPredictor() self.predictor.train_svm()
def __init__(self, win): ttk.Frame.__init__(self, win) frame_left = ttk.Frame(self) frame_right1 = ttk.Frame(self) frame_right2 = ttk.Frame(self) win.title("License Plate Recognition") win.state("zoomed") self.pack(fill=tk.BOTH, expand=tk.YES, padx="5", pady="5") frame_left.pack(side=LEFT, expand=1, fill=BOTH) frame_right1.pack(side=TOP, expand=1, fill=tk.Y) frame_right2.pack(side=RIGHT, expand=0) ttk.Label(frame_left, text='Orjgin Image:').pack(anchor="nw") ttk.Label(frame_right1, text='Plate Position:').grid(column=0, row=0, sticky=tk.W) from_pic_ctl = ttk.Button(frame_right2, text="Choose Image", width=20, command=self.from_pic) self.image_ctl = ttk.Label(frame_left) self.image_ctl.pack(anchor="nw") self.roi_ctl = ttk.Label(frame_right1) self.roi_ctl.grid(column=0, row=1, sticky=tk.W) ttk.Label(frame_right1, text='Results:').grid(column=0, row=2, sticky=tk.W) self.r_ctl = ttk.Label(frame_right1, text="") self.r_ctl.grid(column=0, row=3, sticky=tk.W) self.color_ctl = ttk.Label(frame_right1, text="", width="20") self.color_ctl.grid(column=0, row=4, sticky=tk.W) from_pic_ctl.pack(anchor="se", pady="5") self.predictor = predict.CardPredictor() self.predictor.train_svm()
def __init__(self, win): ttk.Frame.__init__(self, win) #界面名称 win.title("车牌识别") win.state("normal") self.pack(fill=tk.BOTH, expand=tk.YES, padx="5", pady="5") #创建3块矩形区域,作为容器来布局图形界面 ############################################frame_left主要用来显示待识别的图像################################################## frame_left = ttk.Frame(self) frame_left.pack(side=LEFT, expand=1, fill=BOTH) ttk.Label(frame_left, text='input picture:', font=('Arial', 20)).pack(anchor="nw", padx=30) self.image_ctl = ttk.Label(frame_left) self.image_ctl.pack(anchor="nw") ############################################################################################################################ ############################################frame_right1主要用来显示识别结果################################################## frame_right1 = ttk.Frame(self) frame_right1.pack(side=TOP, expand=1, fill=tk.Y) ttk.Label(frame_right1, text='license plate segmentation:', font=('Arial', 20)).grid(column=0, row=0, sticky=tk.W) self.roi_ctl = ttk.Label(frame_right1, font=('Arial', 20)) self.roi_ctl.grid(column=0, row=1) ttk.Label(frame_right1, text='recognition result:', font=('Arial', 20)).grid(column=0, row=10, sticky=tk.SW) self.r_ctl = ttk.Label(frame_right1, text="", font=('Arial', 20)) self.r_ctl.grid(column=0, row=11) # self.color_ctl = ttk.Label(frame_right1, text = "", font = ('Arial', 20), width = "20") # self.color_ctl.grid(column = 0, row = 12, sticky = tk.SW) ############################################################################################################################ ############################################frame_right2主要用来选择倒入图片的方式################################################## frame_right2 = ttk.Frame(self) frame_right2.pack(side=RIGHT, expand=0) ttk.Style().configure('TButton', font=('Arial', 20)) #创建一个button,用于从文件路径中读取待识别图片,回调函数为from_folder from_folder_ctl = ttk.Button(frame_right2, text="chose picture from folder", width=30, command=self.from_folder) from_folder_ctl.pack(anchor="se", pady="5") ############################################################################################################################ self.predictor = predict.CardPredictor() self.predictor.train_svm()
def Get_Plate(self): # get the license plate, the color one need to recognize color photopro = PhotoPro(self.image_path) color_plate = photopro.Get_Image() # create a object from predict which can recognize plate cpd = predict.CardPredictor() cpd.train_svm() # write plate cv2.imwrite('test.jpg', color_plate) return cv2.imread('./test.jpg')
def __init__(self, win): ttk.Frame.__init__(self, win) frame_left = ttk.Frame(self) frame_right1 = ttk.Frame(self) frame_right2 = ttk.Frame(self) win.title("数字表识别") w, h = win.maxsize() win.geometry("{}x{}".format(w, h)) self.pack(fill=tk.BOTH, expand=tk.YES, padx="10", pady="10") frame_left.pack(side=LEFT, expand=1, fill=BOTH) frame_right1.pack(side=TOP, expand=1, fill=tk.Y) frame_right2.pack(side=RIGHT, expand=0) ttk.Label(frame_left, text='原图:').pack(anchor="nw") ttk.Label(frame_right1, text='表盘位置:').grid(column=0, row=0, sticky=tk.W) from_pic_ctl = ttk.Button(frame_right2, text="打开相册", width=20, command=self.from_pic) from_vedio_ctl = ttk.Button(frame_right2, text="打开摄像头", width=20, command=self.from_vedio) start_ctl = ttk.Button(frame_right2, text="拍照", width=20, command=self.start_vedio) send_ctl = ttk.Button(frame_right2, text="上传", width=20, command=self.send) self.image_ctl = ttk.Label(frame_left) self.image_ctl.pack(anchor="nw") self.roi_ctl = ttk.Label(frame_right1) self.roi_ctl.grid(column=0, row=1, sticky=tk.W) ttk.Label(frame_right1, text='识别结果:').grid(column=0, row=2, sticky=tk.W) self.r_ctl = ttk.Label(frame_right1, text="") self.r_ctl.grid(column=0, row=3, sticky=tk.W) from_pic_ctl.pack(anchor="se", pady="10") from_vedio_ctl.pack(anchor="se", pady="10") start_ctl.pack(anchor="se", pady="10") send_ctl.pack(anchor="se", pady="10") self.predictor = predict.CardPredictor() self.predictor.train_svm()
def __init__(self, win): ttk.Frame.__init__(self, win) frame_left = ttk.Frame(self) frame_right1 = ttk.Frame(self) frame_right2 = ttk.Frame(self) win.title("车牌识别") win.state("zoomed") win.maxsize(1000, 800) win.minsize(600, 600) self.pack(fill=tk.BOTH, expand=tk.YES, padx="5", pady="5") frame_left.pack(side=LEFT,expand=1,fill=BOTH) frame_right1.pack(side=TOP,expand=1,fill=tk.Y) frame_right2.pack(side=RIGHT,expand=0) ttk.Label(frame_left, text='原图:').pack(anchor="nw") ttk.Label(frame_right1, text='车牌位置:').grid(column=0, row=0, sticky=tk.W) ttk.Label(frame_right1, text='是否是库内车辆:').grid(column=0, row=2, sticky=tk.W) ttk.Label(frame_right1, text='进入时间:').grid(column=0, row=4, sticky=tk.W) ttk.Label(frame_right1, text='出来时间:').grid(column=0, row=6, sticky=tk.W) from_pic_ctl = ttk.Button(frame_right2, text="来自图片", width=20, command=self.from_pic) from_vedio_ctl = ttk.Button(frame_right2, text="来自摄像头", width=20, command=self.from_vedio) self.image_ctl = ttk.Label(frame_left) self.image_ctl.pack(anchor="nw") self.roi_ctl = ttk.Label(frame_right1) self.roi_ctl.grid(column=0, row=1, sticky=tk.W) self.positon = ttk.Label(frame_right1) self.positon.grid(column=0, row=3, sticky=tk.W) self.first_time = ttk.Label(frame_right1) self.first_time.grid(column=0, row=5, sticky=tk.W) self.final_time = ttk.Label(frame_right1) self.final_time.grid(column=0, row=7, sticky=tk.W) ttk.Label(frame_right1, text='识别结果:').grid(column=0, row=8, sticky=tk.W) self.r_ctl = ttk.Label(frame_right1, text="") self.r_ctl.grid(column=0, row=9, sticky=tk.W) self.color_ctl = ttk.Label(frame_right1, text="", width="20") self.color_ctl.grid(column=0, row=10, sticky=tk.W) from_vedio_ctl.pack(anchor="se", pady="5") from_pic_ctl.pack(anchor="se", pady="5") self.predictor = predict.CardPredictor() self.predictor.train_svm()
def __init_gui(self): # self.currentBroadValue = '123' self.window = tk.Tk() self.window.wm_title('AIOT智能交通综合案例') # books = ('颜色检测', '物体识别 ', 'd', \ # '涂鸦检测','结束检测') self.window.config(background='#FFFFFF') self.canvas = ICanvas(self.window, width=320, height=240) self.canvas.grid(row=0, column=0) self.fm_control = tk.Frame(self.window, width=200, height=240, background='#FFFFFF') self.fm_control.grid(row=0, column=1, padx=10, pady=2) # self.fm_status = tk.Frame(self.window, width=320, height=120, background='#FFFFFF') # self.fm_status.grid(row=1, column=0, padx=0, pady=2) self.lbStatus = tk.Label(self.fm_control, text='提示:没有需要识别的...', bg='Yellow', justify='left', anchor='w') self.lbStatus.place(x=0, y=10, width=320, height=30) self.lbValue = tk.Label(self.fm_control, text='等待识别中... ', bg='Green', justify='left', anchor='w') self.lbValue.place(x=0, y=70, width=320, height=30) self.predictor = predict.CardPredictor() self.predictor.train_svm() # self.fm_title = tk.Frame(self.window, width=200, height=120, background='#FFFFFF') # self.fm_title.grid(row=1, column=1, padx=0, pady=2) # self.lbCue = tk.Label(self.fm_title, text='提示:点击上方按钮,选择需要识别的... ', bg='Blue', fg='White',justify='left', anchor='w') # self.lbCue.place(x=0, y=30, width=200, height=50) self.__action_read_frame()
def __init__(self): # 设置不显示警告 global ser global c GPIO.setwarnings(False) # 设置读取面板针脚模式 # 将引脚设置为输入模式 GPIO.setmode(GPIO.BCM) # 设置读取针脚标号 GPIO.setup(4, GPIO.IN) # GPIO.setup(2, GPIO.OUT) # 串口初始化 ser = serial.Serial("/dev/ttyAMA0", 9600, timeout=0) time.sleep(1) c = predict.CardPredictor() c.train_svm() print('init ok!')
def __init__(self, win): ttk.Frame.__init__(self, win) frame_left = ttk.Frame(self) frame_right1 = ttk.Frame(self) frame_right2 = ttk.Frame(self) frame_center = ttk.Frame(self) win.title("车牌识别") win.state("zoomed") self.pack(fill=tk.BOTH, expand=tk.YES, padx="5", pady="5") frame_left.pack(side=LEFT, expand=1, fill=BOTH) frame_right1.pack(side=TOP, expand=1, fill=tk.Y) frame_right2.pack(side=RIGHT, expand=0) frame_center.pack(side=LEFT, expand=1, fill=BOTH) Label(frame_center, text="==\n|欢|\n|迎|\n|使|\n|用|\n|车|\n|牌|\n|识|\n|别|\n|系|\n|统|\n==", fg="red", font='Helvetica -49 bold').pack(anchor="nw") Label(frame_left, text='原图:', font='Helvetica -27 bold').pack(anchor="nw") Label(frame_right1, text='车牌位置:', font='Helvetica -27 bold').grid(column=0, row=0, sticky=tk.W) from_pic_ctl = Button(frame_right2, text="来自图片", font='Helvetica -29 bold', bg="grey", fg="yellow", width=20, command=self.from_pic) from_vedio_ctl = Button(frame_right2, text="来自摄像头", font='Helvetica -29 bold', bg="grey", fg="yellow", width=20, command=self.from_vedio) button3 = Button(frame_right2, text="api再识别", font='Helvetica -29 bold', bg="grey", fg="yellow", width=20, command=self.api) self.image_ctl = ttk.Label(frame_left) self.image_ctl.pack(anchor="nw") self.roi_ctl = ttk.Label(frame_right1) self.roi_ctl.grid(column=0, row=1, sticky=tk.W) Label(frame_right1, text='识别结果:', font='Helvetica -29 bold').grid(column=0, row=2, sticky=tk.W) self.r_ctl = ttk.Label(frame_right1, text="") self.r_ctl.grid(column=0, row=3, sticky=tk.W) self.color_ctl = ttk.Label(frame_right1, text="", width="20") self.color_ctl.grid(column=0, row=4, sticky=tk.W) from_vedio_ctl.pack(anchor="se", pady="5") from_pic_ctl.pack(anchor="se", pady="5") button3.pack(anchor="se", pady="5") self.predictor = predict.CardPredictor() self.predictor.train_svm()
def detect_carnumber(img_bgr, box): #r1, r2, r3, r4 predictor = predict.CardPredictor() img_bgr = img_bgr[box[0]:box[1], box[2]:box[3]] r = predictor.predict(img_bgr) return r
def main(): try: # 1-设备与环境初始化 picdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib_E-ink/pic') # 设置路径 libdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib_E-ink/lib') if os.path.exists(libdir): sys.path.append(libdir) logging.basicConfig(level=logging.DEBUG) # 摄像头 camera = cv2.VideoCapture(0) # 定义摄像头对象,参数0表示第一个摄像头,默认640x480 # camera.set(cv2.CAP_PROP_FRAME_WIDTH, 960) # 重设获取图像分辨率(predict.py设定了最大1000) # camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 540) # 图像越大处理速度越慢,树莓派不开超频时会卡 if camera is None: # 摄像头打开失败 print(u'检测摄像头是否连接正常!') exit() fps = 24 # 帧率 # 水墨屏 epd = epd1in54_V2.EPD() logging.info("E-ink Init & Clear") epd.init() epd.Clear(0xFF) image = Image.open(os.path.join(picdir, 'USST.bmp')) # read bmp file epd.display(epd.getbuffer(image)) # 欢迎界面 time.sleep(2) # 绘制的图像界面 image = Image.open(os.path.join(picdir, '1in54.bmp')) draw = ImageDraw.Draw(image) # 相当于清屏,得到当前图像对象句柄 font20 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 20) # 字体,高20个像素 font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24) # 字体,高24个像素 font30 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 30) draw.text((0, 89), u' 界面初始化 ', font=font30, fill=0) # PIL库还提供很多绘制函数,十分方便 draw.text((5, 165), u'CPU: °C GPU: °C', font=font20, fill=0) draw.rectangle((70, 4, 180, 30), fill=255) draw.text((70, 4), time.strftime('%m/%d/%Y'), font=font24, fill=0) epd.display(epd.getbuffer(image)) # 向量机图像学习分类训练 predictor = predict.CardPredictor() predictor.train_svm() logging.info(u'SVM学习训练完毕') refershsign = 0 # 刷新墨水屏的标记;0不刷新,1刷新 lastrefreshtime = 0 # 记录墨水屏上次刷新的时间 lastcarchar = None while True: start = time.time() res, cur_frame = camera.read() # 读取视频流 if res != True: break end = time.time() seconds = end - start if seconds < 1.0 / fps: # 按帧速处理,这里其实可以可以除掉了,因为这里视频输出帧率已经无法保证 time.sleep(1.0 / fps - seconds) # 若检测按下ESC键,则退出程序 key = cv2.waitKey(10) & 0xff if key == 27: break # 车牌识别 carchar, roi, color = predictor.predict( cur_frame) # 返回识别到的字符,定位的车牌图像,车牌颜色 if carchar is not None: print(u'识别结果:{0:s}\n'.format( carchar.decode('utf-8'))) # Python2对中文字符不直接支持的问题 if carchar != lastcarchar: # 说明与上次识别的结果不一致,需要刷新下墨水屏 refershsign = 1 lastcarchar = carchar else: lastcarchar = None continue # 当有新的识别结果,且满足刷新频率时(2s/次),更新墨水屏显示 if (time.time() - lastrefreshtime) > 2 and refershsign == 1: draw.rectangle((10, 75, 190, 150), fill=255) draw.text((10, 75), u' 识别成功! ', font=font24, fill=0) draw.text((35, 110), carchar.decode('utf-8'), font=font30, fill=0) draw.rectangle((70, 38, 180, 65), fill=255) draw.text((70, 38), time.strftime(' %H:%M:%S'), font=font24, fill=0) draw.rectangle((50, 165, 70, 198), fill=255) draw.text((50, 165), str(int(get_cpu_temp())), font=font20, fill=0) draw.rectangle((145, 165, 168, 198), fill=255) draw.text((145, 165), str(int(get_gpu_temp())), font=font20, fill=0) epd.displayPart(epd.getbuffer(image)) # 局部刷新显示 lastrefreshtime = time.time() refershsign = 0 camera.release() # 释放摄像头 cv2.destroyAllWindows() # 关闭所有图像窗口 logging.info("E-Ink Clear...") # 墨水屏清屏 epd.init() epd.Clear(0xFF) epd.sleep() # 异常处理 except IOError as e: logging.info(e) except KeyboardInterrupt: logging.info("ctrl + c:") epd1in54_V2.epdconfig.module_exit() exit()