1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thiết kế hệ thống tự động nhận dạng và cảnh báo tàu thuyền quá khổ khi qua âu thuyền ứng dụng công nghệ xử lý ảnh deep learning

99 10 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết Kế Hệ Thống Tự Động Nhận Dạng Và Cảnh Báo Tàu Thuyền Quá Khổ Khi Qua Âu Thuyền Ứng Dụng Công Nghệ Xử Lý Ảnh Deep Learning
Tác giả Nguyễn Việt Chính
Người hướng dẫn PGS.TS. Đặng Xuân Kiên
Trường học Trường Đại Học Giao Thông Vận Tải
Chuyên ngành Kỹ Thuật Điều Khiển Và Tự Động Hóa
Thể loại Luận Văn Thạc Sĩ
Năm xuất bản 2020
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 99
Dung lượng 6,79 MB

Nội dung

Trước tiên, tôi xin gửi lời cảm ơn tới thầy hướng dẫn luận văn, PGS.TS. Đặng Xuân Kiên. Thầy đã tạo mọi điều kiện, động viên và giúp đỡ tôi hoàn thành tốt luận văn này. Trong suốt quá trình nghiên cứu, Thầy đã kiên nhẫn hướng dẫn, trợ giúp và động viên tôi rất nhiều. Sự hiểu biết sâu sắc về kiến thức chuyên môn, cũng như kinh nghiệm của thầy chính là tiền đề giúp tôi hoàn thành luận văn của mình. Bên cạnh đó, tôi cũng xin chân thành cảm ơn các thầy cô giáo trong khoa Điện – ĐTVT, trong suốt quãng thời gian học tập tại trường, các thầy cô đã trang bị cho tôi những kiến thức và kỹ năng quý báu. Đó là hành trang tốt nhất để tôi có thể bước đi vững chắc trên con đường sự nghiệp. Do thời gian cũng như kiến thức còn nhiều hạn chế nên luận văn của tôi không thể tránh khỏi các thiếu sót. Tôi rất mong nhận được sự đóng góp ý kiến từ quý thầy cô và các bạn để luận văn của tôi được hoàn thiện hơn.

BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP.HCM - oOo NGUYỄN VIỆT CHÍNH THIẾT KẾ HỆ THỐNG TỰ ĐỘNG NHẬN DẠNG VÀ CẢNH BÁO TÀU THUYỀN QUÁ KHỔ KHI QUA ÂU THUYỀN ỨNG DỤNG CÔNG NGHỆ XỬ LÝ ẢNH DEEP LEARNING LUẬN VĂN THẠC SĨ TP HỒ CHÍ MINH 12-2020 BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP.HCM - oOo NGUYỄN VIỆT CHÍNH THIẾT KẾ HỆ THỐNG TỰ ĐỘNG NHẬN DẠNG VÀ CẢNH BÁO TÀU THUYỀN QUÁ KHỔ KHI QUA ÂU THUYỀN ỨNG DỤNG CÔNG NGHỆ XỬ LÝ ẢNH DEEP LEARNING CHUYÊN NGÀNH: KỸ THUẬT ĐIỀU KHIỂN VÀ TỰ ĐỘNG HÓA MÃ SỐ: 8520216 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS ĐẶNG XUÂN KIÊN TP HỒ CHÍ MINH 12-2020 LUẬN VĂN ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC GIAO THƠNG VẬN TẢI THÀNH PHỐ HỒ CHÍ MINH Cán hướng dẫn khoa học: PGS.TS ĐẶNG XUÂN KIÊN Cán chấm nhận xét 1: TS ĐOÀN VĂN ĐỔNG Cán chấm nhận xét 2: TS NGÔ MẠNH DŨNG Luận văn thạc sĩ bảo vệ Trường Đại học Giao thông vận tải Tp HCM ngày 24 tháng 12 năm 2020 Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: PGS TS Đồng Văn Hướng Chủ tịch Hội đồng; TS Đoàn Văn Đổng Ủy viên, phản biện; TS Ngô Mạnh Dũng Ủy viên, phản biện; TS Lưu Hoàng Minh Ủy viên; TS Võ Nguyên Sơn Ủy viên, thư ký Xác nhận Chủ tịch Hội đồng đánh giá luận văn Trưởng Khoa quản lý chuyên ngành sau luận văn sửa chữa CHỦ TỊCH HỘI ĐỒNG TRƯỞNG KHOA ĐIỆN-ĐTVT PGS TS Đồng Văn Hướng TS Đoàn Văn Đổng i LỜI CẢM ƠN Trước tiên, xin gửi lời cảm ơn tới thầy hướng dẫn luận văn, PGS.TS Đặng Xuân Kiên Thầy tạo điều kiện, động viên giúp đỡ tơi hồn thành tốt luận văn Trong suốt trình nghiên cứu, Thầy kiên nhẫn hướng dẫn, trợ giúp động viên nhiều Sự hiểu biết sâu sắc kiến thức chuyên mơn, kinh nghiệm thầy tiền đề giúp tơi hồn thành luận văn Bên cạnh đó, tơi xin chân thành cảm ơn thầy cô giáo khoa Điện – ĐTVT, suốt quãng thời gian học tập trường, thầy cô trang bị cho kiến thức kỹ quý báu Đó hành trang tốt để tơi bước vững đường nghiệp Do thời gian kiến thức nhiều hạn chế nên luận văn tránh khỏi thiếu sót Tơi mong nhận đóng góp ý kiến từ q thầy bạn để luận văn tơi hồn thiện Thành phố Hồ Chí Minh, tháng 12/2020 Học viên thực Nguyễn Việt Chính ii LỜI CAM ĐOAN Tơi cam đoan: Luận văn “Thiết kế hệ thống tự động nhận dạng cảnh báo tàu thuyền khổ qua âu thuyền ứng dụng công nghệ xử lý ảnh Deep Learning” Là cơng trình nghiên cứu thân tơi đúc kết từ q trình học tập nghiên cứu hướng dẫn PGS.TS Đặng Xuân Kiên Số liệu kết luận văn nghiên cứu trung thực chưa công bố cơng trình khác Tơi xin cam đoan giúp đỡ cho việc thực luận văn cảm ơn thơng tin trích dẫn luận văn rõ nguồn gốc Tơi xin chịu hồn tồn trách nhiệm nghiên cứu Thành phố Hồ Chí Minh, tháng 12/2020 Học viên thực Nguyễn Việt Chính iii MỤC LỤC LỜI CẢM ƠN ii LỜI CAM ĐOAN .iii DANH SÁCH HÌNH vi DANH SÁCH TỪ VIẾT TẮT viii TỔNG QUAN VỀ ĐỀ TÀI 1 Tính cấp thiết đề tài Mục tiêu nghiên cứu đề tài Đối tượng nghiên cứu Phương pháp nghiên cứu Cấu trúc luận văn CHƯƠNG TỔNG QUAN VỀ PHÂN TÍCH ẢNH TRONG KHÔNG GIAN SỐ VÀ XỬ LÝ ẢNH BẰNG MẠNG NƠRON 1.1 Tổng quan cơng trình nghiên cứu liên quan 1.1.1 Các cơng trình nghiên cứu giới 1.1.2 Các cơng trình nghiên cứu Việt Nam .6 1.2 Tổng quan phân tích ảnh khơng gian số 1.2.1 Thu nhận ảnh .8 1.2.2 Số hóa 1.2.3 Tiền xử lý 1.2.4 Phân tích ảnh 1.2.5 Nhận dạng đối tượng ảnh sử dụng mạng Nơ ron 1.3 Tổng quan xử lý ảnh mạng nơ ron 10 1.3.1 Mạng nơ ron nhân tạo với thuật toán lan truyền ngược 10 1.3.2 Mạng noron tích chập 11 1.4 Phân tích mạng noron tích chập xử lý ảnh 12 1.4.1 Cấu trúc mạng nơ ron tích chập 12 1.4.2 Lớp tuyến tính chỉnh lưu (ReLU layer) 15 iii 1.4.3 Lớp tích chập (Convolution layer) 16 1.4.4 Lớp gộp (Pooling layer) 19 1.4.5 Lớp kết nối hoàn toàn (Fully connected layer) 20 1.5 Phương thức giao tiếp truyền liệu 21 CHƯƠNG XÂY DỰNG CƠ SỞ DỮ LIỆU VÀ MẠNG NƠ RON TÍCH CHẬP CHO HỆ THỐNG 23 2.1 Xây dựng sở liệu hình ảnh khu vực âu thuyền 23 2.2 Tiền xử lý liệu 23 2.3 Đào tạo mơ hình nhận dạng 27 2.4 Thử nghiệm mơ hình 28 CHƯƠNG THIẾT KẾ VÀ THỬ NGHIỆM HỆ THỐNG 31 3.1 Sơ đồ thiết kế nguyên lý hệ thống 31 3.2 Lựa chọn phần cứng hệ thống 31 3.2.1 Raspberry Pi 31 3.2.2 Màn hình LCD inch cho Raspberry Pi 34 3.2.3 Webcam Logitech C270 35 3.2.4 Bộ nguồn Omron 5V – 24V 36 3.2.5 Mạch Relay Opto cách ly 5VDC 37 3.2.6 Đèn xoay có cịi 38 3.3 Xây dựng chương trình phát cảnh báo tàu thuyền khổ 40 3.3.1 Ngôn ngữ lập trình 40 3.3.2 Lưu đồ giải thuật .42 3.4 Thử nghiệm hoạt động cài đặt hệ thống 44 3.5 Thử nghiệm xác định trạng thái báo động 45 3.5.1 Thử nghiệm xác định báo động tàu khổ .45 3.5.2 Thử nghiệm chức báo động khẩn cấp 46 3.6 Thử nghiệm xác định thời gian liệu lưu trữ cố 47 3.7 Thử nghiệm xác định hoạt động truyền nhận liệu 48 KẾT LUẬN VÀ KIẾN NGHỊ .49 iv Kết luận 49 Hạn chế đề tài 49 Hướng phát triển đề tài 49 TÀI LIỆU THAM KHẢO 51 PHỤ LỤC .54 v DANH SÁCH HÌNH Hình 1.1 Các kỹ sư quản lý cơng trình vận hành âu tàu Rạch Chanh Hình 1.2 Các cơng trình chống ngập xây dựng địa bàn TP HCM Hình 1.3 Các bước xử lý ảnh Hình 1.4 Mạng nơ ron nhân tạo lớp 11 Hình 1.5 Mạng nơron tích chập CNN 12 Hình 1.6 Kết hàm ReLU 15 Hình 1.7 Hình minh họa phép tốn tích chập 16 Hình 1.8 Kết nối điều khiển từ xa phần mềm VNC Viewer 21 Hình 2.1 Cơ sở liệu hình ảnh 23 Hình 2.2 Sử dụng LabelImg để dán nhãn 24 Hình 2.3 Các tệp liệu xml chứa thơng tin hình ảnh dán nhãn 24 Hình 2.4 Cấu trúc SSD (Single Shot MultiBox Detector) .26 Hình 2.5 Cấu trúc SSDLite-MobileNetv2 lai ghép .26 Hình 2.6 Tóm tắt tồn q trình đào tạo 27 Hình 2.7 Các bước chi tiết chạy chương trình đào tạo mơ hình 27 Hình 2.8 Hình chụp hình sau đào tạo 40.000 bước 28 Hình 2.9 Hình chụp hình sau lưu thành cơng mơ hình 28 Hình 2.10 Thử nghiệm mơ hình nhận dạng đối tượng 28 Hình 2.11 Kết thực nghiệm phát đối tượng công cụ Tensorflow đội ngũ Google thực 29 Hình 2.12 Kết nhận dạng tàu Hệ thống cảnh báo tàu thuyền khổ .30 Hình 3.1 Cấu trúc hệ thống dựa card chuyên dụng Raspberry Pi .31 Hình 3.2 Bảng thơng số phần cứng dòng Raspberry Pi 32 Hình 3.3 Board mạch Raspberry Pi 33 Hình 3.4 Thiết bị kèm với Raspberry 34 Hình 3.5 Màn hình LCD 7″ kết nối với Raspberry .35 Hình 3.6 Webcam Logitech C270 35 Hình 3.7 Bộ nguồn Omron S8VM 36 Hình 3.8 Mạch Relay Opto cách ly 5VDC 38 Hình 3.9 Đèn xoay có cịi 38 Hình 3.10 Thiết kế bố trí thiết bị bên hệ thống 39 vi Hình 3.11 Hình chụp thực tế bố trí thiết bị bên hệ thống 39 Hình 3.12 Hình chụp thực tế mơ hình cho việc thử nghiệm hệ thống 40 Hình 3.13 Chương trình thiết kế giao diện Qt Designer .41 Hình 3.14 Lưu đồ tổng thể kết nối hệ thống 42 Hình 3.15 Mơ tả góc độ ghi hình camera hướng tàu chạy 43 Hình 3.16 Mơ tả vùng ghi hình khung phát đối tượng camera 43 Hình 3.17 Mơ tả khung hình chụp Camera khu cực âu thuyền 44 Hình 3.18 Mơ tả bố trí camera thời điểm hệ thống bắt đầu tính tốn .44 Hình 3.19 Hình ảnh ghi lại hình hiển thị hệ thống 45 Hình 3.20 Hiển thị tàu đạt kích thước an tồn lưu thơng 45 Hình 3.21 Thử nghiệm xác định báo động tàu khổ 46 Hình 3.22 Báo động khẩn cấp bật 47 Hình 3.23 Dữ liệu ghi vào file Log chu kỳ 47 Hình 3.24 Kết nối điều khiển từ xa phần mềm VNC Viewer .48 vii Chương trình hệ thống #! /usr/bin/env python # coding=utf-8 #10/08/2020 15:25 from PyQt5 import QtCore, QtGui, uic, QtWidgets from PyQt5.QtGui import QIcon, QPixmap from PyQt5.QtCore import QTime, QTimer from PyQt5.QtWidgets import QApplication, QLCDNumber from PyQt5.QtWidgets import QPushButton from PyQt5.QtCore import pyqtSlot from PyQt5.QtGui import QPainter, QColor, QPen, QCursor from PyQt5.QtCore import Qt import sys import cv2 import math import numpy as np import threading import time from time import strftime from datetime import datetime import queue import os import tensorflow as tf import argparse import RPi.GPIO as GPIO import collections 74 # Khai bao chan de dieu khien thiet bi ngoai vi GPIO.setwarnings(False) GPIO.cleanup() GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # NUT RESET GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # NUT E.M CALL GPIO.setup(6, GPIO.OUT) GPIO.setup(13, GPIO.OUT) GPIO.setup(5, GPIO.OUT) GPIO.setup(26, GPIO.OUT) # Set tat ca Relay tắt GPIO.output(6, GPIO.LOW) GPIO.output(13, GPIO.LOW) GPIO.output(5, GPIO.LOW) GPIO.output(26, GPIO.LOW) # bien tinh toan rong = cao = # Khai báo timer cờ ngắt a=0 b=0 c=0 em = rs = 75 # Khai báo chết độ để ghi Log: che_do = 'manual_on' trang_thai = 'no_alarm' # Loai Camera cổng usb camera_type = 'usb' parser = argparse.ArgumentParser() parser.add_argument(' usbcam', help='Use a USB webcam instead of picamera', action='store_true') args = parser.parse_args() # set path cho thu muc lam viec sys.path.append(' ') # Import utilites from utils import label_map_util from utils import visualization_utils as vis_util # sử dụng module ssdlite làm mạng noron sở MODEL_NAME = 'pedestrian_detection_ssdlite-master' # Lấy đường dẫn đến thư mục làm việc CWD_PATH = os.getcwd() # Đường dẫn đến tệp pb chứa mơ hình sử dụng để phát đối tượng PATH_TO_CKPT = os.path.join(CWD_PATH, MODEL_NAME, 'frozen_inference_graph_ship.pb') # Đường dẫn đến tệp nhãn PATH_TO_LABELS = os.path.join(CWD_PATH, 'data', 'ship_label_map.pbtxt') 76 # Số lớp mà trình phát đối tượng xác định NUM_CLASSES = ## Tải đồ nhãn label_map = label_map_util.load_labelmap(PATH_TO_LABELS) categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True) category_index = label_map_util.create_category_index(categories) # Tải mô hình Tensorflow vào nhớ detection_graph = tf.Graph() with detection_graph.as_default(): od_graph_def = tf.GraphDef() with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid: serialized_graph = fid.read() od_graph_def.ParseFromString(serialized_graph) tf.import_graph_def(od_graph_def, name='') sess = tf.Session(graph=detection_graph) # Xác định tensor đầu vào đầu (tức liệu) cho trình phân loại phát đối tượng # Tensor đầu vào hình ảnh image_tensor = detection_graph.get_tensor_by_name('image_tensor:0') # Tensor đầu hộp phát hiện, điểm số lớp # Mỗi hộp đại diện cho phần hình ảnh nơi phát đối tượng cụ thể detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0') i = detection_boxes 77 # Mỗi điểm thể mức độ tự tin cho đối tượng # Điểm hiển thị hình ảnh kết quả, với nhãn lớp detection_scores = detection_graph.get_tensor_by_name('detection_scores:0') detection_classes = detection_graph.get_tensor_by_name('detection_classes:0') # Số lượng đối tượng phát num_detections = detection_graph.get_tensor_by_name('num_detections:0') # Khởi tạo tính tốn tốc độ khung hình frame_rate_calc = freq = cv2.getTickFrequency() font = cv2.FONT_HERSHEY_SIMPLEX running = False capture_thread = None form_class = uic.loadUiType("simple.ui")[0] q = queue.Queue() def grab(cam, queue, width, height, fps): global running capture = cv2.VideoCapture(cam) capture.set(cv2.CAP_PROP_FRAME_WIDTH, width) capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height) capture.set(cv2.CAP_PROP_FPS, fps) while (running): frame = {} capture.grab() retval, img = capture.retrieve(0) frame["img"] = img if queue.qsize() < 1: 78 queue.put(frame) class OwnImageWidget(QtWidgets.QWidget): def init (self, parent=None): super(OwnImageWidget, self). init (parent) self.image = None def setImage(self, image): self.image = image sz = image.size() self.setMinimumSize(sz) self.update() def paintEvent(self, event): qp = QtGui.QPainter() qp.begin(self) if self.image: qp.drawImage(QtCore.QPoint(0, 0), self.image) qp.end() class MyWindowClass(QtWidgets.QMainWindow, form_class): def init (self, parent=None): QtWidgets.QMainWindow. init (self, parent) self.setupUi(self) self.setStyleSheet("background-color: #A9E2F3") self.window_width = self.ImgWidget.frameSize().width() self.window_height = self.ImgWidget.frameSize().height() self.ImgWidget = OwnImageWidget(self.ImgWidget) self.setCursor(Qt.BlankCursor) 79 #self.label.setStyleSheet("color: red;font: bold 26px") #MONITER TEXT self.label_8.setStyleSheet("color: black") #ten de tai self.label_4.setStyleSheet("color: black; background-color:#BDBDBD;border: none;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") self.label_5.setStyleSheet("color: black; background-color:#BDBDBD;border: none;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") self.label_11.setStyleSheet("color: black; background-color:#FFFFFF;border: none;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") self.btnReset.setStyleSheet( "color: rgb(255, 255, 255); background-color: #0A1B2A;border-width: 0px;borderradius: 10px;border-color: #fff;font: bold 25px;min-width: 3em;padding: 6px;") self.btnEMcall.setStyleSheet( "color: rgb(255, 255, 255); background-color: red;border-width: 0px;border-radius: 10px;border-color: #fff;font: bold;min-width: 3em;padding: 6px;") self.btnReset.clicked.connect(self.Reset) # đọc nút nhấn reset hình self.btnEMcall.clicked.connect(self.EMcall) # đọc nút nhấn EMCall hình # self.lcd = QtWidgets.QLCDNumber(self.centralwidget) # self.lcd.setGeometry(QtCore.QRect(200, 70, 150, 53)) self.lcd.setStyleSheet("color: black; background-color: #FFFFFF; border: none;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px; font: 75 16pt \"PibotoLt\";") self.cao.setStyleSheet( 80 "color: black; background-color: white; border: none; font-size: 16pt; padding-left: 45px;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") self.rong.setStyleSheet( "color: black; background-color: white; border: none; font-size: 16pt; padding-left: 45px;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") self.WriteLog = QTimer(self) self.WriteLog.timeout.connect(self.write_log) #self.WriteLog.start(30000) self.timer = QTimer(self) self.timer.timeout.connect(self.update_frame) self.timer.start(200) global running running = True capture_thread.start() def Reset(self): global a, b, c, trang_thai, rs, em, rong, cao trang_thai = 'an toan' a=0 b=0 c=0 rs = em = rong = cao = 81 self.update_frame() print("đã tới đay") def EMcall(self): global a, b, c, e, em, rs b=1 a=1 c=0 em = rs = def an_toan(self): global a, rs, trang_thai trang_thai = 'an_toan' a=1 em = rs = self.label_4.setStyleSheet("color: black; background-color:#04B45F;border: none;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") self.label_5.setStyleSheet("olor: black; background-color:#BDBDBD;border: none;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") def nguy_hiem(self): global b, trang_thai trang_thai = 'nguy_hiem' self.label_5.setStyleSheet("color: black; background-color:#FF0000;border: none;\n" 82 "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") self.label_4.setStyleSheet("color: black; background-color:#BDBDBD;border: none;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") # Ghi file lịch sử def write_log(self): global trang_thai, rong, cao sttime = datetime.now().strftime('%Y%m%d_%H:%M:%S - ') log = 'Log.txt' with open(log, 'a') as logfile: logfile.write(sttime + 'Chiều rộng tàu: ' + rong + '; Chiều cao tàu: ' + cao + '; Trạng thái: ' + trang_thai + '\n') def shutdown(self): global running running = False ios.system("sudo shutdown -h now") def update_frame(self): self.lcd.display(strftime("%H" + ":" + "%M")) sttime2 = datetime.now().strftime('%Y%m%d_%H:%M:%S') global a, b, c, rs, em, rong, cao, frame_rate_calc if not q.empty(): frame = q.get() img = frame["img"] 83 img_height, img_width, img_colors = img.shape scale_w = float(self.window_width) / float(img_width) scale_h = float(self.window_height) / float(img_height) scale = min([scale_w, scale_h]) if scale == 0: scale = t1 = cv2.getTickCount() frame_expanded = np.expand_dims(img, axis=0) # Perform the actual detection by running the model with the image as input (boxes, scores, classes, num) = sess.run( [detection_boxes, detection_scores, detection_classes, num_detections], feed_dict={image_tensor: frame_expanded}) vis_util.visualize_boxes_and_labels_on_image_array( img, np.squeeze(boxes), np.squeeze(classes).astype(np.int32), np.squeeze(scores), category_index, use_normalized_coordinates=True, line_thickness=8, min_score_thresh=0.7) box = np.squeeze(boxes) for i in range(len(boxes)): ymin = (int(box[i, 0] * img_height)) 84 xmin = (int(box[i, 1] * img_width)) ymax = (int(box[i, 2] * img_height)) xmax = (int(box[i, 3] * img_width)) cv2.putText(img, " _".format(), (0, 400), font, 1, (0, 0, 255), 2, cv2.LINE_AA) #cv2.putText(img, "A".format(), (0, 0), font, 1, (0, 0, 255), #2, cv2.LINE_AA) #cv2.putText(img, "A".format(), (0, 400), font, 1, (0, 0, 255), #2, cv2.LINE_AA) #cv2.putText(img, "A".format(), (400, 0), font, 1, (0, 0, 255), #2, cv2.LINE_AA) #cv2.putText(img, "A".format(), (350, 400), font, 1, (0, 0, 255), #2, cv2.LINE_AA) #cv2.putText(img, "CAO: {0:.1f}".format(img_height), (30, 460), font, 1, (255, 255, 225), 2, #cv2.LINE_AA) if(((xmax - xmin) < 500) and ((ymax - ymin) < 400)): rong = (xmax - xmin)*20/640 cao = (ymax - ymin)*20/640 rong = round(rong,1) cao = round(cao,1) if (ymax in range(400, 420)): cv2.putText(img, "RONG: {0:.1f}".format(xmax - xmin), (30, 430), font, 1, (255, 255, 225), 2, 85 cv2.LINE_AA) cv2.putText(img, "CAO: {0:.1f}".format(ymax - ymin), (30, 460), font, 1, (255, 255, 225), 2, cv2.LINE_AA) self.rong.setText(str(rong) + " M") self.cao.setText(str(cao) + " M") cv2.putText(img,"FPS: {0:.2f}".format(frame_rate_calc),(30,50),font,1,(255,255,0),2,cv2.LINE_AA) t2 = cv2.getTickCount() time1 = (t2-t1)/freq frame_rate_calc = 1/time1 img = cv2.resize(img, None, fx=scale, fy=scale, interpolation=cv2.INTER_CUBIC) # cv2.imwrite(sttime2+'.jpg',img) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) height, width, bpc = img.shape bpl = * width image = QtGui.QImage(img.data, QtGui.QImage.Format_RGB888) self.ImgWidget.setImage(image) final_score = np.squeeze(scores) if(rs == 1): self.RS() self.rong.setText(str(rong) + " M") self.cao.setText(str(cao) + " M") if(em == 1): self.EM() 86 width, height, bpl, if(rong > 12 or cao > 14): self.nguy_hiem() else: if(rong != and cao != 0): self.an_toan() else: self.RS() def EM(self): global em self.label_5.setStyleSheet("color: white; background-color:#FF0000;border: none;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") self.label_4.setStyleSheet("color: white; background-color:#BDBDBD;border: none;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") self.btnEMcall.setStyleSheet( "color: rgb(255, 255, 255); background-color: red;border-width: 0px;border-radius: 10px;border-color: #fff;font: bold;min-width: 3em;padding: 6px;") em = def RS(self): global rs self.label_4.setStyleSheet("color: white; background-color:#BDBDBD;border: none;\n" "-webkit-border-radius: 5px;") 87 5px;-moz-border-radius: 5px;border-radius: self.label_5.setStyleSheet("color: white; background-color:#BDBDBD;border: none;\n" "-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;") self.btnEMcall.setStyleSheet( "color: rgb(255, 255, 255); background-color: red;border-width: 0px;border-radius: 10px;border-color: #fff;font: bold;min-width: 3em;padding: 6px;") rs = print("đã tới rs") def closeEvent(self, event): global running running = False global GPIO GPIO.add_event_detect(24, GPIO.FALLING, callback=Reset) # đọc nút nhấn Reset tủ GPIO.add_event_detect(23, GPIO.FALLING, callback=EMcall) # đọc nút nhấn EMCall tủ capture_thread = threading.Thread(target=grab, args=(0, q, 480, 480, 10)) app = QtWidgets.QApplication(sys.argv) w = MyWindowClass(None) w.setWindowTitle('BNWAS') w.show() # w.showFullScreen() app.exec_() 88

Ngày đăng: 22/12/2023, 00:26

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w