Chuỗi phân loại tập trung

Một phần của tài liệu LUẬN VĂN ĐIỀU KHIỂN TỰ ĐỘNG ROBOT TRÁNH CHƯỚNG NGẠI VẬT (Trang 68)

Phần này mô tả thuật toán để xây dựng một chuỗi các bộ phân loại nhằm tăng hiệu quả

phát hiện đồng thời giảm triệt để thời gian tính toán. Chìa khóa của vấn đề là một bộ phân loại kích thước nhỏ nhưng hiệu quả có thểđược xây dựng qua việc loại bỏ các khung hình phụ âm (negative sub-window) trong khi tìm kiếm trong tất cả các trường hợp dương ( chẳng hạn điều chỉnh ngưỡng của bộ phân loại để các trường hợp bị phát hiện nhầm là âm giảm về không). Các bộ phân loại đơn giản thì được sử dụng trước tiên để loại bỏ phần lớn các khung hình phụ

trước khi các bộ phân lọai phức tạp được gọi.

Toàn bộ quá trình phát hiện có thểđược mô tả bằng một cây quyết định suy giảm dần mà ta gọi là chuỗi phân loại (cascade). Một kết quả dương của bộ phân loại trước sẽ kích họat việc đánh giá của bộ phân loại sau, và kết quả dương của bộ phân loại này lại kích hoạt bộ

phân loại sau nữa,…Bất cứ kết quả âm của tầng phân loại nào cũng sẽ loại bỏ khung hình phụ đó.

Ví dụ như tầng đầu tiên đạt hiệu quả cao được xây dựng từ bộ phân loại hai thuộc tính ‘mạnh’ bằng cách giảm ngưỡng để hạn chế mẫu bị nhầm là âm. Việc tính toán của tầng này sẽ

tốn mất 60 lệnh vi xử lý, do đó khó có thể tìm ra một bộ lọc đơn giản nào cho hiệu suất hơn.

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 60

Cấu trúc của chuỗi phát hiện phản ánh một điều là trong một ảnh đơn bất kỳ, một lượng lớn các khung hình phụ sẽ là âm. Do đó, chuỗi phát hiện cố gắng lọai bỏ càng nhiều khung hình âm ở những tầng đầu tiên càng tốt.

Do có hình dạng cây quyết định, các bộ phân loại sau sẽ được huấn luyện trên các mẫu

được thông qua ở tất cả các tầng trước. Kết quả là, công việc của tầng sau sẽ khó hơn ở tầng trước. Do các mẫu được đưa đến các tầng sau thường khó nhận dạng hơn các mẫu đển hình nên ở các tầng này tỉ lệ nhận dạng nhầm là sai cao hơn.

5.2.4 Huấn luyện một chuỗi phát hiện

Quá trình huấn luyện chuỗi phát hiện liên quan đến việc dung hòa hai vấn đề. Chuỗi phát hiện với nhiều thuộc tính hơn sẽ nhận dạng chính xác hơn và tỉ lệ nhận nhầm là âm sẽ thấp hơn. Tuy nhiên, chuỗi phát hiện với nhiều thuộc tính đòi hỏi thời gian tính toán nhiều hơn. Về

nguyên tắc, ta có thểđịnh nghĩa một cấu trúc tối ưu mà trong đó : số tầng, số thuộc tính mỗi tầng và ngưỡng của mỗi tầng phải được dung hòa để tối thiểu hóa số thuộc tính. Việc tìm ra cấu trúc tối ưu này rất là khó khăn.

Trên thực tế, một cấu trúc rất đơn giản để tạo ra một bộ phân loại hiệu suất cao. Mục tiêu

được chọn là giảm tối thiểu việc phân loại nhầm là dương và tối đa hiệu suất phát hiện đúng. Mỗi tầng được thêm các thuộc tính để cho đến khi tỉ lệ phân loại nhầm là dương và tỉ lệ tìm kiếm đúng đạt được và được kiểm tra lại bằng một tập mẫu kiểm chứng. Các tầng được thêm vào chuỗi phân loại cho đền khi đạt yêu cầu về tỉ lệ phát hiện nhầm là dương và phát hiện

đúng.

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 61

5.3 THƯ VIỆN XỬ LÝ ẢNH OPENCV CỦA INTEL : 5.3.1 Giới thiệu : 5.3.1 Giới thiệu :

OpenCV là thư viện mở dùng cho xử lý ảnh trên máy tính (computer vision) có sẵn trên

trang http://SourceForge.net/projects/OpenCVlibrary. OpenCV được thiết kếđể làm cho việc

tính toán trở nên thuận tiện hơn với các ứng dụng thời gian thực. Một trong những mục tiêu của OpenCV là cung cấp một cấu trúc thị giác máy tính dễ sử dụng cho người dùng để có thể

xây dựng các ứng dụng xử lý ảnh tương đối phức tạp một cách nhanh chóng. Thư viện

OpenCV chứa hơn 500 hàm có thểứng dụng trong nhiều lĩnh vực như giám sát nhà máy, phân

tích ảnh y khoa, an ninh và robotic. Do thị giác máy tính và việc học máy ( machine learning)

thường đi đôi với nhau nên OpenCV cũng kèm theo thư viện học máy đầy đủ Machine Learning Library (MLL). Thư viện phụ này vào việc nhận dạng ( recognition ) và việc xếp nhóm ( clustering).

5.3.2 Các thành phần chức năng của OpenCv: (adsbygoogle = window.adsbygoogle || []).push({});

§ CXCORE : chứa các định nghĩa về các kiể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 các đại số tuyến tính ( linear algebra), phương pháp thống kê ( statistic method),

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 đặ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 (computational geometry function) cũng được đặt ởđây.

§ CVAUX : được mô tả trong tài liệu của OpenCv là chứa các mã đã lỗi thời và các mã thử nghiệm. Tuy nhiên các giao diện đơn cho phần nhận diện khuôn mặt cũng trong module này.

§ HIGHGUI CVCAM được đặt trong cùng thư mục là "otherlibs"

HIGHGUI : chứa các giao diện vào ra cơ bản và các khả năng cửa sổđa nền tảng.

CVCAM : chứa các giao diện cho video truy cập qua DirectX trên nền Windows 32

bits.

5.3.3 Cấu trúc ảnh IplImage

IplImage là định dạng ảnh được giới thiệu và phát triển bởi Intel. Chuẩn IplImage được sử dụng rộng rãi trong xử lý ảnh, tối ưu hóa quá trình xử lý nhờ quản lý các nhóm dữ liệu dưới dạng các Field. Quá trình xử lý được thực hiện trên các trường làm tăng khả năng linh hoạt và tốc độ xử lý dữ liệu. Định dạng IplImage được dùng rộng rãi trong các bộ thư viện xử lý ảnh

như IPL ( Image Procesing Library) hay IPP ( Intergrated Performance Primitives), OpenCV,

AMM,...

Cấu trúc IplImage trong OpenCV như sau:

typedef struct _IplImage {

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 62

int nSize; int ID;

int nChannels;

int alphaChannel; // OpenCV không sử dụng

int depth;

char colorModel[4]; // OpenCV không sử dụng

char channelSeq[4]; // OpenCV không sử dụng

int dataOrder; int origin;

int align; // OpenCV không sử dụng

int width; int height;

struct _IplROI *roi;

struct _IplImage *maskROI; // bằng NULL trong OpenCV (adsbygoogle = window.adsbygoogle || []).push({});

void *imageId; //bằng NULL trong OpenCV

struct _IplTileInfo *tileInfo; //bằng NULL trong OpenCV

int imageSize; char *imageData; int widthStep;

int BorderMode[4]; // OpenCV không sử dụng

int BorderConst[4]; // OpenCV không sử dụng

char *imageDataOrigin; } IplImage; Các tham số: • nSize : kích thước của ảnh • ID : chỉ số version, luôn bằng 0

• nChannels : số kênh, các hàm của OpenCV đều hỗ trợ từ 1-4 kênh

• alphaChannel : OpenCV không sử dụng

• depth : chiều sâu của pixel theo bit, có các dạng sau :

IPL_DEPTH_8U : unsigned 8-bit integer IPL_DEPTH_8S : signed 8-bit integer IPL_DEPTH_16U : unsigned 16-bit interger …

• dataOder : 0 = IPL_DATA_ORDER_PIXEL các kênh màu đan xen nhau,

1 = các kênh màu tách rời

• origin : gốc tọa độ 0 = top-left origin, 1 = bottom-left origin ( kiểu Window

bitmap)

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 63

• height : chiều cao ảnh theo pixel

• roi Region of Interest (ROI) nếu bằng NULL thì chỉ có vùng ROI được xử lý

• imageSize : kích thước dữ liệu ảnh theo byte

• imageData : một pointer trỏ tới vùng địa chỉảnh

• widthStep : the size of an aligned image row, in bytes

5.3.4 Các hàm dùng trong luận văn :

§ Thu nhận ảnh từ camera :

CvCapture* cvCaptureFromCAM(int index);

Trong đó index là chỉ số camera được sử dụng, nếu có 1 camera, index = -1 Chức năng : thu nhận hình ảnh từ camera và trả về pointer có kiểu là CVCapture.

§ Giải phóng camera :

void cvReleaseCapture( CvCapture**capture);

Trong đó capture là địa chỉ của Pointer có kiểu cvCapture

§ Lấy hình từ camera : (adsbygoogle = window.adsbygoogle || []).push({});

IplImage* cvRetrieveFrame( CvCapture* capture); hay IplImage* cvQueryFrame( CvCapture* capture);

§ Đọc thuộc tính của camera

double cvGetCaptureProperty( CvCapture* capture, int property_id);

trong đó capture có kiểu CvCapture đại diện cho camera đang làm việc

property_id có thể có các giá trị sau :

CV_CAP_PROP_POS_MSEC : camera frame timestamp

CV_CAP_PROP_POS_FRAMES : 0-based index of the frame to be decoded/capture next.

CV_CAP_PROP_POS_AVI_RATIO : (dùng cho file avi)

CV_CAP_PROP_FRAME_EIDTH : bề rộng của video stream

CV_CAP_PROP_FRAME_HEIGHT: bề cao của video stream

CV_CAP_PROP_FPS : frame per second

CV_CAP_PROP_FRAME_COUNT : số thứ tự của frame

§ Đặt thuộc tính cho camera

int cvSetCaptureProperty( CvCapture* capture, int property_id, double value);

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 64

Trong đó capture có kiểu CvCapture* đại diện cho camera, property_id có

các giá trị như trong phần đọc thuộc tính của camera, value là gía trị của thuộc tính.

§ Tạo một ảnh :

IplImage* cvCreateImage(CvSize size, int depth, int channels)

Hàm trả về một pointer trỏđến hình ảnh có cấu trúc IplImage, trong đó : size : kích thước ảnh

depth : Số bit biểu diễn độ sáng tại mỗi pixel

channels : số kênh

§ Giải phóng pointer trỏ tới ảnh:

void cvReleaseImage( IplImage** image);

Trong đó image là pointer trỏ tới hình ảnh có cấu trúc IplImage

§ Copy ảnh

void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask = NULL); Trong đó :

src : ảnh nguồn dst : ảnh đích (adsbygoogle = window.adsbygoogle || []).push({});

mask : mặt nạ phủ lên ảnh nguồn nếu ta chỉ muốn copy một phần ảnh.

§ Xác định vùng ảnh cần xử lý (ROI)

void cvSetImageROI(IplImage* image, CvRect rect);

Trích một cùng ảnh ban đầu thành một vùng ảnh mới, nằm trong hình chữ

nhật rect. Sau khi trích, image là pointer trỏ tới hình ảnh này.

§ Cân bằng histogram cho ảnh xám

Để thực hiện việc cân bằng histogram ta dùng hàm sau :

CVAPI(void) cvEqualizeHist( const CvArr*scr, const CvArr* dst) Trong đó :

scr : hình ảnh gốc ban đầu

dst : hình ảnh sau khi cân bằng histogram

§ Phát hiện khuôn mặt trong ảnh

CvSeq* cvHaarDetectObjects(const CvArr* image,

CvHaarClassifierCascade* cascade, CvMemStorage* storage, double scale_factor=1.1, int min_neighbors = 3, int flags = 0,CvSize min_size = cvSize(0,0))

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 65 ü image : ảnh cần phát hiện

ü cascade : chuỗi phân lọai Haar dùng cho tính tóan bên trong

ü storage : vùng nhớđể chứa các kết quả trung gian trong quá trình phân

lọai

ü scale_factor : tham số mà theo đó kích thước cửa sổ tìm kiếm tăng lên sau mỗi chu kì quét, mặc định là 1.1 tức tăng 10%

ü min_neighbors : số nhỏ nhất các hình chữ nhật kế cận cùng phát hiện khuôn mặt. Điều này có nghĩa khuôn mặt được phát hiện nếu có ít nhất một số hình chữ nhật có cùng kết quả dương chồng lấp lên nhau.

ü flags : chếđộ họat động, chỉ hỗ trợ

CV_HAAR_DO_CANNY_PRUNNING

ü min_size : kích thước cửa sổ nhỏ nhất khi bắt đầu tìm kiếm, thường là

20x20 cho đối tượng là khuôn mặt

Hàm này tìm các vùng hình chữ nhật trong hình có chứa khuôn mặt với chuỗi

phân loại được huấn luyện và trả về một mảng các hình chữ nhật. Trước khi gọi hàm này ta phải load file dữ liệu để huấn luyện:

cascadefaces =

(CvHaarClassifierCascade*)cvLoad(filename_face,NULL,NULL,NULL); với filename_face là đường dẫn đến file dữ liệu nằm trong phần dữ liệu của OpenCv.

Chương 6 Thực hiện đề tài (adsbygoogle = window.adsbygoogle || []).push({});

——————————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 66

Chương 6

THỰC HIỆN ĐỀ TÀI

6.1 CƠ SỞ PHẦN CỨNG 6.1.1 Robot omni 6.1.1 Robot omni

Đây là mô hình robot omni đặt ở phòng thí nghiệm trọng điểm quốc gia DCSELab module

điều khiển tựđộng do các sinh viên khóa trên thực hiện phần khung robot và mạch điều khiển.

Phần thêm vào trong phạm vi luận văn của em là lắp đặt thêm ba cảm biến siêu âm vào phía

trước robot, thực hiện mạch đọc cảm biến và giao tiếp với mạch điều khiển chính, lắp đặt camera vào phần đầu của robot để thực hiện việc bắt mặt người.

Cấu tạo robot gồm ba phần :

Ø Phần đầu : có giá đỡđểđặt camera

Chương 6 Thực hiện đề tài

——————————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 67 Ø Phần thân : có 3 tầng để máy tính và mạch điều khiển

Chương 6 Thực hiện đề tài

——————————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 68

Hình 6.3 Mô hình bài toán điều khiển robot omni trong thực tế

vật cản

Chương 6 Thực hiện đề tài

——————————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 69 Ø Phần chân : có gắn 3 động cơ harmonic, hộp số giảm tốc 1000 lần , tốc độ quay tối

đa 30 vòng/ phút, ngòai ra còn có gắn encoder 1000 xung/vòng. Mỗi động cơ

truyền động cho một bánh omni bằng một đai răng chống trượt, để robot có thể

chuyển động đa hướng.

Mô hình toán học và phương pháp điều khiển đã được em trình bày đầy đủ trong chương

3, việc điều khiển robot omni trong đề tài này hòan tòan dựa trên cơ sở lý thuyết đó.

6.1.2 Mạch điều khiển chính

Mạch điều khiển chính này là phần có sẵn của robot, ởđây em chỉ giới thiệu sơ qua. Mạch sử dụng hai vi xử lý Atmega128 với quan hệ Master – Slave làm trung tâm, dữ liệu truyền giữa hai vi xử lý theo kiểu truyền nối tiếp qua phần UART trên hai vi xử lý. Atmega128 Master có nhiệm vụ nhận lệnh từ máy tính và thực hiện việc điều rộng xung ( PWM ) đểđiều khiển động cơ ngõ ra tránh vật cản hoặc bám mặt người. Atmega Slave có nhiệm vụ truyền dữ

liệu từ mạch đọc cảm biến đến Master để truyền lên máy tính. Thiết kế của mạch điều khiển phát huy tối đa tính năng của hai vi xử lý để có thể linh hoạt trong việc điều khiển, đồng thời có thể phát triển để giao tiếp thêm các ngọai vi sau này. (adsbygoogle = window.adsbygoogle || []).push({});

Trọng tâm của phần mạch điều khiển chính này là phần mạch điều khiển động cơ, có hai phần chính :

§ Mạch tổ hợp các tín hiệu logic cho cầu H :

Hình 6.4 Mạch tổ hợp các tín hiệu logic

Mạch này có chức năng tổ hợp các tín hiệu logic đểđiều khiển cầu H và cách ly phần mạch điều khiển với mạch công suất thông qua các opto817 có tần số cắt lên đến tối đa 80kHz.

Các chân có chức năng như sau :

ü PWMx_M : chân cung cấp tín hiệu điều rộng xung cho động cơ thứ x

Chương 6 Thực hiện đề tài

——————————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 70 ü DIRx : chân cung cấp tín hiệu xác định chiều cho động cơ thứ x

ü InxR : chân cung cấp tín hiệu lái nửa phải cầu H (phần mạch công suất) InxL : chân cung cấp tín hiệu lái nửa trái cầu H (phần mạch công suất)

§ Mạch cầu H :

Mạch này sử dụng các IC kích cầu chuyên dụng IR2111, cho dòng lái đến 0.5A, ngòai ra

còn có chức năng chống trùng dẫn ( dead-time), cho tần số PWM đến 20kHz và điện áp

họat động lên đến 600V. Với việc kết hợp với MOSFET kênh n IRF540, mạch có thể lái

dòng 28A và điện áp họat động lên đến 600V.

Hình 6.5 Mạch cầu H điều khiển động cơ

6.1.3 Cảm biến siêu âm

Cảm biến siêu âm SRF05 của hãng Devantech có thểđược sử dụng ở 2 mode:

Chương 6 Thực hiện đề tài

——————————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 71

Hình 6.6 Cảm biến siêu âm SRF05

Để sử dụng mode này, ta để hở chân Mode , SRF05 có 1 điện trở nội kéo lên ở chân này. Khi bắt đều một phép đo, vi xử lý xuất ra một xung có độ rộng tối thiểu 10µs đến chân

Trigger, SRF05 sau đó phát đi 4 chu kì sóng siêu âm và đưa chân Echo lên 1, khi nhận được

Một phần của tài liệu LUẬN VĂN ĐIỀU KHIỂN TỰ ĐỘNG ROBOT TRÁNH CHƯỚNG NGẠI VẬT (Trang 68)