Code Python va Code MikroC Code python: Bai 1 Mytrain mô-đun dùng đê “thực hiện phát hiện đôí tượng sư dụng mô hình YOLO # Khởi tạo một mô hình Y0L0 từ một tệp trọng sô đã được huâñ tuy
Trang 1BO CONG THUONG TRUONG DAI HOC CONG NGHIEP TP HO CHi MINH
A
INDUSTRIAL
J [= UNIVERSITY OF
THUC HANH XU Li ANH
Giảng viên hướng dẫn : Phan Vinh Hiếu
Lớp: DHDTMTI7A
DANH SÁCH THÀNH VIÊN NHÓM
1|Page
Trang 2I Code Python va Code MikroC
Code python: Bai 1
Mytrain
mô-đun dùng đê “thực hiện phát hiện đôí tượng sư dụng mô hình YOLO
# Khởi tạo một mô hình Y0L0 từ một tệp trọng sô đã được huâñ tuyện trước model = YOLO’'C:\\XLA\YOLO\\runs\\detect\\train2\\weights\\last.pt')
# Nêú đoạn mã được chạy như mệt chương trình chính “không import vào mệt
module khác)
1Í _ name == '_ main_':
# Băt đâù quá trình huâñ tuyện mô hình
model.train data='dataset.yaml', epochs=40, imgsz=640, batch=16, optimizer='Adam', workers=1)
# Danh gia hiéu suat cia mô hình sau khi huâñá tuyện
metrics = model.val’) \
Cutvideo.py
# Đinh nghĩa mệt hàm đê chụp các frame từ video và Lưu thành các file anh def FrameCapture Path):
# Khởi tạo một đôi tượng video capture từ đường daW toi video vid0b] = cv2.VideoCapture Path)
white success:
# Đọc frame từ video
Success, image = vid0b] read “)
# Chỉ Lưu ảnh môÝ 10 frame
Lưu ảnh với tén file "frame’d.jpg"
# “oi ham FrameCapture với đường dâW tới video
~9~
Trang 3Detect.py
mô-đun dùng đê thực hiện phát hiện đôi tượng sư dụng mô hình Y0L0
# Khởi tạo mô hình Y0L0 sự dụng mô hình đã được huâñ luyén duoc Lưu trữ trong tệp 'best.pt'
model = YOLO’'C:\\XLA\\YOLO\\runs\\detect\\train4\\weights\\best.pt')
# Khởi tạo một đôi tượng video capture đê đọc video từ webcam “hoặc đường dâN
vid
tới tệp video nêú sư dụng từ tệp)
# Vong lap chinh dé’xu’ly m6W frame từ video
while “True):
tai
# Đọc frame mới nhât từ video
ret, frame = vid.read’)
# Lat anh ngang “mirror) đê hiêñ thị đúng hướng trái-phải
frame = cv2.flip’ frame, 1)
# Sư dụng mô hình Y0L0 dé’phat hiện các đôi tượng trong frame hién results = model’ frame)
# Tạo ảnh với các hộp giới hạn được vẽ trên frame gôé
annotated_image = results[0].plot’)
# Duyệt qua các kêf quả phát hiện đê Lâý thông tin vê`tớp, độ tin cậy
và tọa độ của các hộp giới hạn
for r in results:
acls = r.boxes.cls
aconf = r.boxes.conf
axyxy = r.boxes.xyxy
~3~
Trang 4cv2.1mshow“"Y0L0v8 Tnference", annotated_image)
# Nêú nhâñ phím 'q', thoát khỏi vòng lap
if cv2.waitKey’1) & OxFF == ord’'q'):
break
# `iải phóng tài nguyên bộ nhớ và đóng cưả sô hiêñ thi
vid release’)
Code python: Bai 2 co Protues
import ev2 ⁄ khai báo thư viện oppenCV ( đề làm việc với video , anh )
import serial ⁄⁄ khai báo thư viện serial, dùng đề giao tiếp và kết nói vơi thiết bị thông qua COM
from ultralytics import YOLO //Import YOLO tir thu vién ultralytics, duoc str dung dé
nhận diện đối tượng trong hình ảnh
# Cấu hình kết nối Serial
ser = serial.SerialCOM2), 9600) # Thay 'COM+' băng số công COM thích hợp và
9600 là tốc độ baud
model = YOLO(r'C:\Users\jojil\OneDrive\Tai liéw\yoloKLD\runs\detect\train3\ weights\best.pt') 72o một đối tượng YOLO với model được load từ đường dẫn đã cung cap
vid = cv2 VideoCapture(0) /Dong nay mo video capture tte webcam hodc thiét bị được chỉ định (ở đây là Ú, tức là webcam mặc định)
~4~
Trang 5while True: / Vong lap lién tục đề xử lý từng khung hình
ret, rame =vid.read()_ 4 Láu một khung hình từ camera và lưu vào biển ##ame frame = cv2.flip(frame, 1) ⁄⁄Lật ánh theo chiều ngang (tạo hiệu ứng gương)
khung hinh frame
annotated_image = results[0].plot() / Tao ảnh với các khung và nhãn cho các đối tượng được nhận diện trong kết quả đầu tiên (results[0])
# Khởi tạo biến kiểm tra nhận diện các lớp
detected_ classes = {Minh Thien: False, 'Minh Khoi: Ealse, 'Helmet RED': False}
4 Khoi tao I thie vién detected classes dé theo doi việc nhận diện từng đối tượng Ban đâu, tat ca duoc dat thanh False
for r in results: // Lap qua ting két qua nhan dién
acls = r.boxes.cls // Lay danh sách các lớp được nhận diện trong kết quả hiện tại
for ain acls: ⁄⁄ lặp? qua tung lop trong danh sách
cls_value = int(a.item()) # Lay gia tri cua lop tir tensor
if cls_value == 0:
detected_classes['Minh Thien'] = True // Cap nhdt trang thai nhận điện Minh
Thien thanh True
elif cls_value == 1:
Trang 6Minh Khoi thành True
elif cls_value == 3:
detected_ classes[' Helmet RED'] = True ⁄ Cáp nhật trạng thái nhận điện HehnetRED thỒnh True
# Gửi dữ liệu qua công COM
if cls_value == 0: //Néu cls value la '0' bien gia tri cua doi tuong
ser.write(b'l') // givi ma b’]’ qua cong COM
⁄⁄được truyền đưới dạng đữ liệu bytes thông qua kết nối serial
/yêu cầu đầu vào là một đối tượng bytes
elif cls_value == 1: //Néu cls value la']'
ser.write(b'2") // gizi ma b’2’ qua cong COM
elif cls_value == 3: //Néu cls value la '3'
ser.write(b'4') // gizi md b’4’ qua cong COM
# Kiểm tra và gửi mã tương ứng nếu không có đối tượng được nhận diện for cls name, defected in detected_ classes.items():
Trang 7if not detected: // Kiém tra nếu giá tri cua detected là False, tức là đối tượng không
được nhận diện
if cls name == 'Minh Thien'; /⁄Véz¿ eš nưme là 'Mđinh Thien!
ser.write(b'5') // giti ma b’5’ qua cong COM
elif cls name == 'Minh Khoi': //Néu cls_name la ‘Minh Khoi'
ser.write(b'6') gửi mã b'6' qua công COÀ4
elif cls name == 'Helmet RED': = //Néu e% nưøe là 'lebnet RED!
ser.write(b'8') gửi mã b'9' qua công COÀ4
# Kiểm tra nếu không có bất kỳ đối tượng nhận diện nào thì gửi mã số ký tự là 0
if all(not detected for detected in detected_classes.values()): //Kiém tra néu tat cả
các gid tri trong detected classes déu la False
ser.write(b'0") /Guzi ma b'0 qua cng COM
cv2.imshow("YOLOv8 Inference", annotated_image) // Hién thi anh voi cdc khung va nhan
if cv2.waitKey(1) & OxFF == ord(qÐ:- ⁄ Thoát chương trình khi người dùng nhấn phím ạ
break
vid.release() ⁄4 Giải phóng tài nguyên video
~7~
Trang 8cv2.destroyAllWindows() / Dong tat ca các cửa số hiển thị
code MikroC:
char TransmitData, ReceiveData; // Khai bdo hai bién kiéu char dé luu trit dit liéu nhận và gui qua UART
void main() {
ADCONI |= 0x0F; / Thiét lap cdc chan 1O của vì điều khiến là chân kỹ thuật số
CMCON |=7; // V6 hiéu hoa các bộ so sánh
PORTD =0x00; LA'TD = 0x00; ⁄ Xóa gid tr trên các chân PORTT)
TRISD0_ bit = 0;
Trang 9TRISD1_bit = 0; / Thiét lap các chân PORTDO, PORTD1, PORTD2 la output TRISD2_bit = 0;
LATD0_ bit = 0;
LATDI_bit=0; ⁄ 7š các đèn LED ở các chân PORTD0, PORTDI, PORTD2 LATD2_ bit = 0;
UARTI_Init(9600); // Khởi tạo module UARTI ở tốc độ baud 9600
delay_ms(100); ⁄⁄ 2o đclay 700m3
while(1)
{
if(UART1_Data_Ready() == 1) // Kiém tra xem dit liéu da duoc nhan qua DANTI chua
ReceiveData = UARTI_ ReadQ;
PORTDO
LATDO_bit=1; //
Trang 10else if(ReceiveData = 'Ã*) ⁄ Nếu dữ liệu nhận được là '5', tắt đèn LED ở chân
PORTDO
LATD0_ bit = 0;
}
If(ReceiveData == '2') ⁄ Nếu dữ liệu nhận được là '2', bật đèn LED ở chân
PORTDI
{
LATD1_bit = 1;
}
else if (ReceiveData == '6*) ⁄ Nếu dữ liệu nhận được là '6', tắt đèn LED ở
chân PORTDI
LATDI_ bit = 0;
}
PORTD2
LATD2_ bit = 1;
~ 10~
Trang 11else if (ReceiveData ==
chán PORTD2
'§8') ⁄ Nếu dữ liệu nhận được là '%, tắt đèn LED ở
LATD2_bit= 0;
}
else if (ReceiveData == '9") // Néu di¢ liéu nhdn duoc la '9', tắt các LED
{
LATDO_bit = 0;
LATD1_ bit = 0;
LATD2_bit = 0;
}
II Kết Quả Thực Hành
1.Mô Phỏng Protues
~11~
Trang 12
Trong protues Minh Thien, Minh Khoi, Helmet REDIan lyot tong img voi 3 led Yellow, Green, Red
~12~
Trang 132.Nhận Diện Người-Vật Thể
® Nhận diện từng người — vật thể trong khung hình
Khi nhận diện được Minh Khoi: Led Green sáng
3 À+ - Proteus 8 Professional - Schematic Capture: - D x | he
> » Eee t XPLORER - * © © detectonietson (py X [>x
Schematic Capture 3,
Minh Khoi 0.28
Ad Tạ Minh Khoi 0.36
Minh Khoi 0.29
©: 480x649 4 Minh Khois, 285.3
*pr 295.ams inference image at shape (1,
ams pes
te
RESET
i oom
ii ©@ 7 Meseage(s) ANINATING 01:01 950000 (CPU losd 2%) TIMIEUNE ũ
10 y 520000 Ao wo
Nhận diện được Minh Thien: Led Yellow sáng
~ 13~
Trang 14I6RR ATOMgEs= D0 I2Ïfll+i4-4 q & (2| đệ 722” ~ : 8
RE #2 À:: %2 (Ear 3B aa A 1) YOLOW inference =a x
E2
6: 488x640 4 Minh Thiens, 283.05
Speed: 4.385 preprocess, 289.0ms inference
„ 3.ÔNS rocess per image at shape (1,
3, 480, 640)
8: 480x640 4 Minh Th
aS prep tội ) san bai Nhóm: DỰ ÁN KĨ THUẬT NHÓM O
@oAo0 wo
241.7nS 241.7ms inference
Nhan dién duoc Helmet RED: Led red sang
* <
2® xRE SN eS::? 2 5a | DP ME) YOUN Inference = g x
$F Schemati Copure X<
@ testcudapy @: 490x649 3 Minh Thiens, 4 Helmet REDS, 2
° : 240320_13_34_31_Promp4 42.ms Speed: 4.8ns preprocess, 242.3ms Ìnference
‘le „ 3.2 postpr per image at shape (1
Pa t aml 3, 480, 649)
a œ @: 490x643 3 Minh Thiens, 4 Helmet REDS, 2
® 36,645
gms inference
at shape (1, Speed: 4.1ms preprocess,
» 1.@ns postprocess per imay 648)
5, Col27 Spaces 4 UTF-8 CRƯ {3 Python 312.2 64-bit
rPPHE oO 2Messsgsis| ANHAATING 000503890500 (CPU los44)%) me