1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thực hành xử lí ảnh

14 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Thực Hành Xử Lý Ảnh
Tác giả Phan Minh Khụi, Đỗ Minh Thiện
Người hướng dẫn Phan Vinh Hiếu
Trường học Industrial University of Hochiminh City
Thể loại practical report
Thành phố Ho Chi Minh City
Định dạng
Số trang 14
Dung lượng 2,54 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

BO 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 2

I 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 3

Detect.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 4

cv2.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 5

while 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 6

Minh 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 7

if 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 8

cv2.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 9

TRISD1_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 10

else 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 11

else 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 13

2.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 14

I6RR 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

Ngày đăng: 02/01/2025, 09:58

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w