(Đồ án hcmute) ứng dụng xử lý ảnh và ai để nhận biết bệnh viêm phổi ở trẻ em

99 3 0
(Đồ án hcmute) ứng dụng xử lý ảnh và ai để nhận biết bệnh viêm phổi ở trẻ em

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT Y SINH ỨNG DỤNG XỬ LÝ ẢNH VÀ AI ĐỂ NHẬN BIẾT BỆNH VIÊM PHỔI Ở TRẺ EM GVHD: Ngô Bá Việt SVTH: Ngô Thị Anh Thư MSSV:16129070 SVTH: Phạm Thiên Vương MSSV:16129085 SKL 0 3 Tp Hồ Chí Minh, tháng 08/2020 an BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT Y SINH ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH VÀ AI ĐỂ NHẬN BIẾT BỆNH VIÊM PHỔI Ở TRẺ EM GVHD: ThS Ngô Bá Việt SVTH1: Ngô Thị Anh Thư MSSV1: 16129070 SVTH2: Phạm Thiên Vương MSSV2: 16129085 Tp Hồ Chí Minh - 08/2020 an BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT Y SINH ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH VÀ AI ĐỂ NHẬN BIẾT BỆNH VIÊM PHỔI Ở TRẺ EM GVHD: ThS Ngô Bá Việt SVTH1: Ngô Thị Anh Thư MSSV1: 16129070 SVTH2: Phạm Thiên Vương MSSV2: 16129085 Tp Hồ Chí Minh - 08/2020 an TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC o0o -Tp HCM, ngày tháng năm 2020 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Chun ngành: Hệ đào tạo: Khóa: Ngơ Thị Anh Thư Phạm Thiên Vương Kỹ thuật Điện - Điện tử Đại học quy 2016 MSSV: 16129070 MSSV: 16129085 Mã ngành: 29 Mã hệ: Lớp: 161290B I TÊN ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH VÀ AI ĐỂ NHẬN BIẾT BỆNH VIÊM PHỔI Ở TRẺ EM II NHIỆM VỤ Các số liệu ban đầu: − Ngôn ngữ sử dụng: Python − Phần mềm huấn luyện: IDLE Python 3.5, Anaconda, Google Colab − Tập liệu Bệnh viện Montgomery Bệnh viện Shenzhen tập liệu Chest X-Ray Images (Pneumonia) sử dụng để phân đoạn vùng phổi trái phải − Sử dụng kiến trúc mơ hình mạng U-Net để phân đoạn trích xuất vùng phổi trái phải − Sử dụng mơ hình mạng nơ-ron CNN (Convolutional Neural Networks) để trích xuất đặc trưng phân loại bệnh dựa tập liệu vùng phổi phân đoạn − Thiết kế giao diện ứng dụng PyQt5 với hỗ trợ công cụ Qt Designing Nội dung thực hiện: − Tìm hiểu mạng nơ-ron CNN (Convolutional Neural Networks) − Xây dựng ba tập liệu bao gồm: tập huấn luyện, tập xác nhận tập thử nghiệm (training, validation testing) − Thực việc tách phổi trái phải khỏi ảnh nhằm giảm thông tin nhiễu i an − Tiến hành xây dựng mơ hình CNNs cho toán phân loại ảnh − Chạy thử nghiệm, chỉnh sửa hoàn thiện hệ thống − Đánh giá hệ thống huấn luyện − Thiết kế giao diện hoạt động hệ thống − Thực viết báo cáo đề tài − Tiến hành báo cáo trước hội đồng III NGÀY GIAO NHIỆM VỤ: 02/03/2020 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 04/08/2020 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Ngô Bá Việt CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ii an TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o -Tp HCM, ngày tháng năm 2020 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Ngô Thị Anh Thư Lớp: 161290B Họ tên sinh viên 2: Phạm Thiên Vương Lớp: 161290B MSSV: 16129070 MSSV: 16129085 Tên đề tài: Ứng dụng xử lý ảnh AI để nhận biết bệnh viêm phổi trẻ em Tuần/ngày Nội dung Tuần (2/3 - 8/3) - Gặp GVHD để nghe phổ biến yêu cầu làm đồ án, tiến hành chọn đồ án viết đề cương tóm tắt yêu cầu đề tài chọn Tuần (9/3 - 15/3) Tuần (16/3 - 22/3) Tuần (23/3 - 29/3) Tuần (30/3 - 5/4) Tuần (6/4 - 12/4) Tuần (13/4 - 19/4) Tuần (20/4 - 26/4) Tuần (27/4 - 3/5) Tuần 10 (4/5 - 10/5) Tuần 11 (11/5 - 17/5) Tuần 12 (18/5 - 24/5) Xác nhận GVHD - Tìm hiểu thực trích xuất phổi trái phải khỏi ảnh X-quang - Xây dựng tập liệu - Tiến hành xây dựng mơ hình CNNs cho tốn phân loại ảnh - Chỉnh sửa hồn thiện chương trình huấn luyện - Tiến hành huấn luyện mơ hình CNNs cho tốn phân loại ảnh - Đánh giá hệ thống huấn luyện phương pháp tối ưu - Nộp báo cáo tiến độ Đồ án tốt nghiệp vào ngày 20/5/2020 iii an Tuần 13 (25/5 - 31/5) Tuần 14 (1/6 - 7/6) Tuần 15 (8/6 - 14/6) Tuần 16 (15/6 - 21/6) Tuần 17 (22/6 - 28/6) Tuần 18 (29/6 - 5/7) Tuần 19 (6/7 - 12/7) Tuần 20 (13/7 - 19/7) Tuần 21 (20/7 - 26/7) Tuần 21 (27/7 - 2/8) - Thiết kế giao diện quản lý liệu bệnh nhân chẩn đốn hình ảnh hệ thống - Thiết kế kết nối phần cứng RFID - Chạy thử nghiệm, chỉnh sửa, hoàn thiện đánh giá tồn hệ thống - Viết báo cáo, tóm tắt, làm slide báo cáo, thiết kế poster A5 - Hoàn thiện báo cáo gửi cho GVHD để xem xét góp ý lần cuối trước in báo cáo - Báo cáo trước GVHD nộp báo cáo Đồ án tốt nghiệp GV HƯỚNG DẪN (Ký ghi rõ họ tên) iv an LỜI CAM ĐOAN Đề tài nhóm tự thực dựa vào số tài liệu có sẵn hướng dẫn thầy hướng dẫn Th.S Ngô Bá Việt khơng chép từ tài liệu hay cơng trình có trước Nếu phát gian dối nhóm hoàn toàn chịu trách nhiệm Người thực đề tài Ngô Thị Anh Thư – Phạm Thiên Vương v an LỜI CẢM ƠN Chúng em xin gửi lời cảm ơn sâu sắc đến Thầy Ngô Bá Việt-Giảng viên môn Điện Tử Công Nghiệp-Y Sinh, trực tiếp hướng dẫn tận tình giúp đỡ, chia sẻ nhiều kinh nghiệm quý báu cho chúng em thực tốt đề tài Chúng em xin gửi lời chân thành cảm ơn thầy Khoa Điện-Điện Tử nói chung, thầy cô môn Điện Tử Công Nghiệp-Y Sinh nói riêng giúp chúng em có sở lý thuyết vững vàng tạo điều kiện tốt cho chúng em hoàn thành đề tài Chúng em gửi lời đồng cảm ơn đến bạn lớp 161290 chia sẻ trao đổi kiến thức kinh nghiệm quý báu thời gian thực đề tài Cuối cùng, xin cảm ơn đến cha mẹ, đấng sinh thành tạo điều kiện, quan tâm, chăm sóc, giúp đỡ, động viên chúng em suốt q trình học tập hồn thành khố luận tốt nghiệp Xin chân thành cảm ơn! Người thực đề tài Ngô Thị Anh Thư – Phạm Thiên Vương vi an MỤC LỤC NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP i LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP iii LỜI CAM ĐOAN v LỜI CẢM ƠN vi MỤC LỤC vii LIỆT KÊ HÌNH VẼ x LIỆT KÊ BẢNG xiii BẢNG LIỆT KÊ TỪ VIẾT TẮT xiv TÓM TẮT xvi Chương TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN 1.5 BỐ CỤC Chương CƠ SỞ LÝ THUYẾT 2.1 MÔ TẢ VỀ BỆNH VIÊM PHỔI 2.1.1 Khái quát viêm phổi 2.1.2 Bệnh viêm phổi vi-rút 2.1.3 Bệnh viêm phổi vi khuẩn 2.2 CÁC PHƯƠNG PHÁP XỬ LÝ ẢNH SỬ DỤNG 2.2.1 Điểm ảnh lân cận 2.2.2 Lọc nhiễu 10 2.2.3 Phân đoạn ảnh 10 2.3 MẠNG NƠ-RON TÍCH CHẬP 11 2.3.1 Lớp tích chập 12 2.3.2 Lớp Pooling 14 2.3.3 Lớp kết nối đầy đủ 15 2.3.4 Hàm kích hoạt 15 2.3.5 Hàm mát 16 vii an TÀI LIỆU THAM KHẢO [38] Jaeger S, Karargyris A, Candemir S, Folio L, Siegelman J, Callaghan F, Xue Z, Palaniappan K, Singh RK, Antani S, Thoma G, Wang YX, Lu PX, McDonald CJ, “Automatic tuberculosis screening using chest radiographs”, IEEE Trans Med Imaging 2014 [39] Candemir S, Jaeger S, Palaniappan K, Musco JP, Singh RK, Xue Z, Karargyris A, Antani S, Thoma G, McDonald CJ, “Lung segmentation in chest radiographs using anatomical atlases with nonrigid registration”, IEEE Trans Med Imaging, 2014 [40] Daniel Kermany, Kang Zhang, Michael Goldbaum, “Labeled Optical Coherence Tomography (OTC) and Chest X-Ray Images for Classification”, Mendeley Data, phiên 2, 2018 [41] Vũ Hữu Tiệp, "Bài 33: Các phương pháp đánh giá hệ thống phân lớp", machinelearningcoban.com, 01/2018 (https://machinelearningcoban.com/2017/08/31/evaluation/) [42] "PyQt - Using Qt Designer", tutorialspoint.com (https://www.tutorialspoint.com/pyqt/pyqt_using_qt_designer.htm) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 66 PHỤ LỤC PHỤ LỤC Kiến trúc mạng U-Net để phân đoạn phổi trái phổi def unet (input_size = (256,256,1)): inputs = Input(input_size) conv1 = Conv2D (32, (3, 3), activation='relu', padding='same') (inputs) conv1 = Conv2D (32, (3, 3), activation='relu', padding='same') (conv1) pool1 = MaxPooling2D (pool_size= (2, 2)) (conv1) conv2 = Conv2D (64, (3, 3), activation='relu', padding='same') (pool1) conv2 = Conv2D (64, (3, 3), activation='relu', padding='same') (conv2) pool2 = MaxPooling2D (pool_size = (2, 2)) (conv2) conv3 = Conv2D (128, (3, 3), activation='relu', padding='same') (pool2) conv3 = Conv2D (128, (3, 3), activation='relu', padding='same') (conv3) pool3 = MaxPooling2D (pool_size = (2, 2)) (conv3) conv4 = Conv2D (256, (3, 3), activation='relu', padding='same') (pool3) conv4 = Conv2D (256, (3, 3), activation='relu', padding='same') (conv4) pool4 = MaxPooling2D (pool_size = (2, 2)) (conv4) conv5 = Conv2D (512, (3, 3), activation='relu', padding='same') (pool4) conv5 = Conv2D (512, (3, 3), activation='relu', padding='same') (conv5) up6 = concatenate ([Conv2Dtranspose (256, (2, 2), strides = (2, 2), padding = (conv5), conv4], axis=3) 'same') conv6 = Conv2D (256, (3, 3), activation='relu', padding='same') (up6) conv6 = Conv2D (256, (3, 3), activation='relu', padding='same') (conv6) up7 = concatenate ([Conv2Dtranspose (128, (2, 2), strides = (2, 2), padding='same') (conv6), conv3], axis=3) conv7 = Conv2D (128, (3, 3), activation='relu', padding='same') (up7) conv7 = Conv2D (128, (3, 3), activation='relu', padding='same') (conv7) up8 = concatenate ([Conv2Dtranspose (64, (2, 2), strides = (2, 2), padding='same') (conv7), conv2], axis=3) conv8 = Conv2D (64, (3, 3), activation='relu', padding='same') (up8) conv8 = Conv2D (64, (3, 3), activation='relu', padding='same') (conv8) up9 = concatenate ([Conv2Dtranspose (32, (2, 2), strides = (2, 2), padding='same') (conv8), conv1], axis=3) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 67 PHỤ LỤC conv9 = Conv2D (32, (3, 3), activation='relu', padding='same') (up9) conv9 = Conv2D (32, (3, 3), activation='relu', padding='same') (conv9) conv10 = Conv2D (1, (1, 1), activation='sigmoid') (conv9) return Model(inputs=[inputs], outputs=[conv10]) Mơ hình mạng CNN để nhận biết có bệnh hay khơng có bệnh viêm phổi inputs = Input (shape = (img_dims, img_dims, 3)) x = Conv2D (filters=16, kernel_size = (3,3), activation='relu', padding='same') (inputs) x = Conv2D (filters=16, kernel_size = (3,3), activation='relu', padding='same') (x) x = MaxPool2D (pool_size = (2, 2)) (x) x = SeparableConv2D (filters = 32, kernel_size = (3,3), activation='relu', padding='same') (x) x = SeparableConv2D (filters=32, kernel_size = (3,3), activation='relu', padding='same') (x) x = BatchNormalization() (x) x = MaxPool2D (pool_size = (2, 2)) (x) x = SeparableConv2D (filters=64, kernel_size = (3,3), activation='relu', padding='same') (x) x = SeparableConv2D (filters=64, kernel_size = (3,3), activation='relu', padding='same') (x) x = BatchNormalization() (x) x = MaxPool2D (pool_size = (2, 2)) (x) x = SeparableConv2D (filters=128, kernel_size = (3,3), activation='relu', padding='same') (x) x = SeparableConv2D (filters=128, kernel_size = (3,3), activation='relu', padding='same') (x) x = BatchNormalization() (x) x = MaxPool2D (pool_size = (2, 2)) (x) x = Dropou t(rate=0.2) (x) x = SeparableConv2D (filters=256, kernel_size = (3,3), activation='relu', padding='same') (x) x = SeparableConv2D (filters=256, kernel_size = (3,3), activation='relu', padding='same') (x) x = BatchNormalization() (x) x = MaxPool2D (pool_size = (2, 2)) (x) x = Dropout(rate=0.2) (x) x = Flatten() (x) x = Dense (units=512, activation='relu') (x) x = Dropout (rate=0.5) (x) x = Dense (units=128, activation='relu') (x) x = Dropout (rate=0.3) (x) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 68 PHỤ LỤC x = Dense (units=64, activation='relu') (x) x = Dropout (rate=0.3) (x) output = Dense (units=1, activation='sigmoid') (x) model = Model (inputs=inputs, outputs=output) model.compile (optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) checkpoint = ModelCheckpoint (filepath=2out_23_6_2020.h5', save_best_only=True, save_weights_only=False) lr_reduce = ReduceLROnPlateau (monitor='val_loss', factor=0.3, patience=2, verbose=2, mode='max') early_stop = EarlyStopping (monitor='val_loss', min_delta=0.1, patience=1, mode='min') hist = model.fit_generator (train_gen, steps_per_epoch = train_gen.samples// batch_size, epochs = epochs, validation_data = valid_gen, validation_steps = valid_gen.samples // batch_size, callbacks = [checkpoint, lr_reduce]) Thiết kế giao diện hệ thống nhận diện bệnh viêm phổi trẻ em a Giao diện “Dữ liệu bệnh nhân” class Patient(QMainWindow): def init (self, *args, **kwargs): super(Patient, self). init (*args, **kwargs) self.setWindowIcon(QIcon('icon/logo_nganh_256px.png')) #window icon self.setWindowTitle("Dữ liệu bệnh nhân") self.setMinimumSize(800, 600) self.conn = sqlite3.connect("database.db") self.c = self.conn.cursor() self.c.execute("CREATE TABLE IF NOT EXISTS patients(roll INTEGER ,IDP INTEGER, Name TEXT,Sexual TEXT,BOD INTEGER,Address TEXT,Phone INTEGER, ID INTEGER, BHYT INTEGER, Job TEXT, Lan_kham INTEGER, result_save TEXT, note TEXT)") self.c.close() file_menu = self.menuBar().addMenu("&File") self.tableWidget = QTableWidget() self.setCentralWidget(self.tableWidget) self.tableWidget.setAlternatingRowColors(True) self.tableWidget.setColumnCount(12) self.tableWidget.horizontalHeader().setCascadingSectionResizes(False) self.tableWidget.horizontalHeader().setSortIndicatorShown(False) self.tableWidget.horizontalHeader().setStretchLastSection(True) self.tableWidget.verticalHeader().setVisible(False) self.tableWidget.verticalHeader().setCascadingSectionResizes(False) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 69 PHỤ LỤC self.tableWidget.verticalHeader().setStretchLastSection(False) label = ["STT", "Mã số BN", "Họ tên bệnh nhân", "Giới tính", "Ngày sinh","Địa chỉ","Điện thoại", "Số CMND","Số BHYT", "Nghề nghiệp", "Lần khám", "Kết chẩn đoán"] self.tableWidget.setHorizontalHeaderLabels(label) header = self.tableWidget.horizontalHeader() header.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(4, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(5, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(6, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(7, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(8, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(9, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(10, QtWidgets.QHeaderView.ResizeToContents) header.setSectionResizeMode(11, QtWidgets.QHeaderView.Stretch) stylesheet = "::section{Background-color:rgb(204, 255, 255); border: 1px solid black}" header.setStyleSheet(stylesheet) self.tableWidget.itemDoubleClicked.connect(self.show_result) toolbar = QToolBar() toolbar.setMovable(False) self.addToolBar(toolbar) statusbar = QStatusBar() self.setStatusBar(statusbar) self.rp = QLineEdit(self) self.rp.setPlaceholderText("Tìm kiếm ID ") self.rp.move(40,1) self.rp.resize(200,17) self.rp.returnPressed.connect(self.onPressed) btn_ac_rfid = QAction(QIcon("icon/rfid-signal.png"),"Quét thông tin",self) btn_ac_rfid.triggered.connect(self.rfid) btn_ac_rfid.setStatusTip("Quét thông tin") toolbar.addAction(btn_ac_rfid) btn_ac_adduser = QAction(QIcon("icon/add1.jpg"), "Thêm bệnh nhân", self) btn_ac_adduser.triggered.connect(self.insert) btn_ac_adduser.setStatusTip("Thêm bệnh nhân") toolbar.addAction(btn_ac_adduser) btn_ac_refresh = QAction(QIcon("icon/r3.png"),"Cập nhật",self) btn_ac_refresh.triggered.connect(self.loaddata) btn_ac_refresh.setStatusTip("Bảng cập nhật") toolbar.addAction(btn_ac_refresh) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 70 PHỤ LỤC btn_ac_delete = QAction(QIcon("icon/d1.png"), "Xoá", self) btn_ac_delete.triggered.connect(self.delete) btn_ac_delete.setStatusTip("Xoá bệnh nhân") toolbar.addAction(btn_ac_delete) btn_ac_data = QAction(QIcon("icon/folder-icon.png"), "Kho hình ảnh chẩn đốn", self) btn_ac_data.triggered.connect(self.datasave) btn_ac_data.setStatusTip("Kho hình ảnh chẩn đốn") toolbar.addAction(btn_ac_data) btn_ac_print = QAction(QIcon("icon/print.png"), "In thông tin bệnh án", self) btn_ac_print.triggered.connect(self.print) btn_ac_print.setStatusTip("Thông tin bệnh án") toolbar.addAction(btn_ac_print) btn_ac_next = QAction(QIcon("icon/next-icon.png"), "Tiếp theo", self) btn_ac_next.triggered.connect(self.next) btn_ac_next.setStatusTip("Tiếp theo") toolbar.addAction(btn_ac_next) btn_ac_back = QAction(QIcon("icon/back-icon.png"), "Trở lại", self) btn_ac_back.triggered.connect(self.back) btn_ac_back.setStatusTip("Trở lại") toolbar.addAction(btn_ac_back) adduser_action = QAction(QIcon("icon/add1.jpg"),"Thêm bệnh nhân", self) adduser_action.triggered.connect(self.insert) file_menu.addAction(adduser_action) searchuser_action = QAction(QIcon("icon/s1.png"), "Tìm bệnh nhân", self) searchuser_action.triggered.connect(self.search) file_menu.addAction(searchuser_action) deluser_action = QAction(QIcon("icon/d1.png"), "Xoá", self) deluser_action.triggered.connect(self.delete) file_menu.addAction(deluser_action) self.connection = sqlite3.connect("database.db") query = "SELECT * FROM patients" result = self.connection.execute(query) self.tableWidget.setRowCount(0) for row_number, row_data in enumerate(result): self.tableWidget.insertRow(row_number) for column_number, data in enumerate(row_data): self.tableWidget.setItem(row_number, column_number,QTableWidgetItem(str(data))) self.connection.close() def loaddata(self): self.connection = sqlite3.connect("database.db") BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 71 PHỤ LỤC query = "SELECT * FROM patients" result = self.connection.execute(query) self.tableWidget.setRowCount(0) for row_number, row_data in enumerate(result): self.tableWidget.insertRow(row_number) for column_number, data in enumerate(row_data): self.tableWidget.setItem(row_number, column_number,QTableWidgetItem(str(data))) self.connection.close() def handlePaintRequest(self, printer): document = QTextDocument() cursor = QTextCursor(document) model = self.table.model() table = cursor.insertTable(model.rowCount(), model.columnCount()) for row in range(table.rows()): for column in range(table.columns()): cursor.insertText(model.item(row, column).text()) cursor.movePosition(QTextCursor.NextCell) document.print_(printer) b Giao diện chẩn đoán bệnh viêm phổi class Window2(QMainWindow): def init (self): super(). init () self.setWindowTitle("Hệ Thống Nhận Diện Và Phân Loại Bệnh Viêm Phổi Ở Trẻ Em") self.resize(1270, 750) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.setFont(font) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("logo_nganh_256px.ico"), QtGui.QIcon.Active, QtGui.QIcon.On) self.setWindowIcon(icon) self.centralwidget = QtWidgets.QWidget() self.centralwidget.setObjectName("centralwidget") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(240, 0, 771, 101)) self.label.setStyleSheet("background-color: rgb(29, 184, 255);") self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.centralwidget) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 72 PHỤ LỤC self.label_2.setGeometry(QtCore.QRect(0, 680, 1280, 51)) self.label_2.setStyleSheet("background-color: rgb(241, 237, 117);") self.label_2.setText("") self.label_2.setObjectName("label_2") self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setGeometry(QtCore.QRect(-30, -10, 1341, 721)) self.label_3.setStyleSheet("image: url(:/100/bg6.png);") self.label_3.setText("") self.label_3.setObjectName("label_3") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(1150, 690, 101, 31)) self.pushButton.setStyleSheet("QPushButton""{""font: 11pt \".VnBlack\";\n" "background-color: rgb(255, 255, 255);\n" "color: rgb(0, 0, 0);\n" "border: 3px solid gray;\n" "border-radius: 10px;""}" "QPushButton::pressed" "{" "background-color : gray;" "}") icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/23/delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton.setIcon(icon) self.pushButton.setObjectName("pushButton") self.pushButton.clicked.connect(self.delete_bn) self.label_4 = QtWidgets.QLabel(self.centralwidget) self.label_4.setGeometry(QtCore.QRect(910, -20, 111, 131)) self.label_4.setStyleSheet("image: url(:/34/logo_khoa.jpg);") self.label_4.setText("") self.label_4.setObjectName("label_4") self.label_5 = QtWidgets.QLabel(self.centralwidget) self.label_5.setGeometry(QtCore.QRect(220, 0, 121, 101)) self.label_5.setStyleSheet("image: url(:/7/logo_truong.png);") self.label_5.setText("") self.label_5.setObjectName("label_5") self.label_6 = QtWidgets.QLabel(self.centralwidget) self.label_6.setGeometry(QtCore.QRect(140, 120, 961, 71)) self.label_6.setObjectName("label_6") self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_5.setGeometry(QtCore.QRect(90, 220, 221, 51)) font = QtGui.QFont() BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 73 PHỤ LỤC font.setFamily("Times New Roman") font.setPointSize(20) font.setBold(True) font.setWeight(75) self.pushButton_5.setFont(font) self.pushButton_5.setStyleSheet("QPushButton" "{""background-color: rgb(230, 153, 230);\n" "border: 3px solid black;\n" "border-radius: 10px;""}" "QPushButton::pressed" "{" "background-color : gray;" "}") self.pushButton_5.setIconSize(QtCore.QSize(30, 30)) self.pushButton_5.setObjectName("pushButton_5") self.pushButton_5.clicked.connect(self.open_bn) self.pushButton_5.clicked.connect(self.comboChanged) self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_2.setGeometry(QtCore.QRect(535, 220, 231, 51)) font = QtGui.QFont() font.setFamily("Times New Roman") font.setPointSize(20) font.setBold(True) font.setWeight(75) self.pushButton_2.setFont(font) self.pushButton_2.setStyleSheet("QPushButton""{""background-color: rgb(0, 213, 0);\n" "border: 3px solid black;\n" "border-radius: 10px;""}" "QPushButton::pressed" "{" "background-color : gray;" "}") self.pushButton_2.setIconSize(QtCore.QSize(30, 30)) self.pushButton_2.setObjectName("pushButton_2") self.pushButton_2.clicked.connect(self.segment_bn) self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_3.setGeometry(QtCore.QRect(970, 220, 221, 51)) font = QtGui.QFont() font.setFamily("Times New Roman") font.setPointSize(20) font.setBold(True) font.setWeight(75) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 74 PHỤ LỤC self.pushButton_3.setFont(font) self.pushButton_3.setStyleSheet("QPushButton""{""background-color: rgb(255, 85, 0);\n" "border: 3px solid black;\n" "border-radius: 10px;""}" "QPushButton::pressed" "{" "background-color : gray;" "}") self.pushButton_3.setIconSize(QtCore.QSize(30, 30)) self.pushButton_3.setObjectName("pushButton_3") self.pushButton_3.clicked.connect(self.result_bn) self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_4.setGeometry(QtCore.QRect(20, 690, 101, 31)) self.pushButton_4.setStyleSheet("QPushButton""{""font: 11pt \".VnBlack\";\n" "background-color: rgb(255, 255, 255);\n" "color: rgb(0, 0, 0);\n" "border: 3px solid gray;\n" "border-radius: 10px;""}" "QPushButton::pressed" "{" "background-color : gray;" "}") icon4 = QtGui.QIcon() icon4.addPixmap(QtGui.QPixmap("back-icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_4.setIcon(icon4) self.pushButton_4.setIconSize(QtCore.QSize(25, 25)) self.pushButton_4.setObjectName("pushButton_4") self.pushButton_4.clicked.connect(self.back_bn) self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_6.setGeometry(QtCore.QRect(1045, 690, 101, 31)) self.pushButton_6.setStyleSheet("QPushButton""{""font: 11pt \".VnBlack\";\n" "background-color: rgb(255, 255, 255);\n" "color: rgb(0, 0, 0);\n" "border: 3px solid gray;\n" "border-radius: 10px;""}" "QPushButton::pressed" "{" "background-color : gray;" "}") icon2 = QtGui.QIcon() BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 75 PHỤ LỤC icon2.addPixmap(QtGui.QPixmap("31m7x1MRkWL.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_6.setIcon(icon2) self.pushButton_6.setIconSize(QtCore.QSize(23, 23)) self.pushButton_6.setObjectName("pushButton_6") self.pushButton_6.clicked.connect(self.save_bn) self.label_7 = QtWidgets.QLabel(self.centralwidget) self.label_7.setGeometry(QtCore.QRect(50, 210, 71, 71)) self.label_7.setStyleSheet("border: 3px solid black;\n" "border-radius: 35px;\n" "background-color: rgb(255, 255, 255);\n" "image: url(:/98/image open2.png);") self.label_7.setText("") self.label_7.setObjectName("label_7") self.label_8 = QtWidgets.QLabel(self.centralwidget) self.label_8.setGeometry(QtCore.QRect(495, 210, 71, 71)) self.label_8.setStyleSheet("border: 3px solid black;\n" "border-radius: 35px;\n" "background-color: rgb(255, 255, 255);\n" "image: url(:/97/lungseg - Copy.png);") self.label_8.setText("") self.label_8.setObjectName("label_8") self.label_9 = QtWidgets.QLabel(self.centralwidget) self.label_9.setGeometry(QtCore.QRect(920, 210, 71, 71)) self.label_9.setStyleSheet("border: 3px solid black;\n" "border-radius: 35px;\n" "background-color: rgb(255, 255, 255);\n" "image: url(:/93/result icon - Copy.jpg);") self.label_9.setText("") self.label_9.setObjectName("label_9") self.comboBox = QtWidgets.QComboBox(self.centralwidget) self.comboBox.setGeometry(QtCore.QRect(990, 270, 185, 30)) font = QtGui.QFont() font.setPointSize(9) self.comboBox.setFont(font) self.comboBox.setStyleSheet("border: 3px solid black;\n" "border-radius: 5px;") self.comboBox.setObjectName("comboBox") self.comboBox.addItem("") self.comboBox.addItem("") self.comboBox.currentTextChanged.connect(self.comboChanged) self.label_10 = QtWidgets.QLabel(self.centralwidget) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 76 PHỤ LỤC self.label_10.setGeometry(QtCore.QRect(900, 310, 150, 31)) self.label_10.setStyleSheet("border: 2px solid black;\n" "background-color: rgb(255, 255, 255);") self.label_10.setText("Kết chẩn đoán:") self.label_10.setObjectName("label_10") font = QtGui.QFont() font.setFamily("Times New Roman") font.setPointSize(13) font.setBold(True) font.setWeight(75) self.label_10.setFont(font) self.label_11 = QtWidgets.QLabel(self.centralwidget) self.label_11.setGeometry(QtCore.QRect(900, 450, 70, 30)) self.label_11.setStyleSheet("border: 2px solid black;\n""background-color: rgb(255, 255, 255);") self.label_11.setText("Ghi chú:") self.label_11.setObjectName("label_11") font = QtGui.QFont() font.setFamily("Times New Roman") font.setPointSize(12) font.setBold(True) font.setWeight(75) self.label_11.setFont(font) self.label_3.raise_() self.label.raise_() self.label_2.raise_() self.pushButton.raise_() self.label_4.raise_() self.label_5.raise_() self.label_6.raise_() self.pushButton_5.raise_() self.pushButton_2.raise_() self.pushButton_3.raise_() self.pushButton_4.raise_() self.pushButton_6.raise_() self.label_7.raise_() self.label_8.raise_() self.label_9.raise_() self.label_10.raise_() self.label_11.raise_() self.comboBox.raise_() self.setCentralWidget(self.centralwidget) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 77 PHỤ LỤC self.retranslateUi() def retranslateUi(self): _translate = QtCore.QCoreApplication.translate self.setWindowTitle(_translate("MainWindow", "Hệ Thống Nhận Diện Và Phân Loại Bệnh Viêm Phổi Ở Trẻ Em")) self.label.setText(_translate("MainWindow", "

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TPHCM

KHOA ĐIỆN-ĐIỆN TỬ

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP-Y SINH

")) self.pushButton.setText(_translate("MainWindow", "DELETE")) self.label_6.setText(_translate("MainWindow", "

ĐỒ ÁN TỐT NGHIỆP

ỨNG DỤNG XỬ LÝ ẢNH VÀ AI ĐỂ NHẬN DIỆN BỆNH VIÊM PHỔI Ở TRẺ EM

")) self.pushButton_5.setText(_translate("Classification", "CHỌN ẢNH")) self.pushButton_2.setText(_translate("Classification", "TÁCH PHỔI")) self.pushButton_3.setText(_translate("Classification", "CHẨN ĐOÁN")) self.pushButton_4.setText(_translate("Classification", "BACK")) self.comboBox.setItemText(0, _translate("Classification", "1 Chẩn đốn thơng thường")) self.comboBox.setItemText(1, _translate("Classification", "2 Chẩn đốn chun sâu")) self.pushButton_6.setText(_translate("MainWindow", "SAVE")) self.show() Chương trình nạp cho Arduino UNO kết nối với đầu đọc thẻ RC522 #include "SPI.h" #include "MFRC522.h" #define SS_PIN #define RFID_SCK 18 #define RFID_MOSI 23 #define RFID_MISO 19 #define RST_PIN 22 #define RST_PIN // Configurable, see typical pin layout above #define SS_PIN 10 // Configurable, see typical pin layout above #define SS_PIN 10 #define SP_PIN #define BUZZER MFRC522 rfid(SS_PIN, RST_PIN); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 78 PHỤ LỤC MFRC522::MIFARE_Key key; void setup() { Serial.begin(9600); SPI.begin(); rfid.PCD_Init(); } void loop() { if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return; MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { Serial.println(F("Your tag is not of type MIFARE Classic.")); return; } String strID = ""; for (byte i = 0; i < 4; i++) { strID += (rfid.uid.uidByte[i] < 0x10 ? "0" : "") + String(rfid.uid.uidByte[i],DEC); } tone(BUZZER, 600); delay(150); noTone(BUZZER); delay(500); strID.toUpperCase(); Serial.println(strID); rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 79 S an K L 0 ... HỆ THỐNG NHẬN DIỆN BỆNH VIÊM PHỔI Ở TRẺ EM CHƯƠNG XÂY DỰNG HỆ THỐNG NHẬN DIỆN BỆNH VIÊM PHỔI Ở TRẺ EM 3.1 GIỚI THIỆU Với đề tài ? ?Ứng dụng xử lý ảnh AI để nhận biết bệnh viêm phổi trẻ em? ??, nhóm... TẮT Với đề tài ? ?Ứng dụng xử lý ảnh AI để nhận biết bệnh viêm phổi trẻ em? ??, nhóm phát triển mạnh phần mềm huấn luyện mạng nơ-ron nhân tạo ứng dụng xử lý ảnh để nhận biết bệnh viêm phổi Nhóm thiết... BỆNH VIÊM PHỔI Ở TRẺ EM Hệ thống nhận diện bệnh viêm phổi trẻ em nhận ảnh đầu vào ảnh chụp XQuang với định dạng jpeg Đầu giá trị dự đoán nhãn ảnh với hai phương pháp bao gồm Có bệnh / Khơng bệnh

Ngày đăng: 02/02/2023, 09:35

Tài liệu cùng người dùng

Tài liệu liên quan