33
ĐẠI HỌC BÁCH KHOA HÀ NỘI Viện Điện tử - Viễn thông BÁO CÁO PROJECT 1 ĐỀ TÀI: NHẬN DIỆN CARDVISIT TRÊN ĐIỆN THOẠI THÔNG MINH ANDROID Giáo viên hướng dẫn : TS.Nguyễn Đức Minh Nhóm sinh viên thực hiện: 1.Nguyễn Thành Đô SHSV: 20090748 2.Nguyễn Thị Mai Trang SHSV : 20092812 3.Cao Minh Tú SHSV : 20093179 4.Lê Thành Tuân SHSV: 20092941 1

ĐẠI HỌC BÁCH KHOA HÀ NỘI

Embed Size (px)

Citation preview

Page 1: ĐẠI HỌC BÁCH KHOA HÀ NỘI

ĐẠI HỌC BÁCH KHOA HÀ NỘI

Viện Điện tử - Viễn thông

BÁO CÁO PROJECT 1

ĐỀ TÀI:NHẬN DIỆN CARDVISIT TRÊN

ĐIỆN THOẠI THÔNG MINH ANDROID

Giáo viên hướng dẫn : TS.Nguyễn Đức MinhNhóm sinh viên thực hiện:

1.Nguyễn Thành Đô SHSV: 200907482.Nguyễn Thị Mai Trang SHSV : 200928123.Cao Minh Tú SHSV : 200931794.Lê Thành Tuân SHSV: 200929415.Đặng Minh Tuyên SHSV: 20093045

Hà Nội,avril 13, 2023

1

Page 2: ĐẠI HỌC BÁCH KHOA HÀ NỘI

PHỤ LỤC

Giới thiệu chung về công cụ sử dụng và nội dung đề tài

1. Kiến thức chung về ngôn ngữ lập trình JAVA và ANDROID

2. Tìm hiểu vềphần mềm CamCard

3. Yêu cầu của phần mềm

Phân tích tính khả thi và tổ chức công việc

Phân tích các khối cơ bản của phần mềm

Sơ đồ chức năng của cả hệ thống phần mềm

Phân tích từng phần của phần mềm

Thiết kế từng khối

1. Khối xử lí hình ảnh

2. Khối giao diện

3. Khối kết nối Server- Client

2

Page 3: ĐẠI HỌC BÁCH KHOA HÀ NỘI

I. Giới thiệu chung về công cụ sử dụng và nội dung đề tài

1. Kiến thức chung về ngôn ngữ lập trình JAVA và ANDROID

a. Ngôn ngữ lập trình JAVA

Java là ngôn ngữ lập trình hướng đối tượng độc lập thiết bị, không phụ thuộc vào hệ điều hành(HĐH) nên nó có khả năng làm việc trên nhiều HĐH khác nhau. Đây là ưu điểm mạnh mà các ngôn ngữ khác không có.

Các đặc trưng của Java:

Đơn giản Hướng đối tượng Độc lập với phần cứng và hệ điều hành Mạnh Bảo mật Phân tán Đa luồng Động

Java làm việc với máy ảo Java và sử dụng bộ công cụ phát triển JDK( Java Development Kit)

b. Hệ điều hành ANDROID

Android là hệ điều hành trên điện thoại di động (và hiện nay là cả trên một số đầu phát HD, HD Player, TV) phát triển bởi Google và dựa trên nền tảng Linux.Các nhà phát triển viết ứng dụng cho AndRoid trên ngôn ngữ Java.

Từ khi Android ra đời, kèm theo đó là hàng ngàn tiện ích trên điện thoại di động được đưa ra, biến chiếc điện thoại cầm tay ngày càng trở lên thông minh hơn. Có thể nói “ Cả thế giới trong tầm tay”.

3

Page 4: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Kiến trúc AndRoid bao gồm 4 lớp thành phần:

Để tạo nên một ứng dụng trong Android, cần hiểu về 6 thành phần( component) cơ bản khi lập trình:

4

Page 5: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Vòng đời của một ứng dụng trải từ OnCreate đến onDesTroy

Với những kiến thức tìm hiểu được về JAVA và hđh ANDROID, chúng em muốn tìm hiểu, học tập về đề tài liên quan đến những kiến thức này. Đề tài “ Nhận diện Cardvisit trên điện thoại thông minh AndRoid” là đề tài khá mới mẻ và thú vị.

Chúng em cảm ơn Thầy Nguyễn Đức Minh cùng các bạn trong phòng lab nghiên cứu EDK đã giúp đỡ chúng em hoàn thành đề tài này.

Chúng em xin chân thành cảm ơn!

Tìm hiểu vềphần mềm CamCard

5

Page 6: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Có thể nói đây là phần mềm nhận diện tốt nhất hiện nay, đã được ứng dụng rất hiệu quả trong công việc. Giúp con người giảm thiểu được công sức trong công việc quản lí, hay tiếp nhận thông tin cá nhân, phù hợp cho những người giao tiếp nhiều với các đối tác, thường xuyên nhận các CardVisit liên lạc, hay trong các khu vực quản lí nhân sự….

Với các tính năng thông minh của phần mềm này, đã được tích hợp trên các thiết bị hiện đại trên nền AndRoid trên các dòng điện thoại cao của LG, SAMSUNG, NOKIA… hay các loại notebook khác.

CamCard chụp ảnh thẻ kinh doanh bằng cách sử dụng Camera trên chính điện thoại của bạn như là một máy quét. Nó có khả năng nhận diện các thông tin trên Card như: First-name, Last-name, Phone, e-mail, và thông tin bổ sung khác, các thông tin này được hiển thị ngay trên giao diện rất thuận tiên cho người sử dụng. Bằng cách này bạn sẽ có thể chuyển những thông tin có trên một thẻ kinh doanh lưu các thông tin đó vào tài khoản Gmail của bạn hoặc chia sẻ các thông tin đó trên một trang mạng mà bạn muốn.

Trình quét của phần mềm khá chính xác và nó đã làm tốt với tất cả các loại thẻ với các ngôn ngữ khác nhau.CamCard đã được tích hợp với LinkedIn, giúp bạn có thể tìm kiếm hoặc mời các chủ thẻ trực tiếp truy cập thông tin từ ứng dụng.

Ứng dụng này đặc biệt hữu ích cho những người thường xuyên nhận được thẻ kinh doanh từ địa chỉ liên lạc và muốn lưu trữ các thông tin một cách an toàn trong thiết bị cá nhân.

vào thẻ nhớ điện thoại của mình một cách nhanh chóng và thuận tiện.Bạn sẽ có thể

6

Page 7: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Các chức năng chính của phần mềm này:

1. Chống rung hình ảnh chụp.

2. Hiển thị hình ảnh tương ứng khi chỉnh sửa thông tin thẻ kinh doanh.

3. Tự động phát hiện định hướng văn bản.

4. Tự động xoay hình ảnh thẻ.

5. Tự động cắt thẻ hình ảnh từ phía sau.

6. Tự động làm đẹp hình ảnh thẻ kinh doanh.

7. Với các thông tin về chủ thẻ có thể giúp thực hiện cuộc gọi điện thoại, gửi tin nhắn SMS, gửi email, duyệt trang web và định vị địa chỉ trên bản đồ Google.

8. Thêm thông tin liên hệ của các nhóm nhóm liên lạc của bạn.

Quét thẻ kinh doanh trong vài giây ngay trên điện thoại của bạn trong 4 bước dễ dàng:

1. Chụp hoặc nhập một bức ảnh

2. Scan (định hướng văn bản được tự động phát hiện)

3. Xem xét và chỉnh sửa các kết quả nhận dạng từ thẻ

4. Thêm vào danh sách địa chỉ liên lạc

7

Page 8: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Như vậy, phần mềm thực tế được ưa chuộng có rất nhiều đặc tính tốt. Với đề tài này, chúng em hi vọng làm ra một sản phẩm đơn giản, nhưng hữu dụng hơn khi sử dụng trong phạm vi nhỏ, và đặc biệt có ưu điểm là nhận diện được cả kí tự tiếng việt mà các phầm mềm hiện nay chưa có.

3 .Yêu cầu phần mềm

Yêu cầu đặt ra :

+ Đáp ứng được ứng dụng đặt ra cho phần mềm

+ Môi trường giao diện và làm việc đơn giản, nhanh

+ Có thể nâng cấp, bảo trì dễ dàng

II. Phân tích tính khả thi và phân chia tổ chức

Phân tích tính khả thi

Khả thi về kĩ thuật

+ Sự thân thiện với ứng dụng: Việc cài đặt và sử dụng khá dễ dàng và thuận tiện,đặc biệt là đối với các dòng điên thoại cảm ứng chạy trên nền Android của LG và Samsung.

+ Sự thân thiện với kỹ thuật: Các thao tác như chụp ảnh,xử lý ảnh để nhận diện cũng không quá phức tạp nên dễ sử dụng. Dễ dàng sửa chữa và nâng cấp cũng như đưa thêm các chức năng.

+ Quy mô phần mềm: Nhỏ,chủ yếu phục vụ cho nhiệm vụ học tập và nghiên cứu trên trường và có thể ứng dụng vào thực tế theo những nhu cầu cá nhân.

+ Tính tương thích: Tương thích với tất cả hệ điều hành Android.

Khả thi về mặt tổ chức

+ Đề tài có quy mô tương đối nhỏ nên trong vấn đề tổ chức công việc không khó khăn.

Khả thi về mặt kinh tế

+ Chi phi cho đề tài không tốn kém

8

Page 9: ĐẠI HỌC BÁCH KHOA HÀ NỘI

+ Đề tài thành công có thể đem lại tính kinh tế cho nhóm thiết kế với tính thực tế thiết thực của nó

Lập bảng kế hoạch

Kế hoạch về nhân sự và công cụ làm việc

5 thành viên trong nhóm hoạt động tích cực trong công việc chung

Tập trung đầy đủ trong mỗi buổi làm việc nhóm , cụ thể chiều 1h, thứ 3 hằng tuần.

Có máy tính cá nhân, mail liên lạc.

Cài đặt các phần mềm phục vụ cho việc lập trình bằng ngôn ngữ Java, word, excel,phần mềm Enterprise Architecture.

Kế hoạch chuẩn bị kiến thức cho bài tập

Công việc chung

Tìm hiểu và nghiên cứu về hai phần mềm đã được ứng dụng trong thực tế hiện nay : ScanCard và CamCard lite của các nhà phân phối trên các thiết bị điện thoại, notebook…

Tìm hiểu về nền Android và các ứng dụng trên nền Android

Học về ngôn ngữ Java

+ Học về Java cơ bản/ 5 ngày ( 4 tiếng) có kèm theo làm các bài tập ứng dụng nhỏ.

+ Học về Java hướng đối tượng/ 5 ngày ( 3-4 tiếng) có kèm theo các bài tập

+ Học về Java nâng cao / 1 tuần (3-4 tiếng) có kèm theo bài tập

Trong quá trình học Java các bạn trong nhóm thảo luận và trao đổi để hiểu rõ hơn về ngôn ngữ này

Tìm hiểu về giao diện Server- Client và các ứng dụng của giao diện trong bài tập

Công việc riêng

9

Page 10: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Sau khi đã chuẩn bị các kiến thức cơ bản cho bài tập trong vòng 2 tuần, các bạn tiến hành làm bài tập Project qua một số công việc cụ thể sau:

Thiết kế các khối cơ bản( code Debug) cho trương trình:

1.Khối xử lí hình ảnh ( bạn Trang, Đô, Tú)

2.Khối Giao diện( bạn Tuân, Tuyên)

3.Khối Giao tiếp Server-Client (Tìm hiểu chung, không làm)

Công việc trên kết thúc trong 2 tuần tiếp theo ( từ ngày 3/2 đến ngày 16/3)

Tiến hành lập trình cụ thể từng khối cơ bản theo chuẩn Enterprise Architecture.Mỗi khối do từng bạn được phân công đảm nhận.

(Tiến hành từ ngày 30/3 đến ngày 13/4)

Xuất kết quả của từng Module

Tổng hợp lại, tiến hành ghép nối các khối ( bạn Trang)

(Tiến hành từ ngày 13/4 đến ngày 17/4)

Bắt đầu Test chương trình với nhiều input khác nhau.

+ Kiểm tra cho thỏa mãn FD, nếu chưa chì tiến hành cải thiện và chỉnh sửa.

+ Tiến hành nâng cấp chức năng nên tối ưu nhất nếu có thể

+ Công việc làm chung của cả nhóm.

(Tiến hành từ ngày 17/4 đến ngày 27/4)

Đóng gói chương trình và bắt đầu viết báo cáo tổng thể cho bài Project

(Tiến hành trong thời gian còn lại đến ngày 25/5)

Chú ý: Trong mỗi một khoảng thời gian, phải nộp báo các tiến trình công việc cho thầy hướng dẫn, Trang sẽ nhận viết báo cáo.Các bạn làm mỗi phần tổng hợp lại.

10

Page 11: ĐẠI HỌC BÁCH KHOA HÀ NỘI

III. Phân tích các khối cơ bản của phần mềm

Sơ đồ chức năng của hệ thống phần mềm

Phân tích từng phần của phần mềm

Quản lí khối xử lí hình ảnh

Quản lí camera

Sử dụng camera để chụp ảnh,đồng thời lưu vào thư mục riêng của mình và hiển thị kết quả của mình lên đối tượng View.

Quản lí xử lí hình ảnh

Lấy ảnh ra từ thư mục:

Chúng ta có thể lấy ảnh từ trong thư mục đã đươc lưu trong SD Card hoặc từ Gallery của điện thoại Android có chứa những bức ảnh chụp hình ảnh của Cardvisit.

+Lọc nhiễu: Hình ảnh vừa chụp được thường có độ nét không cao, hay bị nhiễu nên chúng ta phải tiến hành lọc nhiễu thông qua biến đổi Fourier bằng hàm fft trên Matlab.

+ Chuyển kí tự về dạng text : Sử dụng bộ thư viện nhận dạng kí tự bằng quang

Học tesseract-OCR.Với bộ thư viện của phần mềm này có thể giúp chúng ta chuyển từfide ảnh vừa chụp xang dạng text, fide text này được hiển thị trên các textbox giao diện của màn hình điện thoại.

11

Page 12: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Phân tích thành các trường dữ liệu

Để có thể dễ dàng trong việc theo dõi các thông tin về chủ nhân của cardvisit, phần mềm còn hỗ trợ một chức năng là phân tích các dữ liệu text thành các trường cụ thể như sau:

+ Trường Tên: được nhận diện bằng dấu hiệu các kí tự đó đều là chữ hoa ví dụ TRAN DINH PHONG

+ Trường SĐT : được nhận diện bằng dấu hiệu là một dãy các con số, có thể giới hạn bằng số các con số

+ Trường email: được nhận dạng bằng dòng có xuất hiện kí tự @,.

+ Trường địa chỉ: được nhận dạng bằng dấu hiệu có kết hợp cả số và chữ,

…..Sử dụng cách viết Reguler Expression

Quản lí khối giao diện

Tạo dạng nền ánh sáng

Tạo các textbox hiển thị

+ Tạo các textbox sau: hình ảnh chụp được, hiển thị tên, hiển thị sđt, hiển thị địa chỉ

+ 2 button : lưu để lưu dữ liệu, và một nút thoát để ra khỏi ứng dụng

Quản lí khối kết nối Server-Client

Thiết kế từng khối

Khối xử lí hình ảnh

Quản lí camera

12

Page 13: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Khối này bao gồm 2 class chính:

+ Ban đầu chúng ta cần tạo ra 1 lớp publicclassCamaraView extends từ Activity, chính là giao diện chính của chúng ta đồng thời implements từ các Interface SurfaceHolder.Callback và OnTouchListener để sử dụng các phương thức này khi chụp ảnh.

+ Cũng như các Activity thông thường thì phương thức onCreate( ) mặc định sẽ được tạo ra trong lớp CamaraView việc thực hiện kết nối file giao diện( .xml) và file code(.java) thông qua câu lệnh setContentView(R.layout.main);

trong đó capture là file xml chứa layout camera của chúng ta.

+ Đối tượng SurfaceView:

Tạo đối tượng SurfaceView tên là mSurfaceView, và kết nối bên phần giao diện qua câu lệnh

mSurfaceView = (SurfaceView)indViewById(R.id.surface_camera);

mSurfaceView.setOnClickListener(this);

mSurfaceHolder = mSurfaceView.getHolder()

13

Class Camara

ClassHelloActivity

Khối quản lí camara

Page 14: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Tạo đối tượng SurfaceHolder để giúp cho Activity này quản lý SurfaceView thông qua interface Callback, mục đích để thông báo SurfaceView đó được tạo,hủy hay thay đổi qua các phương thức là publicvoid surfaceCreated, surfaceChanged(),

surfaceDestroyed() surface. Bên cạnh đó,ta thiết lập Surface này là loại “push” phù hợp với Camera Preview:

mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

Tiếp theo là

mCamera = Camera.open();

Hàm này được gọi đầu tiên khi surface được tạo ra. Vì vậy ở hàm này mình sẽ open camera để sử dụng cho sau này.

Bước tiếp, chúng ta sẽ thiết lập các thông số

params.height = (int)h;

params.width = (int)w;

cho Camera thông qua phương thức surfaceChanged( ), và khởi động cái camera preview tức là vẽ hình lên cái surface mà mình sẽ nhìn thấy trên màn hình điện thoại.

Camera.Parameters p = mCamera.getParameters();

p.setPreviewSize(w, h);

mCamera.setParameters(p);

try

{

mCamera.setPreviewDisplay(holder);

}

Khi kết thúc Application thì hàm surfaceDestroyed( ) sẽ được gọi nhằm stopPreview và release bộ nhớ của Camera:

{

mCamera.stopPreview();

mPreviewRunning = false;

14

Page 15: ĐẠI HỌC BÁCH KHOA HÀ NỘI

mCamera.release();

}

Lớp thứ hai tạo ra là: publicclass HelloActivity extends Activity {}

Nhiệm vụ chính của class này tạo liên kết với layout.main tạo một giao diện bao gồm hai đối tượng là 2 button: choosePictureButton ,chooseCameraBtn

+ ChoosePictureButton: Chọn cách lấy ảnh từ một fide đã lưu trong máy.

+ ChooseCamaraBtn: Chọn cách lấy ảnh từ Camara

Sau khi chụp hình cardvisit bằng camera của thiết bị, hình ảnh chụp được sẽ được lưu vào một thư mục trong thiết bị.

Đối tượng hiển thị ảnh

15

Page 16: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Quản lí xử lí hình ảnh

Hình ảnh sau khi chụp và được hiển thị lên một textview trên màn hình, sẽ được xử lí các kí tự trong fide ảnh thành fide dạng text. Để hỗ trợ cho công việc này chúng ta dùng bộ thư viện nhận dạng kí tự quang học VietOCR( Optical Character Recognition). Đây là công nghệ được áp dụng để nhận dạng ký tự trên một định dạng file hình và chuyển nó thành định dạng file text.

Phạm vi ứng dụng

OCR thường được ứng dụng như một phần mềm cài đặt trên máy tính hoặc tích hợp đi kèm với phần cứng (cụ thể là máy Scanner) hoặc được thiết lập như một ứng dụng trực tuyến.

Khó khăn và hạn chế của OCR

+ Các chương trình hỗ trợ OCR có thể nhận dạng ký tự với tỷ lệ trên 90% đối với chất lượng hình ảnh rõ nét và font chữ thông thường. Đối với hình chất lượng kém, font chữ đặc biệt hoặc chữ viết tay thì kết quả cho ra không mấy khả quan.

16

Page 17: ĐẠI HỌC BÁCH KHOA HÀ NỘI

+ Đối với văn bản Tiếng Việt thì tỷ lệ phần trăm chính xác không cao so với các văn bản ngôn ngữ khác.

+ Sơ đồ khối các bước:

Bước 1: Xử lí ban đầu

+ Chuyển ảnh từ Mầu sang Đen trắng (Binary), tức chỉ còn hai mức 0 và 255 để dễ xử lí, dùng hàm Pix của TeserractOCV để trả về dạng matric. Tạo đối tượng pic_bin sau khi đã xử lí xong, tiếp đó chúng ta sẽ làm việc với đối tượng này.

+ Đoạn code

File f = newFile(getRealPathFromURI1(imageFileUri));

Pix pic = ReadFile.readFile(f); // traveanh gray dang matrix

Log.v("chieu rong", Integer.toString(pic.getWidth()));/////////////////

Pix pic_bin = Binarize.otsuAdaptiveThreshold(pic);

ArrayList<Pix> hozArray = new ArrayList<Pix>();

int i = 0;

Bước 2:Lọc ảnh

17

Bước 1: Xử lí ban đầu: Chuyển ảnh

màu---> đen trắng ( Binary)

Bước 2: Lọc ảnh:Chia cắt để loại

bỏ các thành phần phụ, lọc

nhiễu.

Bước 3:Nhận dạng thông tin

trên ảnh ---> dạng text

Page 18: ĐẠI HỌC BÁCH KHOA HÀ NỘI

+ Cắt ngang và cắt dọc bức ảnh nhằm phân đoạn thành các bức ảnh nhỏ sử dụng các hàm “splitHoz” và “splitVer” (tự viết) trong lớp “Algorithm.java”. Thuật toán là: do đặc điểm của các bức ảnh giữa các kí tự (ảnh là nền trắng, kí tự đen) có khoảng trắng. Dựa vào đặc điểm này ta xây dựng lên hàm “splitHoz” và “splitVer” bằng cách kiểm tra từng dòng (cột), kiểm tra giá trị tổng của hàng(cột) đó. Nếu hàng(cột) có một pixcel đen (tức có giá trị là 0) thì -> tổng sẽ nhỏ hơn số hàng(cột) * 255. Dựa vào đó ta có thể cắt bức ảnh ban đầu thành nhiều bức ảnh nhỏ hơn để giúp bước sau xử lí nhanh hơn vì lúc đó ta đã loại bỏ được các hình ảnh không liên quan đến thông tin của chủ thẻ, giảm được nhiễu do các phần tử này gây ra trong quá trình nhận dạng

+ Code viết

publicstaticint sum (Pix m, int rowStart, int rowEnd, int colStart, int colEnd)

{

int result=0;

Pix sub = submat(m, rowStart, rowEnd, colStart, colEnd);result = sumElems(sub);

return result;

}

// Lay ra matrix con.

// Vi Du: submat(img,2,10,5,8) -> lay ra matrix con voi column:5-7 & row:2-9

publicstatic Pix submat(Pix img,int rowStart, int rowEnd, int colStart, int colEnd)

{

Pix subImg = newPix(colEnd-colStart,rowEnd-rowStart,0);

// Viet code o day

return subImg;

}

//Tinh tong cua mot matrix

publicstaticint sumElems(Pix img)

18

Page 19: ĐẠI HỌC BÁCH KHOA HÀ NỘI

{

int sum = 0;

for(int i=0; i<img.getHeight();i++)

{

for(int j=0;j<img.getWidth();j++)

{

sum+=img.getPixel(i, j);

}

}

}

Bước 3: Nhận dạng thông tin trên ảnh

+ Trong thư viện của Tesseract hỗ trợ hàm TessBaseAPI trực tiếp chuyển hình ảnh thành dạng Text với đoạn Code sau:

TessBaseAPI baseApi = new TessBaseAPI ();

baseApi.init("/mnt/sdcard/tesseract/", "vie");

//File f1 = new File(getRealPathFromURI(imageFileUri));

baseApi.setImage(img);

//baseApi.setImage(f1);

String result = baseApi.getUTF8Text();

baseApi.end();

txt.setText(result);

+ Kết quả đưa ra hai đối tượng sau khi xử lý:

String path="mnt/sdcard/tesseract/tessdata/";

String file ="vie.traineddata";

Các thành phần code

19

Page 20: ĐẠI HỌC BÁCH KHOA HÀ NỘI

+ Code phần thuật toán được viết trong 3 Class chính là “Algorithm.java”, “Math.java” , “Xulyanh.java”

- Math.java :

Lớp này chứa các phép toán phục vụ cho các tính toán trong các lớp khác, chủ yếu là lớp thuật toán.Tính tổng các pixcel một hàng hoặc cột của matrix “sum”.Tính tổng tất cả các pixcel của matrix “sumMatrix”.Lấy giá trị hoặc thiết lập giá trị cho một vector con thuộc ma trận “getValue”, “setValue”.Xóa trắng một vùng nào đấy của ảnh “setWhite”.Tìm vị trí của thành phần có giá trị lớn nhất trong mảng “maxLocation”.

- Algorithm.java:

Lớp này chứa phương thức chính dùng cho việc xử lí, nhận diệnảnh. Hàm cắt dọc, cắt ngang bức ảnh “splitHoz”,” splitVer”.Hàm trích xuất kí tự “extractPiece”

- Xulyanh.java :

+ Hàm này là hàm chính để liên kết với hai hàm trên, chủ yếu làm việc để lấy ảnh ra từ trong fide ảnh, chuyển dữ liệu đến cho các hàm sau xử lý.

Kết quả xử lý:

Hình ảnh ban đầu:

20

Page 21: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Sau khi xử lý:

21

Page 22: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Phân tích các trường dữ liệu

+ Phân tích dựa trên JavaScript Regular Expression nhằm nhận ra các thông tin về chủ thẻ như email, tên , địa chỉ, phone… dựa trên một bản mẫu đã quy định sẵn.

+ Ta tự viết hàm này rồi đưa vào nhận dạng.

+ Ví dụ:

- Một số được viết dưới dạng một chuỗi với các chữ số, có thể có chứa tối đa 1 dấu phẩy ở giữa.

- Dữ liệu kiểu ngày tháng: Thường được viết theu mẫu: dd/mm/yyyy: Hai chữ số đầu tiên xác định ngày, tiếp theo là dấu gạch chéo, tiếp đến là 2 chữ số xác định tháng, tiếp theo là dấu gạch chéo và kết thúc bởi bốn chữ số xác định năm.

- Địa chỉ email: [email protected]ìđó: Bao gồm 1 chuỗi văn bản được chia thành 2 phần: Phần user name và phần domain, 2 phần này cách nhau bởi dấu @. Phần domain có luật riêng theo cách đặt tên của domain...

- Các phép toán tìm kiếm theo vị trí

^:Trả về chuỗi kết quả trong trường hợp chuỗi này nằm ở vị trí đầu của chuỗi gốc

$:Trả về chuỗi kết quả trong trường hợp chuỗi này nằm ở vị trí cuối của chuỗi gốc

\b:Trả về chuỗi kết quả trong trường hợp chuỗi này nằm ở vị trí đầu của một từ trong chuỗi gốc. Nếu cần so sánh ở vị trí cuối từ, hãy đặt biểu thức \b ở vị trí cuối từ.

\B:Trả về chuỗi kết quả trong trường hợp chuỗi này không nằm ở vị trí đầu của một từ trong chuỗi gốc. (tuỳ thuộc vào vị trí đặt \B ở đầu hoặc cuối một từ)

?=:Trả về chuỗi kết quả nếu theo sau chuỗi đó là một chuỗi nào đó được chỉ định trước

?!:Trả về chuỗi kết quả nếu sau chuỗi đó không phải là một chuỗi nào đó được chỉ định trước

22

Page 23: ĐẠI HỌC BÁCH KHOA HÀ NỘI

-Các lớp ký tự trong regex

[xyz]:Tìm một ký tự bất kỳ nằm trong tập ký tự giữa cặp dấu ngoặc vuông

[x-z]:Tìm một ký tự bất kỳ nằm trong tập ký tự từ x đến z

[^xyz]:Tìm một ký tự bất kỳ không thuộc tập ký tự giữa cặp dấu ngoặc vuông.

.:Tìm bất kỳ một ký tự nào không phải là ký tự xuống dòng mới (new line) hoặc ký tự kết thúc dòng (line terminator).

\w:Tìm một ký tự dạng a-Z, 0-9 và dấu gạch dưới.

\W:Ngược lại với \w

\d:Tìm một ký tự thuộc tập ký tự từ 0 đến 9

\D:Ngược lại với \d: Tìm một ký tự không nằm trong tập ký tự từ 0 đến 9

\s:Tìm ký tự cách (dấu cách)

\S:Tìm một ký tự không phải là dấu cách

-Gộp nhóm các biểu thức

Chúng ta có thể sử dụng các dấu ngoặc tròn () để gộp nhóm như trong các biểu thức toán học thông thường.

():Tìm kiếm một nhóm các ký tự bên trong cặp dấu ngoặc và lưu vào chuỗi kết quả.

(?: ):Tìm kiếm chuỗi kết quả không chứa tập ký tự nằm trong cặp dấu ngoặc.

|:Phép toán hoặc, được sử dụng để kết hợp các mệnh đề với nhau vào chung một biểu thức

Từ những quy định này ta có thể lập nên một quy tắc để phân tích các dòng text ra các trường như sau:

+ trường địa chỉ email:

document.write (str.match(/([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+/gi))

+ trường số điện thoại:

document.write (str.match(/[0-9]+/g));

23

Page 24: ĐẠI HỌC BÁCH KHOA HÀ NỘI

// hoac

document.write(str.match(/\d+/g));

+ trường ngày, tháng, năm sinh :

Pattern.compile("(([012][0-9])||([3][01]))[/](([0][0-9])||[1][0-2])[/](19||20)[0-9][0-9]")

+ trường địa chỉ: sẽ được nhận dạng sau cụm từ “ office”

+ trường tên : là đoạn kí tự còn lại

Để kiểm tra mã regex này dùng Notepad++ viết bằng ngôn ngữ JavaScrip

24

Page 25: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Kết quả test được:

Nhận diện tương đối chính xác, nhưng với những trường hợp dạng kí tự khác thì phân biệt khó hơn.

Khối giao diện

Khi các trường dữ liệu được phân tách, kết nối hiển thị lên giao diện sau:

25

Page 26: ĐẠI HỌC BÁCH KHOA HÀ NỘI

Giao diện được thiết kế theo kiểu sau:

Chúng em xin chân thành cảm ơn các thầy cô phụ trách và các anh trên lab giúp chúng em hoàn thành Project 1!

26

Page 27: ĐẠI HỌC BÁCH KHOA HÀ NỘI

DANH MỤC TÀI LIỆU THAM KHẢO

Pro AndRoid Media - Shawn Van Every

Lập trình Java cơ bản

Lập trình hướng đối tượng với Java - Đoàn Văn Ban

Lập trình Java nâng cao

27