.Màn hình được lắp tại cổng rà sốt để nhân viên biết nhiệt độ của mình

Một phần của tài liệu Xây dựng mô hình hệ thống cổng rà soát nhân viên nhiễm covid, giúp tránh lây nhiễm chéo tại các doanh nghiệp (Trang 66)

58

Hình 5.4. Phần cứng mơ hình của hệ thống cổng rà soát

5.2. Hệ thống máy chủ sử dụng phần mềm Visual Studio

Hệ thống đọc dữ liệu nhận diện khuôn mặt bằng cách sử dụng cơ sở dữ liệu đã được cài đặt. Nghĩa là ta cần phải có cơ sở dữ liệu gồm: thông tin cơ bản của nhân viên và ảnh chụp bằng cách mỗi nhân viên sẽ xuống phòng tổ chức để máy training khuôn mặt và lưu trên bộ nhớ. Sau khi có cơ sở dữ liệu, hệ thống sẽ hoạt động bình thường.

Training nhận diện khuôn mặt cho nhân viên trên giao diện đã được thiết kế

59

- Vì chưa có cơ sở dữ liệu nên màn hình sẽ hiển thị như sau:

Hình 5.5. Hệ thống thơng báo chưa có cơ sở dữ liệu

- Bấm OK và giao diện hệ thống sẽ được hiển thị để training.

60

- Bấm chọn Bắt đầu để hệ thống nhận dạng khn mặt hoạt động.

- Nhập Tên – Phịng/ban làm việc của nhân viên và bấm Nhận diện khuôn mặt để hệ thống training và lưu lại làm cơ sở dữ liệu.

Hình 5.7. Hệ thống thơng báo có dữ liệu được thêm

- Dữ liệu sẽ lưu vào thư mục và tạo thành cơ sở dữ liệu.

61

Hệ thống máy chủ hoạt động sau khi được training:

- Những khn mặt khơng có trong cơ sở dữ liệu và nhiệt độ nhận được từ hệ thống cổng giám sát vượt mức cho phép sẽ truyền về cổng và kích hoạt loa cảnh báo.

Hình 5.9. Hệ thống nhận dạng khn mặt hiển thị thông tin nhân viên và thông báo nhiệt độ được cho phép

Hình 5.10. Hệ thống nhận dạng khn mặt hiển thị thông tin nhân viên và thông báo nhiệt độ vượt khoảng cho phép

62 - Giao diện dữ liệu thu thập được trong ngày:

63

Chương 6. ĐÁNH GIÁ KẾT QUẢ, KẾT LUẬN 6.1. Kết quả đạt được

Sau thời gian làm đề tài “Xây dựng mơ hình hệ thống cổng rà sốt nhân viên nhiễm Covid, giúp tránh lây nhiễm chéo tại các doanh nghiệp”, nhóm tác giả vận dụng những kiến thức đã được học trên trường vào đề tài một cách cụ thể như:

- Sử dụng các cảm biến, động cơ vào mơ hình để có thể đạt các kết quả nhóm mong muốn về việc đo nhiệt độ, hiển thị ra màn hình, nhận diện khn mặt…

- Sử dụng các cơng cụ lập trình như Arduino để điều khiển mơ hình.

Tuy nhiên, nhóm cũng đã gặp một số khó khăn và khắc phục những khó khăn đó như: - Việc sử dụng thêm cơng cụ lập trình như Visual Studio là một khó khăn lớn cho nhóm. Đây là một cơng cụ lập trình phổ biến nhưng việc tiếp cận với cơng cụ lập trình của ngành Kỹ thuật y sinh cịn hạn chế.

➔ Nhóm đã nhờ đến giảng viên hướng dẫn và tự học trên các diễn đàn về Visual Studio cơ bản, điều đó giúp cho việc thiết kế và lập trình cho máy chủ đươc dễ dàng hơn. Điều này cũng là một cơ hội cho nhóm được hiểu biết thêm về các cơng cụ lập trình.

Kết quả đạt được: Đề tài “Xây dựng mơ hình hệ thống cổng rà sốt nhân viên nhiễm

Covid, giúp tránh lây nhiễm chéo tại các doanh nghiệp” gồm 2 hệ thống là hệ thống giám sát được lắp đặt tại cổng chính và hệ thống máy chủ. Điểm khác biệt là giả lập nhiệt độ và cơ sở dữ liệu thông tin của nhân viên trên hệ thống máy chủ. Tuy nhiên, mơ hình vẫn đáp ứng đầy đủ các chức năng khác như nhận diện khuôn mặt, đo thân nhiệt, hiển thị ra màn hình nhiệt độ, thơng tin nhân viên (Tên – Phòng/Ban làm việc) và cảnh báo nhiệt độ nếu vượt mức cho phép.

6.2. Ưu điểm và nhược điểm của mơ hình

Sau khi hồn thành và chạy thử “Mơ hình hệ thống cổng rà soát nhân viên nhiễm Covid giúp tránh lây nhiễm chéo tại các doanh nghiệp”, nhóm tác giả đã rút ra được các ưu điểm và nhược điểm như sau:

64

Ưu điểm:

- Giảm các ca nhiễm Covid đi vào và gây lây nhiễm Covid tại công ty.

- Đảm bảo an tồn 5K trong cơng tác phịng chống dịch tại doanh nghiệp, hệ thống tự động nên ln có khoảng cách an tồn giữa người giám sát và nhân viên cơng ty.

- Hệ thống giúp giám sát nhân viên ra vào và truy vết các F1, F2 tại doanh nghiệp nhanh chóng, kịp thời, giúp cơng tác phòng chống dịch hiệu quả.

- Ứng dụng công nghệ giúp doanh nghiệp an tâm hoạt động sản xuất trong mùa dịch.

- Sản phẩm dễ sử dụng và giá thành không cao.

Nhược điểm:

- Hệ thống đo nhiệt mỗi thời điểm chỉ đo cho một nhân viên, nên cần gắn nhiều cảm biến và nhiều cổng rà sốt nếu số lượng nhân viên cơng ty đơng người. - Khoảng cách cảm biến nhiệt độ gần, phải đưa gần tới đo được nhiệt độ. - Chưa thực hiện được việc truy xuất dữ liệu di chuyển của nhân viên.

- Chỉ mới đo được thân nhiệt, chưa phát hiện được các trường hợp không triệu chứng do nhiễm Covid.

6.3. Hướng phát triển của đề tài

Với đề tài của nhóm “Xây dựng mơ hình hệ thống cổng rà sốt nhân viên nhiễm Covid, giúp tránh lây nhiễm chéo tại các doanh nghiệp” có thể được ứng dụng rộng rãi hơn nữa trong việc rà soát nhân viên tại các doanh nghiệp hay các khu cơng nghiệp bằng việc thêm các tính năng như:

- Hệ thống Test nhanh tự động người nghi nhiễm Covid.

- Thay camera nhận diện khuôn mặt thành camera đo thân nhiệt hồng ngoại để có thể theo dõi nhiều người cùng một lúc.

- Có thể kết nối với Sổ sức khỏe điện tử để giám sát và chăm sóc sức khỏe người lao động hiệu quả hơn.

65

TÀI LIỆU THAM KHẢO 1. Tài liệu dự án:

• Nhóm 6 (học kì 2B, năm học 2020 – 2021). Dự án Học phần Thiết kế dự án lớp B03.

2. Tài liệu sách:

• TS. Hồng Văn Dũng. Nhà xuất bản Khoa học và Kỹ thuật, Giáo trình nhận dạng và xử lý ảnh.

3. Tài liệu từ internet:

• Cơng nghệ nhận dạng khn mặt, 25/07/2021. https://vinlifetech.vn/tin-tuc/cong- nghe-ai-nhan-dien-khuon-mat-p55.html

• Lập trình hướng đối tượng C#, 01/08/2021.

https://www.youtube.com/watch?v=WQ9j2sPRstk&t=140s

• ESP32-CAMERA: Cài đặt mơi trường Arduino IDE và nạp chương trình, 10/08/2021. https://randomnerdtutorials.com/esp32-cam-video-streaming-web-server-camera-home- assistant/

• Hệ thống nhận dạng khuôn mặt với OpenCV Dlib và Deep Learning, 14/08/2021. https://ilook.asia/thu-thuat/he-thong-nhan-dang-khuon-mat-voi-opencv-dlib-va- deep-learning-108.html

• Hệ thống phát hiện nhiệt độ tự động, 16/08/2021.

https://create.arduino.cc/projecthub/372241/automatic-temperature-detecting- system-ad4ff1

• Nhận diện khn mặt với bộ phân loại xếp tầng, 20/08/2021. https://codelungtung.wordpress.com/2018/02/26/face-detection

• Thư viện Emgu, 20/08/2021.

66

PHỤ LỤC PHẦN MỀM

Code Arduino IDE:

#include <Servo.h> #include <Wire.h> #include <Adafruit_MLX90614.h> Adafruit_MLX90614 mlx = Adafruit_MLX90614(); #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0X27,16,2); //SCL A5 SDA A4 Servo myServo;

const int buzzer = 10, trigger = 8, echo = 9; int temp = 0;

const float calib_factor = 1.70; const float alert_temp = 37.5; void setup() { Serial.begin(9600); pinMode(trigger, OUTPUT); pinMode(echo, INPUT); myServo.attach(12); mlx.begin(); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0,0); lcd.print("BODY TEMPERATURE"); pinMode(buzzer, OUTPUT);

67 }

void loop() {

if (mes_dist() > 12.5 && mes_dist() < 14) {

lcd.setCursor(4, 1);

lcd.print(mlx.readObjectTempC() + calib_factor, 1); lcd.print(" *C");

delay(500);

temp = (mlx.readObjectTempC()+ calib_factor); if(temp >= alert_temp) /*buzzer_warn();

}*/ { buzzer_warn(); myServo.write(90); delay(100); } else { myServo.write(180); // Mở cửa delay(7000); myServo.write(90); // Đóng. cửa delay(2000); } } float mes_dist()

68 {

float distanceCM, resultCM; int measure_dist; digitalWrite(trigger, LOW); delay(1); digitalWrite(trigger, HIGH); delayMicroseconds(10); digitalWrite(trigger, LOW);

measure_dist = pulseIn(echo, HIGH); distanceCM = measure_dist * 0.034; resultCM = distanceCM / 2; return resultCM; } void buzz() { digitalWrite(buzzer, HIGH); delay(50); digitalWrite(buzzer, LOW); delay(50); } void buzzer_warn() { for (int x = 0; x < 20; x++) { digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW);

69 delay(100);

} }

Code dùng trong Visual Studio:

using Emgu.CV; using Emgu.CV.Structure; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Forms; namespace test3 {

public partial class Form1 : Form {

//Khai báo các biến được sử dụng MCvFont font = new

MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_TRIPLEX, 0.6d, 0.6d);

70 Image<Bgr, Byte> Frame; Capture camera;

Image<Gray, byte> result;

Image<Gray, byte> TrainedFace = null; Image<Gray, byte> grayFace = null;

List<Image<Gray, byte>> trainingImages = new List<Image<Gray, byte>>();

List<string> labels = new List<string>(); List<string>Users = new List<string>(); int Count, NumLabels, t;

string name, names = null;

private void lbtime_Click(object sender, EventArgs e) {

this.lbtime.Text = DateTime.Now.ToString("dd/MM/yyy HH:mm:ss"); }

private void addface_Click(object sender, EventArgs e) { try { Count = Count + 1; //Lấy khung xám từ màn hình chụp grayFace = camera.QueryGrayFrame().Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);

71 //Dị khn mặt MCvAvgComp[][] facesDetectedNow = grayFace.DetectHaarCascade( faceDetected, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20));

foreach (MCvAvgComp f in facesDetectedNow[0]) {

TrainedFace = Frame.Copy(f.rect).Convert<Gray, byte>(); break;

}

//kiểm tra hình ảnh với phương thức cubic interpolation TrainedFace = result.Resize(100, 100,

Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); trainingImages.Add(TrainedFace); labels.Add(textBox1.Text);

//Hiển thị khuôn mặt được thêm trong thang xám imageBox1.Image = TrainedFace;

//Viết số lượng mặt được đánh dấu vào khung được tạo File.WriteAllText(Application.StartupPath +

"/TrainedFaces/TrainedLabels.txt",

72

//Viết nhãn thông tin hiển thị vào khung đánh dấu

for (int i = 1; i < trainingImages.ToArray().Length + 1; i++) { trainingImages.ToArray()[i - 1].Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp"); File.AppendAllText(Application.StartupPath + "/TrainedFaces/TrainedLabels.txt", labels.ToArray()[i - 1] + "%"); }

MessageBox.Show(textBox1.Text + "´s face detected and added :)", "Training OK", MessageBoxButtons.OK, MessageBoxIcon.Information); }

catch {

MessageBox.Show("Enable the face detection first", "Training Fail", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } public Form1() { InitializeComponent();

//HaarCascade để phát hiện khuôn mặt faceDetected = new

HaarCascade("haarcascade_frontalface_default.xml"); try

73

string Labelsinf = File.ReadAllText(Application.StartupPath + "/TrainedFaces/TrainedLabels.txt");

string[] Labels = Labelsinf.Split(',');

NumLabels = Convert.ToInt16(Labels[0]); Count = NumLabels;

string FacesLoad;

for(int i=1;i<NumLabels +1;i++) {

FacesLoad = "face" + i + ".bmp"; trainingImages.Add(new Image<Gray,

byte>(Application.StartupPath + "/TrainedFaces/" + FacesLoad)); labels.Add(Labels[i]);

} }

catch(Exception) {

//MessageBox.Show("Nothing in the Database");

MessageBox.Show("Nothing in binary database, please add at least a face(Simply train the prototype with the Add Face Button).", "Triained faces load", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

} }

private void start_Click(object sender, EventArgs e) {

camera = new Capture(); camera.QueryFrame();

74

Application.Idle += new EventHandler(FramProcedure); start.Enabled = false;

}

private void FramProcedure(object sender, EventArgs e) {

label3.Text = "0"; Users.Add("");

//Nhận khung hiện tại nhận được từ thiết bị chụp Frame = camera.QueryFrame().Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //Chuyển thành Grayscale

grayFace = Frame.Convert<Gray, byte>(); //Cài đặt thơng số cho máy dị khn mặt MCvAvgComp[][] facesDetectedNow = grayFace.DetectHaarCascade(faceDetected, 1.2, 10,

Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20));

foreach (MCvAvgComp f in facesDetectedNow[0]) {

t = t + 1;

result = Frame.Copy(f.rect).Convert<Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);

// đánh dấu khuôn mặt được phát hiện bằng khung màu xanh lá Frame.Draw(f.rect, new Bgr(Color.Green), 3);

if (trainingImages.ToArray().Length != 0) {

75

MCvTermCriteria termCriteria = new MCvTermCriteria(Count, 0.001);

//Eigen nhận dạng khuôn mặt

EigenObjectRecognizer recognizer = new

EigenObjectRecognizer(trainingImages.ToArray(), labels.ToArray(), 3000, ref termCriteria);

name = recognizer.Recognize(result);

//Vẽ nhãn cho từng khuôn mặt được phát hiện và nhận dạng Frame.Draw(name, ref font, new Point(f.rect.X - 2, f.rect.Y - 2), new Bgr(Color.Red)); } Users[t - 1] = name; Users.Add(""); label3.Text = facesDetectedNow[0].Length.ToString(); /*

//Set the region of interest on the faces gray.ROI = f.rect;

MCvAvgComp[][] eyesDetected = gray.DetectHaarCascade( eye, 1.1, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20));

76 gray.ROI = Rectangle.Empty;

foreach (MCvAvgComp ey in eyesDetected[0]) {

Rectangle eyeRect = ey.rect; eyeRect.Offset(f.rect.X, f.rect.Y);

currentFrame.Draw(eyeRect, new Bgr(Color.Blue), 2); }

*/ } t = 0;

//ghép tên cho khuôn mặt đã được training

for (int nnn = 0; nnn < facesDetectedNow[0].Length; nnn++) {

names = names + Users[nnn] + ". "; }

//Hiển thị khuôn mặt được xử lý và nhận dạng cameraBox.Image = Frame; label4.Text = names; names = ""; } } }

Một phần của tài liệu Xây dựng mô hình hệ thống cổng rà soát nhân viên nhiễm covid, giúp tránh lây nhiễm chéo tại các doanh nghiệp (Trang 66)

Tải bản đầy đủ (PDF)

(85 trang)