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

Đề tài nghiên cứu phương pháp kết nối webcam với board nhúng km 9260

15 881 0
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 đề Đề tài nghiên cứu phương pháp kết nối webcam với board nhúng KM9260
Trường học Trường Đại học Lạc Hồng
Chuyên ngành Công nghệ thông tin
Thể loại Đề tài nghiên cứu
Định dạng
Số trang 15
Dung lượng 345,49 KB

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

Nội dung

Đặt vấn đề Các ứng dụng của xử lý ảnh vào thực tế ngày càng nhiều.. Nhưng việc nghiên cứu và ứng dụng phương pháp xử lý ảnh vào thực tế đối với các sinh viên Việt Nam nói chung và sinh

Trang 1

CHƯƠNG 1: MỞ ĐẦU

1.1 Đặt vấn đề

Các ứng dụng của xử lý ảnh vào thực tế ngày càng nhiều Nhưng việc nghiên cứu và ứng dụng phương pháp xử lý ảnh vào thực tế đối với các sinh viên Việt Nam nói chung và sinh viên Lạc Hồng nói riêng gặp một khó khăn đó là: phải sử dụng máy tính để thu nhận và xử lý các dữ liệu ảnh Mà máy tính thì cồng kềnh không thích hợp cho các ứng dụng thực tế

Mục đích của đề tài là sử dụng board nhúng KM9260 đang có bán trên thị trường Việt Nam kết hợp với webcam để thu nhận và xử lý ảnh phục vụ cho các ứng dụng nhúng thích hợp

1.2 Mục tiêu và phạm vi nghiên cứu

Mục tiêu của đề tài là sử dụng board nhúng KM9260 thu nhận dữ liệu ảnh từ webcam, xử lý ảnh thu được và xuất tín hiệu điều khiển ra Tín hiệu điều khiển ở ngõ ra có thể được dùng để điều khiển robot hoặc cho các mục đích điều khiển khác tùy theo nhu cầu của người sử dụng

Hình 1.1: Sơ đồ khối của hệ thống Phần thử nghiệm và đánh giá kết quả: Có thể dùng dữ liệu ảnh thu được điều khiển một robot hoặc truyền dữ liệu ảnh thu được về máy tính để hiển thị

1.3 Nội dung và phương pháp nghiên cứu

Nội dung nghiên cứu:

− Cài đặt hệ điều hành Linux nhúng trên board KM9260

− Cài đặt thư viện xử lý ảnh OpenCV trên nền Linux nhúng

− Thử nghiệm thu nhận và xử lý ảnh từ webcam

− Tổng hợp và báo cáo kết quả

Phương pháp nghiên cứu:

− Tìm hiểu lý thuyết và cách thức thực hiện bằng các tài liệu hướng dẫn liên quan

− Thử nghiệm bằng máy tính và trực tiếp trên board KM9260

BOARD NHÚNG KM9260

khiển ngõ ra

Trang 2

CHƯƠNG 2: TỔNG QUAN

2.1 Tổng quan tình hình nghiên cứu

Trên thế giới đã có những sản phẩm tương tự, chất lượng tốt, nhưng giá đắt hơn

và khó khăn trong vận chuyển và thanh toán

Unibrain Fire-i board Pro™ Remote CCD [2]

Hình 2.1: Fire-i board Pro™ Remote CCD

Model Fire-i VGA Pro Fire-i XGA Pro

Image Sensor Sony 1/3" progressive scan CCD ICX-424AQ / ICX-424AL Sony 1/3" progressive scan CCD ICX-204AK / ICX-204AL Effective Pixels 330,000 pixels 659 (H) x 494 (V) 800,000 pixels 1034(H) x 779(V) Picture Size 640 x 480 1024 x 768, 800 x 600, 640 x 480 Data Path 8 bit or 12 bit color RAW and YUV 422 or 12 bit b/w

CELL size 7.40 um x 7.40 um 4.65 um x 4.65 um

Frame Rate 86 fps (Format-7), 60, 30, 15, 7.5, 3.75 36 fps (Format-7), 30, 15, 7.5, 3.75 External Trigger Mode 0, 1, 2, 3, 4, 5, 12, 13, 14, 15

Control Functions Auto-Exposure, Auto-shutter, Brightness, Sharpness

Digital Interface One or Two 1394a 6pin port / IIDC v1.31 - 8~30V DC from cable

Shutter Speed 1 usec ~ 3600 sec

Advanced Features RS-232 (SIO) pass through, Format-7, One shot & multi shot, Multi camera auto-sync, Binning 2x2, 1x2 (b/w model) S/N ratio 56 dB or better

Power Requirements 200 mA max, @ +12V DC

Dimensions / Weight Single 1394 port model: 47(W) x 70(H) x 21(D) mm / Approx 34 gr

Trang 3

Dual 1394 port model: 47(W) x 81(H) x 21(D) / Approx 40 gr Operation Temp -5 to +45°C

Storage Temp -20 to +60°C

Regulations FCC, CE, MIC, RoHS

Price $590.00 $690.00

2.2 Giới thiệu board nhúng KM9260 [1]

KM9260 là board nhúng trên nền vi điều khiển ARM9 Board có kích thước nhỏ

gọn và có tính năng mạnh, sử dụng dòng vi điều khiển AT91SAM9 của ATMEL

cho phép hệ thống chạy với các hệ điều hành nhúng Linux, WinCE và µC/OS-II

RTOS Hoặc có thể chạy chương trình ứng dụng standalone như các hệ thống vi

điều khiển thông thường

Tính năng:

- MPU AT91SAM9260, 16/32 bit ARM926EJ-S 180Mhz

- Connector theo chuẩn JTAG 20 pin cho phép lập trình,

debug hệ thống

- 32MB SDRAM

- 256MB NAND FLASH

- 512kB SPI serial dataflash

- Ethernet 10/100 base RJ45 connector

- USB host, device connector - RS232 connector - Micro SD card slot

- Nút nhấn, LED hiển thị

- Connector mở rộng

- Nguồn cung cấp 5VDC

Hình 2.2: Board nhúng KM9260

Trang 4

Một số ứng dụng:

ƒ Giám sát, đo lường, điều khiển từ xa qua mạng

ƒ Kiểm soát an ninh

ƒ Các ứng dụng xử lý ảnh nhúng …

2.3 Cài đặt hệ điều hành Linux nhúng lên KM9260

Chuẩn bị:

− Một thẻ microSD dung lượng tối thiểu 2GB

− Máy tính cài hệ điều hành Linux (Ubuntu 10) - PC Linux

− Chép file Debian_km9260_rootfs_121209.tar.bz2 (đĩa kèm theo board) vào một thư mục trên PC Linux

Các bước thực hiện:

− Dùng đầu đọc thẻ cắm microSD vào PC Linux

− Dùng Disk Utility (System/Administration/Disk Utility) Fdisk + Format microSD theo dạng ext2

− Mở Applications/Accessories/Terminal để dùng dòng lệnh:

$ cd /media/<microSD_name>

$ sudo tar –jxvf /<Path>/ Debian_km9260_rootfs_121209.tar.bz2

− Sau khi giải nén root lấy microSD gắn vào khe cắm trên board KM9260 và thực hiện boot Linux

2.4 Cài đặt thư viện xử lý ảnh OpenCV

OpenCV là một thư viện chứa các thuật toán xử lý ảnh được thế giới nghiên cứu

và chuyển thành mã nguồn mở (Open source code) bởi Intel Với OpenCV ta có thể thực hiện việc thu nhận và xử lý ảnh được dễ dàng và các ứng dụng xử lý ảnh sẽ được thực hiện một cách thuận tiện hơn

Việc cài đặt và sử dụng OpenCV trên máy tính đã được rất nhiều người thực hiện Phần này sẽ trình bày cách cài đặt OpenCV trên hệ điều hành Linux nhúng trên board KM9260

Chuẩn bị:

− Download source OpenCV được built sẵn dưới dạng file deb Từ [3]

download các file sau:

1 libavcodec51_0.svn20080206-18+lenny3_arm.deb

2 libgtk2.0-dev_2.12.12-1~lenny2_arm.deb

3 libjasper1_1.900.1-5.1+lenny1_arm.deb

Trang 5

4 libpng12-0_1.2.27-2+lenny4_arm.deb

5 zlib1g_1.2.3.3.dfsg-12_arm.deb

6 libjpeg62-dev_6b-14_arm.deb

7 zlib1g-dev_1.2.3.3.dfsg-12_arm.deb

8 swig_1.3.36-1_arm.deb

9 libavcodec-dev_0.svn20080206-18+lenny3_arm.deb

10 libjasper-runtime_1.900.1-5.1+lenny1_arm.deb

11 libtiff4_3.8.2-11.4_arm.deb

12 libpng12-dev_1.2.27-2+lenny4_arm.deb

13 python2.5_2.5.2-15+lenny1_arm.deb

14 libdc1394-13_1.1.0-5_arm.deb

15 libavformat52_0.svn20080206-18+lenny3_arm.deb

16 libgtk2.0-0_2.12.12-1~lenny2_arm.deb

17 libjpeg62_6b-14_arm.deb

18 pkg-config_0.22-1_arm.deb

19 libjasper-dev_1.900.1-5.1+lenny1_arm.deb

20 libtiff4-dev_3.8.2-11.4_arm.deb

21 python2.5-dev_2.5.2-15+lenny1_arm.deb

22 libdc1394-13-dev_1.1.0-5_arm.deb

23 libcv1_1.0.0-6.1_arm.deb

24 libcv-dev_1.0.0-6.1_arm.deb

25 libhighgui1_1.0.0-6.1_arm.deb

26 libhighgui-dev_1.0.0-6.1_arm.deb

27 libcvaux1_1.0.0-6.1_arm.deb

28 libcvaux-dev_1.0.0-6.1_arm.deb

− Chép các file trên vào một thư mục gọi là OpenCV

− Dùng WinSCP chép thư mục OpenCV này lên board KM9260

Cài đặt:

− Chuyển đến thư mục OpenCV

$ cd /<Path>/OpenCV

Trang 6

− Lần lượt cài đặt các file trên bằng lệnh:

$ dpkg -i <filename.deb>

Ví dụ: $ dpkg -i libavcodec51_0.svn20080206-18+lenny3_arm.deb

Trang 7

CHƯƠNG 3: THỰC NGHIỆM

3.1 Dùng KM9260 và OpenCV xử lý ảnh từ webcam nhận dạng màu đỏ

Lưu đồ giải thuật:

Hình 3.1: Lưu đồ giải thuật nhận dạng màu

OpenCV hỗ trợ các hàm thu nhận ảnh từ file và từ camera trong thư viện

“highgui.h” Thu nhận ảnh từ webcam:

CvCapture* capture = cvCreateCameraCapture(-1);

rgbimage = cvQueryFrame(capture);

Không gian màu RGB không thích hợp cho việc nhận dạng màu sắc, để phân biệt màu sắc người ta thường dùng không gian màu HSV Trong OpenCV, H (Hue)

có giá trị trong khoảng (0, 179) mang thông tin về màu sắc S (Saturation) có giá trị

Begin

Thu ảnh từ camera thường

ở không màu RGB

Xác định màu

Chuyển sang không gian

màu HSV

So sánh các thành phần H, S, V

End

Y

N

Trang 8

(0, 255) cho thông tin về độ thuần khiết của màu V (Value) có giá trị (0, 255) cho biết độ sáng của điểm ảnh Chuyển đổi không gian màu từ RGB sang HSV:

cvCvtColor(rgbimage,hsvimage,CV_BGR2HSV);

Màu đỏ thường thành phần H có giá trị trong khoảng (0 - 7) & (174 - 179) Các thành phần S và V thường chọn trong lân cận 100 tùy theo điều kiện ánh sáng môi trường và yêu cầu về độ thuần khiết của màu

Code mẫu:

/*

* main.c

* Created on: Apr 8, 2011

* Author: ptnvt

*/

#include <stdio.h>

#include <cv.h>

#include <highgui.h>

# define threshold 2000

int main(int argc, char **argv)

{

CvCapture* capture = cvCreateCameraCapture(-1);

IplImage* frame;

frame = cvQueryFrame(capture);

CvSize size = cvGetSize(frame);

cvWaitKey(3000);

IplImage* hsvimg = cvCreateImage(size,IPL_DEPTH_8U,3);

frame = cvQueryFrame(capture);

cvCvtColor(frame,hsvimg,CV_BGR2HSV);

int i, j;

unsigned long N;

int height = hsvimg->height;

int width = hsvimg->width;

int step = hsvimg->widthStep/sizeof(uchar);

int channels = hsvimg->nChannels;

uchar* hsv = (uchar *)hsvimg->imageData;

while(1) {

frame = cvQueryFrame(capture);

cvCvtColor(frame,hsvimg,CV_BGR2HSV);

N = 0;

for(i=0; i < height; i++) {

for(j=0; j < width; j++) {

if((hsv[i*step+j*channels+0]<6||hsv[i*step+j*channels+0]>74)&

& hsv[i*step+j*channels+1]>120&&hsv[i*step+j*channels+2]>100) {

N++;

}

Trang 9

}

}

if (N > threshold) {

printf("Red Color\n");

}

cvWaitKey(1000);

}

return 0;

}

Biên dịch dùng lệnh:

$ gcc color.c -I /usr/include/opencv -lcv -lhighgui -o color

Gọi ứng dụng:

$ /color

Kết quả: Log gọi ứng dụng color trên Putty Khi đưa một vật có màu đỏ trước Webcam thì board sẽ thông báo “Red Color”

sam9-l9260:~/APP# /color

Corrupt JPEG data: 368 extraneous bytes before marker 0xd9

Corrupt JPEG data: premature end of data segment

Corrupt JPEG data: premature end of data segment

Corrupt JPEG data: 1005 extraneous bytes before marker 0xd9

Corrupt JPEG data: 103 extraneous bytes before marker 0xd9

Corrupt JPEG data: premature end of data segment

Red Color

Corrupt JPEG data: premature end of data segment

Red Color

Corrupt JPEG data: 117 extraneous bytes before marker 0xd9

Corrupt JPEG data: 119 extraneous bytes before marker 0xd9

Corrupt JPEG data: 506 extraneous bytes before marker 0xd9

Red Color

Corrupt JPEG data: 266 extraneous bytes before marker 0xd9

Red Color

Trang 10

Corrupt JPEG data: 70 extraneous bytes before marker 0xd9

Red Color

Corrupt JPEG data: premature end of data segment

Red Color

Corrupt JPEG data: premature end of data segment

Red Color

Red Color

Corrupt JPEG data: premature end of data segment

Red Color

Corrupt JPEG data: premature end of data segment

3.2 Phát hiện đối tượng chuyển động bằng phương pháp trừ nền

Đối tượng (foreground) là một vật thể di động trước một khung cảnh cố định gọi

là nền (background) Phương pháp trừ nền để phát hiện đối tượng chuyển động như sau [4]:

− Lấy N frame ảnh liên tiếp từ webcam

− Tính giá trị trung bình và trung bình bình phương các giá trị pixel tại một vị trí trong N frame:

N

j i p j

i M

N

frame

=

) , ( )

, (

N

j i p j

i Sq

N

frame

=

2 ( , ) )

, (

trong đó, p(i,j) là giá trị của pixel tại vị trí (i,j)

− Tính phương sai:

) , ( ) , ( )

, (i j = Sq i jM2 i j

σ

− Khi đó, một pixel tại vị trí (i,j) trong một frame được coi là thuộc một đối tượng nếu thỏa mãn điều kiện:

) , ( )

, ( ) ,

hoặc M(i,j)− p(i, j)2 ≥λ2σ2(i,j)

Trang 11

Code mẫu: Đây là đoạn code thực hiện việc lấy chín frame đầu tiên làm nền

(background) Sau đó, lấy một frame tiếp theo so sánh với chín frame trước để xác

định xem trong đó có đối tượng nào xuất hiện hay không?

/*

* main.c

*

* Created on: Apr 5, 2011

* Author: ptnvt

*/

#include "stdio.h"

#include "cv.h"

#include "highgui.h"

# define threshold 5000

int main()

{

CvCapture* capture = cvCreateCameraCapture(0);

IplImage* frame;

frame = cvQueryFrame(capture);

CvSize size = cvGetSize(frame);

IplImage* graytemp = cvCreateImage(size,IPL_DEPTH_8U,1);

size.height >>= 2; // size/4: giảm độ phân giải của ảnh để tăng size.width >>= 2; // tốc độ xử lý

IplImage* temp = cvCreateImage(size,IPL_DEPTH_8U,1);

IplImage* backg = cvCreateImage(size,IPL_DEPTH_32F,1);

IplImage* foreg = cvCreateImage(size,IPL_DEPTH_32F,1);

IplImage* sqbackg = cvCreateImage(size,IPL_DEPTH_32F,1);

IplImage* acc = cvCreateImage(size,IPL_DEPTH_32F,1);

IplImage* sqacc = cvCreateImage(size,IPL_DEPTH_32F,1);

IplImage* M = cvCreateImage(size,IPL_DEPTH_32F,1);

IplImage* sqM = cvCreateImage(size,IPL_DEPTH_32F,1);

int step = backg->widthStep/sizeof(float);

float * foregdata = (float *)foreg->imageData;

float * accdata = (float *)acc->imageData;

int i, j;

unsigned int N;

cvWaitKey(500); // Chờ cho webcam khởi động ổn định

for(i = 0; i < 9; i++) {

frame = cvQueryFrame(capture);

cvCvtColor(frame,graytemp,CV_BGR2GRAY);

cvResize(graytemp,temp,CV_INTER_NN);

cvConvertScale(temp, backg, 1, 0);

cvAcc(backg, acc, NULL);

cvSquareAcc(backg, sqacc, NULL);

cvWaitKey(1);

}

Trang 12

cvConvertScale(acc, backg, 1, 0); // backg = acc

cvConvertScale(sqacc, sqbackg, 1, 0); // sqbackg = sqacc

while(1)

{

frame = cvQueryFrame(capture);

cvCvtColor(frame,graytemp,CV_BGR2GRAY);

cvResize(graytemp,temp,CV_INTER_NN);

cvConvertScale(temp, foreg, 1, 0);

cvAcc(foreg,acc,NULL);

cvSquareAcc(foreg, sqacc, NULL);

cvConvertScale(acc, M, 0.1, 0); // M(x,y) = acc/N cvConvertScale(sqacc, sqM, 0.1, 0); // Sq(x,y)= sqacc/N cvSub(M, foreg, acc, NULL); // |M(x,y)-P(x,y)| = acc cvMul(acc, acc, foreg, 1); // |M(x,y)-P(x,y)| 2 = foreg cvMul(M, M, acc, 1); // M(x,y) 2 = acc

cvSub(sqM, acc, sqacc, NULL); // sigma(x,y) 2 = sqacc cvConvertScale(sqacc, acc, 6, 0);// lambda 2 sigma(x,y) 2 = acc

N = 0;

for(i=0; i < size.height; i++) {

for(j=0; j < size.width; j++) {

if (foregdata[i*step+j] > accdata[i*step+j]) { N++;

} }

}

if (N > threshold) {

printf("Co mot doi tuong moi xuat hien\n");

} cvConvertScale(backg, acc, 1, 0); // acc = backg;

cvConvertScale(sqbackg, sqacc, 1, 0); // sqacc = sqbackg cvWaitKey(1);

}

return 0;

}

Trang 13

KẾT LUẬN

Kết quả thực hiện được của đề tài đã đạt được mục đích đặt ra ban đầu Với khả năng của board nhúng KM9260 phù hợp cho một số ứng dụng xử lý ảnh đơn giản, giúp nâng cao khả năng ứng dụng công nghệ xử lý ảnh vào cuộc sống

Bước tiếp theo của đề tài là sử dụng KM9260 cho một ứng dụng cụ thể đó là: Robot nhận dạng chuyển động

Trang 14

TÀI LIỆU THAM KHẢO

[1] “KM9260 TECHNICAL REFERENCE REV1.0l”, www.thegioiic.com [2] http://www.unibrain.com/Products/VisionImg/boardXGA.htm

[3] http://packages.debian.org/lenny/arm/

[4] http://blog.damiles.com/?p=127

[5] Intel Corporation (1999-2001), Open Source Computer Vision Library,

http://developer.intel.com

[6] Gary Bradski, Adrian Kaehler (2008), Learning OpenCV – Computer

Vision with the OpenCV Library, O’reilly Media Inc, Sebastopol, CA

Trang 15

PHỤ LỤC

Ngày đăng: 10/12/2013, 15:59

HÌNH ẢNH LIÊN QUAN

Hình 2.1: Fire-i board Pro™ Remote CCD - Đề tài nghiên cứu phương pháp kết nối webcam với board nhúng km 9260
Hình 2.1 Fire-i board Pro™ Remote CCD (Trang 2)
Hình 2.2: Board nhúng KM9260 - Đề tài nghiên cứu phương pháp kết nối webcam với board nhúng km 9260
Hình 2.2 Board nhúng KM9260 (Trang 3)
Hình 3.1: Lưu đồ giải thuật nhận dạng màu - Đề tài nghiên cứu phương pháp kết nối webcam với board nhúng km 9260
Hình 3.1 Lưu đồ giải thuật nhận dạng màu (Trang 7)

TỪ KHÓA LIÊN QUAN

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