Kết quả đạt được

Một phần của tài liệu 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 THỎ NUÔI BẰNG CÔNG NGHỆ xử lý ẢNH THÂN NHIỆT (Trang 63)

6. Thời gian và địa điểm thực hiện

3.6 Kết quả đạt được

- Thiết kế hoàn thiện được hệ thống nhận diện và phân loại một số bệnh thông thường trên thỏ nuôi bằng công nghệ xử lý ảnh thân nhiệt đảm bảo các yêu cầu đề ra

- Có thêm kiến thức về các kỹ thuật, thuật toán

- Tạo ra một ứng dụng có tính thiết thực và nhu cầu sử dụng cao trong tương lai. 3.7 Kết quả chưa đạt được

- Tính thẩm mĩ chưa cao 3.8 Đánh giá

- Hệ thống hoạt động đúng yêu cầu - Hệ thống nhận dạng nhanh, chính xác 3.9 Kết luận chương 3

Kết thúc chương 3, ta đã hoàn thiện toàn bộ hệ thống từ phần cứng, phần mềm và điều khiển để thu được một hệ thống tự động nhận diện và phân loại một số loại bệnh thông thường trên loài thỏ thông qua xử lý ảnh thân nhiệt.

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI

Thiết kế hệ nhận diện và phân loại một số bệnh thông thường trên thỏ nuôi bằng công nghệ xử lý ảnh thân nhiệt là một đề tài khá thú vị và có tính thực tiễn cao. Hệ thống phát hiện bệnh cho vật nuôi tự động, không cần tiếp xúc trực tiếp sẽ là một bước tiến lớn cho ngành chăn nuôi nếu được áp dụng rộng rãi, phổ biến. Nó giúp người nuôi sớm phát hiện bệnh và có phương án chữa trị kịp thời, giảm việc lây lan bệnh cho cả đàn cũng như nhiều thiệt hại phát sinh không mong muốn. Ngoài ra nó cũng ngăn chặn được nguy cơ một số loại bệnh trên vật nuôi có thể lây lan sang người qua tiếp xúc. Với những ưu điểm và lợi ích mà hệ thống có thể mang lại cho ngành chăn nuôi, em mong rằng sẽ có nhiều hệ thống tương tự sớm được ứng dụng vào thực tế để có thể hỗ trợ cho bà con. Trong tương lai, nếu có thể em sẽ mở rộng nghiên cứu hệ thống không chỉ giới hạn trong một số loại bệnh thông thường qua thân nhiệt mà có thể phát hiện được nhiều loại bệnh khác nữa.

Trong quá trình thực hiện đồ án em đã gặp không ít khó khăn trong việc cài đặt thiết bị, lên ý tưởng thực hiện…nhưng với sự nhiệt tình giúp đỡ sinh viên của thầy Nguyễn Thái Học em đã có thể hoàn thành đồ án tốt nghiệp này. Em xin gửi lời cảm ơn chân thành nhất đến thầy và các thầy cô trong ban hội đồng đã hướng dẫn và tạo điều kiện cho em hoàn thiện đồ án này một cách tốt nhất.

TÀI LIỆU THAM KHẢO

1. Phạm Công Ngô, “Lập trình C# từ cơ bản đến nâng cao”, Nhà xuất bản giáo dục

2. Pgs. Ts Nguyễn Linh Giang, "Giáo trình xử lý ảnh", Trường Đại học Bách khoa Hà Nội 3. https://intech-group.vn/huong-dan-phan-loai-cac-he-thong-iot-bv181.htm 4. https://phuongviethcm.com/vi/9-uu-diem-noi-bat-cua-camera-than-nhiet/ 5. https://yeupet.vn/topic/benh-bai-huyet-va-xuat-huyet-truyen-nhiem-o-tho.874/ 6. https://nongnghiep.vn/6-benh-o-tho-d42975.html 7. https://thuoctrangtrai.com/benh-cau-trung-tren-tho-nd87118.html Nguồn ảnh: 1. https://ohtech.vn/all-courses/tat-tan-tat-ve-iot/lessons/giai-phap-iot-hoan-chinh/ 2. https://anhvientham.com/song-dien-tu-tim-hieu-ve-cac-loai-buc-xa-dien-tu/ 3. https://canhbaothongminhtmh.com/camera-anh-nhiet-nd8 4. https://nuoitrong123.com/dac-diem-sinh-truong-phat-trien-cua-tho.html 5. https://benh.edu.vn/benh-bai-huyet-o-tho/ 6. https://etech5s.com/camera-anh-nhiet-flir-tg267 7. https://hocarm.org/giao-tiep-esp8266-nodemcu-voi-arduino-uno-mega/ 8. https://thigiacmaytinh.com/khong-gian-mau-color-space/

PHỤ LỤC #Code giao dien xu ly anh

using OpenCvSharp.Extensions; namespace QuangHuanFinal

{

public partial class Home : MetroFramework.Forms.MetroForm {

Mat m_mBgrImage,m_mBwMask;

List<Tuple<Scalar, Scalar, double>> m_lHSV; ImageProcessing m_ipMain;

string m_sSettingFile = "settingFile.txt"; double m_dTemperature;

public Home() {

InitializeComponent(); this.ControlBox = false; m_mBgrImage = new Mat(); m_mBwMask = new Mat(); m_dTemperature = 0;

m_lHSV = new List<Tuple<Scalar, Scalar, double>>();

btnCheckTemperature.Enabled = false; m_ipMain = new ImageProcessing();

readSettingValueFromTextFile(m_sSettingFile); }

private void btnCheckTemperature_Click(object sender, EventArgs e)

{

try {

for(int i=0; i< m_lHSV.Count(); i++) {

// Processing here

if (m_ipMain.CheckImage(m_mBgrImage, m_lHSV[i].Item1, m_lHSV[i].Item2, ref m_mBwMask))

{

m_dTemperature = m_lHSV[i].Item3; tbxInfor.AppendText(DateTime.Now.ToString() + " Nhiet Do: " + m_dTemperature.ToString() + Environment.NewLine); ptbMask.Image = BitmapConverter.ToBitmap(m_mBwMask); updateTemperature((float)m_dTemperature); break; } } }

catch (Exception ex) {

Console.WriteLine("Error

inside btnCheckTemperature_Click(...) " + ex.Message); }

}

private void btnGetImage_Click(object sender, EventArgs e)

{

try {

OpenFileDialog fl = new OpenFileDialog(); fl.Filter = "Image(bmp,png,jpg)| *.bmp;*.jpg;*png"; if(fl.ShowDialog() == DialogResult.OK) { m_mBgrImage = new Mat(fl.FileName,ImreadModes.Color); ptbMainImage.Image = BitmapConverter.ToBitmap(m_mBgrImage); updateMainImage(m_mBgrImage); btnCheckTemperature.Enabled = true; } } catch(Exception ex) {

Console.WriteLine("Error inside btnGetImage_Click(...) " + ex.Message);

} }

private void readSettingValueFromTextFile(string filePath) { try { if (File.Exists(filePath)) { List<string> HSVValues =

File.ReadAllLines(filePath).ToList(); // just take Scalar LowHSV, UpHSV;

double temperature;

LowHSV = UpHSV = new Scalar(); foreach (var Content in HSVValues) {

List<string> HSVValue =

Content.Substring(Content.IndexOf('=')).Split(',').ToList(); double.TryParse(HSVValue[0], out LowHSV.Val0); // Hue value Low

double.TryParse(HSVValue[1], out LowHSV.Val1); // S value Low

double.TryParse(HSVValue[2], out LowHSV.Val2); // V value Low

double.TryParse(HSVValue[3], out UpHSV.Val0); // Hue value up

double.TryParse(HSVValue[4], out UpHSV.Val1); // S value up double.TryParse(HSVValue[5], out UpHSV.Val2); // V value up double.TryParse(HSVValue[6], out temperature);

m_lHSV.Add(new Tuple<Scalar, Scalar, double>(LowHSV, UpHSV, temperature));

}

sortHsvValueBasedOnTemperature(ref m_lHSV);

} }

catch (Exception ex) { Console.WriteLine("Error from readSettingValueFromTextFile(...) function.\nDetail: " + ex.Message); } }

private void sortHsvValueBasedOnTemperature(ref List<Tuple<Scalar, Scalar, double>> lHSV)

{

Tuple<Scalar, Scalar, double> temp = lHSV[0]; for (int i = 0; i < lHSV.Count() - 1; i++) {

for (int j = i + 1; j < lHSV.Count(); j++) { if (lHSV[j].Item3 < lHSV[i].Item3) { temp = lHSV[i]; lHSV[i] = lHSV[j]; lHSV[j] = temp; } } } }

public delegate void UpdateMainImageCallback(Mat image);

public UpdateMainImageCallback updateMainImage;

public delegate void UpdateTemperatureCallBack(float temperature);

public UpdateTemperatureCallBack updateTemperature; public delegate void UpdateHSVCallBack(float

temperature);

} }

2. Code Arduino

// Fill-in information from your Blynk Template here #define BLYNK_TEMPLATE_ID "TMPL5y2i_k1H"

#define BLYNK_DEVICE_NAME "Rabbit"

#define BLYNK_FIRMWARE_VERSION "0.1.0" #define BLYNK_PRINT Serial

//#define BLYNK_DEBUG

#define USE_NODE_MCU_BOARD #define APP_DEBUG

#include "BlynkEdgent.h" #include<String.h>

#include <LiquidCrystal_I2C.h> // LCD library

LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display

void printLCD(char* line1, char* line2);

String m_sTemperatureInfo, m_fStatusInfo, m_sCommand; float m_fTemperature;

int m_nMode, count; void setup() {

Serial.begin(115200); delay(100);

// put your setup code here, to run once: // KHOI TAO GIA TRI BAN DAU CHO CAC BIEN m_fTemperature = 0;

m_nMode =0; }

void loop() {

// put your main code here, to run repeatedly: BlynkEdgent.run(); if(Serial.available()) { m_sCommand = Serial.readString(); m_nMode = getValue(m_sCommand,'-',0).toFloat(); } if(m_nMode==1) {

printLCD("DO AN TOT NGHIEP","CONNECT SUCCESS"); m_nMode=0; } else if(m_nMode == 2) { m_fTemperature = getValue(m_sCommand,'-',1).toFloat(); // update data

m_sTemperatureInfo = "Nhiet Do: "+String(float(m_fTemperature))+ "C";

m_fStatusInfo = "DO NHIET DO THO"; // send to blynk

printLCD(m_fStatusInfo.c_str(),m_sTemperatureInfo.c_str()); Blynk.virtualWrite(V0,m_fTemperature); // gui nhiet do len Blynk

// Blynk.virtualWrite(V1,totalLitres); // gui the tich m_nMode=0;

} }

void printLCD(const char line1[], const char line2[]) { lcd.init(); lcd.backlight(); lcd.setCursor(0,0); lcd.print(line1); lcd.setCursor(0,1); lcd.print(line2); }

String getValue(String data, char separator, int index) {

int found = 0;

int maxIndex = data.length()-1

for( count=0; count<=maxIndex && found<=index; count++){ if(data.charAt(count)==separator || count==maxIndex){ found++;

strIndex[0] = strIndex[1]+1;

strIndex[1] = (count == maxIndex) ? count+1 : count; }

}

return found>index ? data.substring(strIndex[0], strIndex[1]) : "";

Một phần của tài liệu 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 THỎ NUÔI BẰNG CÔNG NGHỆ xử lý ẢNH THÂN NHIỆT (Trang 63)