ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU PHÁT TRIỂN HỆ THỐNG TỰ ĐỘNG NHẬN DIỆN VÀ PHÂN LOẠI MỘT SỐ BỆNH THÔNG THƯỜNG TRÊN LỢN NUÔI BẰNG CÔNG NGHỆ XỬ LÝ ẢNH THÂN NHIỆT

106 16 0
ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU PHÁT TRIỂN HỆ THỐNG TỰ ĐỘNG NHẬN DIỆN VÀ PHÂN LOẠI  MỘT SỐ BỆNH THÔNG THƯỜNG TRÊN LỢN NUÔI BẰNG CÔNG NGHỆ XỬ LÝ ẢNH THÂN NHIỆT

Đ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

HỌC VIỆN NÔNG NGHIỆP VIỆT NAM KHOA CƠ - ĐIỆN □□ ĐỒ ÁN TỐT NGHIỆP ĐỀ TÀI: “NGHIÊN CỨU PHÁT TRIỂN HỆ THỐNG TỰ ĐỘNG NHẬN DIỆN VÀ PHÂN LOẠI MỘT SỐ BỆNH THÔNG THƯỜNG TRÊN LỢN NUÔI BẰNG CÔNG NGHỆ XỬ LÝ ẢNH THÂN NHIỆT” Giáo viên hướng dẫn : TS NGUYỄN THÁI HỌC Sinh viên thực : VŨ THỊ HỒNG Msv : 603004 Lớp : K60-TĐHB Chuyên ngành : TỰ ĐỘNG HĨA Hà Nội – 2021 LỜI CAM ĐOAN Tơi xin cam đoan cơng trình nghiên cứu độc lập cá nhân Tôi với hướng dẫn TS Nguyễn Thái Học …, kết nghiên cứu trình bày đồ án trung thực, khách quan Tôi xin cam đoan giúp đỡ cho việc thực đồ án cảm ơn, tất nguồn tài liệu công bố đầy đủ Hà Nội, ngày tháng năm 2021 Tác giả đồ án Vũ Thị Hồng LỜI CẢM ƠN Sau năm năm học tập rèn luyện trường, khóa luận tốt nghiệp Đại học tập cuối em trước hồn thành chương trình học tập Khóa luận phần thể kiến thức em học tập, đúc kết suốt năm năm rèn luyện giảng đường Đại học Chính vậy, em cố gắng hồn thiện khóa luận cách tốt Để hồn thiện khóa luận này, em nhận giúp đỡ tận tình, tạo điều kiện thầy cô giáo Khoa Cơ Điện,Học viện nông nghiệp Việt Nam, đặc biệt TS Nguyễn Thái Học người trực tiếp hướng dẫn em thực khóa luận Em xin gửi lời cảm ơn tới quý Thầy, Cô khoa Cơ Điện ,Học Viện Nông Nghiệp Việt Nam tận tình truyền đạt kiến thức suốt năm năm học qua, trang bị cho em kiến thức học tập, sống làm hành trang vững tương lai Em xin tỏ lịng kính trọng biết ơn sâu sắc đến TS Nguyễn Thái Học người trực tiếp hướng dẫn em thực khóa luận này, tận tình hướng dẫn, giúp đỡ, tạo điều kiện động viên em nhiều suốt thời gian thực làm khóa luận tốt nghiệp Em xin gửi lời cảm ơn chân thành đến gia đình, bạn bè ln bên cạnh, khích lệ, động viên em suốt thời gian qua để hồn thành khóa luận tốt nghiệp cách tốt Cuối em xin kính chúc q Thầy, Cơ giáo khoa Cơ Điện, thầy cô Học viện Nông nghiệp Việt Nam toàn thể bạn bè, người thân sức khỏe, hạnh phúc thành đạt Em xin chân thành cảm ơn! Hà nội, ngày….tháng….năm 2021 Sinh viên Vũ Thị Hồng MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii MỤC LỤC iii DANH MỤC BẢNG vi DANH MỤC HÌNH vii LỜI MỞ ĐẦU 1 Đặt vấn đề Mục đích nghiên cứu đề tài .2 Đối tượng nghiên cứu .2 Nội dung phương pháp nghiên cứu .2 4.1 Nội dung 4.2 Phương pháp nghiên cứu .3 Giới hạn đề tài Thời gian địa điểm thực .3 CHƯƠNG I TỔNG QUAN TÀI LIỆU .4 1.1 Tổng quan camera ảnh nhiệt .4 1.2.Một số ứng dụng camera ảnh nhiệt 1.2.1 Cơ chế sinh nhiệt thể vật nuôi 15 1.3 Quy trình thay đổi nhiệt độ thể lợn mắc bệnh 23 Bảng 1.2: bảng chế biển đổi thân nhiệt thể lợn 23 1.3.2 Ý nghĩa việc đo thân nhiệt 23 1.3.3 Phương pháp đo thân nhiệt .24 1.3.4 Khái quát xử lý ảnh 27 1.3.5 Một số vấn đề xử lý ảnh 30 1.3.6 Các loại tệp xử lý ảnh 32 CHƯƠNG II : NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU 38 2.1 Sơ đồ công nghệ 38 2.2 Lựa chọn cấu trúc phần cứng phần mềm điều khiển hệ thống tự động nhận diện phân loại số bệnh thông dụng lợn nuôi công nghệ xử lý ảnh thân nhiệt .39 2.2.1 Giới thiệu camera Flir TG267 40 2.2.2 Giới thiệu Arduino uno R3[12] 41 2.2.3 Giới thiệu module sim 900A[13] 42 2.2.4 Sơ đồ nguyên lí mạch cảnh báo 45 2.3 Tìm hiểu ngơn ngữ lập trình Python phần mềm OpenCV 45 2.3.1 Ngơn ngữ lập trình Python 45 2.3.2 Thư viện Open CV .46 2.4 Cơ sở lưu đồ thuật toán 47 2.4.1 Cơ sở thuật toán 47 2.4.2.Lưu đồ thuật toán 55 CHƯƠNG III: KẾT QUẢ VÀ THẢO LUẬN 60 3.1 Các bước xây dựng mơ hình hệ thống tự động nhận diện phân loại số bệnh thông dụng lợn nuôi công nghệ xử lý ảnh thân nhiệt 60 3.2 Khảo nghiệm mơ hình 61 3.2.1 Ảnh nhiệt có chứa vùng bất thường khơng chứa vùng bất thường .61 3.3 Thành lập bảng kết chạy thử chương trình 64 3.3.1 Bảng kết dùng chương trình để phân tích ảnh .64 3.3.2 So sánh giá trị kinh tế .67 3.4 Đánh giá thảo luận 69 3.4.1 Đánh giá 69 3.4.2 Thảo luận 70 3.5 Những mặt hạn chế hướng phát triển .70 3.5.1 Những mặt hạn chế .70 - Do hạn chế kinh tế nên hệ thống chưa kết nối trực tiếp với camera flir TG267 mà phải phân tích ảnh off-line 71 3.5.2 Hướng phát triển đề tài 71 KẾT LUẬN VÀ KIẾN NGHỊ 72 Kết luận 72 2.Kiến nghị 72 TÀI LIỆU THAM KHẢO 73 DANH MỤC BẢNG Bảng 1.1: Nhiệt độ trung bình heo ghi có khơng run rẩy 19 Bảng 3.1: Bảng kết phân tích với đầu vào ảnh lợn bị dịch tả lợn cổ điển thời điểm ngày 67 Bảng 3.2: Bảng kết phân tích với đầu vào ảnh lợn bị stress thời điểm ngày 67 Bảng 3.3: Bảng kết phân tích với đầu vào ảnh lợn bị cảm sốt lợn sinh thời điểm ngày .68 Bảng 3.4: Bảng so sánh giá trị kinh tế 69 DANH MỤC HÌNH Hình 1.1.1 Ứng dụng camera nhiệt theo dõi an ninh .7 Hình 1.1.2 Ứng dụng camera nhiệt theo dõi để kiểm soát hỏa hoạn Hình 1.1.3 Đo thân nhiệt người sân bay camera hồng ngoại .8 Hình 1.1.4 Ứng dụng camera nhiệt sửa chữa máy móc Hình 1.1.5 Camera nhiệt dùng để kiểm tra, sửa chữa linh kiện điện tử 10 Hình 1.1.6: Ứng dụng thực thi pháp luật 10 Hình 1.1.7: Ứng dụng an ninh hàng hải 11 Hình 1.1 8: Ảnh nhiệt chụp lại vị trí chấn thương chân 12 Hình 1.1.9: Phát nước thấm camera nhiệt 12 Hình 1.1.10 Camera nhiệt kiểm tra thiết bị điện có dấu hiệu bất thường nhiệt 13 Hình 1.1.11 Kiểm tra nhiệt độ thiết bị điện trình hoạt động 14 Hình 1.2.1: Hình ảnh nhiệt đầu lợn tăng bị stress[19] 16 Hình 1.2.2: Ảnh nhiệt lợn[15] trước sau giết thịt 17 Hình 1.2.3: Ảnh lợn bị cảm sốt 18 Hình 1.2.4 : = sở tai trái (BEAR_L); = sở bên phải tai (BEAR_R) ;3 = chóp tai trái (TEAR_L); = chóp tai phải (TEAR_R); = mắt trái mắt phải (EYE_O);6=nhiệt độ trung bình từ đầu đến mơng (AVCRL)[18] .18 Hình 1.2.5: Biểu đồ biểu thị thay đổi nhiệt độ vị trí T1,T2,T3,T4 [9] .21 Hình 1.2.6: Hình ảnh nhiệt thể lợn mắc bệnh dịch tả lợn cổ điển 22 Hình 1.3.1 Quá trình xử lý ảnh 27 Hình 1.3.2: Các bước hệ thống xử lý ảnh 27 Hình 1.3.3 Cấu trúc tệp ảnh dạng PCX 33 Hình 2.1: Sơ đồ khối công nghệ hệ thống phân loại bệnh lợn nuôi công nghệ xử lý ảnh thân nhiệt 37 Hình 2.2 Camera ảnh nhiệt cầm tay FLIR TG267 39 Hình 2.3 Arduino uno .40 Hình 2.4 Sơ đồ chân Arduino uno 41 Hình 2.5 Module sim 900A 43 Hình 2.6 Sơ đồ chân module sim 900A 44 Hình 2.7 Sơ đồ nguyên lí mạch cảnh báo 45 Hình 2.8 Trackbars sau tạo 48 Hình 2.9 Kết sau điều chỉnh giá trị 49 Hình 2.10 Ảnh khơng gian màu HSV 49 Hình 2.11: Ảnh sau lọc màu 50 Hình 2.12: Ảnh sau xám hóa nhị phân 51 Hình 2.13: Chuyển đổi hệ thống màu RGB sang Grayscale[20] .52 Hình 2.14: Ví dụ minh họa với ngưỡng 55 Hình 2.15: Lưu đồ thuật tốn xác định nhiệt độ lớn 59 Hình 2.16: Lưu đồ thuật tốn gửi tin nhắn cảnh báo 60 Hình 3.1: a: Ảnh nhiệt thể lợn có chứa vùng bất thường 63 b: Ảnh nhiệt thể lợn khơng chứa vùng bất thường[17] .63 Hình 3.2: Ảnh sau lọc màu 63 Hình 3.3: Ảnh sau xám hóa .64 Hình 3.4 Ảnh sau nhị phân hóa 64 Hình 3.5: Kết cuối phần mềm đưa 65 Hình 3.6: Tin nhắn cảnh báo gửi qua tin nhắn sms 65 biggest_contour = contours[0] max_area = for contour in contours: area = cv2.contourArea(contour) if max_area < area: max_area = area biggest_contour = contour M = cv2.moments(biggest_contour) cx = int(M['m10']/M['m00']) cy = int(M['m01']/M['m00']) # font font = cv2.FONT_HERSHEY_SIMPLEX # org org = (250, 250) # fontScale fontScale = # Blue color in BGR color = (0, 0, 0) # Line thickness of px thickness = # text = '[' + str(cx) + ',' + str(cy) + ']' # cv2.putText(img, text, org, font, # fontScale, color, thickness, cv2.LINE_AA) # print(cx, cy) # cv2.imshow("origin after", img) # cv2.imwrite("output/origin after [" + str(cx) + "," + str(cy) + "].png", img) # cv2.imwrite("output/origin after ALL" + str(index) + ".png", img) flag = True for i in range(10, 0, -1): print(i) lower = list_lower[i] upper = list_upper[i] white_mask = cv2.inRange(hsv, lower, upper) result = cv2.bitwise_and(frame, frame, mask = white_mask) #cv2.imshow('inrange', result) gray = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY) #cv2.imshow('gray', gray) ret, thresh = cv2.threshold(gray ,1 ,255, cv2.THRESH_BINARY) #cv2.imshow('thresh', thresh) contours, hier = cv2.findContours(thresh.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img, contours, -1, (0,0,0), 12) print(len(contours)) if (len(contours) > 0): # get biggest contour biggest_contour = contours[0] max_area = for contour in contours: area = cv2.contourArea(contour) if max_area < area: max_area = area biggest_contour = contour M = cv2.moments(biggest_contour) # cx = int(M['m10']/M['m00']) # cy = int(M['m01']/M['m00']) # font font = cv2.FONT_HERSHEY_SIMPLEX # org org = (90, 90) # fontScale fontScale = # Blue color in BGR color = (255, 255, 255) # Line thickness of px thickness = # text = '[' + str(cx) + ',' + str(cy) + ']' text = '{}'.format(i*0.1 + 36.5) cv2.putText(img, text, org, font, fontScale, color, thickness, cv2.LINE_AA) # print(cx, cy) cv2.imshow("origin after", img) # cv2.imwrite("output/origin after [" + str(cx) + "," + str(cy) + "].png", img) cv2.imwrite("output/origin after" + ' ' + str(index)+ "[" + str(i*0.1 + 36.5) + "].png",img) a = urlparse(filename) print(os.path.basename(a.path)) # Send To Arduino textToSend = str(index) + "[" + str(i*0.1 + 36.5) + "].png" + '*' print(textToSend) if variable.get() != '': ser.write(textToSend.encode()) # output = ser.read(10) if file_extension != '.mp4': # mess = "{} [{},{}] có dấu hiệu bất thường nhiệt cần kiểm tra sức khoẻ".format(os.path.basename(a.path), str(cx), str(cy)) #mess = "Nhiệt độ: {} => có dấu hiệu bất thường nhiệt cần kiểm tra sức khoẻ".format(i*0.1 + 36.5) tkinter.messagebox.showwarning(title="Bất thường", message=mess) # Found Highest temperature flag = False break if flag: print("Not Found") # output = ser.read(10) a = urlparse(filename) print(os.path.basename(a.path)) textToSend = '' #textToSend = str(index) + '.png' print(textToSend) if variable.get() != '': ser.write(textToSend.encode()) if file_extension != '.mp4': #mess = a.path + " khơng có dấu hiệu bất thường nhiệt ý theo dõi thường xuyên" tkinter.messagebox.showinfo(title="Bình thường", message=mess) def getFile(): global filename filename = filedialog.askopenfilename(initialdir = "C:/Users/Admin/Desktop/python",title = "Select file",filetypes = (("jpeg files","*.jpg"),("mp4 files","*.mp4"),("all files","*.*"))) e.delete(0,"end") e.insert(0, filename) def process_video(filename, ser): print(filename) cap = cv2.VideoCapture(filename) current_time = time.time() i=0 while cap.isOpened(): ret, frame = cap.read() if (ret): cv2.imshow('frame',frame) # print(time.time() - current_time) if time.time() - current_time >= 5: cv2.imwrite('temp/' + str(i) + '.png', frame) if variable.get() != '': process_image(frame, ser, i) else: process_image(frame, None, i) current_time = time.time() i=i+1 if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() def process(): global filename if (filename == ''): tkinter.messagebox.showerror(title="Lỗi file ảnh", message="Chưa chọn file ảnh") elif (variable.get() == ''): tkinter.messagebox.showerror(title="Lỗi COM", message="Chưa chọn COM") a, file_extension = os.path.splitext(filename) index = if variable.get() != '': for com in foundCOM: if (str(com) == variable.get()): break index = index + # Mở cổng COM ser = Serial(foundCOM[index].device, baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE) time.sleep(2) if file_extension == '.jpg' or file_extension == '.jpeg' or file_extension == '.png': # Kiểm tra ảnh img = cv2.imread(filename) a = urlparse(filename) print(os.path.basename(a.path)) print(variable.get()) if variable.get() != '': process_image(img, ser, 0) else: process_image(img, None, 0) elif file_extension == '.mp4': video dịnh dạng mp4 # Kiểm tra x = threading.Thread(target=process_video, args=(filename, ser)) x.start() # Đợi để kích hoạt cổng COM time.sleep(2) window.title("Welcome Thermal Detection") url = Label(window,text="Đường dẫn") url.grid(row=0, column=0 ,padx=10,pady=10) e = Entry(window, width=50) e.grid(row=0, column=1) e.focus_set() gridFrame = tk.Frame(window) b = Button(gridFrame, text="Chọn Ảnh/Video", width=20, command=getFile).pack(side=tk.LEFT) runbtn = Button(gridFrame, text="Chạy", width=10, command=process).pack(side=tk.LEFT) gridFrame.grid(row = 3, column = 1, padx=20) window.mainloop() 2.Chương trình tạo trackbars import cv2 import sys import numpy as np img_path = sys.argv[1] def nothing(x): pass cv2.namedWindow("Trackbars") cv2.createTrackbar("L - H", "Trackbars", 0, 179, nothing) cv2.createTrackbar("L - S", "Trackbars", 0, 255, nothing) cv2.createTrackbar("L - V", "Trackbars", 0, 255, nothing) cv2.createTrackbar("U - H", "Trackbars", 179, 179, nothing) cv2.createTrackbar("U - S", "Trackbars", 255, 255, nothing) cv2.createTrackbar("U - V", "Trackbars", 255, 255, nothing) def process(frame): #frame = cv2.resize(frame, (320, 160)) #frame = frame[90:160, 0:320] ##### Tracking bar ####### l_h = cv2.getTrackbarPos("L - H", "Trackbars") l_s = cv2.getTrackbarPos("L - S", "Trackbars") l_v = cv2.getTrackbarPos("L - V", "Trackbars") u_h = cv2.getTrackbarPos("U - H", "Trackbars") u_s = cv2.getTrackbarPos("U - S", "Trackbars") u_v = cv2.getTrackbarPos("U - V", "Trackbars") hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # define range of white color in HSV lower = np.array([l_h, l_s, l_v]) upper = np.array([u_h, u_s, u_v]) mask = cv2.inRange(hsv, lower, upper) white_mask = cv2.inRange(hsv, lower, upper) result = cv2.bitwise_and(frame, frame, mask = white_mask) cv2.imshow('bbb', result) while True: img = cv2.imread(img_path) process(img) # cv2.imshow('aaa', qimg) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows() 3.Chương trình Arduino #include #include SoftwareSerial mySerial(2, 3); unsigned long bauds = 9600; char code[] = "0000"; String phone = "\"0973140102\""; char msg[] = "Hello World!"; String inputString = ""; bool stringComplete = false; void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(bauds); while (!Serial) {;} mySerial.begin(9600); delay(5000); } void(* resetFunc) (void) = 0; void loop() { if (mySerial.available()){ char c = mySerial.read(); Serial.print(c); } if (Serial.available()){ char c = Serial.read(); Serial.print(c); if ((c != '*')){ inputString += c; } if (c == '*'){ // Co dau hieu bat thuong digitalWrite(LED_BUILTIN, HIGH); delay(300); digitalWrite(LED_BUILTIN, LOW); delay(300); sendSMS(inputString); } else { digitalWrite(LED_BUILTIN, HIGH); delay(300); digitalWrite(LED_BUILTIN, LOW); delay(300); } } } void toggle(){ digitalWrite(LED_BUILTIN, HIGH); delay(300); digitalWrite(LED_BUILTIN, LOW); delay(300); } void sendSMS(String inputString){ mySerial.println("AT+CMGF=1"); toggle(); delay(1000); mySerial.println("AT+CMGS=" + phone); toggle(); delay(1000); mySerial.println(inputString + "co dau hieu bat thuong ve nhiet"); toggle(); delay(1000); mySerial.println((char)26); toggle(); delay(2000); // } resetFunc(); ... chọn ý tưởng nghiên cứu là: “NGHIÊN CỨU PHÁT TRIỂN HỆ THỐNG TỰ ĐỘNG NHẬN DIỆN VÀ PHÂN LOẠI MỘT SỐ BỆNH THÔNG THƯỜNG TRÊN LỢN NUÔI BẰNG CÔNG NGHỆ XỬ LÝ ẢNH THÂN NHIỆT” Mục đích nghiên cứu đề tài... 2.1: Sơ đồ cơng nghệ hệ thống tự động nhận diện phân loại số bệnh thông thường lợn nuôi công nghệ xử lý ảnh thân nhiệt Vật nuôi: đối tượng theo dõi tự động camera thân nhiệt nghiên cứu lợn Do... toán sử dụng camera ảnh nhiệt cơng nghệ xử lý ảnh để chuẩn đốn, phát sớm số bệnh vật nuôi tiến hành nghiên cứu đề tài ? ?Nghiên cứu hệ thống tự động nhận diện phân loại số bệnh thông thường lợn nuôi

Ngày đăng: 17/03/2022, 16:50

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

  • Đang cập nhật ...

Tài liệu liên quan