Professional Documents
Culture Documents
Do An 1
Do An 1
ĐỒ ÁN THIẾT KẾ 1
Đề tài
Hà Nội, 2-2022
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
ĐỒ ÁN THIẾT KẾ 1
Đề tài
Hà Nội, 2-2022
LỜI NÓI ĐẦU
Trong những năm gần đây, trên thế giới nghiên cứu ứng dụng công nghệ xử lý và nhận
dạng ảnh đang là hướng nghiên cứu tập trung của rất nhiều nhà khoa học trong các lĩnh
vực. Từ những năm 1970 khi mà năng lực tính toán của máy tính ngày càng trở nên
mạnh mẽ hơn, các máy tính lúc này có thể xử lý được những tập dữ liệu lớn như các
hình ảnh, các đoạn video thì một khái niệm nữa về xử lý ảnh nữa ra đời đó là: Thị giác
máy- Computer vision. Có thể nói xử lý ảnh số và thị giác máy đãđ ược phát triển và trở
thành một lĩnh vực khoa học. Xử lý ảnh số không chỉ nâng cao chất lượng của ảnh mà
còn phân tích và lý giải tìm ra giải thuật để ứng dụng vào thực tiễn. Thị giác máy bao
gồm lý thuyết và các kỹ thuật liên quan nhằm mục đích tạo ra một hệ thống nhân tạo có
thể tiếp nhận thông tin từ các hình ảnh thu được hoặc các tạp dữ liệu đa chiều. Việc kết
hợp giữa thị giác máy với các kỹ thuật khác như công nghệ thông tin, truyền thông, điện
tử, điều khiển tự động, cơ khí…cho chúng ta rất nhiều ứng dụng trong đời sống hàng
ngày cũng như trong khoa học, an ninh, y học, quân sự… Ngày nay, ứng dụng của thị
giác máy đã trở nên rất rộng lớn và đa dạng, len lỏi vào mọi lĩnh vực từ quân sự, khoa
học, vũ trụ, cho đếny học, sản xuất, và tự động hóa tòa nhà . Trong thời gian qua dưới
sự hướng dẫn tận tình của cô Nguyễn Thúy Anh và thầy Nguyễn Hữu Trung, chúng em
đã dành thời gian nghiên cứu về xử lý ảnh và nhận dạng ảnh hay nói đúng hơn là thuật
toán xử lý ảnh bám đối tượng – Tracking.
Những nội dung mà nhóm chúng em nghiên cứu được ở đây bao gồm:
• Xây dựng được một hệ thống camera bám theo mục tiêu di dộng ứng dụng thuật
toán bám ảnh Camshitf.
Để hoàn thành đồ án này đúng tiến độ em xin gửi lời cảm ơn chân thành tới cô Nguyễn
Thúy Anh và thầy Nguyễn Hữu Trung là người trực tiếp hướng dẫn chúng em làm đồ
án này.
BẢNG PHÂN CÔNG NHIỆM VỤ
Họ tên Nhiệm vụ
Đồng Văn Duy • Tìm hiểu OpenCV và thuật toán bám đối
tượng bằng Servos trong OpenCv
• Chuẩn bị báo cáo word
3.1 PHƯƠNG TRÌNH TRẠNG THÁI CỦA HỆ THỐNG NHẬN DẠNG VÀ ĐIỀU
KHIỂN CAMERA BÁM ĐUỐI TƯỢNG ............................................................................ 7
3.1.1 Giới thiệu ................................................................................................................. 7
3.1.2 Mô hình toán học của hệ pan-tilt camera ................................................................. 8
3.2 XẤY DỰNG THUẬT TOÁN NHẬN DẠNG, BÁM ĐỐI TƯỢNG VÀ THUẬT TOÁN
ĐIỀU KHIỂN HỆ THỐNG.................................................................................................. 8
3.2.1 Giải thuật tách nền ................................................................................................... 8
3.2.2 Phương pháp lọc nhiễu............................................................................................. 8
3.2.3 Phương pháp tracking đối tượng, dự báo hướng di chuyển và vận tốc đối tượng sử
dụng thuật toán Camshift kết hợp bộ lọc Kalman ............................................................ 9
i
3.3.1 Mô hình ................................................................................................................. 10
3.3.2 Chương trình điều khiển ........................................................................................ 10
ii
DANH MỤC HÌNH VẼ
Hình 1-1 Sơ đồ tổng quát hệ pan-tilt camera nhận dạng và bám đối tượng ....................1
Hình 2-1 Cấu trúc của OpenCV ......................................................................................4
Hình 3-1 Tọa độ đối tượng trên frame ảnh thu được.......................................................7
Hình 3-2 Mô hình hóa hệ Pan-tilt ....................................................................................7
Hình 3-3 Lưu đồ thuật toán nhận dạng và bám đối tượng ..............................................8
Hình 3-4 Sơ đồ kết hợp giữa bộ lọc Kalman và Camshift ..............................................9
Hình 3-5 Mô hình hệ thống nhận dạng và điều khiển camera bám đối tượng ..............10
iii
CHƯƠNG 1. TỔNG QUAN VỀ HỆ THỐNG CAMERA NHẬN
Tọa độ vị trí
đối tượng x, y
Hình 1-1 Sơ đồ tổng quát hệ pan-tilt camera nhận dạng và bám đối tượng
1
tượng đó có thể là sự thay đổi chiếu sáng, sự thay đổi mầu do tự cân bằng trắng (hoặc
hiệu chỉnh mầu) trong camera mầu, sự thay đổi giá trị pixel do rung rinh hoặc các hiện
tượng khác, từ đó sinh ra các chuyển động giả trong cảnh động. Các chuyển động cũng
còn do chuyển động của bóng, cây và nhiều thứ khác trong cảnh cần được xem xét và
phát hiện đó là các chuyển động giả. Trong diễn dải ở trên, chúng ta cần mô hình nền
sao cho chỉ những vật di động cần quan tâm được phát hiện và bám.
2
CHƯƠNG 2. NGHIÊN CỨU VÀ ĐỀ XUẤT PHẦN MỀM VÀ
Đây là một trong những phương pháp đơn giản nhất. Có thể tận dụng các mainboard
máy tính hay thậm chí các máy tính xách tay với chức năng là một đơn vị xử lý ảnh, và
đưa ra quyết định.
Có thể sử dụng mainboard PC104 với các chức năng như 1 máy tính thông thường
FPGA
Đây là giải pháp về phần cứng mà hay được sử dụng hiện nay. Tận dụng đặc tính của
FPGA là linh hoạt và tốc độ xử lý nhanh (cứng hoá các giải thuật). Ta có thể kết nối
FPGA với các CCD sensor để điều khiển và nhận các frame hình thông qua bus dữ liệu
tốc độ cao.
DSP ngày nay đã được tích hợp nhiều thành phần khác nhau, tăng khả năng xử lý linh
hoạt và tốc độ xử lý.
Phần cứng được sử dụng trong đề tài bao gồm một NVIDIA Jetson Nano Developer Kit,
1 Web cam Logitech, 1 bộ Servo, 1 bộ giá đỡ máy ảnh xoay, nghiêng, bảng điều khiển
Servo PCA9685 I2C.
3
2.2 Phần mềm phục vụ xử lý ảnh và điều khiển hệ thống
Để giải quyết bài toán xử lý ảnh – thị giác máy tính nói chung và bài toán điều khiển
bám đối tượng nói riêng, trong thực tế ta hay dùng các thư viện mã nguồn mở trên cơ
sở các thuật toán được tích hợp sẵn trong các hàm cơ sở.
Thị trường thị giác máy đang ngày càng mở rộng và lên tục phát triển. Thư viện tiêu
chuẩn sẽ tạo ra các ứng dụng mới và các giải pháp xử lý dễ dàng hơn. Đặc biệt tối ưu
khi sử dụng cấu trúc Intel. Tạo ra các mẫu ứng dụng bằng các thư viện được cập nhật
thường xuyên và thực hiện các thuật toán nặng như dò tìm khuôn mặt. Có rất nhiều công
nghệ hiện đại và các công ty lớn sử dụng thư viện OpenCV trongứng dụng của mình
như : Intel, Microsoft, IBM, Siemens, Google… và các trung tâm nghiên cứu như:
Stanford, MIT, Cambridge, INRIA…Hơn 14000 thành viên trên forum
OpenCVyahoogroup.com với trung bình một ngày có đến 10-20 thông điệp comment
trao đổi hàng ngày. Điều đó k hẳng định rằng OpenCV thực sự đã góp phần vô cùng lớn
trong lĩnh vực thị giác máy tính.
Để hiểu OpenCV làm việc như thế nào chúng ta bắt đầu từ sự phân chia cấu trúc và nội
dung của OpenCV ở 5 phần. Cấu trúc của openCV được chia làm 5 phần chính, 4 trong
số đó được chỉ ra trong hình 2.2.2
4
CXCORE chứa các định nghĩa k iểu dữ liệu cơ sở. Ví dụ, các cấu trúc dữ liệu cho ảnh,
điểm và hình chữ nhật được định nghĩa trong cxtypes.h . CXCORE cũng chứa đại số
tuyến tính và phương pháp thống kê, chức năng duy trì và điều khiển chuỗi. Một số ít,
các chức năng đồ họa để vẽ trên ảnh cũng được đặt ở đây.
CV chứa các thuật toán về xử lý ảnh và định kích cỡ camera. Các chức năng hình họa
máy tính cũng được đặt ở đây.
CVAUX được mô tả trong tài liệu của OpenCV như chứa các mã cũ và thử nghiệm. Tuy
nhiên, các giao diện đơn cho sự nhận diện ảnh ở trong module này. Code sau này chúng
được chuyên dụng cho nhận diện mặt và chúng được ứng dụng rộng rãi cho mục đích
đó.
HIGHGUI chứa các giao diện vào ra cơ bản, nó cũng chứa các k hả năng cửasổ mở
rộng và vào ra video.
CVCAM chứa các giao diện cho video truy cập qua DirectX trên nềnWindows 32 bits.
Kèm theo thư viện là tài liệu hướng dẫn và các ví dụ mẫu thể hiện một phầncác chức
năng của công cụ OpenCV.Các chức năng của openCV tập trung vào thuthập ảnh, xử lí
ảnh và các thuật toán phân tích dữ liệu ảnh, bao gồm:
- Truy xuất ảnh và phim : đọc ảnh số từ camera, từ file, ghi ảnh và phim.
- Cấu trúc dữ liệu ảnh số và các dữ liệu hỗ trợ cần thiết: ma trận, vector, chuỗi, xâu và
cây
- Xử lí ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh đổi màu, phóng to
thu nhỏ, và hiệu chỉnh histograms
- Xử lí cấu trúc: tìm viền, nhận chuyển động, thay đổi trong không gian 3D,đối chiếu
bản mẫu, xấp xỉ các đơn vị hình học cơ sở- mặt phẳng, đa giác, ellipse,đường thẳng...
- Phân tích dữ liệuảnh: nhận dạng thực thể, theo dõi các chi tiết và phân tích chuyển
động - Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột, thanh trượtđể
chỉnh thông số (nếu cần thiết các bạn có thể tự tạo thêm các phím điều khiển thông qua
thao tác chuột, hoặc tích hợp thêm các thư viện về giao diện như wxWidgets)
5
2.2.3 Hướng tiếp cận xây dựng mô hình hệ pan-tilt mang camera
Các giải thuật nhận dạng, tracking đối tượng di chuyển đặc trưng được sử dụng trong
thực tế Các đối tượng được phát hiện nhờ những thông tin trong một frame ảnh.
Trên nền tảng kế thừa các nghiên cứu trước đây, trong đó có một số đề tài nhận dạng và
điều khiển camera bám đối tượng mới chỉ dừng lại ở mức nhận dạng và điều khiển bám
theo sự dịch chuyển của gương mặt người. Thì trong đề tài này, mục tiêu là điều khiển
camera bám theo đối tượng có hình dạng biên đặc trưng như dạng hình tròn, hình cầu,
hình vuông; đảm bảo tốc độ bám tốt hơn. Hệ thống xử lý ảnh và điều khiển bám hoạt
động trên cơ sở phản hồi ảnh từ camera sẽ điều khiển hệ pan –tilt camera bám theo đối
tượng thật
Hệ thống được lập trình bằng Python dựa trên thư viện mã nguồn mở OpenCV, có khả
năng giao tiếp với board điều khiển 2 động cơ DC trên đế pan-tilt
6
CHƯƠNG 3. THIẾT KẾ VÀ THI CÔNG HỆ THỐNG NHẬN
Giả sử camera đọc đưgợc mỗi frame ảnh về đối tượng di chuyển với tọa độ như hình
sau:
Hình 3-1 Tọa độ đối tượng trên frame ảnh thu được
Mục tiêu của hệ thống là nhận dạng được đối tượng, tính toán xác định tọa độ trên mặt
phẳng ảnh của đối tượng, độ lệch vị trí theo các phương, vận tốc di chuyển của đối
tượng. Điều khiển cơ cấu pan-tilt sao cho tọa độ trọng tâm của đối tượng trên mặt phẳng
ảnh trùng với tọa độ tâm của bức ảnh. Cơ cấu pan-tilt được mô hình như sau:
7
3.1.2 Mô hình toán học của hệ pan-tilt camera
* Mô hình xấp xỉ hình học:
OXYZ là hệ toạ độ thực của hệ camera pan-tilt và OXcYcZc là hệ toạ độ gắn với
camera. P(X, Y, Z) là toạ độ của đối tượng trên hệ toạ độ thực, toạ độ của P chiếu lên
mặt phẳng ảnh là (xp, yp).
* Mô hình động học của hệ pan-tilt camera Nhằm mục đích tìm mô tả quan hệ giữa xp
và yp đối với và θ, đầu tiên ta tìm ma trận chuyển đổi đồng nhất O ROc của hai phép
quay camera xung quanh O một góc và θ.
3.2 XẤY DỰNG THUẬT TOÁN NHẬN DẠNG, BÁM ĐỐI TƯỢNG VÀ
THUẬT TOÁN ĐIỀU KHIỂN HỆ THỐNG
Thuật toán bao gồm bước tiền xử lý ảnh: thu nhận ảnh từ camera, tách nền, lọc nhiễu,
dò cạnh biên, thuật toán bám đối tượng camshift kết hợp với bộ lọc nhiễu dự báo Kalman
Hình 3-3 Lưu đồ thuật toán nhận dạng và bám đối tượng
Có nhiều phương pháp lọc nhiễu để nâng cao chất lượng xử lý nhận dạng vật thể, nhất
là vật thể chuyển động trong miển tần số, đề tài sử dụng bộ lọc Gaussian Blur. Gaussian
8
Blur là cách làm mờ một ảnh bằng hàm Gaussian. Một cách trực quan, đây được xem
như là phương pháp làm mờ mịn cũng Camera Thu nhận ảnh Tách nền Lọc nhiễu Dò
cạnh biên Camshift+Kalman Tính tọa độ tâm vật thể, vận tốc di chuyển 13 giống như
hiệu ứng hình ảnh được đặt dưới một lớp màn trong suốt bị mờ. Nó không giống với
trường hợp hình ảnh bị mờ do hậu quả của ống kính bị mất tiêu điểm (out of focus) hay
do bóng của đối tượng dưới ánh sáng thường.
3.2.3 Phương pháp tracking đối tượng, dự báo hướng di chuyển và vận tốc đối tượng
sử dụng thuật toán Camshift kết hợp bộ lọc Kalman
Trong thuật toán bám đối tượng trong ảnh Camshift, đối tượng được bám tốt khi nền
ảnh không ảnh hưởng đến đối tượng, như lẫn màu hay che khuất đối tượng. Khi đối
tượng bám bị che khuất hay lẫn màu với nền ảnh, sẽ gây ra hiện tượng mất bám. Để
khắc phục nhược điểm này và nâng cao chất lượng bám, bộ lọc Kalman được sử dụng.
Sau đây là sơ đồ kết hợp bộ lọc Kalman và Camshift được sử dụng trong đề tài:
Để điều khiển camera luôn bám theo đối tượng dịch chuyển thì việc xác định tọa độ
trọng tâm của đối tượng rất quan trọng. Phương pháp xác định dựa vào tọa độ của cửa
sổ bám đối tượng dựa vào thuật toán Camshift và Kalman track_box. Cụ thể là xác định
tâm của cửa sổ bám này, gán tọa độ tâm đối tượng chính là tọa độ tâm cửa sổ bám
3.2.3.2 Luật điều khiển mờ đưa đối tượng về tọa độ tâm bức ảnh
Sau mỗi frame ảnh đọc về từ camera, ta thu được tọa độ tâm vật thể (X_Length,
Y_Length) được thể hiện trong bức ảnh. So sánh với tọa độ tâm bức ảnh (X_center,
Y_Center) ta có sai số ErrX và ErrY. Trên cơ sở các tín hiệu sai số này, ta xây dựng luật
9
điều khiển mờ PD để xuất ra các lệnh điều khiển phù hợp đem lại hiệu quả tốt nhất có
thể có.
3.2.3.3 Thiết kế bộ điều khiển PID vị trí điều khiển hai động cơ
Do tác động qua lại giữa hai khâu pan và tilt nên bộ điều khiển được thiết kế theo hai
nhánh, trong đó khâu nội suy theo đường thẳng được sử dụng trong quá trình xử lý tính
toán tọa độ tâm vật thể để đảm bảo điều khiển được hệ pan-tilt bám theo mục tiêu dịch
chuyển theo đường ngắn nhất. Bộ điều khiển cho hai động cơ là bộ điều khiển PID giúp
hệ thống có đáp ứng nhanh, giảm được độ vọt lố cần thiết khi điều khiển bệ xoay camera.
3.3.1 Mô hình
Hình 3-5 Mô hình hệ thống nhận dạng và điều khiển camera bám đối tượng
Chương trình được viết bằng Python và sử dụng thư viện OpenCV
/*********************************************************************
/
import cv2
print(cv2.__version__)
10
import numpy as np
kit=ServoKit(channels=16)
pan=90
tilt=45
kit.servo[0].angle=pan
kit.servo[1].angle=tilt
def nothing(x):
pass
cv2.namedWindow('Trackbars')
cv2.moveWindow('Trackbars',1320,0)
cv2.createTrackbar('hueLower', 'Trackbars',96,179,nothing)
cv2.createTrackbar('hueUpper',
'Trackbars',120,179,nothing)
cv2.createTrackbar('hue2Lower',
'Trackbars',50,179,nothing)
cv2.createTrackbar('hue2Upper', 'Trackbars',0,179,nothing)
cv2.createTrackbar('satLow', 'Trackbars',157,255,nothing)
cv2.createTrackbar('satHigh', 'Trackbars',255,255,nothing)
cv2.createTrackbar('valLow','Trackbars',100,255,nothing)
cv2.createTrackbar('valHigh','Trackbars',255,255,nothing)
11
dispW=640
dispH=480
flip=2
#camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM),
width=3264, height=2464, format=NV12, framerate=21/1 !
nvvidconv flip-method='+str(flip)+' ! video/x-raw,
width='+str(dispW)+', height='+str(dispH)+', format=BGRx !
videoconvert ! video/x-raw, format=BGR ! appsink'
#cam= cv2.VideoCapture(camSet)
cam=cv2.VideoCapture(1)
width=cam.get(cv2.CAP_PROP_FRAME_WIDTH)
height=cam.get(cv2.CAP_PROP_FRAME_HEIGHT)
print('width:',width,'height:',height)
#frame=cv2.imread('smarties.png')
hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
hueLow=cv2.getTrackbarPos('hueLower', 'Trackbars')
hueUp=cv2.getTrackbarPos('hueUpper', 'Trackbars')
hue2Low=cv2.getTrackbarPos('hue2Lower', 'Trackbars')
hue2Up=cv2.getTrackbarPos('hue2Upper', 'Trackbars')
12
Ls=cv2.getTrackbarPos('satLow', 'Trackbars')
Us=cv2.getTrackbarPos('satHigh', 'Trackbars')
Lv=cv2.getTrackbarPos('valLow', 'Trackbars')
Uv=cv2.getTrackbarPos('valHigh', 'Trackbars')
l_b=np.array([hueLow,Ls,Lv])
u_b=np.array([hueUp,Us,Uv])
l_b2=np.array([hue2Low,Ls,Lv])
u_b2=np.array([hue2Up,Us,Uv])
FGmask=cv2.inRange(hsv,l_b,u_b)
FGmask2=cv2.inRange(hsv,l_b2,u_b2)
FGmaskComp=cv2.add(FGmask,FGmask2)
cv2.imshow('FGmaskComp',FGmaskComp)
cv2.moveWindow('FGmaskComp',0,530)
_,contours,_=cv2.findContours(FGmaskComp,cv2.RETR_EXTERNAL
,cv2.CHAIN_APPROX_SIMPLE)
contours=sorted(contours,key=lambda
x:cv2.contourArea(x),reverse=True)
area=cv2.contourArea(cnt)
(x,y,w,h)=cv2.boundingRect(cnt)
13
if area>=50:
#cv2.drawContours(frame,[cnt],0,(255,0,0),3)
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),3)
objX=x+w/2
objY=y+h/2
errorPan=objX-width/2
errorTilt=objY-height/2
if abs(errorPan)>15:
pan=pan-errorPan/75
if abs(errorTilt)>15:
tilt=tilt-errorTilt/75
if pan>180:
pan=180
if pan<0:
pan=0
if tilt>180:
tilt=180
if tilt<0:
tilt=0
kit.servo[0].angle=pan
14
kit.servo[1].angle=tilt
break
cv2.imshow('nanoCam',frame)
cv2.moveWindow('nanoCam',0,0)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
/********************************************************************/
15
TÀI LIỆU THAM KHẢO
[1] https://learnopencv.com/contour-detection-using-opencv-python-c/
[2] https://toptechboy.com/ai-on-the-jetson-nano/
[5] D.H. Ballard & C.M.Brown (1997), Computer vision, Prentice Hall PTR
16